磁盘调度与 RAID
基于通用操作系统概念 · 核于 2026-08
速查
- 磁盘结构:**盘片(platter)**双面涂磁性材料 → **磁道(track)**是盘片上一圈 → **扇区(sector)**是磁道上一段(最小读写单位,512B/4KB) → 柱面(cylinder)是所有盘片上同一半径磁道的集合。**磁头(head)**每个盘面一个,所有磁头共装在磁臂上一起移动。
- 磁盘地址三元组:(柱面号, 磁头号/盘面号, 扇区号) —— 先寻道到柱面、选磁头、等扇区转过来。
- 访问三时间:寻道时间(磁头移到目标柱面,最慢、主导,ms 级)+ 旋转延迟(盘片转到目标扇区,ms 级)+ 传输时间(读写扇区数据,μs 级)。优化寻道 = 优化总性能。
- 调度目标:磁臂移动是机械动作,寻道距离越长越慢——调度算法通过重排请求顺序,减少磁臂总移动距离。
- FCFS(先来先服务):按请求到达顺序服务——公平但磁臂来回乱跑,寻道距离长。
- SSTF(最短寻道优先):每次选离当前磁头最近的请求——平均性能好,但可能饥饿(远处请求长期得不到服务)。
- SCAN(电梯算法):磁头单向移动并服务沿途请求,到边界再反向——像电梯,无饥饿,分布均匀。
- C-SCAN(循环扫描):只单向服务(如只向上),到顶后快速返回底部(返回途中不服务)——各请求等待时间更均匀。
- LOOK / C-LOOK:SCAN/C-SCAN 的优化——磁头到最远请求即返,不跑到磁盘物理边界(不跑空)。
- RAID(廉价磁盘冗余阵列):多盘组合成逻辑盘,条带化提速(并行 I/O)、镜像/校验容错。
- RAID 0:纯条带,无冗余——最快但一块坏全毁,可靠性最低。
- RAID 1:镜像,两盘内容相同——读快、容错好,但容量减半(利用率 50%)。
- RAID 5:条带 + 分布式校验(每盘轮流存校验)——读快、容 1 块坏、利用率高((N-1)/N),主流。
- RAID 10(1+0):先镜像再条带——性能与可靠兼优,成本高。
- SSD vs 传统磁盘:SSD 无机械部件(无寻道/旋转延迟),随机访问快百倍;但有写入寿命(擦写次数)和写放大,需磨损均衡与 TRIM。
一、磁盘的物理结构
传统机械硬盘(HDD)的物理结构决定了它的访问特性:
- 盘片(Platter):硬盘由若干片(1+)铝合金/玻璃圆盘组成,两面涂磁性材料,数据存在磁性方向里。
- 磁道(Track):盘片上一个同心圆叫一道。每个盘面有几千上万道。
- 扇区(Sector):磁道被切成一段段弧,每段是一个扇区——最小的物理读写单位(通常 512B 或 4KB)。扇区有 ID 头 + 数据 + 纠错码(ECC)。
- 柱面(Cylinder):所有盘片上同一半径的磁道组成一个柱面。因为所有磁头共装在一个磁臂上一起移动,所以访问同一柱面的不同盘面不用换道(只需切换磁头,电子切换比机械移动快得多)。
- 磁头(Head):每个盘面有一个读写磁头,所有磁头一起固定在磁臂上,共同移动。
- 磁盘地址三元组:
(柱面号, 磁头号/盘面号, 扇区号)——先移动磁臂到柱面、选哪个磁头(盘面)、等目标扇区转到磁头下。
二、访问时间:寻道主导
读写一个扇区要三段时间:
| 时间 | 含义 | 量级 | 优化 |
|---|---|---|---|
| 寻道时间(Seek) | 磁臂移动磁头到目标柱面 | ms 级(5-15ms) | 磁盘调度算法 |
| 旋转延迟(Rotational) | 盘片旋转,目标扇区转到磁头下 | ms 级(7200rpm 约 4ms) | 难优化(取决于转速) |
| 传输时间(Transfer) | 读写扇区数据流过磁头 | μs 级 | 提高转速/密度 |
- 关键:寻道时间最长且最可优化(机械移动距离越短越快)。所有磁盘调度算法都在重排请求顺序以减少总寻道距离。
- 现代盘 7200 转/分(RPM),一圈约 8.3ms,平均旋转延迟约 4.2ms;寻道平均 9ms;三者合计约 13ms/次随机访问——这就是磁盘随机 I/O 慢的根源。
三、磁盘调度算法
设当前磁头在柱面 53,请求队列:98, 183, 37, 122, 14, 124, 65, 67(磁盘共 200 柱面 0-199):
1. FCFS(先来先服务)
按到达顺序服务:53 → 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67。
- 总移动:45+85+146+85+108+110+59+2 = 640 柱面。
- 公平(严格按序),但磁臂来回大幅跳动,寻道距离长,性能差。是基准(最差)。
2. SSTF(最短寻道优先 Shortest Seek Time First)
每次选离当前磁头最近的请求:53 → 65 → 67 → 37 → 14 → 98 → 122 → 124 → 183。
- 总移动:12+2+30+23+84+24+2+59 = 236 柱面(远好于 FCFS)。
- 优点:平均寻道短,性能好。
- 缺点:可能饥饿——若远处(如 183)持续有近请求插入,183 可能永远轮不到。SSTF 不是最优,也不是无饥饿。
3. SCAN(电梯算法 / 扫描)
磁头沿一个方向(如向大柱面)移动,沿途服务所有请求,到磁盘边界(199)后反向(向小柱面),继续服务——像电梯上下运行:53 → 65 → 67 → 98 → 122 → 124 → 183 → 199(边界) → 14 → 37。
- 优点:无饥饿(每个请求最迟在磁头扫过两次内被服务);请求分布均匀时性能稳定。
- 缺点:边界附近的请求等待较长(磁头要往返)。
4. C-SCAN(循环扫描 Circular SCAN)
SCAN 的变体:磁头只单向服务(如只向大柱面移动并服务),到边界(199)后快速返回起点(0),返回途中不服务任何请求,再从 0 重新向上扫:53 → 65 → 67 → 98 → 122 → 124 → 183 → 199 → 0 → 14 → 37。
- 优点:所有请求的等待时间更均匀(都是单向被服务,不像 SCAN 边界处要等往返)。
- 缺点:返回空跑有一段无服务的移动。
5. LOOK / C-LOOK(实际常用)
SCAN/C-SCAN 的优化——磁头不必跑到磁盘物理边界,到最远的请求就折返("看"一眼有没有更远的,没有就返):
LOOK:53 → 65 → 67 → 98 → 122 → 124 → 183(最远请求)→ 14 → 37(不跑到 199)。
C-LOOK:53 → 65 → 67 → 98 → 122 → 124 → 183 → 14 → 37(到最远 183 即返,不到 199,直接回最近 14 再向上)。
实际系统多用 LOOK/C-LOOK,省去了跑到边界再折返的空跑,性能更优。
四、RAID:冗余阵列
RAID(Redundant Array of Independent/Inexpensive Disks,独立磁盘冗余阵列):把多个物理盘组合成一个逻辑盘,通过条带化提升性能(并行 I/O)、镜像/校验提供冗余容错。
| 级别 | 机制 | 冗余 | 利用率 | 特点 |
|---|---|---|---|---|
| RAID 0 | 数据条带分布到 N 盘 | 无 | 100% | 最快(并行),但任一盘坏全毁,可靠最差 |
| RAID 1 | 两盘镜像(数据完全相同) | 有 | 50% | 读快(可并行)、容错好;写与单盘相当;容量减半 |
| RAID 5 | 条带 + 分布式校验(每盘轮流存校验块) | 有 | (N-1)/N | 读快、容 1 盘坏;写有惩罚(要算校验);主流 |
| RAID 10(1+0) | 先镜像后条带(多对镜像再条带) | 有 | 50% | 性能与可靠兼优;成本高 |
- RAID 0:纯提速无冗余,用于临时数据/缓存(如视频剪辑草稿),不可用于重要数据。
- RAID 5:性价比之王——至少 3 盘,校验分散在各盘(避免单盘成为瓶颈)。可容忍任意 1 盘损坏(用其余盘+校验重建)。但写惩罚:每次写要重算并写校验(小写问题,read-modify-write)。
- RAID 6:RAID 5 的加强版,双校验,可容任意 2 盘同时坏——用于大阵列(重建期长,单校验有二次损坏风险)。
- 重建(Rebuild):坏盘换新后,用剩余数据+校验恢复——重建期间阵列性能骤降且有二次损坏风险(剩余盘压力大),是大阵列的脆弱时刻。
五、SSD 与传统磁盘的差异
**SSD(固态盘,Solid State Drive)**用 NAND 闪存存数据,无机械部件,与机械磁盘(HDD)差异巨大:
| 维度 | 机械磁盘(HDD) | SSD |
|---|---|---|
| 结构 | 盘片+磁头+磁臂(机械) | NAND 闪存芯片(全电子) |
| 寻道/旋转 | 有(机械移动,ms 级) | 无 |
| 随机访问 | 慢(寻道主导,~10ms) | 快百倍(μs 级,~100μs) |
| 顺序访问 | 快 | 更快 |
| 写入寿命 | 无限 | 有限(NAND 块擦写次数 1k-100k 次) |
| 写放大 | 低 | 高(改一字节要擦除整个块) |
| 特殊机制 | 调度优化寻道 | 磨损均衡(wear leveling)/ TRIM(标记废弃块)/ GC(垃圾回收) |
| 调度算法 | SCAN/C-SCAN 有意义 | 寻道无意义,调度转向减少写放大 |
- SSD 的调度:传统磁盘调度(SCAN)是为减少机械寻道;SSD 无机械部件,寻道时间恒定,调度目标转向减少写放大、均衡磨损、合并随机写为顺序写。
- TRIM:删除文件时,OS 发 TRIM 命令告知 SSD 哪些块已废弃可擦除——避免后续写时的 read-erase-modify-write,提升写性能、降低写放大。
- FTL(Flash Translation Layer):SSD 内部的映射层,把逻辑块地址映射到物理闪存页,并做磨损均衡——对 OS 透明,SSD 表现为普通块设备。
下一步
磁盘调度与 RAID 讲完后,建议回到参考查阅速查表与易错点,或转向操作系统安全(设备权限与访问控制),以及回顾文件系统(文件如何建立在块设备与 I/O 子系统之上)。