您现在的位置是:首页 >技术交流 >DJ3-4 实时调度网站首页技术交流
DJ3-4 实时调度
目录
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 。
② 当任务执行结束或无任务执行时,再比较队列中等待的任务的松弛度,较小的先执行。