Skip to content

磁盘结构与调度

考情分析

磁盘调度算法的手算过程是计算题高频考点,磁盘访问时间的计算也常考。🔥🔥🔥 高频核心。

一块磁盘每秒能传几百兆数据,但磁头"跑"到正确磁道却要好几毫秒——寻道时间才是性能瓶颈,调度算法的核心就是让磁头少跑冤枉路。

磁盘的物理结构

          ┌─ 磁道(同心圆环)
磁盘 ──┤
          ├─ 扇区(磁道上的弧段,最小读写单位)
          └─ 柱面(不同盘面上相同位置的磁道)
概念说明
磁道磁盘表面的同心圆环
扇区磁道上的一段弧,磁盘的最小读写单位(通常 512B)
柱面所有盘面上编号相同的磁道组成一个柱面
磁头每个盘面一个磁头,沿径向移动

磁盘地址

一个扇区的地址:(柱面号, 磁头号, 扇区号)

磁盘访问时间

Taccess=Tseek+Trotation+Ttransfer
时间说明典型值
寻道时间 Tseek磁头移动到目标磁道几~十几 ms
旋转延迟 Trotation等待目标扇区转到磁头下平均为半圈时间
传输时间 Ttransfer数据传输远小于前两者

寻道时间占主导地位,因此磁盘调度的目标是最小化总寻道时间

旋转延迟计算

对于转速为 r(转/秒)的磁盘:

=1r =12r 

例如:7200 RPM = 120 转/秒 → 平均旋转延迟 =1240 4.17ms

磁盘调度算法

假设当前磁头在第 53 号磁道,请求队列为:98, 183, 37, 122, 14, 124, 65, 67

1. FCFS(先来先服务)

按请求到达顺序服务。

移动顺序:53→98→183→37→122→14→124→65→67

总移动磁道数 = |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

2. SSTF(最短寻道时间优先)

每次选择离当前磁头最近的请求。

移动顺序:53→65→67→37→14→98→122→124→183

总移动磁道数 = 12+2+30+23+84+24+2+59 = 236

缺点:可能导致饥饿(远处的请求长期得不到服务)。

3. SCAN(扫描/电梯算法)

磁头沿一个方向移动,服务途中的请求,到达最远端后反向。磁盘调度就像电梯调度——SCAN 算法的磁头像电梯一样来回扫,途经的楼层(磁道)都停一下。

假设初始向磁道号增大方向移动:

假设最大磁道号为 199:

53→65→67→98→122→124→183→199(最远端)→37→14

总移动磁道数 = (199-53) + (199-14) = 146+185 = 331

SCAN 的特点

像电梯一样来回扫描。不会饥饿,但对刚扫过方向的请求不太公平(要等一个来回)。

易错

SCAN 和 LOOK 的区别是计算题陷阱:

  • SCAN:磁头必须移到最远端(如 0 号或最大磁道号)才能折返
  • LOOK:磁头移到最远的请求处即可折返

题目说"SCAN"时磁头要到边界,说"LOOK"时只到最远请求。两者总寻道距离不同,审题时注意区分。

4. C-SCAN(循环扫描)

磁头只在一个方向上服务请求,到达最远端后直接回到起点重新开始(返回时不服务)。

53→65→67→98→122→124→183→(直接回 0)→14→37

比 SCAN 更公平:每个请求的最大等待时间更均匀。

5. LOOK 与 C-LOOK

LOOK 是 SCAN 的改进:磁头不必移到最远端,移到最远的请求处即可返回。

C-LOOK 是 C-SCAN 的改进:同理,只需移到最远请求处。

实际系统中通常使用 LOOK / C-LOOK。

算法对比

算法总寻道距离饥饿公平性
FCFS公平
SSTF可能不公平
SCAN较小较公平
C-SCAN较小最公平

减少延迟时间的方法

交叉编号(扇区交替编号)

磁头读完一个扇区后,系统需要时间处理数据。如果逻辑相邻的扇区物理上也相邻,处理期间下一个目标扇区会转过磁头,只能等将近一整圈。

解决方案:让逻辑相邻的扇区在物理上间隔排列

连续编号:  0  1  2  3  4  5  6  7
交替编号:  0  4  1  5  2  6  3  7

这样处理完扇区 0 后,扇区 1 刚好转到磁头下方,无需额外等待。

错位命名(盘面间扇区错位)

磁盘所有盘面同步旋转。读完盘面 0 的最后一个扇区后切换到盘面 1,同样需要处理时间。如果两个盘面扇区编号对齐,目标扇区会被错过。

解决方案:不同盘面的扇区编号错位排列,使跨盘面连续读取时目标扇区刚好到达磁头。

本质

交叉编号解决同一盘面内连续读取的延迟,错位命名解决跨盘面连续读取的延迟。两者都是通过物理布局优化来减少旋转等待时间。

提高磁盘 I/O 速度的方法

方法说明
磁盘高速缓存在内存中缓存磁盘数据,避免重复读盘
磁盘调度算法SSTF/SCAN/C-SCAN 等,减少寻道时间
提前读(预读)读当前块时顺便预读后续块到内存缓冲区
延迟写修改缓冲区数据后不立即写盘,设置标志,被替换时才写入
优化物理块分布文件的块尽量放在同一磁道或相邻磁道 + 交叉编号/错位命名
虚拟盘(RAM 盘)用内存空间模拟磁盘,存放临时文件(内容由用户控制,区别于 OS 管理的磁盘高速缓存)
RAID 磁盘阵列多个磁盘并行工作,支持交叉存取

磁盘管理

磁盘初始化

步骤说明
低级格式化将磁盘划分为扇区(物理格式化)
分区将磁盘划分为多个逻辑分区(C: D:)
高级格式化在分区上建立文件系统

引导块

磁盘的第 0 扇区(MBR)存放引导程序和分区表,用于系统启动。

坏块管理

方法说明
简单方法在 FAT 表中标记坏块
扇区备用用备用扇区替换坏扇区(控制器自动映射)

考研高频考点

  • 🔥🔥🔥 给定请求队列和初始位置,手算各种调度算法的总寻道距离
  • 🔥🔥🔥 磁盘访问时间 = 寻道时间 + 旋转延迟 + 传输时间
  • 🔥🔥🔥 SSTF 可能饥饿,SCAN/C-SCAN 不会饥饿
  • 🔥🔥 SCAN vs C-SCAN 的区别(单向 vs 双向服务)
  • 🔥🔥 LOOK/C-LOOK 是 SCAN/C-SCAN 的实际改进
  • 🔥🔥 交叉编号减少同一盘面的旋转延迟,错位命名减少跨盘面的旋转延迟
  • 🔥🔥 提高磁盘 I/O 速度的方法(磁盘缓存/提前读/延迟写/虚拟盘/RAID)
  • 🔥 磁盘地址格式:(柱面号, 磁头号, 扇区号)

机械磁盘靠磁头移动寻道,天然有延迟瓶颈。下一篇来看没有机械部件的固态硬盘(SSD)是如何突破这一限制的。

真题练习

相关真题(6题)

2024Q32选择题2分

CSCAN磁盘调度:循环扫描算法的磁头移动距离计算

2018Q30选择题2分

FCFS不会磁臂黏着:按请求顺序服务,不依赖磁头当前位置

2015Q32选择题2分

SCAN磁盘调度:从58号向内侧扫描到199再折返到15的磁道数

2012Q32选择题2分

磁盘I/O优化:设置多个分区不能改善I/O性能

2010Q30选择题2分

SCAN电梯调度:先向增加方向扫描到尽头再折返

2010Q45综合题8分

综合题:CSCAN磁盘调度+位图空间管理+SSD调度策略对比