实时系统中的最小松弛时间 (LST) 调度算法
最小松弛时间 (LST)是一种用于实时系统的动态优先级驱动的调度算法。
在 LST 中,系统中的所有任务都根据它们的松弛时间分配了一些优先级。具有最少空闲时间的任务具有最高优先级,反之亦然。
任务的优先级是动态分配的。
可以使用以下公式计算松弛时间:
slack_time = ( D - t - e' )
这里D :任务的截止日期
t :循环开始时的实时时间。
e' :任务的剩余执行时间。
具有最小松弛时间的任务被分派到 CPU 执行,因为它具有最高优先级。
超级周期(HP)是甘特图的时间周期,它等于系统中所有任务周期的 LCM。
在时间 t,任务的松弛度等于 (dt) 减去完成任务剩余部分所需的时间。
这是一个复杂的算法,这就是为什么它需要额外的信息,如执行时间和截止日期。仅当允许抢占时,最少空闲时间调度算法才能最佳地工作。当且仅当一组可运行的任务存在可行的调度时,它才能产生一个可行的调度。
它与最早的截止日期优先不同,因为它需要要调度的任务的执行时间。因此,由于实时系统中任务的突发时间难以预测,因此有时实现最小松弛时间调度算法是不切实际的。
与 EDF(Earliest Deadline First)调度算法不同,LST 可能未充分利用 CPU,从而降低效率和吞吐量。
如果在 LST 中准备好执行的两个或多个任务,并且任务具有相同的松弛时间或松弛值,则根据 FCFS(先来先服务)原则将它们分派到处理器。
例子:
- 在时间 t=0:只有任务 T1 已经到达。 T1 一直执行到时间 t=4。
- 在时间 t=4:T2 已到达。
T1的松弛时间:33-4-6=23
T2的松弛时间:28-4-3=21
因此,T2 开始执行,直到 T3 到达时的时间 t=5。 - 在时间 t=5:
T1的松弛时间:33-5-6=22
T2的松弛时间:28-5-2=21
T3的松弛时间:29-5-10=12
因此 T3 开始执行直到时间 t=13 - 在时间 t=13:
T1的松弛时间:33-13-6=14
T2的松弛时间:28-13-2=13
T3的松弛时间:29-13-2=14
因此 T2 开始执行直到时间 t=15 - 在时间 t=15:
T1的松弛时间:33-15-6=12
T3的松弛时间:29-15-2=12
因此 T3 开始执行直到时间 t=16 - 在时间 t=16:
T1的松弛时间:33-16-6=11
T3的松弛时间:29-16-=12
因此 T1 开始执行直到时间 t=18,依此类推。