Appearance
题目
(本题满分 7 分)
系统采用优先级(优先级值越大优先级越高)+ 时间片轮转调度算法。规则:
- 仅当发生时钟中断时才触发抢占 CPU 的操作
- 时钟中断间隔 = 10 ms
- 进程首次进入就绪队列时,其时间片 = 50 ms
- 若进程因时间片用完而返回就绪队列,其优先级值 − 1
- 若进程被更高优先级抢占而返回就绪队列,其优先级值保持不变
- 多个进程优先级相同时,先进入就绪队列的进程优先
四个进程的到达时刻、初始优先级、CPU 总运行时间如下:
| 进程 | 到达就绪队列时间 (ms) | 优先级 | CPU 运行时间 (ms) |
|---|---|---|---|
| P1 | 10 | 3 | 95 |
| P2 | 10 | 4 | 20 |
| P3 | 12 | 2 | 40 |
| P4 | 14 | 5 | 60 |
(1) 从 10 ms 开始进程调度,直至所有进程调度结束,中断次数 与 CPU 调度次数 各为多少?P1、P2、P3、P4 的首次调度发生在哪个时刻?(5 分)
(2) 若时间片由 50 ms 改为 100 ms,CPU 调度次数将增大、不变还是减少?若时钟中断间隔由 10 ms 改为 1 ms,系统开销将增大、不变还是减少?(2 分)
解析
(1)逐时刻推演
关键约束(请反复看 3 遍):抢占只在时钟中断(每 10 ms)时发生。所以"P3 在 t=12 到达"、"P4 在 t=14 到达"这种非中断时刻只让进程进就绪队列,不会立刻抢 CPU。
完整时间线
| 时刻 | 事件 | 调度动作 | 此后 CPU 运行 | 剩余 CPU 时间 |
|---|---|---|---|---|
| 10 | P1、P2 到达;CPU 空闲 | 调度 P2(P2 prio=4 > P1 prio=3) | P2 | P2: 20→ |
| 12 | P3 到达 | 非时钟中断,不调度 | P2 仍跑 | |
| 14 | P4 到达 | 非时钟中断,不调度 | P2 仍跑 | |
| 20 | 时钟中断 | P4 抢占 P2(P4 prio=5 最高);P2 优先级不变为 4 | P4 | P2: 10 / P4: 60→ |
| 70 | 时钟中断 | P4 时间片用完(连跑 50 ms),prio 5→4。就绪队列里 P2、P4 同 prio=4,P2 先入队 → 调度 P2 | P2 | P4: 10 |
| 80 | 时钟中断 | P2 跑完 10 ms,总共 10+10=20 ms = 完成。就绪队列剩 P1(3)、P3(2)、P4(4) → 调度 P4 | P4 | |
| 90 | 时钟中断 | P4 跑完 10 ms,总共 50+10=60 ms = 完成。就绪队列剩 P1(3)、P3(2) → 调度 P1 | P1 | P1: 50 |
| 140 | 时钟中断 | P1 时间片用完(连跑 50 ms),prio 3→2。就绪队列里 P1、P3 同 prio=2,P3 先入队(t=12 入队,P1 才刚降级)→ 调度 P3 | P3 | P1: 45 |
| 180 | 时钟中断 | P3 跑完 40 ms = 完成。就绪队列剩 P1(2) → 调度 P1 | P1 | P1: 45→ |
| 225 | P1 跑完剩 45 ms = 完成(225 < 235,不会再触发时间片) | 全部结束 | — | — |
CPU 占用时序图(t=0 到 t=225):
答案统计
- 时钟中断次数:从 t=10 起到 t=225,每 10 ms 一次,依次是 10、20、30、…、220 共 22 次
- CPU 调度次数:发生在 t = 10、20、70、80、90、140、180 共 7 次
- 首次调度时刻:
| 进程 | 首次调度时刻 (ms) | 备注 |
|---|---|---|
| P1 | 90 | P4 完成后才轮到,因为优先级低于 P2 / P4 |
| P2 | 10 | 起始就被调度,最高优先级在线者 |
| P3 | 140 | 排到最后,优先级 2 最低 |
| P4 | 20 | 到达后第一个时钟中断就抢到 CPU |
编者注(易错点 / 答题套路):
- "非中断时刻不抢占" 是本题最关键的设定。如果忘了它,会以为 P3 t=12 到达就能立即抢,导致整个时间线偏移。
- "被抢占时优先级不变" vs "时间片用完时优先级 −1" 必须分清——P2 在 t=20 被 P4 抢走,prio 仍是 4;P4 在 t=70 时间片用完,才降到 4。同样 P1 在 t=140 用完时间片才从 3 降到 2。
- 同优先级 FCFS 要看"哪个先入就绪队列"。t=70 时 P2 是 t=20 入队、P4 是刚刚入队,P2 优先;t=140 时 P3 是 t=12 入队、P1 是刚被踢出 CPU 入队,P3 优先。这两次"先后顺序"判定是本题易错的重灾区。
- 首次调度 ≠ 首次进入就绪队列。P3 在 t=12 就进队了,但首次拿到 CPU 是 t=140,相差 128 ms。
(2)参数变化对调度次数 / 系统开销的影响
① 时间片 50 ms → 100 ms:CPU 调度次数 减少
时间片变长 → 进程"因时间片用完而让出 CPU"的次数减少,每个进程一次能跑得更久 → 整个推演里被时间片切走的事件变少。
举例:本题里 P4 时间片用完 (t=70)、P1 时间片用完 (t=140) 这两次事件,若时间片是 100 ms,则 P4 跑 50 ms 就刚好完成(不会触发时间片用完);P1 也类似。
② 时钟中断间隔 10 ms → 1 ms:系统开销 增大
每次时钟中断都要:保存现场 → 进入中断处理 → 检查是否需要调度 → 恢复现场(或切换进程)。间隔从 10 ms 缩到 1 ms 意味着 1 秒内中断从 100 次飙到 1000 次,纯中断处理与上下文检查的开销会显著增加,CPU 实际"干活时间"被吞掉一部分。
编者注(直觉解释):
- 时间片短:响应快、上下文切换多 → 适合交互式系统
- 时间片长:吞吐高、响应慢 → 接近批处理
- 中断间隔短:调度精度高、开销大
- 中断间隔长:调度粒度粗、开销小
这是 OS 章节"时间片 vs 中断频率"经典权衡,记住"短=灵活/费、长=稳定/省"四个字就能秒答这类对比题。