实时操作系统基本概念

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章实时操作系统基本概念

操作系统是管理计算机硬件、软件资源,提高资源利用率,方便用户应用计算机的最基本的系统软件。

操作系统一般具有存储管理、进程管理、设备管理、文件管理、作业管理等五项基本功能,表现出并发、共享、虚拟等特征。按追求的目标和所适应的环境,操作系统分为多道批处理系统、分时系统和实时系统。

实时系统是指计算机对特定的输入作出快速反应,以控制发出实时信号的对象。

实时控制系统应用的操作系统是典型的实时操作系统,它要求系统可靠性高,反应速度快,响应速度在ms级甚至ns级。

实时系统大都是具有特殊用途的专用系统,只允许访问有限的专用程序及实现通用操作系统的部分功能,以换起可靠性和实时性。

实时系统有软实时系统和硬实时系统之分。软实时系统要求各任务尽快地执行,在规定的时间内都执行完,而不要求某一具体任务在特定时间内完成。硬实时系统不仅要求各任务在规定的时间内必须完成,而且每个任务必须准时执行。

多数实时系统都是嵌入式的,计算机建在系统内部,用户看不到。

应用程序是一个无限的循环,循环中调用有关函数以完成相应的操作,这部分看成后台行为(background);中断复合程序处理异步事件,这部分看成前台行为(foreground)。后台叫作任务级,前台叫作中断级。

时间相关性很强的操作一般靠中断服务来保存(前台操作),但中断服务产生的信息要交给后方应用程序处理。当后方运行到处理该信息时,才能得到处理。从前台中断到后台任

务处理所产生的时差称作任务级响应时间。

多任务运行的实现靠的是CPU(中央处理单元)在许多任务之间转换和调度。CPU只有一个,轮番服务于一系列任务中的某一个。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。

一个任务,也称作一个线程,是一个简单的程序,该程序认为CPU完全只属于自己。实时应用程序的设计包括如何把问题分割成多个任务。每个任务都是整个应用程序的一部分,都被赋予一定的优先级,有自己的一套CPU寄存器和伐空间(如图F2.2所示)。

典型的实时应用程序,每个任务都是一个无限的循环,都可能处在以下5种状态之一——休眠态、就绪态、运行态、挂起态(等待某一事件发生)及被中断态(参见图F2.3)。

休眠态相当于任务驻留在内存中,但不被多任务内核所调度;就绪态意味着任务已经准备好,可以运行,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行;运行态是指任务掌握了CPU的使用权,正在运行中;挂起态也叫做等待事件态(waiting),指任务在等待某一事件的发生(例如等待某外设的I/O操作,等待某共享资源由暂不能使用变成使用状态,等待定时脉冲的到来,或等待超时信号的到来,以结束目前的等待,等等);发生中断时,CPU提供相应的中断服务,原来正在运行的任务不能运行,就进入了被中断状态。

当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(constorage area)(保存到正在运行任务自己的栈区之中,见图(F2.2)。入栈工作完成之后,就把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器,并开始运行,这一过程叫做任务切换。

任务切换过程增加了应用程序的额外负荷,CPU的内部寄存器越多,额外负荷就越重。

任务切换所需要的时间取决于CPU有多少寄存器要入栈。实时内核的性能不应以每秒能做多少次任务切换来评价。

多任务系统中,内核(kernel)负责管理各项任务,或者说为每个任务分配CPU时间,并且负责任务间的通信。

内核提供的基本服务是任务切换。使用实时内核可以大大简化应用系统的设计,因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。

内核本身也增加了应用程序的额外负荷,因为内核提供的服务需要一定的执行时间。额外负荷的量取决于用户多久调用一次这类服务。

单片机一般不能运行实时内核,因为单片机的RAM很有限。通过提供必不可少的系统服务,诸如信号量管理、邮箱、消息队列及时间延时等,实时内核使得CPU的利用更为有效。用实时内核做过系统设计以后,将决不会再想返回到前/后态系统。

调度(schedulers),是内核的主要职责之一,就是决定该轮到哪个任务运行了。多数实时内核是采用优先级调度法。每个任务根据其重要程度的不同,被赋予相应的优先级。CPU 总是让处于就绪态的、优先级最高的任务先运行。何时高优先级任务掌握CPU的使用权,由使用的内核的类型确定。

基于优先级的内核有2种类型:不可剥夺型和可剥夺型。

不可剥夺型内核(non-preemptive kernel)要求每个任务主动放弃CPU的使用权。不可剥夺型调度法也称作合作型多任务调度法,各任务彼此合作共享一个CPU。异步事件由中断服务来处理。中断服务可使一个高优先级的任务由挂起态变为就绪态,但中断服务以后,

使用权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权,一个新的高优先级的任务才能获得CPU的使用权。

不可剥夺型内核的一个优点是响应中断快。在任务级,不可剥夺型内核允许使用不可重入函数。每个任务都可以调用不可重入函数,不必担心其他任务可能正在使用该函数,从而造成数据的破坏,因为每个任务运行到完成时,才释放CPU的使用权。当然该不可重入函数本身不得有放弃CPU使用权的企图。

不可剥夺型内核的另一个优点是,几乎无须使用信号量保护共享数据,运行着的任务占有CPU,而不必担心被别的任务抢占;但这也不是绝对的,再某种情况下,信号量还是用得着的。处理共享I/O设备时,仍须使用互斥性信号量。

当系统响应时间很重要时,须使用可剥夺型内核。最高优先级的任务一旦就绪,总能得到CPU的使用权。当一个比运行着的任务优先级高的任务进入就绪态时,当前任务的CPU使用权就被剥夺了,或者说被挂起了,更高优先级的任务立刻得到了CPU的使用权。

使用可剥夺型内核,最高优先级的任务何时可以执行,何时可以得到CPU的使用权,这些是可知的。可剥夺型内核使得任务级响应时间得以最优化。

可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数使用局部变量,即变量保存在CPU寄存器中或堆栈中;使用全局变量,则要对全局变量予以保护。

当2个或2个以上任务有同样的优先级时,内核允许1个任务运行事先确定的一段时间,这段时间叫做时间额度(quantum),然后切换给另一个任务。这个过程叫做时间片轮番调度。

相关文档
最新文档