最低松弛度优先即LLF(Least Laxity First)算法
该算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使之优先执行。例如,一个任务在200ms时必须完成,而它本身所需的运行时间就有100ms,因此,调度程序必须在100ms之前调度执行,该任务的紧急程度(松弛程度)为100ms。又如,另一任务在400ms时必须完成,它本身需要运行150ms,则其松弛程度为250ms。在实现该算法时要求系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在队列最前面,调度程度总是选择就绪队列中的队首任务执行。
**该算法主要用于可抢占调度方式中。**假如在一个实时系统中,有两个周期性实时任务A和B,任务A要求每20ms执行一次,执行时间为10ms;任务B只要求每50ms执行一次,执行时间为25ms。由此可得知任务A和B每次必须完成的时间分别为:A1、A2、A3···和B1、B2、B3、···,见下图,为保证不遗漏任何一次截止时间,应采用最低松弛度优先的抢占调度策略。
在刚开始时(t1=0),A1必须在20ms时完成,而它本身运行又需10ms,可算出A1的松弛度为10ms;B1必须在50ms时完成,而它本身运行就需25ms,可算出B1的松弛度为25ms,故调度程序应先调度A1执行,在t2=10ms时,A2的松弛度可按下式算出:
A2的松弛度 = 必须完成时间 - 其本身的运行时间 - 当前时间 = 40ms - 10ms - 10ms = 20ms
类似地,可算出B1的松弛度为15ms,故调度程序应选择B2运行。在t3=30ms时,A2的松弛度已减为0(即40-10-30),而B1的松弛度为15ms(即50-5-30),于是调度程序应抢占B1d的处理机而调度A2运行。在t4=40ms时,A3的松弛度为10ms(即60-10-40),而B1的松弛度仅为5ms(即50-5-40),故又应重新调度B1执行。在t5=45ms,B1执行完成,而此时A3的松弛度已减为5ms(即60-10-45),而B2的松弛度为30ms(即100-25-45),于是又应调度A3执行。在t6=55ms时,任务A尚未进入第4周期,而任务B已进入第2周期,故再调度B2执行。在t7=70ms时,A4的松弛度已减至0ms(即80-10-70),而B2的松弛度为20ms(即100-10-70),故此时调度又应抢占B2的处理机而调度A4执行。下图示出了具有两个周期性实时任务的调度情况。