关于VxWorks系统的任务调度机制浅析

(整期优先)网络出版时间:2018-06-16
/ 2

关于VxWorks系统的任务调度机制浅析

杨坤

(苏州长风航空电子有限公司,江苏省苏州市215151)

摘要:本文首先简要分析了VxWorks系统的任务调度策略及算法,对优先级倒置出现的原因展开深入探讨,给出了具体的解决方案,最后探讨了静态表方式的具体实现方法,望能为此领域研究有所借鉴。

关键词:VxWorks系统;任务;调度机制

针对嵌入式系统而言,其除了要满足应用的基本功能需求之外,还应,安祖应用所提出的各种实时性要求。所以,嵌入式系统借助各种实用、先进的算法与策略,始终为系统行为的整体可预测性提供切实保障,也就是无论系统处于何种状态、运行至哪一时刻,任务调度程序均能为各任务提供合理、高效的资源分配,满足各任务的实时性要求。对于VxWorks系统来讲,其所提供的调度算法多以非周期性任务为对象,且为提供用于对周期性任务进行管理与调度的具体机制,且在传统的优先级抢占调度当中,同样存在比较突出的优先级倒置等问题,此些问题对系统的可预测性与实时性造成了严重影响,因而会使系统的整体性能降低。本文就VxWorks系统的具体任务调度机制作一探讨。

1.任务调度的基本依据

在整个VxWorks系统架构当中,各处于独立状态的程序,都可以称作一个任务,未能使Wind内核在管理、调度任务上变得更加方便,各任务均有自己专属的上下文,包含堆栈、时间片定时器、程序计数器等。针对调度程序而言,其基本功能即为在全部就绪的任务当中,选择运行价值最高的任务,将其投入到运行当中;通常情况下,多根据任务上下文当中的Counter、Priority选项来作为选择依据,其中,针对Priority来讲,其乃是整个任务体系中的静态优先级,而对于Counter而言,其则为任务剩余的具体时间片,其直接决定着一个任务运行状态的好坏。

2.任务调度的具体策略

2.1以静态优先级为基础的抢占调度

(1)优先级倒置。在所有静态优先级抢占方式当中,调度程序能够为高优先级的任务先执行提供切实保障。但在各任务之间,存在着比较突出的资源竞争问题,受此影响,会造成一个高优先级的任务比较被动,或者比较被迫的去等待一个低优先级的任务,当其完成后,方能去执行。此情况即为优先级倒置。比如在图1当中,t1、t2、t3的优先级自高至低;针对t3而言,其占据着由信号量提供保护的某种资源,当进临界区之后才执行,如果t3执行于临界区,t1处于就绪状态,那么t1会抢占t3去执行。当t1处于执行状态时,所需要进入的临界区需相同,此时,需得到的信号量也需相同,因资源之间存在竞争,t1会被阻塞,此时,t3便会被优先执行。但需要指出的是,t3在实际执行过程中,有被t2抢占的可能,受此影响,t3会再次阻塞,此状态可能会继续发生,因此,在下一个不确定的时间段内,t1会被阻塞,基于此状况下,若未制定具体措施,会导致此系统出现比较严重的不可预测性。

图1优先级倒置示意图

(2)解决方案。①优先级继承。使那些有资源的任务,阻塞于此资源上的全部任务的最高优先级运行,直至其全部资源均释放,最后此任务重回至正常优先级。②极限优先级。将临界资源均给予极限优先级,其等同于此阶段系统当中的最高优先级+1,如果任务已达临界区,此时,系统将极限优先级向此任务床底,使其达到最高优先级;如果任务已经退出临界区,在此之后,系统便会恢复至其原先正常的优先级,因而可以避免出现先级倒置状况。

2.2以动态优先级为基础的轮转调度

所谓动态优先级,从根本上来讲,就是仅需任务拥有CPU,优先级便会伴随时间的推移而持续减小,如果<0,此时,标记任务便能够重新调度。针对动态优先级来讲,其在同优先级任务共享CPU还没有指明之前,准允占用整个CPU当中的部分时间片,也就是Counter的值。针对Counter的初值来讲,其相同于函数TaskSpawn()当中的Priority参数初值,当任务处于运行状态时,Counterr会持续减少,而Priority则不变,方便Counter为0时,重新对Counter进行赋值。由此可得知,当任务处于运行状态时,Counter的适当减少,能够为其他任务的运行提供条件与机会,直至Counter为0,CPU的使用才被完全放弃。

2.3静态表调度

借助静态表来进行周期任务调度的构造,并构造管理程序,以此来更好的满足VxWorks对各类型任务进行调度的基本需求。静态表调度管理的主要功能:(1)建静态表,对周期任务的基本信息进行等级。(2)周期任务一次结束运行,并且可以在静态表当中将任务的具体状态记录下来,挂起。(3)当已经积累到一定的任务周期数时,对此任务结束与否进行判断,在没有超时时,挂起任务,不然会出现报告、处理任务超时情况。

3.结语

综上,针对VxWorks系统而言,其任务调度机制能够为非周期任务间的协调关系,提供切实保障。而极限优先级机制,以及优先级继承,能够将优先级倒置问题有效解决掉。而针对静态表调度方式当中的静态表来讲,其生成于任务运行前,所以,在实际运行过程中,调度器有着比较小的开销,系统在可预测性上比较好,且便于实时性炎症,因此,引入静态表,使VxWorks系统的任务调度机制得到较大丰富。

参考文献

[1]高鹏飞,李新明,孙建.Linux与VxWorks任务调度机制分析[J].工业控制计算机,2005,18(6):30-32.

[2]赵建坤,张大松,胡爱兰,等.基于VxWorks的星务管理系统软件多任务实时性调度设计[J].电子技术应用,2017,43(12):122-125.

[3]张林,王芙蓉.VxWorks嵌入式实时系统任务机制的研究[J].微型机与应用,2005,24(3):11-13

作者简介:杨坤(1982.01-),男,黑龙江省东宁市人,当前职务:设计员,当前职称:工程师,学历:本科,研究方向:嵌入式软件。