首页/操作系统/02-process/调度的时机与方式 🔗 在 Obsidian 中打开
操作系统 · 02-process

调度的时机与方式

重要度 ★★★★ 调度时机非抢占式抢占式三层调度
速查
运行→阻塞运行→终止 一定触发调度;时间片完/阻塞→就绪 可能调度。中断处理中、内核临界区中、原子操作中不能调度。

速查

项目
不能调度中断处理中、原子操作中(内核程序)
非抢占式进程主动放弃CPU时才调度
抢占式可由OS剥夺CPU分配给其他进程
三层调度高级调度(作业)、中级调度(内存)、低级调度(CPU)

核心概念

调度的时机——何时需要调度:

  1. 运行态→阻塞态:进程主动放弃CPU(一定会调度)
  2. 运行态→终止态:进程结束(一定会调度)
  3. 运行态→就绪态:时间片用完(可能会调度)
  4. 阻塞态→就绪态:等待事件完成(可能会调度)
  5. 就绪队列中出现新进程(可能会调度)

不能调度/切换的情况

  • 中断处理过程中:中断处理必须一气呵成
  • 进程在内核临界区中:访问临界资源时不能切换
  • 其他需要原子操作的内核程序

调度方式

  • 非抢占式:进程主动放弃CPU(运行→阻塞、运行→终止),调度程序才介入。简单但响应性差。
  • 抢占式:OS可以剥夺进程的CPU(如时间片用完、高优先级到来)。响应性好,但开销大。

三层调度

调度层次别名频率调度对象
高级调度作业调度/长程调度最低从外存选作业到内存
中级调度内存调度中等将进程挂起/激活
低级调度进程调度/短程调度最高从就绪队列选进程到CPU

关键性质

场景是否调度说明
运行→阻塞一定进程主动放弃CPU
运行→终止一定进程结束
运行→就绪(时间片完)可能取决于调度策略
阻塞→就绪可能新就绪进程可能优先级更高
中断处理中不能必须处理完中断
内核临界区不能访问临界资源不能被打断

常见考法

考法解题套路
调度时机运行→阻塞/终止一定调度;时间片完/阻塞→就绪可能调度
不能调度的情况中断处理中、内核临界区、原子操作
非抢占 vs 抢占非抢占只在进程主动放弃时调度,抢占可由OS强制剥夺
三层调度对比频率:低级>中级>高级;粒度:高级>中级>低级

易错点

注意
  • 进程在内核临界区时不能调度(不是普通临界区——普通临界区在用户态,可以调度)
  • "不能调度" $\neq$ "不能中断":中断可以发生,但不能进行进程切换
  • 中级调度是内存调度(挂起/激活),不是CPU调度
  • 非抢占式中,运行→阻塞/终止一定触发调度,不是"可能"
  • 低级调度(进程调度)的频率最高,是OS中最重要的调度

核心结论

必背
  1. 运行→阻塞和运行→终止是一定会发生调度的两种情况
  2. 进程在内核临界区时不能进行进程切换(但可响应中断)
  3. 非抢占式调度简单但响应差,抢占式调度响应好但开销大
  4. 现代OS几乎都采用抢占式调度(支持时间片轮转、优先级抢占)
  5. 三层调度中,低级调度频率最高,直接影响系统性能

记忆卡片

一定会触发调度的两种情况?
运行→阻塞(主动放弃)、运行→终止(进程结束)。
不能进行进程调度的情况?
中断处理过程中、内核临界区中、原子操作中。
非抢占式和抢占式的区别?
非抢占式只在进程主动放弃CPU时调度;抢占式OS可强制剥夺CPU。
三层调度分别调度什么?
高级→作业(外存→内存)、中级→挂起/激活、低级→CPU分配。
为什么内核临界区不能调度?
内核临界区访问的资源可能影响全局数据结构,被打断会导致不一致。

交互动画 · 状态转换与调度触发

新建 就绪 运行 阻塞 终止 调度?
点击上方按钮,观察不同转换是否会触发进程调度
运行→阻塞 / 运行→终止 一定调度;时间片完 / 阻塞→就绪 可能调度
提示:内核临界区与中断处理中不进行调度,但中断仍可被响应。

相关知识点

scheduling-algorithm-comparison process-and-thread

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。