嵌入式实时操作系统的任务管理及任务调度

  • 格式:doc
  • 大小:128.00 KB
  • 文档页数:8

下载文档原格式

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

1、嵌入式实时操作系统简介

1.1英文名Embedded Real-time Operation System,简写为RTOS。

1.2.1定义:当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。(注:在工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。我们常常说的嵌入式操作系统都是嵌入式实时操作系统。比如μC/OS-II、eCOS和Linux。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。)

1.2.2 IEEE定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”。

1.2.3一般定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗格要求的专用计算机系统。

1 . 3分类:VxWorks,uC/OS-Ⅱ,uClinux,eCos,RTXC等。

2、嵌入式实时操作系统的任务管理

2.1 任务管理:是嵌入式实时操作系统的核心和灵魂,决定了操作系统的实时性能。它通常包含优先级设置、多任务调度机制和时间确定性等部分。

2.1.1 优先级设置:嵌入式操作系统支持多任务,每个任务都具有优先级,任务越重要,赋予的优先级应越高。优先级的设置分为静态优先级和动态优先级两种。静态优先级指的是每个任务在运行前都被赋予一个优先级,而且这个优先级在系统运行期间是不能改变的;动

态优先级则是指每个任务的优先级(特别是应用程序的优先级)在系统运行时可以动态地改变。

2.1.2 多任务调度机制:任务调度主要是协调任务对计算机系统资源的争夺使用。对系统资源非常匮乏的嵌入式系统来说,任务调度尤为重要,它直接影响到系统的实时性能。通常,多任务调度机制分为基于优先级抢占式调度和时间片轮转调度。(1)基于优先级抢占式调度:系统中每个任务都有一个优先级,核总是将CPU分配给处于就绪态的优先级最高的任务运行。如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中,调入高优先级任务运行。系统采用优先级抢占式进行调度,可以保证重要的突发事件及时得到处理。(2)时间片轮转调度:让优先级相同的处于就绪状态的任务按时间片使用CPU,以防止同优先级的某一任务长时间独占CPU。在一般情况下,嵌入式实时操作系统采用基于优先级抢占式调度与时间片轮转调度相结合的调度机制。

2.1.3 时间的可确定性:嵌入式实时操作系统甬数调用与服务的执行时间应具有可确定性。系统服务的执行时间不依赖于应用程序任务的多少。基于此特征,系统完成某个确定任务的时间是可预测的。

2 . 2 任务管理机制:在核的设计过程中,最先应考虑的是任务的状态以及迁移时序,然后根据此状态设计相应的队列,如就绪队列、等待队列等。核时钟也依赖任务的状态。可以看出,任务管理实现的核心和基础是任务状态和迁移时序。

2.2.1任务状态:在多任务状态中,任务要参与资源的竞争,只有在所需资源得到满足的情况下才能得到执行。然而,任务拥有的资源情况是不断变化的,这将导致任务状态也表现出不断变化的特性。不同的实时核实现式对状态的定义不尽相同,但都包括以下三种基本状

态:(1)等待:任务在等待I/O完成或者等待某事件的发生;(2)就绪:任务已经得到需要运行的资源,并等待获得处理器资源;(3)执行:任务获得处理器和其他所有需要的资源,相关代码正在被运行。在单处理器系统中,任时候只有一个任务处于运行状态。如果没有任任务需要运行,那么核会运行一个空闲任务。任一个可以执行的任务都必须处于就绪状态,实时核会从所有就绪的任务中,使用合适的调度策略选择一个运行。当一个任务请求I/O操作,或者等待信号量将会处于等待状态。

2.2.2任务状态转移:在一定条件下,任务会在不同的状态之间进行转化,称为任务状态迁移,如图1所示。

图1 任务状态迁移图

图2 实际实现的任务状态转换图

图2在描述任务状态迁移的同时,也描述了任务的生存期,任务的生命期从新建态时开始直到结束态时结束。在给定的时刻,任务的状态一定处在这六种状态之一。新建状态是指

任务被创建的过程,在这个过程中主要工作有:为任务分配TCB和栈空间以及其他资源。当任务创建完成以后,任务就具备运行的能力了,与此同时,任务进入就绪状态,并等待调度器为它分配运行的机会。当任务得到运行的机会,任务开始执行。处于运行态的任务会在任意时刻由运行态进入休眠态、就绪态或结束状态。其中进入休眠态是任务的主动过程,这主要是任务调用了核提供的休眠函数,任务在休眠状态,如果没有其他任务唤醒它,它将永远休眠下去直到系统关闭,这种式也可用于任务同步。等待状态主要由两种原因引起,一种是等待某事件的发生,如等待信号量;第二种为任务主动等待多少个tick。最后,任务可以将自己杀死进入结束态。

图3 任务状态迁移示意图

图3描述了三个任务状态迁移过程。图中包含三个任务和一个调度程序。调度程序确定下一个需要投入运行的任务,因此调度程序本身也占用一定的处理时间。

3、嵌入式实时操作系统的任务调度

3. 1 任务调度:调度是核的主要职责之一,调度的主要任务就是要决定该轮到哪个任务运行。多数实时核采用基于优先级调度的算法。基于优先级的调度算法是指,每个任务根据重要程度被赋予一定的优先级,CPU总是让处在就绪态的优先级最高的任务运行。然而,

究竟时让高优先级任务掌握CPU的使用权,有两种不同的情况,这取决于核的类型(是可剥夺型的还是可剥夺型核)。当调度程序决定新的任务获得CPU的使用权时,这时核将执行任务切换。任务切换过程为:首先保存当前任务的上下文,即CPU寄存器中的全部容。这些容可以保存在任务的自己的栈中,也可以保存在TCB中。然后,将需要运行的任务的上下文从该任务的栈中重新装入CPU的寄存器,并开始运行。任务切换过程增加了应用程序的额外负荷。CPU的部寄存器越多,额外负荷就越重。

3. 2 调度算法

3.2.1时间片轮转调度算法:当两个或两个以上任务有同样优先级,核允一个任务运行事先确定的一段时间,该段时间叫做时间片,然后切换给另一个任务。核在满足以下条件时,把CPU控制权交给下一个就绪态的任务:①当前任务运行的时间片到期;②当前任务在时间片还没结束时已经完成了。

3.2.2 基于优先级的调度算法:每个任务都赋予优先级。任务越重要,赋予的优先级就越高。优先级的分配式可分为静态分配和动态分配的式。静态优先级是指应用程序执行过程中诸任务的优先级不变。在静态优先级系统中,各个任务以及它们的时间约束在程序编译时是已知的。动态优先级指应用程序执行过程中,任务的优先级是可变的。

Linux采取的调度策略结合了这几种调度案。在Linux系统中,调度算法最基本的一类就是基于优先级的调度。优先级高的任务先运行,相同优先级的任务按照轮转式进行调度。Linux也实现了基于动态优先级的调度法。一开始,利用静态优先级的法设置任务的优先级,然而它允调度程序根据需要来提升、降低优先级。