Appearance
调度算法对比模拟器使用指南
考情分析
CPU 调度在 408 真题中累计考查约 56 分(2009-2026),属于 🔥🔥🔥 高频核心。常见题型:给一组进程,用某种算法画甘特图、算周转时间和等待时间。很多同学公式会背,一到手算就出错——少算了一段等待、搞混了抢占时机。
这个模拟器让你用同一组进程同时跑多种算法,甘特图和指标并排展示,差异一目了然:
| 考点 | 你会在模拟器哪里看到 | 考频 |
|---|---|---|
| 各算法甘特图画法 | 甘特图面板 | 🔥🔥🔥 |
| 周转时间 / 等待时间计算 | 指标表格 | 🔥🔥🔥 |
| 抢占 vs 非抢占的区别 | SJF vs RR 甘特图 | 🔥🔥🔥 |
| 各算法是否导致饥饿 | 修改优先级后观察 | 🔥🔥 |
| 时间片大小对性能的影响 | 调整时间片后对比 | 🔥🔥 |
跑完一轮对比大约 5 分钟。之后再做手算题,你会知道自己该画什么、算到哪里。
第一步:输入进程数据
默认数据
模拟器预置了一组经典进程:
| PID | 到达时间 | 执行时间 | 优先级 |
|---|---|---|---|
| P1 | 0 | 8 | 3 |
| P2 | 1 | 4 | 1 |
| P3 | 2 | 2 | 4 |
| P4 | 3 | 1 | 2 |
这组数据的设计意图:P1 先到但执行最长(FCFS 偏爱它,SJF 讨厌它),P4 最晚到但最短(SJF 偏爱它)。不同算法对这组数据的处理差异非常典型。
修改数据
- 点击每行的数字可以直接编辑
- 点击底部「+ 添加进程」可以增加行
- 点击每行右侧的删除按钮移除进程
- 时间片:RR 算法专用参数,默认 2,范围 1-20
真题验算
做完一道调度计算题后,把题目的进程数据输入模拟器,选对应算法跑一遍——甘特图和指标和你的手算结果对不上的地方,就是你出错的地方。
第二步:选择算法并运行
勾选你要对比的算法(可以多选),然后点击蓝色「运行对比」按钮:
| 算法 | 全称 | 抢占 | 需要预知执行时间 |
|---|---|---|---|
| FCFS | 先来先服务 | 非抢占 | 不需要 |
| SJF | 短作业优先 | 非抢占 | 需要 |
| RR | 时间片轮转 | 抢占 | 不需要 |
| 优先级 | 优先级调度 | 可配置 | 不需要 |
| HRRN | 高响应比优先 | 非抢占 | 需要 |
建议第一次全选
把五种算法全勾上,一次跑完。甘特图上下排列,谁快谁慢、谁公平谁饿人,视觉上直接对比。
第三步:看懂输出
甘特图(核心)
每种算法一张甘特图。横轴是时间,彩色条是进程在 CPU 上运行的时间段。
你应该重点看的三件事:
1. 进程条的长度和位置
FCFS 里 P1 占据 0-8 的整个区间(一口气跑完),P2、P3、P4 全在等。而 RR 里每个进程只占一个时间片(默认 2 个时间单位),然后就被切走——彩色条交替出现。
2. 同一个进程在不同算法里的"命运"
P3 只需要 2 个时间单位:
- FCFS 里它在 P1、P2 后面排队,到时间 12 才开始
- SJF 里它很早就被选中(因为最短)
- 这就是"护航效应"的直观体现——FCFS 里短进程被长进程挡住
3. 甘特图的总长度
所有算法的总完成时间其实一样(因为总工作量不变),但每个进程的完成时间不同,直接影响周转时间。
408 高频考点:甘特图怎么画
考试要求你手画甘特图。画法就是模拟器展示的样子:
- 横轴标时间刻度
- 每个时间段画对应进程的色块
- 色块上方标进程名,下方标起止时间
模拟器里看到的甘特图格式,就是考试答题的标准格式。
指标表格
甘特图下方是每个进程的详细指标:
| 指标 | 公式 | 说明 |
|---|---|---|
| 周转时间 | 完成时间 - 到达时间 | 进程从到达到完成的总时间 |
| 等待时间 | 周转时间 - 执行时间 | 进程花在排队上的时间 |
表格最后一行是平均值(高亮显示)。
手算验证方法
- 从甘特图读出每个进程的完成时间
- 减去到达时间 = 周转时间
- 减去执行时间 = 等待时间
- 求平均
- 和模拟器的数字对照——不一致说明你哪步算错了
汇总对比表
最底部的汇总表把所有算法的平均周转时间和平均等待时间放在一起:
| 算法 | 平均周转时间 | 平均等待时间 |
|---|---|---|
| FCFS | 最大 | 最大 |
| SJF | 最小 | 最小 |
| ... | ... | ... |
这张表直接回答了"哪个算法平均性能最好"——默认数据下通常是 SJF。
关键实验:调参数看差异
实验 1:时间片大小的影响
- 只勾选 RR
- 时间片设为 1 → 跑一次
- 时间片设为 4 → 再跑一次
- 对比甘特图:时间片=1 时切换极频繁,时间片=4 时 P1 一口气跑 4 个单位
时间片太小 vs 太大
- 太小(如 1):切换频繁,上下文切换开销大(模拟器不展示切换开销,但考试会考 CPU 利用率 = q/(q+δ))
- 太大(如 100):退化成 FCFS,失去轮转的公平性
- 经验值:时间片应该让大多数进程在一个片内完成,408 真题常设 2 或 4
实验 2:短进程被长进程挡住(护航效应)
- 勾选 FCFS 和 SJF
- 默认数据:P1(执行 8)先到,P4(执行 1)最后到
- 看 FCFS 里 P4 的等待时间 vs SJF 里 P4 的等待时间
- FCFS 里 P4 等了很久(被 P1 挡住),SJF 里很快就执行了
这就是为什么 FCFS 的平均等待时间通常最大。
实验 3:饥饿现象
- 添加多个短进程(执行时间 1-2),让它们不断到达
- 勾选 SJF
- 观察长进程 P1 的完成时间——如果短进程不停到达,P1 可能被反复推迟
SJF/SRTF 的饥饿
SJF 总是优先执行短进程。如果短进程源源不断,长进程永远得不到服务——这就是饥饿。HRRN 通过响应比公式(等待时间越长、响应比越高)解决了这个问题。在模拟器里勾选 SJF + HRRN 对比,看长进程的等待时间差异。
调度算法全景对比
| 算法 | 抢占 | 饥饿 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| FCFS | 非抢占 | 不会 | 简单公平 | 护航效应 | 批处理 |
| SJF | 非抢占 | 会 | 平均等待最优 | 无法预知服务时间 | 短作业为主 |
| SRTF | 抢占 | 会 | 平均周转最优 | 频繁抢占 | — |
| RR | 抢占 | 不会 | 响应快、公平 | 切换开销 | 分时/交互 |
| 优先级 | 两者皆可 | 会(静态) | 灵活 | 优先级反转 | 通用 |
| HRRN | 非抢占 | 不会 | 兼顾长短作业 | 计算开销 | 批处理 |
关键结论速查
- 平均等待时间最短:SJF(非抢占式中)
- 不会饥饿的算法:FCFS、RR、HRRN
- 可能饥饿的算法:SJF、SRTF、优先级调度(静态)
- 适合交互系统:RR、MLFQ
- 需要预知服务时间:SJF、SRTF、HRRN
- 不需要预知服务时间:FCFS、RR、优先级调度
推荐使用流程
第一轮:建立直觉(3 分钟)
- 用默认数据,全选 5 种算法,点「运行对比」
- 从上到下看 5 张甘特图——FCFS 最"整齐"但 P1 霸占 CPU,RR 最"碎"但公平
- 看汇总表的平均周转时间,记住谁最大谁最小
第二轮:玩参数(5 分钟)
- 改时间片 1 → 2 → 4,看 RR 甘特图怎么变
- 把 P1 执行时间改成 20,再跑 FCFS + SJF——护航效应更明显
- 加几个短进程,看 SJF 下长进程的等待时间
第三轮:验算真题(按需)
- 把真题的进程数据输入模拟器
- 选对应算法跑出结果
- 和你的手算对照——甘特图不一样就是画错了,指标不一样就是算错了
- 定位具体错在哪一步(通常是抢占时机或到达顺序搞混了)
考研高频考点速览
| 考点 | 考频 | 关键记忆 |
|---|---|---|
| 给定进程画甘特图 | 🔥🔥🔥 | 逐时间单位模拟,注意到达时间和抢占 |
| 周转时间/等待时间计算 | 🔥🔥🔥 | 周转=完成-到达,等待=周转-执行 |
| 各算法是否饥饿 | 🔥🔥🔥 | SJF/SRTF/静态优先级会饥饿,FCFS/RR/HRRN 不会 |
| 抢占 vs 非抢占 | 🔥🔥🔥 | 抢占式在新进程到达时检查,非抢占式只在进程完成时调度 |
| 时间片大小的影响 | 🔥🔥 | 太小→切换开销大,太大→退化为 FCFS |
| HRRN 响应比公式 | 🔥🔥 | (等待时间+执行时间)/执行时间,等得越久优先级越高 |
前面的调度讨论都假设单个 CPU。当系统有多个处理器时,调度会出现新的问题。下一篇看多处理机调度。