操作系统和实时操作系统
目录
操作系统和实时操作系统
什么是操作系统?
什么是实时操作系统?
任务
什么是任务?
什么是多任务?
什么是任务状态?(重要)
任务切换?
什么是操作系统?
操作系统是裸机上的第一层软件。是计算机系统中最重要的系统软件,是硬件的第一层封装和抽象。所有其他的系统软件与应用软件都依赖于操作系统的支持与服务。
什么是实时操作系统?
实时操作系统(RTOS)是指当外界事件或者数据产生的时候,能够接收并以足够快的速度给与处理,其处理的结构又能在规定的时间内来控制产生过程或者对处理系统作出快速的相应,并控制所有实时任务协调一致运行的操作系统。(Linux和Windows等都是分时操作系统)。
整理成一句话“如果逻辑和时序出现偏差将会引起严重后果的系统”!!!
实时操作系统分为两类:硬实时操作系统和软实时操作系统。
硬实时操作系统规定某个动作必须在规定的时刻内完成或发生,比如汽车生产车间,焊接机器必须在某一时刻内完成焊接,焊接的太早或者太晚都会对汽车造成永久性伤害。
软实时操作系统虽然不希望偶尔违反最终的时限要求,但是仍然可以接受。并且不会引起任何永久性伤害。比如数字音频、多媒体、手机都是属于软实时操作系统。
基本特征:
1.实时操作系统首先是多任务操作系统。
2.多级中断机制。
3.优先级调度机制。
任务
什么是任务?
一个任务,在操作系统中体现为线程,是一个简单的程序。该程序可以认为CPU完全只属该程序自己。
代码是静止的,存在于ROM、硬盘等外部设备。任务是运动的,存在于内存中,有睡眠、就绪、运行、阻塞、挂起等多种状态。
在实时系统中,把应用程序的设计过程分割为多个任务,每个任务都是整个应用的一部分,每个任务都有自己的优先级,有它自己的一套CPU寄存器和自己的栈空间,在操作系统的调度下协调运行。
什么是多任务?
实时操作系统的是多任务的操作系统,系统中必然有多任务在执行。其中包括有用户任务,也有操作系统的自己的系统任务。多任务的运行相对于其他的系统,其优点是多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。使用多任务,应用程序将更容易设计与维护。
在嵌入式应用的场合的多任务使用的例子是在一个ARM采集处理系统中,同时采集16路信号,同时又要对多信号进行处理和传输,可以创建16个任务负责16路信号的采集,创建一个任务对信号进行处理,再创建一个任务负责数据的传输。
操作系统的本质或者说唯一的目标就是榨干CPU,一刻也不能停止工作。
什么是任务状态?(重要)
1、睡眠态
任务已经被装入内存,可是还没有准备好运行。以代码的形式存在于内存中,在调用OSTaskCreate(任务创建函数)之前都处于睡眠态。睡眠状态的任务不会得到运行,操作系统也不会给其设置为运行而准备的数据结构。
2、就绪态
当操作系统调用OSTaskCreate创建一任务后,任务就进入就绪态。任务也可以从其他状态转到就绪态。处于就绪态的任务操作系统已经为其运行配置好了任务控制块等数据结构,当没有比其更高优先级的任务,或比其优先级更高的任务处于阻塞状态的时候,就能被操作系统调度而进入运行态。从就绪态到运行态,操作系统调用任务切换函数完成。
3、运行态
任务真正占有CPU,得到运行。这时运行的代码就是任务的代码。处于运行态的任务如果运行完成,就会转为睡眠态。如果有更高优先级的任务抢占了CPU,就会转到就绪态。如果因为等待某一事件,例如等待一秒钟的时间,如OSTimeDly(OS_TICKS_PER_SEC),需要暂时放弃CPU的使用权而让其他任务得以运行,就进入了阻塞状态。当由于中断的到来而使CPU进入中断服务程序(ISR),必然使正在运行的任务放弃CPU而转入中断服务程序,这时被中断的程序就被挂起而进 入挂起态。 总之,任务要得到运行必须进入运行态,CPU只有一个不能让每个任务同时进入运行态,进入运行态的任务有且只有一个。
4、阻塞态
阻塞对于操作系统的调度,任务的协调运行是非常重要的。当运行态任务在没有事情可做,等待一秒的时候,不是强行的运行代码,而是把自己堵塞起来,使操作系统可以调度其他的任务。当任务在等待某些还没有被释放的资源,等待一定的时间等时候,要阻塞起来,等到条件满足的时候再重新回到就绪态,又能被操作系统调度以进入运行态,这是实时系统必须要实现的。(在等待的时候,常常使用FOR循环,不停的执行代码而使CPU的利用率暴
增,使系统的运行环境十分恶劣,甚至造成死机,是不可取的。)
功能之一。5、挂起态
当任务在运行的时候,因为中断的发生,例如定时器中断每个时钟滴答(clock tick,指每个时钟周期)中断一次,而被剥夺CPU的使用权,而进入挂起态。在中断返回的时候,若该任务还是最高优先级的,就恢复运行,如果不是这样,只能回到就绪态。
运行流程图:
任务切换?
Context Switch(任务切换),是任务调度的重要部分,当多任务内核决定运行另外的任务的时候,它保存正在运行任务的当前状态(Context),即CPU寄存器的全部内容,把这些内容保存在自己的栈区当中。入栈工作完成以后就是把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个工作的进行。任务切换过程增加了应用程序的额外负荷。CPU的内部寄存器越多,额外负荷就越重。任务切换是暂停一个任务的运行,运行另一个就绪的任务。如果想暂停一个任务,以后又能恢复运行,那么必须考虑将这个任务运行的信息保存,而恢复运行的时候需要将这些信息恢复到运行环境。