核心思想
磁盘的地址划分与寻址,本质上是一个从抽象到具体,层层映射的过程。它的目的是让操作系统和应用程序能够以一种相对简单、统一的方式(逻辑地址)来访问一个复杂、精密的物理设备(物理磁盘)。
第一层:物理磁盘的结构与物理寻址
首先,我们要理解磁盘(以传统机械硬盘为例)的物理结构。
-
盘片:一个或多个磁性盘片,用于存储数据。
-
磁道:每个盘片被划分为成千上万个同心圆环,每个圆环称为一个磁道。
-
扇区:每个磁道又被划分为多个弧段,每个弧段称为一个扇区。扇区是磁盘的最小物理存储单元,传统大小是512字节,现代高级格式磁盘通常是4096字节(4KB)。
-
柱面:所有盘片上相同半径的磁道组成的“圆柱体”称为柱面。
-
磁头:每个盘面都有一个读写磁头。
基于这个结构,最早的物理寻址方式是 CHS寻址:
-
C: 柱面号
-
H: 磁头号(指定哪个盘面)
-
S: 扇区号
寻址过程:要读取一个数据,磁盘驱动器需要接收到一个(CHS)三元组,然后:
-
驱动磁臂移动到指定的柱面。
-
激活指定的磁头。
-
等待盘片旋转,直到指定的扇区移动到磁头下方。
-
开始读写数据。
CHS的局限性:
-
与物理结构强绑定,操作系统需要知道磁盘的具体几何参数(总柱面数、磁头数、扇区数)。
-
容量受限,且不方便用于SCSI、SATA等现代接口。
-
对于RAID或虚拟磁盘等抽象层,无法直接使用。
第二层:逻辑区块地址——抽象的第一步
为了解决CHS的复杂性,引入了 LBA。
-
LBA 将整个磁盘的扇区从0开始进行线性编号。
-
磁盘的第一个扇区是LBA 0,第二个是LBA 1,以此类推,直到最后一个扇区。
LBA 与 CHS 的转换:
磁盘控制器(或驱动)内部负责将操作系统发送的LBA地址转换为物理的CHS地址。这是一个简单的数学换算。假设一个磁盘有 H 个磁头(盘面),每个磁道有 S 个扇区:
-
C = LBA / (H * S)
-
H = (LBA / S) % H
-
S = (LBA % S) + 1
(注意:这里的计算是概念性的,实际转换可能更复杂,但原理一致)
优点:
-
对操作系统透明:操作系统无需关心磁盘的物理几何结构,只需知道总共有多少个LBA。
-
统一接口:为不同大小、不同类型的存储设备提供了统一的寻址方式。
-
突破限制:更容易支持大容量磁盘。
至此,我们已经完成了第一层抽象:物理扇区(CHS) -> 逻辑扇区(LBA)。
第三层:操作系统的视角——逻辑地址到文件
操作系统拿到的是一个由LBA组成的“线性空间”。但它需要为多个应用程序和用户文件提供服务,所以它需要再次划分这个空间。这是通过文件系统来实现的。
文件系统将连续的LBA空间组织成更高级的结构,以便管理文件和目录。关键概念包括:
-
分区:
-
一个物理磁盘可以被划分为多个分区(如C盘、D盘)。
-
每个分区在操作系统看来就像一个独立的磁盘,有自己的LBA范围(从0到分区大小)。
-
主引导记录(MBR) 或 GUID分区表(GPT) 负责记录这些分区的起始和结束LBA。
-
-
块:
-
文件系统为了管理效率,通常会将多个连续的扇区组合成一个 “块” 或 “簇”。
-
例如,一个块可能由8个连续的512字节扇区组成,形成一个4KB的块。
-
文件系统分配空间的最小单位是块,而不是扇区。
-
-
元数据:
-
文件系统需要数据结构来记录哪些块是空闲的,哪些块属于哪个文件。
-
inode(类Unix系统)或 Master File Table - MFT(Windows NTFS)就是这样的数据结构。它们本身也存储在磁盘上特定的LBA位置。
-
元数据中存储了文件内容的块指针。这些指针本质上就是LBA地址的集合。
-
完整寻址流程举例:读取一个文件
假设用户请求打开文件 /home/user/document.txt。
-
应用程序:发出
open("/home/user/document.txt")系统调用。 -
操作系统/文件系统:
-
在文件系统元数据中查找路径
/home/user/document.txt,找到对应的 inode/MFT。 -
从存储inode的固定LBA位置读取inode数据。
-
解析inode,获取存储文件内容的所有数据块的地址(LBA列表)。
-
-
操作系统/设备驱动:
-
将包含目标数据的LBA地址和读取长度封装成一个SCSI或ATA命令。
-
将这个命令发送给磁盘控制器。
-
-
磁盘控制器:
-
接收命令,解析出LBA地址(例如 LBA 10000)。
-
在内部将 LBA 10000 转换为物理的(CHS)地址(此过程对上层完全透明)。
-
-
磁盘硬件:
-
根据(CHS)地址,移动磁臂,选择磁头,等待扇区旋转到位。
-
将对应扇区的数据读取出来,通过接口返回给磁盘控制器,再依次传递给驱动、操作系统,最终送达应用程序。
-
总结与现代发展
| 层次 | 地址类型 | 描述 | 管理者 |
|---|---|---|---|
| 物理层 | CHS | 基于磁盘物理结构的地址 | 磁盘控制器 |
| 抽象层 | LBA | 整个磁盘空间的线性扇区编号 | 操作系统与磁盘控制器之间的接口 |
| 文件系统层 | 块地址(在inode中) | 文件系统分区内的块编号 | 操作系统文件系统 |
| 用户层 | 文件路径 | 人类可读的文件和目录名 | 用户/应用程序 |
现代发展:
-
固态硬盘:SSD没有机械结构,不存在磁道和扇区的物理概念。但它仍然模拟出LBA接口,内部闪存转换层负责将主机发送的LBA映射到实际的闪存物理页上。这使得操作系统可以像使用机械硬盘一样使用SSD。
-
高级格式 4K 扇区:为了提高存储效率,现代磁盘物理扇区大小变为4KB。为了兼容旧系统,它们可能向操作系统报告为512字节扇区,这称为“512e”模拟,增加了转换的复杂性。原生4K(4Kn)则直接使用4KB作为LBA单位。
希望上文能帮助彻底理解磁盘地址的划分与寻址过程。
磁盘寻址层次解析

2296

被折叠的 条评论
为什么被折叠?



