基于VxWorks 的抢占式周期任务调度改进算法
2016年8月20日 09:48 作者:唐 甜,徐 杰,张 蕾唐 甜,徐 杰,张蕾
( 中航工业西安航空计算技术研究所)
摘要:对传统的周期任务调度算法进行了改进,通过辅助时钟对周期任务进行定时,在固有的周期任务调度算法的基础上引入了错峰机制,使得不同的周期任务能够以从高到低的顺序错峰执行,改善了周期任务的执行时机,有效的提高了应用系统的性能。
关键词:VxWorks ;抢占式周期任务调度
中图分类号:TP312 文献标识码:B
Improved priority-base PreemptiveScheduling Arithmetics based on VxWorks
Tang Tian,Xu Jie,Zhag Lei
(AVIC Computing Technique Research Institute)
Abstract :Improved traditional priority-base Preemptive Scheduling Arithmetics and timing cycle task by the auxiliary clock.Peak mechanism is introduced based on the inherent task scheduling algorithm,which make different cycle task in order from high to low peak.improved cycle task execution time and improve the performance effectively of the application system.
Keywords :VxWorks preemptiveScheduling Arithmetics
0 引言
WindRiver 公司开发的实时操作系统VxWorks,以其良好的可靠性和卓越的实时性被广泛的应用于通信、航空、航天等领域,周期任务作为实时性的基本环节被广泛的应用于各种计算机控制系统中。
1 周期任务调度
不同的功能模块执行在不同的周期中,这个不同的周期称之为周期任务,而调度这些周期任务的功能模块则称之为周期任务调度。
VxWorks 内核采用基于优先级抢占式(priority-base preemptive)调度算法和基于时间片轮转式(round-robin)调度算法。
基于优先级的抢占式调度算法,是为系统中的任务分配一个介于0 到255 之间的优先级号,任意时刻,内核把CPU 分配给处于就绪态的优先级最高的任务,若系统内核发现更改优先级的任务处于就绪态,则立刻保存当前任务的上下文并将其状态转变为阻塞态,同时开始执行高优先级任务的上下文,待高优先级任务执行完毕才开始自行低优先级任务。
基于时间片轮转调度算法,适用于相同优先级的多个任务之间,是让这些任务中处于就绪态的任务公平分享CPU,内核让该组任务依次轮流执行已经确定好的时间片,当一个任务到达时, 将被排在对尾,待分配给自己的时间片到来时执行,如果时间片内未执行完毕,则继续等待下一次时间片,直到任务执行完毕。
2 抢占式周期任务调度改进算法
和传统的使用中断来创建嵌入式周期任务调度方法不同,本文介绍的抢占式周期任务调度改进算法,是通过辅助时钟进行基础定时,进而在不同的时间周期内释放不同周期任务的信号量来对周期任务的定时周期进行设置。同时,本文提及的算法还修改了传统周期任务的执行时机,使得相同时机触发的周期任务能够错峰执行,有效的改善了传统周期任务调度的性能。
以辅助时钟的时钟周期为1ms,创建2ms、4ms 和10ms 三个周期任务为例,本文拟通过创建初始任务、周期任务调度和周期任务执行三个方面描述本算法。
2.1 创建初始任务
首先应创建辅助时钟的定时周期为1ms,并在此基础上创建周期任务调度任务、2ms 周期任务、4ms 周期任务以及10ms 周期任务,任务创建完毕后,根据周期任务的时间设置每个周期任务的优先级、挂接函数等内容。本算法设置的任务优先级由高到低依次为周期任务调度任务、2ms 周期任务、4ms 周期任务以及10ms 周期任务。
2.2 周期任务调度
初始任务创建完毕后,则应开始设置周期任务调度的具体算法,周期任务调度函数的定时周期应选取各个周期任务的公约数,本算法选取1(单位ms)作为本算法周期任务调度的定时周期。
传统的周期任务调度算法就是根据定时器进行周期控制,周期时间到时,根据周期任务的优先级决定首先执行的是哪个周期任务,其缺点在于当达到几个周期任务的最小公倍数时,不同时间的周期任务在同一时刻触发,而高优先级抢占了低优先级任务的内存空间,导致低优先级的任务被高优先级多次打断,若在高优先级任务列表内,包含低优先级任务的相关数据信息,这样的调度方式则破坏了低优先级数据的一致性,为了改变这种弊端,本文提及的周期任务调度图,分别在次低优先级任务和低优先级任务上添加了相对于高优先级周期任务1ms 和2ms 的延时操作, 使不同的周期任务能够以从高到低的顺序错峰执行,保证了数据35
理论与算法
2016.10
的一致性,对周期任务调度进行模块设计时,则应首先获取该模块的信号量,待信号量获取成功后,则应在不同的时间周期内释放对应周期任务的相关信号量,最后还应对相应的周期任务进行超时处理。
2.3 周期任务执行
任务调度函数创建完毕后,就可以设置各个周期任务的执行功能了,和周期任务调度功能类似,首先也应获取当前周期任务的任务信号量,信号量获取成功能后方可执行具体的周期任务,任务执行完毕后,应清除对应周期任务的超时标志。
2.4 仿真结果
以本所所述算法为例,在仿真平台上进行开环仿真,传统的周期任务调度图件见图1,本文所述的改进算法的周期任务调度图见图2。
图1 传统周期任务时间调度图
3 结束语
周期任务调度在嵌入式操作系统应用开发中有着非常广泛的应用,本文描述的基于VxWorks 的抢占式周期任务调度改进算法,通过辅助时钟对周期任务进行定时,在固有的周期任务调度算法的基础上引入了错峰机制,使得不同的周期任务能够以从高到低的顺序错峰执行,改善了周期任务的执行时机,有效的提高了应用系统的性能。
参考文献
[1] 张长全,符菊梅.VxWorks 操作系统在测控设备中的应用. 装备指挥技术学院学报[J].2006 年8 月第17 卷第4 期: 117-121.
[2] 丁健. 计算机控制系统的可靠性技术研究. 计算机工程与设计[J].2007 年2 月第28 卷第4 期:985-987
[3] 万柳.μC/OS-II 嵌入式操作系统中抢占式调度策略分析. 微计算机应用[J].2005 年第1 期第26 卷第1 期:116-118
图2 本文周期任务时间调度图