Appearance
优先级调度
考情分析
优先级调度在 408 真题中常以选择题形式考查静态/动态优先级、抢占/非抢占的区别。属于 🔥🔥🔥 高频考点。
现实中不是所有任务都同等重要。急诊病人插队优先看病,这谁都能理解。优先级调度就是给每个进程贴上"紧急程度"标签,让更重要的任务先执行。
算法规则
优先级调度:从就绪队列中选择优先级最高的进程分配 CPU。
| 维度 | 分类 |
|---|---|
| 抢占性 | 抢占式 / 非抢占式 |
| 优先级变化 | 静态优先级 / 动态优先级 |
静态优先级 vs 动态优先级
| 类型 | 说明 | 优缺点 |
|---|---|---|
| 静态优先级 | 进程创建时确定,运行期间不变 | 实现简单,但不灵活 |
| 动态优先级 | 运行期间根据情况动态调整 | 灵活,可避免饥饿,但开销大 |
动态优先级的调整策略:
- 等待时间越长 → 优先级越高(防止饥饿)
- 已占用 CPU 时间越长 → 优先级越低
优先级设置的一般原则:
- 系统进程 > 用户进程
- 交互型进程 > 非交互型进程
- I/O 密集型 > CPU 密集型(提高 I/O 设备利用率)
调度示例(非抢占式)
| 进程 | 到达时间 | 服务时间 | 优先级(数字越小越高) |
|---|---|---|---|
| P1 | 0 | 7 | 3 |
| P2 | 2 | 4 | 1 |
| P3 | 4 | 1 | 4 |
| P4 | 5 | 4 | 2 |
时间: 0 7 11 12 16
├───────────┤───┤───┤───────┤
P1 P2 P4 P3非抢占式:P1 先到先执行,P1 完成后选优先级最高的 P2(优先级1)。
交互可视化
优先级反转问题
优先级反转(Priority Inversion):高优先级进程被低优先级进程间接阻塞。
场景:P_L 持有锁 → P_H 到达但需要锁被阻塞 → P_M 到达,优先级高于 P_L,抢占 P_L → P_L 无法释放锁 → P_H 被 P_M 间接阻塞。
解决方案:
| 方案 | 说明 |
|---|---|
| 优先级继承 | P_L 临时继承 P_H 的高优先级,避免被 P_M 抢占 |
| 优先级天花板 | 将锁的优先级设为可能访问它的最高优先级 |
缺点
| 缺点 | 说明 |
|---|---|
| 饥饿 | 低优先级进程可能永远等不到(静态优先级下) |
| 优先级反转 | 上述问题 |
考研高频考点
- 🔥🔥🔥 静态优先级 vs 动态优先级的区别
- 🔥🔥🔥 优先级反转的概念和解决方案
- 🔥🔥 抢占式 vs 非抢占式优先级调度
- 🔥 I/O 密集型优先级应高于 CPU 密集型的原因
优先级调度可能饿死低优先级进程。有没有办法兼顾短作业和长等待?下一篇看 HRRN 如何在两者之间找平衡。