Appearance
题目
某磁盘的磁道数为 400(磁道号为 0~399),采用循环扫描算法 (CSCAN) 进行磁盘调度,完成对 200 号磁道的请求后,磁头向磁道号减小的方向移动,若还有 7 个请求,对应的磁道号分别为 300, 120, 110, 0, 160, 210, 399,则完成上述磁盘请求后磁头移动的距离是( )。
错因
A
把 CSCAN 误算成了 SCAN(折返扫描)。SCAN 在 0 处折返,沿增大方向继续扫到 399,回程会顺路处理 110, 120, 160, 210, 300。距离 = 200(200 → 0)+ 399(0 → 399)= 599。少了"跳回距离的计入"——SCAN 不跳,CSCAN 跳。两者的关键区别就在到达边界时是"折返"还是"跳回"。
B
第一段方向就走错——本来应该沿减小方向直接奔最近的小磁道,但用了 SSTF 的"最近优先"思维:200 → 210(最近的,距离 10)→ 再往回……。具体路径:200 → 210(10)→ 160(50)→ 120(40)→ 110(10)→ 0(110)→ 跳到 399(399)= 619。但题目明确"磁头向减小方向移动",方向已被锁定,不能先去 210。这种错法把 CSCAN 与 SSTF 的思维杂糅在一起。
D
把 CSCAN 的"跳回"当成了双向折返。错算成:200 → 0(200)+ 0 → 399(399,跳回)+ 399 → 200(200,"返回原起点收尾")= 799。或把 CSCAN 算作"扫到 0 后跳到 399 再扫回 200"。但 CSCAN 一旦跳回另一端就单向扫描到所有请求处理完即结束,不再返回起点。这是把 CSCAN 误记成 LOOK + SCAN 的某种缝合。
总解析
CSCAN 算法核心:
- 磁头沿一个方向扫描
- 到达边界(如 0 或 N-1)后直接跳回另一端(在跳跃过程中不处理任何请求)
- 跳回的距离计入总移动距离(按 N-1 算)
- 然后继续按原方向(即原来扫描的方向)扫描
本题条件:
- 当前位置:200
- 方向:向减小方向
- 待处理请求:300, 120, 110, 0, 160, 210, 399(共 7 个)
Step 1:把请求按当前方向排序
向减小方向先处理 ≤ 200 的请求(按降序):
- 160, 120, 110, 0
到 0 后跳到 399,继续向减小方向,处理剩余请求(按降序):
- 399, 300, 210(注意:399 也在请求列表里,跳到 399 时正好是一个请求点)
Step 2:逐段累加距离
| 段 | 起点 → 终点 | 移动距离 |
|---|---|---|
| ① | 200 → 160 | 40 |
| ② | 160 → 120 | 40 |
| ③ | 120 → 110 | 10 |
| ④ | 110 → 0 | 110 |
| ⑤ | 0 → 399(跳回) | 399 |
| ⑥ | 399 → 300 | 99 |
| ⑦ | 300 → 210 | 90 |
| 合计 | 788 |
速算法(合并同方向的连续段):
算法对比速记:
| 算法 | 边界后的动作 | 是否计入跳回距离 |
|---|---|---|
| SCAN | 折返反向扫描 | ——(无跳跃,只有反向移动) |
| CSCAN | 跳回另一端 | ✓ 计入(按 N-1 算) |
| LOOK / CLOOK | 折返/跳回到最远的请求点而非物理边界 | LOOK 不跳,CLOOK 跳但只跳到最远请求 |
关键陷阱:
- CSCAN 的跳回距离算距离(不是"瞬间归位")
- 跳回过程中不处理请求(哪怕中间有请求也跳过)
- 边界点 399 同时是请求点 → 跳到 399 即处理了该请求,再继续向减小方向
最终答案是 C。