Skip to content

调度算法对比模拟器使用指南

考情分析

CPU 调度在 408 真题中累计考查约 56 分(2009-2026),属于 🔥🔥🔥 高频核心。常见题型:给一组进程,用某种算法画甘特图、算周转时间和等待时间。很多同学公式会背,一到手算就出错——少算了一段等待、搞混了抢占时机。

这个模拟器让你用同一组进程同时跑多种算法,甘特图和指标并排展示,差异一目了然:

考点你会在模拟器哪里看到考频
各算法甘特图画法甘特图面板🔥🔥🔥
周转时间 / 等待时间计算指标表格🔥🔥🔥
抢占 vs 非抢占的区别SJF vs RR 甘特图🔥🔥🔥
各算法是否导致饥饿修改优先级后观察🔥🔥
时间片大小对性能的影响调整时间片后对比🔥🔥

跑完一轮对比大约 5 分钟。之后再做手算题,你会知道自己该画什么、算到哪里。

加载可视化中...

第一步:输入进程数据

默认数据

模拟器预置了一组经典进程:

PID到达时间执行时间优先级
P1083
P2141
P3224
P4312

这组数据的设计意图: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 高频考点:甘特图怎么画

考试要求你手画甘特图。画法就是模拟器展示的样子:

  • 横轴标时间刻度
  • 每个时间段画对应进程的色块
  • 色块上方标进程名,下方标起止时间

模拟器里看到的甘特图格式,就是考试答题的标准格式。

指标表格

甘特图下方是每个进程的详细指标:

指标公式说明
周转时间完成时间 - 到达时间进程从到达到完成的总时间
等待时间周转时间 - 执行时间进程花在排队上的时间

表格最后一行是平均值(高亮显示)。

手算验证方法

  1. 从甘特图读出每个进程的完成时间
  2. 减去到达时间 = 周转时间
  3. 减去执行时间 = 等待时间
  4. 求平均
  5. 和模拟器的数字对照——不一致说明你哪步算错了

汇总对比表

最底部的汇总表把所有算法的平均周转时间和平均等待时间放在一起:

算法平均周转时间平均等待时间
FCFS最大最大
SJF最小最小
.........

这张表直接回答了"哪个算法平均性能最好"——默认数据下通常是 SJF。

关键实验:调参数看差异

实验 1:时间片大小的影响

  1. 只勾选 RR
  2. 时间片设为 1 → 跑一次
  3. 时间片设为 4 → 再跑一次
  4. 对比甘特图:时间片=1 时切换极频繁,时间片=4 时 P1 一口气跑 4 个单位

时间片太小 vs 太大

  • 太小(如 1):切换频繁,上下文切换开销大(模拟器不展示切换开销,但考试会考 CPU 利用率 = q/(q+δ))
  • 太大(如 100):退化成 FCFS,失去轮转的公平性
  • 经验值:时间片应该让大多数进程在一个片内完成,408 真题常设 2 或 4

实验 2:短进程被长进程挡住(护航效应)

  1. 勾选 FCFS 和 SJF
  2. 默认数据:P1(执行 8)先到,P4(执行 1)最后到
  3. 看 FCFS 里 P4 的等待时间 vs SJF 里 P4 的等待时间
  4. FCFS 里 P4 等了很久(被 P1 挡住),SJF 里很快就执行了

这就是为什么 FCFS 的平均等待时间通常最大。

实验 3:饥饿现象

  1. 添加多个短进程(执行时间 1-2),让它们不断到达
  2. 勾选 SJF
  3. 观察长进程 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 分钟)

  1. 用默认数据,全选 5 种算法,点「运行对比」
  2. 从上到下看 5 张甘特图——FCFS 最"整齐"但 P1 霸占 CPU,RR 最"碎"但公平
  3. 看汇总表的平均周转时间,记住谁最大谁最小

第二轮:玩参数(5 分钟)

  1. 改时间片 1 → 2 → 4,看 RR 甘特图怎么变
  2. 把 P1 执行时间改成 20,再跑 FCFS + SJF——护航效应更明显
  3. 加几个短进程,看 SJF 下长进程的等待时间

第三轮:验算真题(按需)

  1. 把真题的进程数据输入模拟器
  2. 选对应算法跑出结果
  3. 和你的手算对照——甘特图不一样就是画错了,指标不一样就是算错了
  4. 定位具体错在哪一步(通常是抢占时机或到达顺序搞混了)

考研高频考点速览

考点考频关键记忆
给定进程画甘特图🔥🔥🔥逐时间单位模拟,注意到达时间和抢占
周转时间/等待时间计算🔥🔥🔥周转=完成-到达,等待=周转-执行
各算法是否饥饿🔥🔥🔥SJF/SRTF/静态优先级会饥饿,FCFS/RR/HRRN 不会
抢占 vs 非抢占🔥🔥🔥抢占式在新进程到达时检查,非抢占式只在进程完成时调度
时间片大小的影响🔥🔥太小→切换开销大,太大→退化为 FCFS
HRRN 响应比公式🔥🔥(等待时间+执行时间)/执行时间,等得越久优先级越高

前面的调度讨论都假设单个 CPU。当系统有多个处理器时,调度会出现新的问题。下一篇看多处理机调度。