接口
现代磁盘驱动器的基本接口是一个由大量扇区(通常为 512 字节)组成的线性地址空间(0 到 n-1)。驱动器制造商仅保证单个 512 字节的写入是原子的。如果发生掉电,较大的写入操作可能会出现不完整写入(Torn Write)。
磁盘驱动器存在一个“不成文的契约”:访问空间上彼此靠近的块比访问相隔较远的块更快,且连续块的顺序访问是最快的访问模式。
基本几何形状
磁盘由一个或多个盘片(Platter)组成,每个盘片有上下两个表面。盘片围绕主轴(Spindle)以恒定速度旋转,旋转速率以 RPM(每分钟转数)衡量(如 10000 RPM 意味着单次旋转约需 6ms)。
数据编码在表面的同心圆上,称为磁道(Track)。读写操作由连接在磁盘臂(Disk Arm)上的磁头(Disk Head)完成。
简单的磁盘驱动器模型
为了深入理解磁盘的运作方式,我们可以逐步构建一个磁盘模型。一次完整的 I/O 操作时间严格按照先后顺序由寻道、旋转和传输三个阶段组成。
单磁道模型与旋转延迟
假设磁盘只有一个磁道,包含 12 个扇区(编号 0 到 11)。磁头连接在磁盘臂的末端,盘片逆时针旋转。 当驱动器收到读取某个扇区的请求时,它必须等待目标扇区旋转到磁头下方。这段等待时间被称为旋转延迟 (Rotational Delay)。 如果磁盘完整的旋转周期耗时为 ,在最坏情况下(目标扇区刚转过磁头)需要等待接近 的时间,而平均旋转延迟通常为单次旋转时间的一半()。

多磁道模型与寻道时间
真实的磁盘表面拥有数以百万计的同心磁道。当请求的扇区位于其他磁道时,驱动器必须首先将磁盘臂移动到正确的磁道上方,这个物理移动过程称为寻道 (Seek)。 寻道与旋转一样,是最昂贵的磁盘操作之一。寻道过程包含四个物理阶段:
- 加速:磁盘臂开始移动。
- 滑行:磁盘臂全速惯性移动。
- 减速:磁盘臂靠近目标磁道时开始减速。
- 停放 (Settling Time):磁头小心且精确地定位在目标磁道上。停放时间通常不短(约 0.5 到 2ms),因为驱动器必须绝对确认找准了磁道,而不仅仅是移到了附近。
寻道完成后,磁头已定位在正确的磁道上。此时盘片仍在旋转,接下来只需承担短暂的旋转延迟,等待目标扇区来到磁头下方。

传输
当目标扇区经过磁盘磁头时,I/O 操作进入最后阶段:传输 (Transfer)。此时数据才真正从磁盘表面读取,或写入到磁盘表面。
其他关键设计细节
除了基本的寻道和旋转,现代磁盘还包含以下重要设计以优化性能:
- 磁道偏斜 (Track Skew):在跨越磁道边界进行顺序读取时,磁盘需要时间来重新定位磁头(即使是移动到相邻磁道)。如果没有偏斜,当磁头到达新磁道时,所需的下一个扇区可能已经转过了磁头,导致必须白白等待一整圈的旋转延迟。因此,相邻磁道的扇区在物理位置上会有一定的角度偏移,以完美衔接磁头切换的时间。

- 多区域 (Multi-zoned):由于外圈的物理周长更大,现代磁盘将表面划分为多个连续的区域(Zone)。外圈区域的磁道比内圈区域的磁道拥有更多的扇区。
- 缓存 (Cache/Track Buffer):驱动器内置少量内存(通常 8MB 到 16MB)。
- 预读机制:读取某扇区时,驱动器可能会将该磁道上的所有扇区一并读入缓存,以极快地响应后续对同磁道的请求。
- 写入策略:分为后写 (Write Back)(数据放入缓存即向系统报告完成,也称立即报告)和直写 (Write Through)(数据真正落盘后才报告完成)。后写策略能让驱动器看起来更快,但在发生掉电时,可能会破坏文件系统对数据写入顺序的依赖,引发一致性问题。
I/O 时间计算
I/O 时间与速率的计算公式如下:
随机工作负载与顺序工作负载的性能差异巨大。以 Cheetah 15K.5 高性能驱动器为例,其随机 I/O 速率约为 0.66 MB/s,而顺序 I/O 速率可达 125 MB/s,性能差距接近 200 倍。因此,尽可能以顺序方式或大块传输数据是核心的设计原则。
磁盘调度
由于 I/O 成本高昂,操作系统和磁盘控制器会通过调度算法来优化请求顺序,其核心思想是遵循最短任务优先(SJF)。
SSTF (最短寻道时间优先)
SSTF(Shortest-Seek-Time-First)优先服务距离当前磁头最近磁道上的请求。由于操作系统只能看到逻辑块,通常实现为其变体 NBF(Nearest-Block-First)。 SSTF 的致命缺陷是饥饿 (Starvation):如果内圈磁道持续有请求到来,外圈磁道的请求将被无限期搁置。

SCAN / C-SCAN (电梯算法)
为了解决饥饿问题,SCAN 算法以跨越磁道的顺序(如从内到外,再从外到内)服务请求,类似于电梯运行。
- F-SCAN:在单次扫过期间冻结队列,新到达的请求放入单独队列等待下次扫描。
- C-SCAN (Circular SCAN):单向扫描(如仅从外向内),到达尽头后直接返回起点,保证了更公平的等待时间。
SPTF (最短定位时间优先)
SSTF 和 SCAN 仅考虑了寻道时间,而忽略了旋转延迟。在现代驱动器中,寻道和旋转时间大致相当。 SPTF(Shortest Positioning Time First)同时考虑寻道和旋转时间,选择总体定位时间最短的请求。由于操作系统缺乏精确的磁头位置和磁道布局信息,SPTF 通常在磁盘控制器内部实现。操作系统只需将一批请求发送给磁盘,由磁盘内部的调度器决定最优执行顺序。

其他调度策略
- I/O 合并 (I/O Merging):调度器会将相邻的逻辑块请求合并为一个大块请求,以减少请求数量和开销。
- 非工作保全 (Non-work-conserving):在某些情况下,即使磁盘空闲且有待处理请求,调度器也会选择等待一段时间(Anticipatory Scheduling),期望有物理位置更优的新请求到达,从而提高整体吞吐量。