存储器层次结构——磁盘硬盘存储
文章目录
- 磁盘存储
- 磁盘构造
- 磁盘操作
- 逻辑磁盘块
- 访问磁盘
- 固态硬盘
磁盘存储
磁盘构造
单盘片构造
:::info
单个盘片(Platter)是数据存储 valuation 的载体,其表面由内到外被划分为多个同心圆:
- 主轴(Spindle):位于盘片中心,负责带动盘片高速旋转。
- 磁道(Track):盘片表面上的一个个同心圆线条,是数据记录的轨迹。
- 扇区(Sector):如图中“磁道 $ k $”的放大所示,每一条磁道被等分为若干个弧段,每个弧段就是一个扇区。它是磁盘读写数据的最小物理单位。
- 间隙(Gap):扇区与扇区之间存在间隙,不存储数据,主要用于磁头定位和同步。
- 面(Surface):盘片的物理表面(通常上下两面都可以读写数据)。
:::
多盘片构造
:::color1
实际的硬盘通常由多个盘片堆叠而成,引入了三维层面的概念:
- 多盘片组合:多个盘片(如盘片0、盘片1、盘片2)共同固定在同一个主轴上,同步旋转。
- 盘面编号:每个盘片的上下两面都被赋予编号(如面0到面5)。每个有效的盘面都会配备一个专属的磁头进行读写。
- 柱面(Cylinder):这是多盘片结构中最核心的概念。所有盘面上半径相同的磁道(即重叠在垂直空间上的磁道k kk)组合在一起,就构成了一个虚拟的圆柱面(柱面k kk)。
总结:> 磁盘的物理构造可以概括为:盘片构成盘面,盘面划分磁道,磁道切分扇区;而不同盘面上相同半径的磁道在纵向上则组合成了柱面。磁盘定位数据正是通过“柱面号-盘面号-扇区号”来实现的。
:::
磁盘操作
1. 盘片高速旋转(寻找扇区)
- 恒定转速:磁盘表面以固定的旋转速率(如常见的 7200 RPM)绕着主轴持续旋转(如图 a 中左上角的虚线箭头所示)。
- 作用:旋转让磁道上的不同扇区不断从读/写头下方经过。通过计算时间,当目标扇区旋转到磁头下方时,即可开始读写(这一步消耗的时间称为旋转延迟)。
2. 传动臂径向寻道(寻找磁道)
- 径向移动:传动臂(Actuator Arm)的一端固定,另一端承载着读/写头。它可以通过横向摆动,在盘面的半径方向上前后移动(如图 a 中传动臂旁的双向虚线箭头所示)。
- 作用:通过这种径向移动,传动臂可以精确地将读/写头定位到盘面上的任何一条磁道上(这一步消耗的时间称为寻道时间)。
3. 磁头悬浮读写
- 气垫飞翔:读/写头(Read/Write Head)连接在传动臂的末端。当盘片高速旋转时,带动空气流,磁头会借此在一层薄薄的气垫上悬浮飞翔,与盘面保持极近但又不物理接触的微小距离,以此来感应或改变盘面的磁性,完成数据读写。
4. 多盘片同步联动
- 一动百动:在多盘片结构中,所有的传动臂都固定在同一个机械轴上,形成一个整体的传动臂组合。
- 同步定位:当传动臂移动时,所有盘面上的读/写头会在同一时刻移动到相同的半径位置(即同时定位到同一个柱面上)。读写时,系统通过电子开关在不同的磁头之间切换,从而实现多盘面数据的高效并行或连续读写。
总结:磁盘操作的核心就是“臂动找磁道,盘转找扇区”。传动臂负责在半径方向选择磁道,主轴带动盘片旋转负责将扇区送到磁头下,两者配合,加上多磁头同步联动,完成了对整个磁盘三维空间内任意数据的精确定位与读写。
:::success 磁盘以扇区大小的块来读写数据。对扇区的访问时间有三个主要的部分:寻道时间、旋转时间和传送时间。- 寻道时间:为了读取某个目标扇区的内容,传动臂首先将读/写头定位到包含目标扇区的磁道上。移动传动臂所需的时间称为寻道时间。
- 旋转时间:一旦读/写头定位到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读/写头下。这个步骤的性能依赖于当读/写图到达目标扇区时盘面的位置以及磁盘的旋转速度。
- 传送时间:当目标扇区的第一个位位于读/写头下时,驱动器就可以开始读或者写该扇区的内容了。一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。
:::
逻辑磁盘块
为了对上层操作系统屏蔽底层复杂的物理结构(如盘片、盘面、磁道、扇区、柱面等),系统在磁盘的物理构造之上抽象出了一个逻辑概念——逻辑磁盘块(Logical Disk Blocks)。
逻辑磁盘块的本质是一个一维数组。从操作系统的角度来看,整个磁盘不再是复杂的三维机械结构,而被抽象为一个一维、连续的逻辑块序列,其编号为 $ 0, 1, 2, \dots, B-1KaTeX parse error: Expected 'EOF', got '#' at position 20: …t style="color:#̲DF2A3F;">(其中 </…B $ 是磁盘总的逻辑块数)。每个逻辑块的尺寸通常对应一个或多个物理扇区的大小(例如 512 字节或 4 字节的倍数)。
操作系统发出的读写指令都是基于“逻辑块号”的。而将这个一维的逻辑块号翻译成物理上的“柱面号、盘面号、扇区号”的过程,完全由磁盘上的硬件设备——磁盘控制器内部的固件来完成。
当操作系统需要读取逻辑块 $ k $ 时,磁盘控制器会执行以下映射:
逻辑块 k ⟶ ( 柱面 i , 盘面 j , 扇区 m ) \text{逻辑块 } k \longrightarrow (\text{柱面 } i, \text{盘面 } j, \text{扇区 } m)逻辑块k⟶(柱面i,盘面j,扇区m)
随后,控制器驱动传动臂寻道、盘片旋转,将对应的物理扇区数据读取出来。
为什么要这样设计?- 隐藏物理缺陷(坏块管理):机械磁盘在制造或使用过程中难免会出现损坏的物理扇区(坏块)。磁盘控制器在映射时,会自动跳过这些坏块,用备用的完好扇区来顶替,而操作系统对此完全不知情,看到的依然是连续的逻辑块。
- 简化操作系统的设计:操作系统不需要关心磁盘到底是单盘片还是多盘片、每个磁道有多少个扇区。它只需要像操作内存一样,给出一个一维的地址(逻辑块号),极大地简化了文件系统和驱动程序的编写。
访问磁盘
例如图形卡、监视器、鼠标键盘等输入/输出(I/O)设备,都是通过** I/O 总线**连接到 CPU 和主存的。
CPU 使用内存映射 I/O 的技术来向 I/O 设备发射命令。在使用内存映射 I/O 的系统中,地址空间中有一块地址是为与 I/O 设备通信保留的。每个这样的地址称为一个 I/O 端口。当一个设备连接到总线时,它与一个或多个端口相关联(或他被映射到一个或多个端口)。
读一个磁盘扇区的过程阶段 a:CPU 发起磁盘读请求
- 操作:CPU 通过总线接口,向与磁盘控制器相关联的内存映射地址(Memory-Mapped I/O)写入控制指令。
- 写入内容:这些指令包含读命令、需要读取的逻辑块号(即目标扇区),以及数据应该存入的目的内存地址。
- 特点:发出指令后,CPU 的初始化工作就完成了,不需要留在原地等待磁盘慢吞吞地读数据。
阶段 b:磁盘控制器执行 DMA 传送
- 操作:磁盘控制器接收到 CPU 的物理指令后,驱动磁盘硬件找到对应扇区并读取数据。随后,磁盘控制器接管总线,直接将数据传送到主存(内存)中,而不需要 CPU 的干预。
- 特点:这种不需要 CPU 参与、硬件直接与内存交换数据的技术称为DMA(Direct Memory Access)。在这个过程中,CPU 可以转去执行其他任务( CPU 内部此时是断开、独立的),大大提高了系统效率。
阶段 c:磁盘控制器发出中断通知 CPU
- 操作:当整个扇区的数据全部被安全地传送到主存后,磁盘控制器通过 I/O 总线向 CPU 芯片的一个引脚发送一个中断信号(Interrupt)。
- 特点:中断会打断 CPU 当前正在执行的工作。CPU 收到信号后,得知磁盘数据已经准备就绪,随后其内部的操作系统就会接管并开始使用刚刚读入主存的这批磁盘数据。
一句话总结:
读磁盘扇区的全过程就是:CPU 发起请求磁盘控制器通过 DMA 悄悄把数据搬到内存
搬完后控制器发中断喊 CPU 过来收货。
固态硬盘
固态硬盘(SSD) 是一种基于闪存的存储技术,一个 SSD 封装由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻译成对底层物理设备的访问。
随机写很慢,有两个原因:
- 擦除块需要相对较长的时间,1ms 级的,比访问页所需时间要高一个数量级。
- 如果写操作试图修改一个包含已经有数据的页 P,那么这个块中所有带有用数据的页都必须被复制到一个新块,然后才能进行对页 P 的写。
