Skip to content

408

操作系统

OS-05-06 磁盘调度算法(FCFS/SSTF/SCAN/C-SCAN/LOOK)


一、定位信息

  • 所属圈层:核心层
  • 前置知识回顾:理解磁盘的物理结构(磁道、扇区、磁头、寻道时间、旋转延迟),知道磁盘访问时间 = 寻道时间 + 旋转延迟 + 数据传输时间。
  • 知识网络位置:本单元是I/O管理中的核心算法,直接影响磁盘I/O性能。磁盘调度算法通过优化磁头移动顺序来减少平均寻道时间。
  • 考点热度等级H级(高频重点)——磁盘调度算法的计算是几乎每年必考的核心考点。

二、知识点讲解

2.1 磁盘访问时间的组成

磁盘访问时间由三部分组成:

  • 寻道时间(Seek Time):磁头移动到目标磁道的时间。是最大的开销,通常占总时间的70%以上。
  • 旋转延迟(Rotational Latency):等待目标扇区旋转到磁头下的时间。平均为磁盘旋转半圈的时间。
  • 数据传输时间(Transfer Time):读写数据的时间。

磁盘调度算法的目标是减少总寻道时间,通过优化磁头移动顺序来实现。

2.2 FCFS(先来先服务)

FCFS:按照请求到达的顺序依次服务。

  • 优点:公平,不会产生饥饿
  • 缺点:磁头移动幅度大,寻道时间长
  • 适用于请求较少的场景

2.3 SSTF(最短寻道时间优先)

SSTF(Shortest Seek Time First):选择距离当前磁头位置最近的请求。

  • 优点:平均寻道时间短
  • 缺点:可能产生饥饿——远离磁头的请求可能长期得不到服务
  • 不一定最优,但是好的近似

2.4 SCAN(电梯算法)

SCAN:磁头在一个方向上移动,依次服务途经的请求,到达磁盘末端后反向移动。

  • 类似电梯的工作方式
  • 优点:不会饥饿,寻道时间较短
  • 缺点:对两端磁道的请求不公平(中间磁道的请求等待时间短)

2.5 C-SCAN(循环扫描)

C-SCAN(Circular SCAN):磁头只在一个方向上服务请求,到达末端后快速回到起点(不服务),再从起点开始同方向扫描。

  • 优点:提供了更均匀的等待时间
  • 缺点:返回时不服务,效率略低

2.6 LOOK和C-LOOK

LOOK:SCAN的改进。磁头不需要移动到磁盘末端,只需移动到该方向最远的请求处就反向。

C-LOOK:C-SCAN的改进。磁头只移动到该方向最远的请求处,然后快速回到最近的请求处继续扫描。


三、记忆与理解辅助

1. 类比记忆

  • FCFS = 排队买票(先来先服务,不管你站哪)
  • SSTF = 就近服务(谁离得近先服务谁,可能忽略远处的人)
  • SCAN = 电梯(从一楼到顶楼,再从顶楼到一楼)
  • C-SCAN = 单向电梯(从一楼到顶楼,然后回一楼重新开始)
  • LOOK = 电梯不到头(有人按了最高层就到那层,不到顶楼)
  • C-LOOK = 单向电梯不到头(同上)

2. 口诀:"FCFS公平但慢,SSTF快但会饿;SCAN像电梯来回跑,C-SCAN单向更均匀;LOOK不到头更高效。"

3. 五种磁盘调度算法对比表(★高频考点)

对比项FCFSSSTFSCANC-SCANLOOK/C-LOOK
策略按到达顺序最近的请求来回扫描单向扫描SCAN/C-SCAN不到头
公平性最公平不公平较公平公平较公平
饥饿
寻道时间较短较短较短
实现复杂度最简单简单中等中等中等
适用场景请求少通用通用高负载通用

4. SCAN vs C-SCAN 对比

对比项SCANC-SCAN
移动方式来回扫描单向扫描
返回时服务服务不服务
等待时间均匀性不均匀(两端好中间差)均匀
总寻道时间较短略长(返回时浪费)

四、例题与精解

例题1(基础巩固)

题目:某磁盘有 200200 个磁道(01990 \sim 199),磁头当前位置在磁道 5353,请求队列为:98,183,37,122,14,124,65,6798, 183, 37, 122, 14, 124, 65, 67。分别用FCFS、SSTF和SCAN算法计算磁头移动的总磁道数。

命题意图:考查三种磁盘调度算法的手工模拟。

精解

1. 审题分析:起始位置53,8个请求,需要逐一模拟每种算法。

2. 解题思路:按算法规则确定服务顺序,计算磁道移动距离。

3. 完整步骤

FCFS(按到达顺序:98, 183, 37, 122, 14, 124, 65, 67):

  • 53→98→183→37→122→14→124→65→67
  • 移动距离:5398+98183+18337+37122+12214+14124+12465+6567|53-98|+|98-183|+|183-37|+|37-122|+|122-14|+|14-124|+|124-65|+|65-67|
  • =45+85+146+85+108+110+59+2=640= 45+85+146+85+108+110+59+2 = 640 磁道

SSTF(每次选最近的):

  • 53→37(16)→14(23)→65(51)→67(2)→98(31)→122(24)→124(2)→183(59)
  • 括号内为本次移动距离
  • 移动距离:16+23+51+2+31+24+2+59=20816+23+51+2+31+24+2+59 = 208 磁道

SCAN(向磁道号增大方向扫描,到请求最远处后反向):

  • 53→65→67→98→122→124→183→37→14
  • 移动距离:5365+6567+6798+98122+122124+124183+18337+3714|53-65|+|65-67|+|67-98|+|98-122|+|122-124|+|124-183|+|183-37|+|37-14|
  • =12+2+31+24+2+59+146+23=299= 12+2+31+24+2+59+146+23 = 299 磁道

4. 方法反思

  • SSTF寻道距离最短(208),但可能导致远处的请求饥饿
  • FCFS最公平但寻道距离最长(640)
  • SCAN折中(299),且不会饥饿
  • 考试中需要仔细计算每一步的移动距离,不能跳步

例题2(中等提升)

题目:同例题1的条件(起始位置53,请求队列:98, 183, 37, 122, 14, 124, 65, 67),分别用C-SCAN和LOOK算法计算磁头移动的总磁道数。C-SCAN向磁道号增大方向扫描。

命题意图:考查C-SCAN和LOOK算法的手工模拟。

精解

1. 审题分析:需要区分C-SCAN和LOOK的差异。

2. 解题思路:C-SCAN返回时不服务,LOOK不到磁盘末端。

3. 完整步骤

C-SCAN(向增大方向扫描,到该方向最远请求后跳回最近请求):

  • 53→65→67→98→122→124→183(到最远请求)
  • 然后跳回:183→14(不服务返回过程中的请求,直接到反方向最近的请求)
  • 然后继续:14→37
  • 移动距离:5365+6567+6798+98122+122124+124183+18314+1437|53-65|+|65-67|+|67-98|+|98-122|+|122-124|+|124-183|+|183-14|+|14-37|
  • =12+2+31+24+2+59+169+23=322= 12+2+31+24+2+59+169+23 = 322 磁道

LOOK(SCAN的改进,不到磁盘末端):

  • 53→65→67→98→122→124→183(到该方向最远请求)
  • 反向:183→37→14
  • 移动距离:5365+6567+6798+98122+122124+124183+18337+3714|53-65|+|65-67|+|67-98|+|98-122|+|122-124|+|124-183|+|183-37|+|37-14|
  • =12+2+31+24+2+59+146+23=299= 12+2+31+24+2+59+146+23 = 299 磁道

注意:本题中LOOK和SCAN结果相同,因为请求中最远的就是183,不需要到磁盘末端199。如果请求中有190或更远的磁道,LOOK会更高效。

4. 方法反思:C-SCAN的返回距离较大(183→14=169),这是为了保证均匀性付出的代价。LOOK是SCAN的实用改进版,实际系统中通常使用LOOK而非SCAN。


五、考情分析

  • 考查频次:磁盘调度算法在近5年真题中出现频率极高,约4-5次。
  • 常见题型:选择题(算法判断、总磁道数计算)、计算题(多种算法对比计算)。
  • 分值占比:选择题2分,计算题5-8分。
  • 命题趋势:给出请求序列,要求用多种算法计算总磁道数并比较是经典题型。近年来可能结合磁盘访问时间的其他组成部分(旋转延迟、传输时间)考查。基于大纲与命题规律推测

六、易错点提醒

  1. 错误表现:SCAN算法中,磁头到达磁盘末端后才反向,即使该方向没有更多请求。 错误原因:混淆了SCAN和LOOK。 正确理解/做法:SCAN(电梯算法)确实到达磁盘末端才反向。LOOK是改进版,只到该方向最远的请求处就反向。考试中需要看清题目要求用哪种算法。

  2. 错误表现:C-SCAN返回时仍然服务途经的请求。 错误原因:混淆了C-SCAN和SCAN。 正确理解/做法:C-SCAN返回时不服务任何请求,直接跳回起点。只有在正向扫描时才服务。

  3. 错误表现:SSTF算法中,认为一定不会出现饥饿。 错误原因:对SSTF的缺陷认识不足。 正确理解/做法:SSTF可能导致饥饿——如果不断有靠近磁头的新请求到来,远离磁头的旧请求可能永远得不到服务。

  4. 错误表现:计算总磁道数时,将起始位置到第一个请求的距离遗漏。 错误原因:忘记磁头需要从当前位置移动到第一个请求处。 正确理解/做法:总磁道数 = 起始位置到第一个请求的距离 + 各请求之间的距离之和。


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《操作系统概念》(Operating System Concepts, Silberschatz)第12章
  • 依据汤小丹《计算机操作系统》第4版第5章

考研全科复习资料 - 基于2026考研统考大纲