Appearance
FCFS 先来先服务调度
考情分析
FCFS 是最简单的调度算法,常作为其他算法的对比基准出现。在 408 真题中多用于计算题的对比场景。属于 🔥🔥 中高频考点。
排队买饭,先来的先打——公平是公平,但如果排在第一个的人点了满汉全席,后面只想买瓶水的人也只能干等。FCFS 就是这个逻辑。
算法规则
先来先服务(First Come First Served):按照进程到达就绪队列的先后顺序分配 CPU。
- 只有非抢占式一种实现
- 先到达的进程先执行,执行完毕后下一个进程才能开始
调度示例
| 进程 | 到达时间 | 服务时间 |
|---|---|---|
| P1 | 0 | 7 |
| P2 | 2 | 4 |
| P3 | 4 | 1 |
| P4 | 5 | 4 |
Gantt 图:
时间: 0 2 4 5 7 11 12 16
├───────────────┤───────┤──┤───────┤
P1 P2 P3 P4| 进程 | 完成时间 | 周转时间 | 带权周转时间 | 等待时间 |
|---|---|---|---|---|
| P1 | 7 | 7-0=7 | 7/7=1.00 | 0 |
| P2 | 11 | 11-2=9 | 9/4=2.25 | 5 |
| P3 | 12 | 12-4=8 | 8/1=8.00 | 7 |
| P4 | 16 | 16-5=11 | 11/4=2.75 | 7 |
| 平均 | 8.75 | 3.50 | 4.75 |
交互可视化
优缺点分析
| 优点 | 缺点 |
|---|---|
| 算法简单,易于实现 | 短作业等待时间可能很长 |
| 公平(不会饥饿) | 护航效应(Convoy Effect) |
护航效应
当一个长作业先到达时,后面的短作业都必须等待它执行完毕。就像一辆大卡车堵住了后面的小轿车——即使小轿车只需要几秒钟通过。
从上面的例子可以看到:P3 只需要 1 个单位的服务时间,但它的带权周转时间高达 8.00。
适用场景
- 适合长作业为主的场景
- 对短作业不友好
- 常用于作业调度(高级调度),较少用于进程调度
考研高频考点
- 🔥🔥🔥 给定进程到达时间和服务时间,计算各指标(必考基础)
- 🔥🔥 护航效应的概念
- 🔥 FCFS 是非抢占式算法,不会导致饥饿
FCFS 对短作业不友好,那能不能让短作业先执行?下一篇看 SJF 短作业优先调度。