周期性实时任务LLF调度算法改进
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
周期性实时任务LLF调度算法改进
陈自刚;朱海华
【摘要】In order to reduce the times of laxity calculation and system scheduling, the least laxity first (LLF) scheduling algorithm for periodic real-time tasks is improved. The LLF queue is introduced into the system processing procedures; when the laxity of tasks is equal, the task with the earliest deadline is close to the top of the queue. Pre-execution time is introduced into task control block (TCB), after the task is scheduled, if there is no more urgent task, the execution task withdraws from the processor at the end of the pre-execution time. Matlab simulation tests show that the improvement of algorithm effectively reduces the times of laxity calculation of periodic real-time tasks and the times of system scheduling, and enhances the utilization of the processor.%为减少松弛度计算和系统调度次数,对周期性实时任务的最低松弛度优先(LLF)调度算法进行了改进.在系统处理过程中引入最低松弛度优先队列,当任务松弛度相同时,开始截止时刻早的任务靠近队首.在任务控制块(TCB)中引入预执行时间,任务被调度以后,如果没有更为紧迫的任务到达,任务执行到预执行时间结束才退出处理器.Matlab仿真试验表明,改进算法有效减少了周期件实时任务的松弛度计算次数和系统调度次数,提高了处理器的利用率.
【期刊名称】《自动化仪表》
【年(卷),期】2012(033)007
【总页数】4页(P9-11,14)
【关键词】工作周期;调度算法;最低松弛度优先队列;单处理器;实时系统
【作者】陈自刚;朱海华
【作者单位】南阳理工学院计算机与信息工程学院,河南南阳473004;南阳师范学
院计算机与信息技术学院,河南南阳473061
【正文语种】中文
【中图分类】TP316+.2
0 引言
随着计算机技术的发展,计算机技术的应用日益广泛,实时调度被广泛地应用于实时性强的众多领域,如敏捷制造、电子商务、地铁调度、铁路调度、交通管制、航空航天、自适应容错和机器人等,这些领域都要求计算机在允许的时限范围内给出响应。
最低松弛度优先调度算法(least laxity first,LLF)是一种高效的周期性任务
实时调度算法。
为完成实时处理任务而合理分配处理器,从而提高处理器的利用率。
本文对最低松弛度优先调度算法进行深入分析,并提出改进方案。
1 系统处理能力和抢占式调度机制
1.1 系统处理能力
虽然计算机技术得到了迅速发展,但任何一个计算机系统的资源都是有限的,其处理能力也必然有限。
如果处理器的处理能力不够强大,处理器就有可能因为忙不过来,导致某些周期性的实时任务得不到及时处理,从而造成难以预料的后果。
假定系统中有m个周期性的实时任务,各任务的系统服务时间为Ci,其周期为
Pi(其中1≤i≤m),在单处理器情况下,所有周期性实时任务均能正常运行,即系
统能够按照某种调度次序正常推进,必须满足下面的限制条件[1]:
假设系统中有m个周期性的实时任务,各任务的系统服务时间为Ci,其周期为
Pi(其中1≤i≤m),在多处理器情况下,当处理器数量为N时,所有周期性实时任
务均能正常运行,即系统能够按照某种调度次序正常推进,必须满足下面的限制条件:
1.2 抢占式调度机制
在实时系统中,当一个优先级更高的任务到达时,允许将当前任务暂时挂起,而高优先级任务抢占处理器资源执行,这样才能体现出该实时任务的高优先级特征,这被称为高优先级抢占调度。
在要求较严格的实时系统中,可以采用抢占式优先级调度算法。
根据抢占发生时间不同而进一步分成基于时钟中断的抢占式优先级调度算法和立即抢占的优先级调度算法。
前者是指高优先级实时任务并不立即抢占处理器,而是当时钟中断到来时,调度程序才剥夺正在执行任务的处理器分配给高优先级实时任务;后者是指一旦出现外部中断,如果正在执行的任务未进入临界区,就立即
剥夺正在执行任务的处理器,分配给请求中断的紧迫的实时任务[2]。
2 最低松弛度优先调度算法
2.1 松弛度定义和计算
一个任务的松弛度是该任务在开始截止时刻前可以延迟的最大时间。
松弛度计算与系统时间及任务周期有关。
松弛度计算公式为[3]:
周期性实时任务A的松弛度=完成截止时刻-任务剩余执行时间-系统当前时刻
在创建时,需要注意的是任务A的剩余执行时间被初始化为系统服务时间。
最低松弛度优先算法LLF是动态调度算法,可通过在任务运行过程中的优先级计
算动态地改变任务的优先级。
系统通过对任务优先级的调度,能够实现很高的
CPU 利用率[1,4]。
2.2 算法分析
最低松弛度优先LLF调度算法实现任务所剩的空闲时间越少,其优先级越高,从而保证了紧迫任务(并非是开始截止时刻最早的任务)的优先执行。
最低松弛度优先算法的关键问题是松弛度的计算,松弛度计算是需要系统开销的,大量任务的松弛度计算需要更多的系统开销。
此外,由于等待执行任务的松弛度是严格递减的,而当前执行任务的松弛度是不变的,随着时间的推移,就绪任务的松弛度可能会等于或小于当前执行任务,进而抢占当前执行的任务。
一旦出现两个或多个任务松弛度相等的情况,将会出现这几个任务之间的频繁任务切换。
这种现象又称为竞争抖动,会浪费有限的处理器资源且增加系统开销,使LLF算法实用性大大降低。
为避免这种情况的出现,可以考虑只有当某一任务松弛度为零时其优先级最高,并立即抢占处理器资源。
而在某时刻等待任务的松弛度可能会等于甚至小于当前执行任务,这时不用去抢占当前执行任务的处理器资源以使该任务继续执行,直至当前任务执行结束或被松弛度为0的任务抢占处理器[5-8]。
更少的松弛度计算次数和任务调度次数已成为周期性实时任务调度算法研究的重要内容[9]。
3 算法的改进
为使任务间频繁切换的次数和松弛度计算次数更少[8],在任务控制块中又引入了任务预执行时间work值。
直到任务预执行时间work值为0时,系统才进行调度,除非有新创建的最低松弛度任务到达且其松弛度小于正在执行任务的预执行时间work值,以此来减少系统调度的次数,这样也就减少了松弛度计算的次数。
当遇到多个任务松弛度极小且相等时,再将任务的开始截止时刻作为参考信息,把开始截止时刻最早的任务作为优先对象[10]。
此外,为减少任务间频繁切换和松弛度计算次数,引入最低松弛度优先队列。
3.1 任务控制块构成
构造的任务控制块代码如下。
周期性实时任务创建时,任务剩余执行时间remain被初始化为要求系统服务时间。
任务松弛度laxity=arrive+period-remain-cycle。
其中:arrive为任务到达时刻,period为任务的工作周期,remain为任务剩余执行时间,cycle为当前CPU时
钟数。
预执行时间work取值于自身的剩余执行时间和最低松弛度优先队列中队首任务的松弛度的最小值。
当正在执行任务的预执行时间结束时,该任务退出处理器,系统调度新的任务。
预执行时间work值是系统调度和最低松弛度优先队列松弛度计算的主要依据。
正在执行任务被抢占退出处理器或者预执行时间结束时,任务剩余执行时间
remain=remain-(cycle-dispatch)。
其中,dispatch为任务调度时刻。
此时,
任务开始截止时刻lateststrart=arrive+period-remain。
原则上,当任务松弛度laxity值最小时,就立即被系统调度。
当有多个周期性实时任务的松弛度laxity相等时,其调度次序由任务开始截止时刻lateststart加以区别,开始截止时刻lateststart小的任务优先被调度。
这就是在任务控制块中引入
任务开始截止时刻lateststart的原因。
3.2 LLF队列的构建与任务调度
系统在对周期性实时任务进行调度前,要首先判断这些周期性实时任务能否按照某种调度次序进行正常调度执行,即判断是否符合系统处理能力要求。
如果不能进行正常调度执行,则直接强制退出系统;如果能正常调度执行,则向内存申请空白的
任务控制块(TCB)空间,并进行TCB的初始化。
TCB初始化过程包括参数传递、关键字段的计算。
参数传递主要包括当前CPU时
钟数、任务到达时刻、任务的工作周期、任务的调度时刻等;关键字段的计算包括任务预执行时间、任务剩余执行时间、任务开始截止时刻、松弛度。
系统处理模型如图1所示。
图1 系统处理模型图Fig.1 Model of system processing
调度与入队需要系统进行优先级比较。
首先将新创建的周期性实时任务的松弛度与正在执行任务的松弛度进行比较。
当新创建的周期性实时任务的松弛度小于正在执行的任务的松弛度时,需要再与正在执行任务的预执行时间work值进行比较。
如果新创建的周期性实时任务的松弛度小于正在执行的任务的预执行时间work值,则立即抢占处理器资源开始执行;否则,不抢占处理器资源,新创建的周期性实时任务插入到最低松弛度优先队列队首。
当新任务的松弛度不是最低时,则与任务控制块的松弛度进行比较。
比较过程从队首开始,直到发现其松弛度高于某一任务的松弛度而低于其指向的下一个任务的松弛度时,系统将该任务控制块插入该位置。
被抢占的任务也按上述相同步骤进行,并被插入到松弛度优先就绪队列的适当位置。
在任务控制块中引入任务开始截止时刻lateststart之后,进行优先比较。
当松弛度相等时,优先顺序取决于开始截止时刻lateststart。
开始截止时刻lateststart越小的任务其优先级越高,优先决定其调度次序和插入最低松弛度优先就绪队列位置。
4 试验分析
在单处理器系统中,设有3个周期性的实时任务A、B和C,任务A要求每20 ms执行一次,执行时间为5 ms;任务B要求每30 ms执行一次,执行时间为10 ms;任务C要求每40 ms执行一次,执行时间为15 ms。
按最低松弛度优先算法对这3个任务进行调度。
首先,根据单处理器情况下系统能够按照某种调度次序正常推进必须满足的限制条
件,判断系统能否处理这些周期性的实时任务,其表达式为:
上式满足单处理器情况下处理能力的限制条件,所以系统能够很好地处理这些周期性的实时任务。
使用改进后的算法数据结构及算法思想,经Matlab仿真试验发现没有出现松弛度相同的情况,完全避免了调度抖动,有效地减少了系统调度次数和松弛度计算次数。
改进后的LLF调度分析如图3所示。
图2 改进后的LLF调度分析Fig.2 Scheduling analysis of the optimized LLF algorithm
5 结束语
在最低松弛度优先LLF调度算法中,松弛度计算时机选择不当使得计算次数增多。
当多个任务松弛度值接近时,LLF算法会造成任务之间的频繁切换,使得调度次数增加。
这些都将导致系统开销增大。
因此,更少的松弛度计算次数和任务调度次数成为周期性实时任务调度算法研究的重要内容。
本文就基于这个目的对周期性实时任务的最低松弛度优先调度算法进行深入的研究,系统处理过程中引入最低松弛度优先队列,在任务控制块中引入以优先级次高的松弛度为执行任务的预执行时间。
通过分析发现,改进算法有效地减少了松弛度计算次数和系统调度次数,提高了处理器的利用率[11-12]。
参考文献
[1]Krilhi R,John A.Scheduling algorithms and operating systems support for real-time system[J].Proceeding of the IEEE,1994,83(1):55
-67.
[2]汤小丹,梁红兵,哲凤屏,等.计算机操作系统[M].3版.西安:西安电子科
技大学出版社,2007:99-103.
[3]张巍,傅秀芬.改进的最低松弛度优先周期任务调度算法[J].江西师范大学学报:自然科学版,2006,30(4):365-368.
[4]Chetto H,Chetto M.Some results of the earliest deadline scheduling algorithm[J].IEEE Transactions on Software Engineering,1989,
15(10):1261-1269.
[5]杨仕平,桑楠,熊光泽,等.高可信赖实时操作系统的防危调度机制[J].电子科技大学学报:工学版,2006,35(1):111-114.
[6]黄万伟,汪斌强,王宝进,等.面向区分服务的可重构任务在线调度算法[J].计算机辅助设计与图形学学报,2010,22(4):717-728.
[7]彭良智,戴金海,桂先洲,等.强实时系统静态优先级调度的可调度性分析[J].计算机工程与应用,1999(12):13-15.
[8]黄金贵,陈建二,陈松乔.网络集群计算系统中的并行任务调度[J].计算机学报,2004,27(6):765-771.
[9]万明,张凤鸣,樊晓光.一种混合优先级的防危调度算法[J].计算机工程,2010,36(22):254-255.
[10]王勇军,王意洁,赵龙,等.复杂行为的分布并行化[J].计算机学报,1999,22(8):861-870.
[11]黄以锋,景博,穆举国.基于Rollout算法的模拟电路测点选择[J].自动化仪表,2012,33(2):5-8.
[12]汪义旺,崔鸣,祁春清.RS-485/Modbus在FFU控制系统中的应用[J].自动化仪表,2010,31(6):39-41,44.。