常用实时调度算法

实现实时调度的基本条件

  • 提供必要的调度信息(就绪时间、开始截止时间和完成截止时间、处理时间、资源要求、优先级)
  • 系统处理能力强。在实时系统中,若处理机的处理能力不够强,则有可能因处理机忙不过来而致使某些实时任务不能得到及时处理。
  • 采用抢占式的调度机制
  • 具有快速切换机制

实时调度的 CPU 处理能力

单处理机:

m: 实时任务数目,ci: 每次处理时间,pi: 周期时间

公式

例如:有 6 个硬实时任务,周期时间都是 50 ms,每次的处理时间为 10 ms,则系统是不可调度的。

多处理机:(N: 处理机数目)

公式

实时调度算法的分类

按实时任务性质(即对时间约束的强弱程度)

  • 硬实时调度:必须满足任务截止期要求,错过后果严重。
  • 软实时调度算法:期望满足任务截止期要求,错过可容
    忍。

按调度方式

非抢占式调度算法

  • 非抢占式轮转调度算法:用于工业生产的群控系统中。
  • 非抢占式优先调度算法:用于有一定时间要求的实时控制系统之中。

抢占式调度算法 (按抢占发生的时间)

  • 基于时钟中断抢占的优先权调度算法
  • 立即抢占的优先权调度算法

抢占式调度算法

图像

最早截止时间优先算法

算法是根据任务的开始截止时间和完成截止时间来确定任务的优先级。截止时间越早,其优先级越高。就绪队列中任务按其截止时间排列,队首任务先分配处理机。

非抢占式调度方式用于非周期实时任务
抢占式调度方式用于周期实时任务

非抢占式调度方式用于非周期实时任务

图解

抢占式调度方式用于周期实时任务

有两个周期性任务,任务 A 的周期时间为 20ms,每个周期处理时间为 10ms;任务 B 的周期时间为 50ms,每个周期处理时间为 25ms。两个任务的到达时间,最后期限和执行时间如下图:

图示

固定优先级调度(A 有较高优先级)

图示

图示

固定优先级调度(B 有较高优先级)

例子

最早截止完成时间优先算法

图示

图示

图示

最低松弛度优先算法

最低松弛度优先算法(LLF,Least Laxity First)
低松弛 = 高紧急

算法是根据任务紧急(或松弛)的程度,来确定任务的优先级。任务的紧急度越高,其优先级越高,并使之优先执行。

算法采用抢占调度方式,可用于调度具有完成截止时间的周期性实时任务。

松弛度 = 必须完成时间 - 本身剩余运行时间 - 当前时间

例如:

在一个实时系统中,有两个周期性实时任务 A 和 B,任务 A 要求每 20ms 执行一次,执行时间为 10ms;任务B 只要求每 50ms 执行,执行时间为 25ms。试按最低松弛度优先算法进行调度。

图示

动图示例

优先级倒置

优先级倒置现象
高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞。

例如:有三个完全独立的进程 Task A、Task B 和 TaskC,Task A 的优先级最高,Task B 次之,Task C 最低。Task A 和 Task C 共享同一个临界资源 X。

图解

根据优先级原则,高优先级进程优先执行。但此例中Task A 和 Task C 共享同一个临界资源,出现了不合理的现象。

高优先级进程 Task A 因低优先进程 Task C 被阻塞,又因为低优先进程 Task B 的存在延长了被阻塞的时间。

优先级倒置的解决方法

Priority Ceiling

进程 Task C 在进入临界区后,Task C 所占用的处理机就不允许被抢占。这种情况下,Task C 具有最高优先级(Priority Ceiling) 。

如果系统中的临界区都较短且不多,该方法是可行的。反之,如果 Task C 临界区非常长,则高优先级进程Task A 仍会等待很长的时间,其效果无法令人满意。

图示

Priority Inheritance

当高优先级进程 Task A 要进入临界区使用临界资源 X时,如果已经有一个低优先级进程 Task C 正在使用该资源,可以采用优先级继(Priority Inheritance)的方法。

此时一方面 Task A 被阻塞,另一方面由 Task C 继承Task A 的优先级,并一直保持到 Task C 退出临界区。

图示


猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/80677366