当前位置:文档之家› 嵌入式实时操作系统的任务管理及任务调度

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

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

1.2.2 IEEE定义:嵌入式系统是 “用于控制、监视或者辅助操作机器和设备的装置 ”。 1.2.3 一般定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、 成本、体积、功耗格要求的专用计算机系统。

1 . 3 分类:VxWorks , uC/OS- n, 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所示。 专业资料

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

休眠 运石 结束 新建 就绡

等待 专业资料

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

3、嵌入式实时操作系统的任务调度 3. 1任务调度:调度是核的主要职责之一, 调度的主要任务就是要决定该轮到哪个任务运 行。多数实时核采用基于优先级调度的算法。 基于优先级的调度算法是指,每个任务根据重 要程度被赋予一定的优先级, CPU总是让处在就绪态的优先级最高的任务运行。然而,究 竟时让高优先级任务掌握 CPU的使用权,有两种不同的情况,这取决于核的类型(是可剥 夺型的还是可剥夺型核)。当调度程序决定新的任务获得 CPU的使用权时,这时核将执行 任务切换。任务切换过程为:首先保存当前任务的上下文,即 CPU寄存器中的全部容。这 些容可以保存在任务的自己的栈中,也可以保存在 TCB中。然后,将需要运行的任务的上 下文从该任务的栈中重新装入 CPU的寄存器,并开始运行。任务切换过程增加了应用程序 的额外负荷。CPU的部寄存器越多,额外负荷就越重。

3. 2调度算法 3.2.1时间片轮转调度算法:当两个或两个以上任务有同样优先级,核允一个任务运行事 先确定的一段时间,该段时间叫做时间片,然后切换给另一个任务。核在满足以下条件时, 把CPU控制权交给下一个就绪态的任务: ①当前任务运行的时间片到期; ②当前任务在时 间片还没结束时已经完成了。 322基于优先级的调度算法:每个任务都赋予优先级。任务越重要,赋予的优先级就越 高。优先级的分配式可分为静态分配和动态分配的式。 静态优先级是指应用程序执行过程中 诸任务的优先级不变。在静态优先级系统中,各个任务以及它们的时间约束在程序编译时是 已知的。动态优先级指应用程序执行过程中,任务的优先级是可变的。 专业资料

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

3. 3调度器实现:在整个任务管理中,任务调度无疑是系统的核心,任务调度通常由核 中的调度器实现。调度器的实现与任务运行状态迁移, 任务队列有密切的联系, 可以说任务 运行状态迁移和任务队列决定了调度器的实现。 调度器的主要作用是在就绪队列中选择优先 级最高的任务运行,如果优先级最高的任务不止一个, 则选择队头的任务运行。 虽然整个调 度器的功能可以用上面的几句话概括, 但调度器的实现远远没有那么简单, 主要困难来源下 面的原因:①•确定调度器运行的时机;②•中断处理程序完了后,是执行当前任务,还是 马上调度;③•调度器的性能;④•调度中伴随着任务上下文的切换,尤其对处理器架构有 关的上下文,应该设计良好的接口以便移植。

对于实时系统来说,中断处理程序执行完毕后,应该马上执行调度,这是因为中断常常 伴随着有新的任务处于就绪队列中, 在这些任务中可能会有高优先级的任务就绪, 所以在实 时核中要求必须支持在中断后马上进行任务调度。不管是在实时系统,还是在其他系统中, 调度器性能显得非常重要,常常要求调度器的时间复杂度至少应该为线性, 当然常数是最好 的。对于不同的处理器架构,其提供的寄存器,状态寄存器都有很大的区别,调度器应该留 出良好的接口给不同的处理器,以便以后便移植。

在实现调度器时,基本上考虑了上面的几个基本问题。 根据任务状态迁移、核队列等面的容, 在byCore中实现了一个叫schedule^ )的调度程序。在 schedule^ )中调用几个与硬件相关 的函数,这几个函数主要用于实现任务硬件上下文的切换, 这部分代码用汇编完成,并且与 处理器有关。图4描述了 scheduled )的算法流程图。 专业资料

图4 schedule^ )的算法流程图 该调度程序的算法非常简单,首先,在允调度的情况下,如果有高优先级任务就绪,则 进行任务切换。任务切换会发生在两种处理器模式下, 一种是处理器处于正常的运行态, 另 一种发生在中断态中。 因此,核使用两组函数分别处理这两种情况。 在两种处理器状态下都 有“启动新任务”和“新旧任务切换”函数接口实现最后的任务切换工作, 这两组函数与处 理器有关,并由汇编实现。“启动新任务”的主要功能是将任务的初始上下文复制给处理器 的各个寄存器,这包括通用寄存器、 堆栈指针寄存器、状态寄存器和指令指针寄存器等。这 些初始值在新任务创建时被初始化。 启动新任务发生的时机有两种情况, 始化完毕后,启动第一个任务;第二种情况为任务主动结束后,当前任务指针被置位 NULL

半前任骂喈济为呈亍 1 肺旧任务旳

第一种情况是核初

N 鬲tt去刃咗群-说*

谓豊克MA汲脱

N 启动航佟淨

相关主题