目录
3.4.1 实现实时调度的基本条件
1. 提供必要的信息
2. 系统的处理能力强
3. 采用抢占式调度机制
4. 具有快速切换机制
3.4.2 实时调度算法的分类
1. 非抢占式调度算法
2. 抢占式调度算法
3.4.3 常用的几种实时调度算法
1. 最早截止时间优先 EDF(Earliest Deadline First)算法
2. 最低松弛度优先 LLF(Least Laxity First)算法
3.4.1 实现实时调度的基本条件
1. 提供必要的信息
1)就绪时间。这是该任务成为就绪状态的起始时间。
2)开始截止时间和完成截止时间。
3)处理时间。一个任务从开始执行,直至完成所需的时间。
4)资源要求。任务执行所需的一组资源。
5)优先级。
2. 系统的处理能力强
在实时系统中,通常都有着多个实时任务。若处理机的处理能力不够强,则有可能因处理机忙不过来而使某些实时任务不能得到及时处理。
解决的方法是提高系统的处理能力,其途径有二:
其一仍是采用单处理机系统,但须增强其处理能力,以显著地减少对每一个任务的处理时间;
需要花钱升级单处理机的处理能力
其二是采用多处理机系统。
3. 采用抢占式调度机制
在含有硬实时任务的实时系统中,广泛采用抢占机制。当一个优先权更高的任务到达时,允许将当前任务暂时挂起,而令高优先权任务立即投入运行,这样便可满足该硬实时任务对截止时间的要求。
4. 具有快速切换机制
- 对外部中断的快速响应能力
- 快速的任务分派能力
3.4.2 实时调度算法的分类
1. 非抢占式调度算法
1)非抢占式轮转调度算法
- 调度程序每次选择队列中的第一个任务投入运行
- 当该任务完成后,便把它挂在轮转队列的末尾,等待下次调度运行
2)非抢占式优先调度算法
如果在系统中存在着实时要求较为严格的任务,则可采用非抢占式优先调度算法,为这些任务赋予较高的优先级。
- 当这些实时任务到达时,把它们安排在就绪队列的队首;
- 等待当前任务自我终止或运行完成后,才能被调度执行。
2. 抢占式调度算法
1)基于时钟中断的抢占式优先权调度算法
某实时任务到达后,如果该任务的优先级高于当前任务的优先级,这时并不立即抢占当前任务的处理机,而是等到时钟中断到来时,调度程序才剥夺当前任务的执行,将处理机分配给新到的高优先权任务。
调度时间 ≤ 两个时间中断之间的间隔时间
2)立即抢占的优先权调度算法
一旦出现外部中断,只要当前任务未处于临界区,便能立即剥夺当前任务的执行,把处理机分配给请求中断的紧迫任务。
只要当前进程执行完当前的那条机器指令,实时进程就立马把它踹了。
3.4.3 常用的几种实时调度算法
1. 最早截止时间优先 EDF(Earliest Deadline First)算法
该算法要求在系统中保持一个实时任务就绪队列:
- 该队列按各任务截止时间的早晚排序
- 具有最早截止时间的任务排在队列的最前面
调度程序总是选择就绪队列中的第一个任务,为之分配处理机,使之投入运行。
1)非抢占式调度 + EDF 算法
2)抢占式调度 + EDF 算法
- 采用抢占式调度
- 任务 A 和 B 周期分别为 20ms 和 50ms
- 任务 A 和 B 每周期执行时间分别为 10ms 和 25ms
2. 最低松弛度优先 LLF(Least Laxity First)算法
1)LLF 算法
松弛度 = 完成截止时间 - 剩余运行时间 - 当前时间
该算法按照松弛度对实时任务的就绪队列进行排序。松弛度最小的任务排在队列最前面,调度程序总是选择就绪队列中的队首任务执行。
2)抢占式调度 + LLF 算法
- 采用抢占式调度:但仅当松弛度 = 0 时才抢占
- 任务 A 和 B 周期分别为 20ms 和 50ms
- 任务 A 和 B 每周期执行时间分别为 10ms 和 25ms
分析过程:
任务切换时机:
- 当前任务执行完毕时,选择松弛度最小的任务执行
- 某一任务松弛度 = 0 时,选择该任务执行
注意:当某一新任务到达时,即使它的松弛度比当前任务的小,只要松弛度不为 0,就不能进行抢占!这样可以减少任务切换的开销。
执行顺序:
3)抢占方式和时机
① 当队列中等待的任务的松弛度 = 0 时才进行抢占。如:20ms 时,虽然 A2 的松弛度比 B1 的松弛度小,但是 A2 并没有抢占 B1 。
② 当任务执行结束或无任务执行时,再比较队列中等待的任务的松弛度,较小的先执行。