磁盘的管理
疑问点:磁盘初始化的具体工作
磁盘初始化要做哪些事情。
一块刚出厂的磁盘,在能存文件之前要经过三道工序。 这三道工序层层递进、顺序不能颠倒,而统考真题几乎全部出在”某件事属于哪一道工序”上。
本节的全部难点就是把这三道工序的边界划清楚。
机制
第一道:低级格式化(物理格式化)
低级格式化把磁盘分成扇区,以便磁盘控制器能够读和写。
每个扇区被写成”头 + 数据区域 + 尾”的结构:数据区域通常是 512 字节;头和尾包含了一些磁盘控制器使用的信息,其中最重要的是扇区校验码(ECC)——每次写入时根据数据算出校验码写进尾部,每次读出时重新计算并比对,用来发现和纠正数据错误。
这一步由厂商完成,它确定的是”这块盘上有哪些扇区、每个扇区多大、校验码占几位”。 此时磁盘上还没有任何”分区”或”文件”的概念。
第二道:分区
将磁盘分成由一个或多个柱面组成的分区,每个分区可以作为一个独立的磁盘。
分区完成后,磁盘上会有一张分区表,记录每个分区的起止位置。4.3.2 讲的主引导记录 MBR 正是存放这张表的地方。
这一步确定的是”这块盘被切成几块,每块从哪到哪”。 此时每个分区里仍然是空白,没有文件系统。
第三道:逻辑格式化(高级格式化)
逻辑格式化在分区上创建文件系统,具体包括:建立文件系统的根目录、对保存空闲磁盘块信息的数据结构进行初始化(位示图或空闲链表)、建立引导块。
这一步之后,这个分区才真正可用。
三道工序的分工可以概括成一句话:
低级格式化管”扇区”,分区管”分区表”,逻辑格式化管”文件系统”。
引导块与启动过程
计算机启动时需要运行一个初始化程序(自举程序),它初始化 CPU、寄存器、设备控制器和内存,接着启动操作系统。
问题在于自举程序放在哪。 若整个放在 ROM 里,ROM 是只读的,自举程序一旦要更新就必须换芯片。
实际做法是把它拆成两段:ROM 中只存放很小的自举装入程序,它唯一的任务是把磁盘上的完整自举程序读进内存并执行;完整的自举程序则存放在磁盘的启动块上,位于磁盘的固定位置。
拥有启动分区的磁盘称为启动磁盘或系统磁盘。
这个两段式设计的好处是显然的:更新自举程序只需改写磁盘上的启动块,不必更换 ROM。
坏块管理
磁盘上难免出现无法正常读写的扇区,称为坏块。 处理方式随磁盘的复杂程度而不同:
简单的磁盘(如采用 FAT 的系统)在逻辑格式化时扫描出坏块,在 FAT 表中把对应表项标记为 BAD,此后分配程序就不会再用到它。这是一种软件层面的处理,对操作系统可见。
复杂的磁盘由磁盘控制器自己维护一张坏块链表,并在出厂低级格式化时就留出一些备用扇区。发现坏块时用备用扇区顶替,称为扇区备用;或者把后续扇区依次向后挪一位,称为扇区滑动。这种处理对操作系统完全透明——操作系统根本不知道发生了替换。
边界
引导扇区产生于哪一步
疑问点:操作系统引导扇区的产生时机
- 硬盘的操作系统引导扇区产生在( )。 A. 对硬盘进行分区时 B. 对硬盘进行低级格式化时 C. 硬盘出厂时自带 D. 对硬盘进行高级格式化时
答案 D。
判据是”引导扇区属于文件系统的一部分吗”——答案是肯定的。 引导块要能被找到、要与这个分区上的文件系统配套(不同文件系统的引导代码不同),因此它只能在文件系统被创建时一并建立,即高级格式化(逻辑格式化)阶段。
逐项排除:B 低级格式化只划分扇区、写校验码,那时连分区都还没有,更谈不上”操作系统引导”;A 分区只是写分区表,划出地盘但里面仍是空白;C 出厂时自带的是低级格式化的结果,厂商不可能预知用户要装哪个操作系统。
逻辑格式化做哪些工作
疑问点:磁盘逻辑格式化程序所做的工作
30.【2017 统考真题】下列选项中,磁盘逻辑格式化程序所做的工作是( )。 I. 对磁盘进行分区 II. 建立文件系统的根目录 III. 确定磁盘扇区校验码所占位数 IV. 对保存空闲磁盘块信息的数据结构进行初始化 A. 仅 II B. 仅 II、IV C. 仅 III、IV D. 仅 I、II、IV
答案 B。 这道题是三道工序边界的直接考查,把每一项归位即可:
I 对磁盘进行分区——属于第二道工序,且它发生在逻辑格式化之前(先分好区,才能在某个分区上建文件系统)。不选。
II 建立文件系统的根目录——根目录是文件系统的组成部分,且它是路径解析的起点,必须在建立文件系统时创建。选。
III 确定磁盘扇区校验码所占位数——校验码写在扇区的头尾中,属于第一道工序低级格式化。不选。
IV 对保存空闲磁盘块信息的数据结构进行初始化——位示图或空闲链表是文件系统的组成部分,必须在建立文件系统时初始化(全部标记为空闲)。选。
记忆抓手:凡是与”文件系统”有关的(根目录、空闲空间管理、引导块)都是逻辑格式化;凡是与”扇区”有关的(校验码、扇区大小)都是低级格式化;凡是与”分区表”有关的都是分区。
低级格式化与逻辑格式化的对照
两者最容易混,把它们的”产物”和”执行者”并列就清楚了:
低级格式化的产物是”扇区”这个概念本身——在此之前磁盘上只有连续的磁性介质,之后才有了可寻址的扇区。通常由厂商完成。
逻辑格式化的产物是”文件系统”——在此之前分区里只是一堆可用的扇区,之后才有了根目录、空闲空间表、引导块。由用户或安装程序完成。
一个额外的推论:低级格式化会真正抹掉数据(重写每个扇区的头尾),而日常说的”格式化 U 盘”通常只是逻辑格式化——它只重建文件系统结构,原有数据其实还在扇区里,这正是数据恢复软件能够工作的原因。
两种坏块处理方式对操作系统的可见性
这条对照的价值在于说明”抽象层次”:
FAT 标记 BAD 的做法,坏块对操作系统是可见的——文件系统知道哪些块不能用,并主动避开。
扇区备用/扇区滑动的做法,坏块对操作系统完全不可见——控制器在内部悄悄换了一个物理扇区,操作系统看到的仍是那个逻辑扇区号,读写照常成功。
后一种做法把问题解决在了更低的层次,因此上层什么都不用改。 这与 5.3.4 中固态硬盘的闪存翻译层是同一种思路——在硬件内部做一层映射,向上呈现一个理想化的设备。
对照速查
| 三道工序 | 产物 | 谁做 | 关键内容 |
|---|---|---|---|
| ① 低级格式化(物理格式化) | 扇区 | 通常厂商 | 头 + 数据区(512B) + 尾;扇区校验码 ECC |
| ② 分区 | 分区表 | 用户 | 把磁盘切成若干柱面组 |
| ③ 逻辑格式化(高级格式化) | 文件系统 | 用户/安装程序 | 根目录、空闲空间数据结构、引导块 |
| 一件事归哪道工序 | |
|---|---|
| 确定扇区校验码位数 | ① 低级格式化 |
| 对磁盘进行分区 | ② 分区 |
| 建立文件系统的根目录 | ③ 逻辑格式化 |
| 初始化空闲磁盘块数据结构 | ③ 逻辑格式化 |
| 产生操作系统引导扇区 | ③ 逻辑格式化 |
| 自举程序 | 位置 | 理由 |
|---|---|---|
| 自举装入程序(很小) | ROM | 开机时必须已经存在 |
| 完整的自举程序 | 磁盘的启动块 | 更新时不必更换 ROM |
| 坏块处理 | 做法 | 对操作系统 |
|---|---|---|
FAT 标记 BAD | 逻辑格式化时扫描并标记 | 可见 |
| 扇区备用 / 扇区滑动 | 控制器用备用扇区顶替 | 完全透明 |
考点
- 三道工序的顺序与边界:扇区 → 分区表 → 文件系统
- 引导扇区产生于逻辑格式化(高级格式化)
- 2017 真题:根目录与空闲空间数据结构属逻辑格式化;分区在其之前,校验码属低级格式化
- 自举程序分两段:ROM 里的装入程序 + 磁盘启动块上的完整程序
- 拥有启动分区的磁盘称为启动磁盘 / 系统磁盘
- 两种坏块处理的可见性不同:FAT 标记可见,扇区备用透明
链接
- 🏠 返回总览:操作系统第 5 章:输入/输出管理总览
- ⬅️ 上一节:5.3.1 磁盘
- ➡️ 下一节:5.3.3 磁盘调度算法
- 🔗 文件系统被建立成什么样,见 4.3.2 文件系统布局
- 📖 名词库:第 5 章名词库