Skip to content

2024年 408 操作系统 第 32 题

操作系统2024年选择题2分

题目

某磁盘的磁道数为 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 → 16040
160 → 12040
120 → 11010
110 → 0110
0 → 399(跳回)399
399 → 30099
300 → 21090
合计788

速算法(合并同方向的连续段):

算法对比速记

算法边界后的动作是否计入跳回距离
SCAN折返反向扫描——(无跳跃,只有反向移动)
CSCAN跳回另一端✓ 计入(按 N-1 算)
LOOK / CLOOK折返/跳回到最远的请求点而非物理边界LOOK 不跳,CLOOK 跳但只跳到最远请求

关键陷阱

  1. CSCAN 的跳回距离距离(不是"瞬间归位")
  2. 跳回过程中不处理请求(哪怕中间有请求也跳过)
  3. 边界点 399 同时是请求点 → 跳到 399 即处理了该请求,再继续向减小方向

最终答案是 C

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数