磁盘调度(FCFS/SSTF/SCAN/CSCAN/LOOK/CLOOK)
磁盘访问时间组成与常见调度算法对比,含原子笔记链接与手算例题。
#resource / operating-system
#type / synthesis
#status / evergreen
[!info] related notes
磁盘调度(FCFS/SSTF/SCAN/CSCAN/LOOK/CLOOK)
速记结论(背就够用)
- 寻道时间通常是磁盘访问的主要开销
- SCAN 像电梯;CSCAN 更公平
- SSTF 平均寻道短,但可能饥饿
- LOOK/CLOOK 是 SCAN/CSCAN 的改进,不走到边界
- FCFS 最简单但效率最低
1) 访问时间组成
- 寻道时间(通常影响最大)
- 旋转延迟
- 传输时间
2) 调度算法速查
| 算法 | 特点 | 优点 | 缺点 |
|---|---|---|---|
| [[fcfs-disk-scheduling | FCFS]] | 按请求到达顺序服务 | 公平,无饥饿 |
| [[sstf-disk-scheduling | SSTF]] | 选择最近请求服务 | 平均寻道短 |
| [[scan-disk-scheduling | SCAN]] | 电梯算法,到边界反向 | 无饥饿,效率较高 |
| [[cscan-disk-scheduling | CSCAN]] | 单向扫描,快速回起点 | 更公平的等待时间 |
| [[look-disk-scheduling | LOOK]] | 到最远请求就反向 | 比 SCAN 高效 |
| [[clook-disk-scheduling | CLOOK]] | 到最远请求后跳回 | 最实用,效率高 |
3) 手算题怎么做
题目一般给:初始磁道、请求序列、磁头初始移动方向(有时给)。
按算法生成服务顺序,然后把相邻两次服务的磁道距离相加:
total = sum(abs(pos[i] - pos[i-1]))
常见坑:
- SCAN/CSCAN 到不到”边界”:SCAN/CSCAN 往往会走到端点;LOOK/CLOOK 只走到最远请求
- CSCAN/CLOOK 到头后”回到起点”的那段移动通常也计入寻道距离(按题目要求)
4) 统一例题(对比所有算法)
题目条件:
- 磁头初始位置:53
- 请求序列:98, 183, 37, 122, 14, 124, 65, 67
- 磁道范围:0-199
- 初始方向:向磁道号增大方向(向右)
FCFS
服务顺序:53 → 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67
总寻道距离:45+85+146+85+108+110+59+2 = 640
SSTF
服务顺序:53 → 65 → 67 → 98 → 122 → 124 → 183 → 37 → 14
总寻道距离:12+2+31+24+2+59+146+23 = 299
SCAN(边界=199)
服务顺序:53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → 37 → 14
总寻道距离:12+2+31+24+2+59+16+162+23 = 331
CSCAN(边界=199)
服务顺序:53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → 0 → 14 → 37
总寻道距离:12+2+31+24+2+59+16+199+14+23 = 382
LOOK
服务顺序:53 → 65 → 67 → 98 → 122 → 124 → 183 → 37 → 14
总寻道距离:12+2+31+24+2+59+146+23 = 299
CLOOK
服务顺序:53 → 65 → 67 → 98 → 122 → 124 → 183 → 14 → 37
总寻道距离:12+2+31+24+2+59+169+23 = 322
5) 算法对比总结
| 算法 | 总寻道距离 | 公平性 | 实用性 |
|---|---|---|---|
| FCFS | 640 | 高 | 低 |
| SSTF | 299 | 低 | 中 |
| SCAN | 331 | 中 | 高 |
| CSCAN | 382 | 高 | 中 |
| LOOK | 299 | 中 | 高 |
| CLOOK | 322 | 高 | 最高 |