单处理器系统调度算法详解
1. 调度基础与可调度性测试
在实际应用中,为任务制定合适的调度计划至关重要。在编译前,可能需要对执行时间进行预估;编译后,能获取更详细的执行时间信息,从而制定更精确的调度计划;有时还需在运行时决定下一个执行的任务。而在时间触发系统中,实时操作系统(RTOS)的调度可能仅需简单的任务查找表。
可调度性测试在许多应用中非常重要。精确测试在很多情况下属于NP难题,因此通常采用充分性测试和必要性测试。充分性测试检查保证调度可行的充分条件,可能会误判调度不可行;必要性测试检查必要条件,可用于判断调度不存在,但也可能出现通过测试但调度仍不可行的情况。
2. 单处理器系统调度算法
2.1 独立作业调度
2.1.1 最早截止日期优先(EDD)算法
当所有作业同时到达时,为了最小化延迟,可使用EDD算法。该算法基于Jackson规则,即按截止日期非递减顺序执行作业能最小化最大延迟。EDD算法可实现为静态调度算法,需按截止日期对作业排序,复杂度为O (n log(n))。
以下是EDD算法的证明思路:
假设有一个非EDD调度S,存在作业Ja和Jb,Ja的截止日期早于Jb,但Jb先执行。通过交换Ja和Jb的执行顺序得到调度S′,可以证明S′的最大延迟小于S的最大延迟。因此,任何非EDD调度都可通过有限次交换转换为EDD调度,且最大延迟只会减小,所以EDD算法是最优的。
2.1.2 最早绝对截止日期优先(EDF)算法
当作业释放时间不同时,预emption可降低最大延迟。EDF算法在任何时刻执行所有就绪作业中绝对截止日期最早的作业,