RTOS实时操作系统简介
实时系统:
Real-time System 是一种很特殊的系统,一般应用于嵌入式领域,与嵌入式系统有很多交集,但它与嵌入式系统有所区别。
嵌入式系统是将应用程序、操作系统、和计算机硬件在一起的系统,是指以应用为中心,以计算机技术为基础,软硬件可裁剪,其针对的用户应用对功能、可靠性、成本、体积、功耗和使用环境有特殊要求的专用计算机系统。
而实时系统的核心特征是实时性,本质就是任务处理所花费时间的可预测性,任务要在规定时间内完成。包含两个重要特征:逻辑和功能的正确性以及时间的精确性。
依据超过限制时间后系统计算结果的有效性可以将实时系统分为硬实时系统和软实时系统,对于硬实时系统:一旦超过规定的时限,系统 的计算结果将完全失效或者高度失效,系统将遭受毁灭性的灾难(比如,核电站控制、水坝控制),而在软实时系统中,系统的计算结果大打折扣,但不致于像硬实时操作系统一样失效,而是主要体现在系统的性能会下降。
实时操作系统:
在实时系统中的一个关键组成部分是实时操作系统,其在实时系统中起着核心作用,整个实时系统是在实时操作系统的控制下来管理和协调各项工作,根据各个任务的优先级,动态的切换各个任务,保证对实时性的要求。
实时操作系统也分为软实时操作系统和硬实时操作系统,不同的实时操作系统对于时限的要求是不一样的,两者的区别通常与系统的时间精度有关,典型的软实时任务的调度精度大于千分之一秒,而典型的硬实时系统任务为微秒级,出名的硬实时操作系统有rtems,vxworks,qnx等,软实时操作系统则有wince、Linux2.6.x。
调度:
在多任务(线程)系统中,决定运行哪个任务,这是操作系统内核的主要职责之一,多数实时内核是基于优先级调度算法,高优先级的可以马上执行任务占有CPU运行,根据何时让高优先级任务掌握CPU的使用权,可把操作系统内核分为两种类型,即不可抢占型操作系统内核和可抢占型操作系统内核。
不可抢占型内核:
要求每个任务自我放弃CPU的使用权,只要任务自身不放弃CPU,它就可以一直运行下去,虽然对于外设的异步事件还是由中断服务来处理,即东段服务可以使一个高优先级的任务由阻塞变为就绪状态,但中断服务以后控制权还是回到原来被中断了的任务,只有等该任务主动放弃CPU的使用权时,高优先级的任务才能获得CPU的使用权。
在不可抢占型内核中,由于每个任务要运行到自身结束才释放CPU的控制权,所以可以在任务中使用不可重入函数,而不必担心其他任务可能也会正在使用该函数,从而造成对共享数据的破坏。缺点是响应时间过于缓慢,因为高优先级的内务要等到当前运行的任务释放CPU后才能运行,导致不可抢占型内核的任务响应时间时不确定的,因为这个缺陷,使得实时操作系统中,这种内核比较少。
可抢占型内核:
绝大多数实时操作系统内核都是可抢占型,在可抢占型内核中,处于最高优先级的任务一旦就绪,内核马上调度此任务,让最高优先级的任务总能得到CPU的控制权,这样使得任务响应时间得到最优化。
使用可抢占型内核时,应用程序不能直接使用不可重入型函数,因为可能会造成数据破坏,如果确定需要调用不可重入型函数,那么在调用函数时必须满足互斥条件。
任务(线程)状态:
任务运行过程中,每个任务都处在以下五种状态之一:
1.创建态(new):一个任务正在被创建,还没被转到就绪状态之前的状态
2.就绪态(ready):该任务获得了除了CPU以外的所有一切资源,但由于还没占有到CPU,因此还暂时不能运行。
3.运行态(running):该任务获得了CPU的使用权,正在运行中
4.阻塞态(Blocked):该任务在等待某一事件发生,而暂停运行
5.退出态(exit/dormant):一个任务正在从系统消失。
可能的状态变化如下:
NULL-new:一个新任务被产生
new-ready:任务创建完毕并初始化后,准备运行,变成就绪状态
ready-running:处于就绪状态被任务调度程序选中后,分配到CPU上运行
running-exit:当任务已经完成或者出错,操作系统将其结束
running-ready:运行时任务,由于分配给他的处理时间片用完或者被高优先级任务抢占而让出CPU
running-blocked:当任务请求某资源且必须等待
blocked-ready:当任务要等待的事件到来时,从阻塞变成就绪状态
任务调度算法:
当多个就绪任务的优先级不同时,选择优先级高的获得CPU控制权,这种调度方法称为优先级调度法,当两个或两个以上的任务有同样的优先级,有两个方法可以采用,一个是FIFO先入先出调度,第二个就是内核允许一个任务运行确定好的一个时间片,然后切换给另一个任务,这种调度方法称为时间片轮转调度法,也称时间片调度,当内核满足以下条件时,就把CPU控制权转给下一个任务就绪的任务:
当前任务的时间片用完了
当前任务在时间片还没结束就完成了