前言
本文介绍磁盘驱动器(hard disk drive,HDD)的工作原理、结构、性能分析以及操作系统如何通过磁盘调度来优化性能
磁盘接口与基本几何结构
基本接口与存储单元:现代磁盘驱动器的基本接口简单,将其视为由大量扇区(512 字节块)组成的地址空间,扇区从 0 到 n−1 编号。
原子性:驱动器制造商唯一保证的是单个 512 字节的写入是原子的,但较大的写入可能会因掉电而导致不完整写入(torn write)。
性能假设:磁盘客户端通常假设访问彼此靠近的块比访问相隔很远的块更快,并且访问连续块(顺序读取或写入)是最快的访问模式。
磁盘物理组件:
- 盘片(platter):圆形坚硬表面,通过磁性变化持久存储数据。
- 主轴(spindle):连接盘片和电机,使盘片以恒定的 RPM(每分钟转数) 旋转,例如 7200~15000 RPM。
- 磁道(track):数据在每个表面上以同心圆的形式编码。
- 磁头(disk head):用于读写操作,连接到**磁盘臂(disk arm)**上,用于将磁头定位在期望的磁道上。

结构优化:
- 磁道偏斜(track skew):用于确保在跨越磁道边界时,顺序读取仍能方便地服务,避免完整的旋转延迟。
- 多区域(multi-zoned):外圈磁道通常比内圈磁道拥有更多扇区,磁盘被组织成区域,每个区域内的磁道具有相同的扇区数量。
- 缓存/磁道缓冲区(cache/track buffer):驱动器内部用于保存数据的少量内存(通常 8MB 或 16MB)。缓存写入策略包括后写(write back)(立即报告完成,速度更快但有风险)和直写(write through)(写入磁盘后才报告完成)。

I/O时间与性能分析
I/O 时间组成:磁盘 I/O 时间由三个主要部分组成:TI/O=T寻道+T旋转+T传输。
寻道时间(Seek Time):将磁盘臂移动到正确的磁道所需的时间,是最昂贵的磁盘操作之一。寻道涉及加速、惯性滑动、减速和停放时间。

旋转延迟(Rotational Delay):等待期望的扇区旋转到磁头下所需的时间,是 I/O 服务时间的重要组成部分。平均旋转延迟大约为单次旋转所需时间的一半。
传输时间(Transfer Time):数据从表面读取或写入表面的时间。
I/O 速率:RI/O=TI/O传输大小。
工作负载性能对比:
- 随机工作负载(小块随机访问,如 4KB)的性能非常低,主要受寻道和旋转延迟的限制
- 顺序工作负载(连续读取大量扇区)的 I/O 速率接近峰值传输速率
- 随机和顺序工作负载之间的性能差距巨大,可能高达数百倍(例如 Cheetah 上约 200 倍,Barracuda 上约 300 倍)。因此,设计提示是尽可能以顺序或大块方式传输数据。
磁盘调度策略
调度目标:操作系统通过磁盘调度程序来决定 I/O 请求的顺序,目标是遵循 SJF(最短任务优先) 的原则,通过估计寻道和旋转延迟,优先服务花费最少时间的请求。
SSTF(最短寻道时间优先,Shortest-Seek-Time-First):按磁道对 I/O 请求队列排序,选择在最近磁道上的请求先完成,SSTF 的主要问题是可能导致饥饿(starvation),即稳定对当前磁道的请求会完全忽略对其他磁道的请求。
电梯算法(Elevator Algorithm,SCAN/C-SCAN):通过以跨越磁道的顺序服务请求来避免饥饿,。**C-SCAN(循环 SCAN)**是一种常见变体。
SPTF(最短定位时间优先,Shortest Positioning Time First)/ SATF(最短接入时间优先):这是一种更优化的算法,它同时考虑寻道时间和旋转延迟,更接近真正的 SJF。由于现代驱动器中寻道和旋转时间大致相当,SPTF 提高了性能。但SPTF 通常在驱动器内部执行,因为操作系统难以准确知道磁头当前的旋转位置和磁道布局。