与一些同事就实时任务的最佳调度策略进行了有趣的讨论,但不是每个人都对常见或有用的调度策略有很好的理解。
对于你的答案,请选择一个策略并详细讨论,而不是提供一些策略的一些信息。如果你有什么东西可以添加到别人的描述中并且它很简短,添加评论而不是新的答案(如果它很长或有用,或者只是更好的描述,那么请使用答案)
目前的策略:
- 亚当
答案 0 :(得分:8)
如题为Real-Time Task Scheduling for Energy-Aware Embedded Systems的论文所述,Swaminathan和Chakrabarty描述了具有多处理器速度和功耗配置文件的低功耗(嵌入式)设备中实时任务调度的挑战。他们概述的调度算法(并且显示只比测试中的最佳解决方案差1%)有一种有趣的方式来调度他们称之为LEDF启发式的任务。
来自论文:
首先是低能量最早的截止日期 启发式,或简称LEDF,是一种 最着名的延伸 截止日期(EDF)算法。该 LEDF的操作如下:LEDF 维护所有已发布的列表 任务,称为“就绪列表”。什么时候 任务被释放,任务随之而来 选择最近的截止日期 执行。执行检查以查看 如果任务截止日期可以满足 在较低电压下执行它 (速度)。如果可以满足截止日期, LEDF将较低的电压分配给 任务和任务开始执行。 在任务执行期间,其他 任务可能会进入系统。这些 假定放置任务 自动在“就绪列表”上。 LEDF再次选择任务 最近的截止日期。如 只要有任务等待 执行,LEDF不保持亲 cessor闲置。重复该过程 直到完成所有任务 调度。
在伪代码中:
Repeat forever {
if tasks are waiting to be scheduled {
Sort deadlines in ascending order
Schedule task with earliest deadline
Check if deadline can be met at lower speed (voltage)
If deadline can be met,
schedule task to execute at lower voltage (speed)
If deadline cannot be met,
check if deadline can be met at higher speed (voltage)
If deadline can be met,
schedule task to execute at higher voltage (speed)
If deadline cannot be met,
task cannot be scheduled: run the exception handler!
}
}
随着小型低功耗设备变得无处不在,实时调度似乎是一个有趣且不断发展的问题。我认为这是一个我们会看到大量进一步研究的领域,我期待着与时俱进!
答案 1 :(得分:2)
一种常见的实时调度方案是使用基于优先级的抢占式多任务处理 每个任务都分配了不同的优先级 就绪队列上的最高优先级任务将是运行的任务。它将一直运行,直到它放弃CPU(即延迟,等待信号量等等)或更高优先级的任务准备好运行。
此方案的优点是系统设计人员可以完全控制将以什么优先级运行的任务。调度算法也很简单,应该是确定性的。
另一方面,低优先级的任务可能会缺乏CPU。这表明存在设计问题。