1.机械磁盘
1.1 磁盘物理结构
- 磁盘由 一个或多个盘片(Platter) 组成,每个盘片有 上下两个盘面(Surface)。
- 每个盘面被划分成许多 同心圆轨道 ,称为 磁道(Track)。
- 多个盘面上 相同半径的磁道 组成一个 柱面(Cylinder)。
- 每个磁道又被划分成多个 扇区(Sector),是磁盘读写的最小物理单位(通常为 512B 或 4KB)。
- 柱面(Cylinder)所有盘片上相同编号的磁道构成一个柱面。


磁盘有正反两个盘面,一个磁道,每个每个盘面有多个同心圆,每个同心圆是同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。
1.2. 磁头与读写
- 每个盘面对应一个 磁头(Head) ,所有磁头固定在同一个 磁头臂(Actuator Arm) 上同步移动。
- 磁头臂的移动称为 寻道(Seeking),使磁头定位到目标磁道。
- 磁盘在电机的带动下 高速旋转(例如 7200 RPM),使扇区经过磁头下方。

1.3. 磁盘访问时间
磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间和等待时间。公式为:存取时间=寻道时间+等待时间
注意:寻道时间是指磁头移动到磁道所需的时间;
等待时间为等待读写的扇区转到磁头下方所用的时间。
公式:
\\text{磁盘访问时间} = \\text{寻道时间} + \\text{旋转延迟} + \\text{传输时间}
有时也把 旋转延迟 + 传输时间 合称为 等待时间
更常见的分解如下:
① 寻道时间(Seek Time)
- 磁头从当前磁道移动到目标磁道的时间。
- 取决于磁头臂的移动速度与移动距离(跨越的磁道数)。
- 平均寻道时间 为统计值(约几毫秒,机械硬盘通常在 3~15 ms)。
- 扇区按顺序旋转
② 旋转延迟(Rotational Latency)
- 磁头到达目标磁道后,等待目标扇区旋转到磁头正下方的时间。
- 平均旋转延迟 = 磁盘旋转半圈所需的时间。
例如:\\text{平均旋转延迟} = \\frac{1}{2} \\times \\frac{60}{\\text{RPM}} \\ \\text{秒}
7200 RPM 时,平均旋转延迟 ≈ ( \frac{1}{2} \times \frac{60}{7200} = 4.17 \ \text{ms} )。
RPM = Revolutions Per Minute(转/分钟)
7200 RPM 表示 每分钟 7200 转
所以转速是 7200 转 / 60 秒
T_{\\text{转一圈}} = \\frac{60 \\ \\text{秒}}{ \\text{RPM} }
60 秒 是因为 RPM 是 每分钟的转数,我们要得到 每转多少秒,就要用 60 秒 除以 每分钟转数。
类比
想象你在操场上等一位跑步的朋友,他每 60 秒跑完一圈。你随机时间到达操场边:
- 有时他刚好经过你(等待 0 秒)。
- 有时他刚离开你(等待近 60 秒)。
- 平均 你需要等他 30 秒(半圈时间)。
③ 传输时间(Transfer Time)
- 从目标扇区开始,数据通过磁头读取并传送到磁盘控制器缓存的时间。
- 取决于扇区大小、磁盘转速与磁道数据密度。
\\text{传输时间} = \\frac{\\text{要传输的数据量}}{\\text{磁盘数据传输率}}
示例计算
假设:
- 平均寻道时间 = 5 ms
- 磁盘转速 = 7200 RPM → 平均旋转延迟 = 4.17 ms
- 读取一个扇区(512B),磁盘内部传输速度 150 MB/s → 传输时间 ≈ 3.4 μs(远小于前两者)
总访问时间 ≈ 5 + 4.17 + 0.0034 ≈ 9.17 ms
可见主要开销是 寻道 和 旋转延迟,因此磁盘调度算法(如 SSTF、SCAN)和扇区布局优化很重要。
这是一个很好的问题!平均旋转延迟等于磁盘旋转半圈所需的时间,这其实是一个统计学上的结论。我们来一步步解释:
1.4.磁盘调度算法
之前已经说过,磁盘数据的读取时间分为寻道时间+旋转时间,也即先找到对应
的磁道,而后再旋转到对应的扇区才能读取数据,其中寻道时间耗时最长,需
要重点调度,有如下调度算法:
- 先来先服务FCFS:根据进程请求访问磁盘的先后顺序进行调度。
- 最短寻道时间优先SSTF: 请求访问的磁道与当前磁道最近的进程优先调度,使得
- 每次的寻道时间最短。会产生"饥饿"现象,即远处进程可能永远无法访问。
- 扫描算法SCAN:又称"电梯算法",磁头在磁盘上双向移动,其会选择离磁头
当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都
是从里向外或者从外向里一直移动完才掉头,与电梯类似。 - 单向扫描调度算法CSCAN: 与SCAN不同的是,其只做单向移动,即只能从里向
外或者从外向里。
你总结得非常准确!磁盘调度算法的核心目标是最小化平均寻道时间,从而提升 I/O 性能。下面我将对你提到的几种经典磁盘调度算法进行系统梳理,并补充一些关键细节、优缺点对比以及适用场景,帮助你更深入理解。
磁盘调度的目标
- 减少平均寻道时间(Seek Time):这是磁盘 I/O 延迟的主要来源。
- 提高吞吐量:单位时间内完成更多 I/O 请求。
- 避免"饥饿"(Starvation):确保所有请求最终都能被服务。
- 公平性与实时性:在某些系统中需兼顾响应及时性。
常见磁盘调度算法详解
1.4.1. 先来先服务(FCFS, First-Come First-Served)
- 原理:按请求到达的顺序依次处理。
- 示例:当前磁头在 50 号磁道,请求序列为 [98, 183, 37, 122, 14] → 按此顺序移动。
- 优点 :
- 实现简单,公平(无饥饿)。
- 缺点 :
- 寻道路径可能来回跳跃,效率低。
- 平均寻道时间长。
- 适用场景:请求较少或对性能要求不高的系统。
1.4.2. 最短寻道时间优先(SSTF, Shortest Seek Time First)
- 原理 :每次选择距离当前磁头位置最近的请求。
- 示例:当前在 50,请求为 [45, 60, 10, 120] → 先服务 45(差5),再60(差15)......
- 优点 :
- 显著降低平均寻道时间,性能优于 FCFS。
- 缺点 :
- 可能导致饥饿:远处的请求若不断有新近请求插入,可能长期得不到服务。
- 非公平调度。
- 变种:可结合超时机制缓解饥饿。
⚠️ SSTF 是贪心算法,局部最优 ≠ 全局最优。
1.4.3. 扫描算法(SCAN,又称"电梯算法")
- 原理 :
- 磁头沿一个方向(如向外)移动,服务路径上所有请求;
- 到达最外(或最内)磁道后,反向扫描。
- 特点 :
- 移动方向固定,直到边界才掉头。
- 请求按方向分组处理。
- 优点 :
- 避免 SSTF 的饥饿问题(所有请求最终都会被扫到);
- 寻道效率高,适合负载较重的系统。
- 缺点 :
- 刚刚错过的请求需等待磁头走到尽头再返回,响应延迟可能较大。
- 示例 :
- 当前磁头在 50,向外移动,请求 [40, 60, 10, 120]
- 先服务 60 → 120(到边界),然后掉头服务 40 → 10。
1.4.4. 循环扫描算法(C-SCAN, Circular SCAN)
- 原理 :
- 磁头单向移动(如只从内向外);
- 到达最外磁道后,立即跳回最内磁道(不服务返回路径上的请求),继续向外扫描。
- 效果:形成一个"环形"服务队列。
- 优点 :
- 所有请求的等待时间更均匀;
- 更适合随机分布的请求。
- 缺点 :
- 磁头跳回起点时存在空转(浪费时间),但现代硬盘可通过预测优化。
- 与 SCAN 对比 :
- C-SCAN 牺牲少量效率换取更好的公平性和可预测性。
其他进阶调度算法(扩展了解)
1.4.5. LOOK 算法(SCAN 的优化版)
- 不必移动到物理边界才掉头,而是在最远请求处就转向。
- 减少无效移动,提升效率。
- 同理有 C-LOOK(C-SCAN 的优化版)。
1.4.6. FSCAN(分队列 SCAN)
- 将请求分为两个队列:
- 一个用于当前扫描周期;
- 新请求进入另一个队列,下一轮处理。
- 防止新请求"插队"导致原队列延迟过大。
算法对比总结
| 算法 | 平均寻道时间 | 是否公平 | 是否饥饿 | 实现复杂度 | 适用场景 |
|---|---|---|---|---|---|
| FCFS | 高 | ✅ | ❌ | 低 | 简单系统、低负载 |
| SSTF | 低 | ❌ | ✅ | 中 | 轻负载、性能优先 |
| SCAN | 中~低 | ✅ | ❌ | 中 | 通用服务器、多任务系统 |
| C-SCAN | 中 | ✅✅ | ❌ | 中 | 随机访问、强调公平性 |
| LOOK | 低于 SCAN | ✅ | ❌ | 中高 | 现代操作系统常用 |
✅ 表示"是"或"好",❌ 表示"否"或"差"。
实际应用
- Linux 内核 早期使用 CFQ(Completely Fair Queuing) ,后来默认采用 Deadline 或 NOOP/MQ-DEADLINE(针对 SSD 优化)。
- Windows 使用基于 SCAN/LOOK 的变种。
- SSD 不需要磁盘调度(无机械部件),因此现代系统会自动禁用复杂调度算法。
2.固态硬盘
固态硬盘(SSD)
SSD无机械运动部件,依靠闪存芯片存储数据,结构更简洁,核心由核心电子组件构成,无逻辑存储区域的划分,具体如下:
-
核心电子组件
组件 作用 闪存芯片 存储数据的核心载体,通常采用NAND闪存,由大量存储单元组成,通过浮栅晶体管的电荷状态存储0/1信号,常见多芯片并联提升容量和读写速度。 主控芯片 相当于SSD的"大脑",负责管理闪存芯片,包括数据的读写分配、磨损均衡(避免部分芯片过度使用)、错误校验等,直接影响SSD的读写速度和稳定性。 缓存芯片 可选组件,多为DRAM芯片,用于临时缓存频繁读写的数据,减少对闪存芯片的直接访问,提升读写响应速度,部分入门级SSD会省略缓存以降低成本。 接口电路 负责与主板接口(如SATA、M.2)适配,实现SSD与CPU、内存的数据传输。 -
SSD结构示意图
┌─────────────────────────────────────┐ │ 接口电路(SATA/M.2) │ ← 连接主板 ├─────────────────────────────────────┤ │ 主控芯片 │ ← 核心控制单元 ├─────────────┬─────────────┬─────────┤ │ 缓存芯片 │ 闪存芯片1 │ 闪存芯片2│ ├─────────────┼─────────────┼─────────┤ │ │ 闪存芯片3 │ 闪存芯片4│ │ └─────────────┴─────────┘ └─────────────────────────────────────┘
补充说明
HDD的容量可通过公式计算:容量=磁头数×柱面数×每磁道扇区数×扇区大小;而SSD容量则由闪存芯片的单颗容量和芯片数量决定,其结构无机械磨损,读写速度通常远快于HDD,但闪存芯片有写入寿命限制。
