磁盘存储器

磁盘是本章唯一有机械运动的部件,它的一切特性都从这一条推出来:移动磁臂要毫秒,旋转盘片要毫秒,而电子切换磁头几乎不要时间。

这个”三个动作、三个数量级”的结构,决定了磁盘地址的字段顺序、决定了访问时间的三项构成、也决定了磁盘调度算法为什么只优化寻道。 把三个动作的开销排出序,这一节就通了大半。

机制

物理结构

一台磁盘存储器由磁盘驱动器、磁盘控制器、盘片三部分组成。

  • 磁道:盘面上的同心圆。最外圈是 0 号磁道。
  • 扇区(块):磁道被分成的若干段,是磁盘读写的最小单位。
  • 柱面:各盘面上半径相同的磁道构成的集合。柱面号 = 磁道号。
  • 磁头:每个记录面一个,所有磁头装在同一根磁臂上,同进同退。

“所有磁头共用一根磁臂”这一条是柱面概念存在的全部理由:磁臂停在某个位置时,所有盘面上处在该半径的磁道都是可达的,切换到哪个盘面只需要电子选通。

传统磁盘各磁道的扇区数相同,因此内圈的位密度高于外圈;每个磁道的容量相同,这一条在容量计算里天天用。

磁盘地址:柱面号 → 盘面号 → 扇区号

柱面(磁道)号高位盘面(磁头)号中位扇区号低位

疑问点:这个字段顺序是人为规定,还是为了让访问更快

是为了让访问更快,而且是本章设计意图最明显的一处。

三个动作的开销相差数量级:

动作物理过程量级
换扇区等盘片转过来微秒~毫秒
换盘面(换磁头)电子切换,磁臂不动几乎为 0
换柱面(换磁道)移动磁臂,机械动作毫秒,最贵

地址递增时,低位字段变化最频繁,高位字段变化最少。把最贵的柱面号放在最高位,意味着只有把一整个柱面读完,才需要移动一次磁臂。

所以有一个常被追问的推论要纠正:换磁头比找磁道开销大——这是反的。 换磁头只是把读写电路接到另一个磁头上,磁臂完全不动;找磁道要驱动音圈电机把磁臂移到新的半径并稳定下来。前者几乎免费,后者是磁盘上最贵的动作。

沿着同一个思路还能看到另外两处”小巧思”: 一是 0 号磁道在最外圈——外圈周长大、线速度高,把常用的引导区放在这里读得最快。 二是扇区交错编号(interleaving)——早期控制器处理完一个扇区需要时间,若扇区物理相邻则下一个已转过去了,于是把逻辑相邻的扇区在物理上隔开几个位置,让处理时间与旋转时间重叠。 这两处与”柱面号在最高位”是同一种思路:把慢的动作藏到快的动作后面去。

容量:格式化与非格式化

非格式化容量位密度最内道周长总磁道数 格式化容量每扇区字节数每道扇区数每面磁道数记录面数 格式化容量非格式化容量

差额被扇区头、扇区间隙和校验码占去了——它们占物理空间但不存用户数据。

疑问点:扇区里为什么要存地址

一个扇区由三段构成:头(ID 域)· 数据区 · 尾(ECC 校验)。头里放的正是该扇区的柱面号、磁头号、扇区号,外加同步字段和一个 CRC。

磁头无法”知道”自己现在在哪。 磁臂寻道后停在某个半径上,盘片在高速旋转,控制器唯一的定位手段是把经过磁头的内容读出来,看 ID 域是不是要找的那个扇区——是就读数据区,不是就继续等下一个扇区转过来。扇区里的地址是磁盘的唯一定位依据。

这也解释了为什么格式化会让容量变小:格式化做的事就是把这些 ID 域、间隙和校验码写上去。

与这道题一起考的另一个选项是”磁盘存储器的最小读/写单位为 1 字节”,这是错的:最小读写单位是一个扇区(块)。原因同样在上面——定位靠 ID 域,一次定位的成本极高,按字节读写在物理上毫无意义。 这一条正是 OS 4.1.5 文件的物理结构中”块是文件系统分配的最小单位”的硬件来源。

存取时间

寻道时间 :磁臂移动到目标柱面。机械动作,最大的一项,题目一般直接给平均值。

旋转延迟 :等目标扇区转到磁头下。平均取半圈:秒为转分传输时间 :读出 字节所需时间,设每道 字节、转速 转/秒:控制器延迟若题目给出则加上,不给就不加。

“平均取半圈”有前提:目标扇区的位置随机。若题目说明是连续读取同一磁道上相邻的扇区,后续扇区不再需要旋转延迟——这一条限定在 OS 5.3.3 磁盘调度里会被反复用到。

磁盘阵列 RAID

RAID 用多个物理磁盘构成一个逻辑磁盘,同时追求两个目标:用条带化提高并行度(速度),用冗余提高可靠性。

级别组织冗余方式有效容量( 盘)特点
RAID 0条带化无速度最快,可靠性最差
RAID 1镜像完全复制可靠性最高,最浪费
RAID 2位交叉海明码—已淘汰
RAID 3位交叉奇偶校验,专用校验盘校验盘是瓶颈
RAID 4块交叉奇偶校验,专用校验盘校验盘是瓶颈
RAID 5块交叉奇偶校验,校验块分散到各盘无瓶颈,最常用

补充:位交叉与块交叉——按多大单位轮流分到各盘?

“交叉”就是把连续数据按一定单位,轮流分散到多块磁盘上。 以 3 块数据盘为例(暂不画校验):

  • 位交叉:按 **bit(位)**拆分,第 1、2、3 位依次放到盘 1、2、3,第 4 位再放回盘 1。同一份数据的各个位分布在多盘上,读取时通常要多盘一起工作。
  • 块交叉:按一整块数据拆分,第 1、2、3 块依次放到盘 1、2、3,第 4 块再放回盘 1。每块内部的数据留在同一盘上,不同盘可以并行处理各自的读请求;这里的块可包含多个扇区。

记忆:位交叉是“拆成位再分盘”;块交叉是“整块轮流放各盘”。区别在条带化的粒度。

RAID 0 没有任何冗余,它的可靠性比单盘还差(任一盘坏则全部数据丢失)——“RAID 都能提高可靠性”是错的,0 级是纯粹的性能手段。

疑问点:RAID 需要专门的一套设备来控制吗,是否还需要操作系统配合

两种实现都存在,区别恰好在”要不要操作系统配合”上:

硬件 RAID:由**独立的 RAID 控制器(RAID 卡)**完成条带划分、校验计算和重建。对操作系统完全透明——OS 只看到一块逻辑磁盘,不需要任何额外驱动逻辑,只要有该控制器的驱动程序即可。热插拔与自动重建也由控制器独立完成。

软件 RAID:由操作系统的存储子系统实现(如 Linux 的 md/LVM、Windows 的存储空间)。这时确实需要操作系统配合,条带和校验的计算占用主机 CPU。

“哪块盘坏了拔掉重新插一块就自动同步”描述的是硬件 RAID 的热插拔 + 自动重建。 重建期间阵列处于降级模式:数据仍可访问(靠校验实时算出丢失的部分),但性能下降,且此时再坏一块盘就真的丢数据了——这正是 RAID 6(双校验)存在的理由。

408 的边界:只考 RAID 0~5 的组织方式、有效容量和可靠性对比。硬件/软件实现之分、重建过程、RAID 6 都属于工程背景,可以用来理解,不作为答题依据。

RAID 不是备份。 它防的是磁盘硬件故障,不防误删除、不防文件损坏、不防勒索软件——这些故障会被镜像和校验忠实地同步到每一块盘上。

边界

“扇区”和”块”在磁盘语境下同义。 在文件系统语境下”块”可能是若干扇区的组合,见 OS 4.3.1。

磁盘是直接存取存储器(DAM),不是随机存取。 因为存取时间与当前磁头位置有关,见 3.1.1。

“每个磁道的扇区数相同”是教材模型。 现代磁盘用分区记录(外圈磁道扇区更多)以提高容量利用率,但 408 的计算题一律按扇区数相同处理,除非题目明说。

旋转延迟取半圈的前提是位置随机。 连续读同一磁道上的相邻扇区时,只在第一个扇区付一次旋转延迟。

磁盘的调度算法(FCFS / SSTF / SCAN / C-SCAN)在操作系统里考,见 OS 5.3.3。计组这一节只负责结构、地址和时间计算。

对照速查

动作开销对应地址字段
换扇区小(等旋转)扇区号(低位)
换盘面/磁头几乎为 0(电子切换)盘面号(中位)
换柱面最大(磁臂机械移动)柱面号(高位)
项公式
格式化容量扇区字节 × 每道扇区 × 每面磁道 × 记录面数
平均旋转延迟( 转/分)
传输时间
存取时间
判断对错
格式化容量 < 非格式化容量✅
扇区中包含数据、地址和校验✅
磁盘最小读写单位是 1 字节❌(一个扇区)
换磁头比换磁道开销大❌(反了)
RAID 都能提高可靠性❌(RAID 0 不能)
RAID 可以代替备份❌

考点

  • 地址顺序 柱面号 | 盘面号 | 扇区号,为的是让最贵的寻道最不频繁
  • 换磁头几乎免费,寻道最贵
  • 最小读写单位是扇区,扇区含 ID 域(地址)+ 数据 + ECC
  • 格式化容量 < 非格式化容量
  • ;平均旋转延迟取半圈,前提是位置随机
  • 磁盘属于直接存取存储器
  • RAID 0 无冗余可靠性最差;RAID 5 校验分散无瓶颈
  • RAID 不是备份

链接