Appearance
时间片轮转调度
考情分析
时间片轮转是交互式系统最常用的调度算法,408 真题中常考不同时间片大小下的调度过程。属于 🔥🔥🔥 高频核心。
FCFS 和 SJF 都可能让某些进程长时间得不到响应。在交互式系统中,用户敲一个命令等半天是不能接受的——时间片轮转的核心思路就是"雨露均沾",每人轮流用一小段 CPU。
算法规则
时间片轮转(Round Robin, RR):
- 所有就绪进程排成一个循环队列
- 每个进程获得一个时间片(Time Quantum, q)
- 时间片用完但进程未结束 → 进程被移到队尾,CPU 分配给队首进程
- 进程提前完成 → 立即让出 CPU,调度下一个
RR 是抢占式算法(由时钟中断触发抢占)。
调度示例
| 进程 | 到达时间 | 服务时间 |
|---|---|---|
| P1 | 0 | 5 |
| P2 | 1 | 3 |
| P3 | 2 | 1 |
| P4 | 3 | 3 |
时间片 q = 2
时间: 0 2 4 5 7 9 10 11 12
├───┤───┤──┤───┤───┤──┤──┤──┤
P1 P2 P3 P1 P4 P2 P1 P4详细过程:
- t=0:就绪队列[P1],执行 P1(剩余5→3)
- t=2:P2、P3 已到达,就绪队列[P2,P3,P1],执行 P2(剩余3→1)
- t=4:就绪队列[P3,P1,P4,P2],执行 P3(剩余1→0,完成)
- t=5:就绪队列[P1,P4,P2],执行 P1(剩余3→1)
- t=7:就绪队列[P4,P2,P1],执行 P4(剩余3→1)
- t=9:就绪队列[P2,P1,P4],执行 P2(剩余1→0,完成)
- t=10:就绪队列[P1,P4],执行 P1(剩余1→0,完成)
- t=11:就绪队列[P4],执行 P4(剩余1→0,完成)
| 进程 | 完成时间 | 周转时间 | 带权周转时间 |
|---|---|---|---|
| P1 | 11 | 11 | 2.20 |
| P2 | 10 | 9 | 3.00 |
| P3 | 5 | 3 | 3.00 |
| P4 | 12 | 9 | 3.00 |
| 平均 | 8.00 | 2.80 |
新到达进程 vs 时间片用完的进程
当时间片用完时,如果有新到达的进程,通常新到达进程先入队,然后时间片用完的进程排到队尾。不同教材可能有不同规定,做题时注意题目说明。
交互可视化
时间片大小的影响
| 时间片 | 效果 |
|---|---|
| 太大 | 退化为 FCFS(每个进程一次就能执行完,相当于没有轮转) |
| 太小 | 上下文切换过于频繁,系统开销大 |
| 合适 | 一般设置为略大于一次典型交互的响应时间 |
经验法则:时间片应该让大多数进程(约80%)能在一个时间片内完成。
特点总结
| 特性 | 结论 |
|---|---|
| 抢占方式 | 抢占式(时钟中断驱动) |
| 是否饥饿 | 不会饥饿(每个进程都能轮到) |
| 适用场景 | 分时系统/交互式系统 |
| 对长短作业 | 对长短作业都比较公平 |
| 缺点 | 频繁切换有额外开销 |
考研高频考点
- 🔥🔥🔥 给定不同时间片大小,模拟 RR 调度过程并计算指标
- 🔥🔥🔥 时间片太大退化为 FCFS
- 🔥🔥 新到达进程和时间片用完进程的入队顺序
- 🔥 RR 不会导致饥饿
- 🔥 时间片轮转适用于分时/交互系统
RR 对所有进程一视同仁,但有些进程(比如系统进程)确实更紧急。下一篇看优先级调度如何区分轻重缓急。