外存、辅存和外设

外存储器也叫辅助存储器,用于长期保存大量数据。磁盘、磁带、光盘、U 盘、SSD 都可以放在这一层理解。

外存同时也是一种 I/O 设备:主机可以从外存读入数据,也可以把数据写出到外存。

辅存不能替代主存

CPU 通常不能直接访问辅存中的指令和数据。辅存中的内容要调入主存后,才成为 CPU 可以直接取指、读写和处理的数据。

# 磁表面存储器

磁表面存储器是在载体表面涂覆磁性材料,用磁化状态记录二进制信息。磁盘、磁带、磁鼓都属于磁表面存储器。

磁表面存储器的优点:

  • 容量大,单位容量成本低。
  • 信息可以长期保存,断电后不丢失。
  • 可以脱机保存和搬运。
  • 非破坏性读出,读出后原信息仍然保留。

它的主要限制来自机械运动。磁头移动、盘片旋转都需要时间,因此磁盘访问速度通常慢于主存和 Cache 这类半导体存储器。

磁表面存储器还会涉及具体的磁记录方式。存储器把二进制信息变换为磁层中的磁化翻转状态序列,读写时由磁头和磁性记录介质的相对运动完成电磁转换。这个内部编码过程通常不作为外存管理的重点,只需要知道它解释了为什么磁盘属于机械-电磁结合的存储设备。

磁盘基本结构

磁盘的表面被划分为一个个同心圆,这些同心圆称为磁道。每个磁道又被划分为多个扇区,每个扇区可以存放固定大小的数据。

常见术语:

术语 含义
盘片 磁盘内部用于记录信息的圆形介质
盘面 盘片的一面,一个盘片通常有两个盘面
磁头 负责读写某个盘面上的数据
磁道 盘面上的同心圆轨迹
扇区 磁道上的一段区域,通常是磁盘读写的最小物理单位
磁盘块 操作系统管理外存空间的块单位,通常对应一个或多个扇区
柱面 多个盘面上半径相同的磁道组成的集合
Tip

同一个柱面内的多个磁道半径相同。访问同一柱面内不同盘面的数据时,只需要切换磁头,不需要移动磁臂,因此比跨柱面访问更快。

每条磁道的数据量

通常按“每条磁道存放相同数据量”理解。外侧磁道周长更长,但并不因此存放更多数据;内侧磁道周长短,所以位密度更高。

# 磁盘设备的组成

硬盘存储器通常由三部分组成:

  1. 盘片:真正保存磁化信息的介质。
  2. 磁盘驱动器:核心部件包括磁头组件和盘片组件,负责机械定位和读写动作。
  3. 磁盘控制器:主机和磁盘之间的接口,负责接收命令、控制磁盘读写并传输数据。

磁盘控制器是磁盘设备与主机之间的桥。主机不会直接操纵磁头和盘片,而是通过控制器发出读写命令。

从 I/O 系统角度看,磁盘控制器就是一种 I/O 控制器。CPU 或 DMA 控制器面对的是控制器中的寄存器和端口;寻道、选择磁头、等待扇区、校验和坏块替换等细节由磁盘控制器和磁盘驱动器配合完成。

磁盘分类

磁盘可以按磁头和盘片是否可移动来分类。

分类角度 类型 含义
磁头是否移动 活动头磁盘 磁头可以在磁臂带动下移动到不同磁道
磁头是否移动 固定头磁盘 每个磁道对应一个磁头,磁头本身不需要移动
盘片是否可更换 可换盘磁盘 盘片可以从驱动器中取出、更换
盘片是否可更换 固定盘磁盘 盘片固定在驱动器内部

现代硬盘通常按活动头、固定盘来理解。固定头磁盘可以减少寻道动作,但需要更多磁头,结构和成本不同。

磁盘地址

磁盘物理地址通常可表示为:

$$
(\text{柱面号},\ \text{盘面号},\ \text{扇区号})
$$

一次磁盘块读写大致经历以下过程。

  1. 根据柱面号移动磁臂,使磁头到达目标柱面。
  2. 根据盘面号选择对应磁头。
  3. 等待磁盘旋转,使目标扇区转到磁头下方。
  4. 完成数据读出或写入。
为什么用 (柱面号、盘面号、扇区号) 而不是 (盘面号,柱面号,扇区号)

连续读取地址标号相邻的多个物理块,如果采用前者,盘面号会切换频繁但柱面号相对稳定。这样只需要切换磁头,而不需要移动磁臂,可以减少寻道时间。但如果采用后者,则会更为频繁地换柱面号,造成频繁移动磁臂。

![](/assets/disk-address-order.svg)

磁盘容量和性能指标

磁盘容量

磁盘容量是磁盘能够存储的字节总数。

类型 含义
非格式化容量 磁记录表面理论上可以利用的磁化单元总量
格式化容量 按某种格式划分扇区、加入管理和校验信息后,实际可用于存放数据的容量

格式化后,磁盘需要保存扇区头、校验信息等管理内容,因此格式化容量通常小于非格式化容量。

记录密度

记录密度描述盘片单位面积可以记录多少二进制信息。

指标 含义
道密度 沿半径方向单位长度上的磁道数
位密度 磁道单位长度上能记录的二进制位数
面密度 位密度和道密度的综合效果

平均存取时间

磁盘访问时间主要由三部分组成:

$$
T_a=T_s+T_r+T_t
$$

符号 含义
$T_s$ 寻道时间,磁头移动到目标磁道所需时间
$T_r$ 旋转延迟,目标扇区转到磁头下方所需时间
$T_t$ 传输时间,真正读出或写入数据所需时间

机械硬盘之所以慢,关键是寻道时间旋转延迟

关于具体计算式与减少延迟的方法详见Disk-Scheduling-And-Management

数据传输率

数据传输率是磁盘存储器单位时间内向主机传送数据的字节数。单位B/s。它描述数据真正开始传输后的吞吐能力。

若磁盘转速为 $r$ 转/秒,每条磁道容量为 $N$ 字节,则连续读写时的最大数据传输率可近似为:

$$
D_r=rN
$$

这个公式只描述磁头已经定位到目标磁道后的连续传输能力,不包含寻道时间和旋转延迟。

磁盘阵列 RAID

RAID 把多个独立物理磁盘组织成一个逻辑磁盘。它通过数据分割、交叉存储和并行访问提高传输率,也可以通过镜像或校验提高可靠性。

1000

常见 RAID 级别:

级别 核心做法 特点
RAID 0 条带化存储,无冗余、无校验 读写速度和可用容量提高,但没有容错能力
RAID 1 镜像存储,同一份数据写到两块盘 可靠性高,但有效容量约减半
RAID 2 使用海明码纠错 以纠错码提供容错能力
RAID 3 位交叉奇偶校验 多盘并行,设置校验信息
RAID 4 块交叉奇偶校验 以块为单位分布数据,校验盘可能成为瓶颈
RAID 5 分布式奇偶校验 没有独立固定校验盘,兼顾容量、性能和容错

RAID 0 可以类比低位交叉编址:逻辑上连续的数据块分散到不同磁盘上,从而并行访问。RAID 1 通过保存副本提高可靠性。带校验的 RAID 则用额外校验信息在磁盘故障时恢复数据。