磁盘
磁盘管理
选择题中考察,重点掌握两点:1. 物理格式化和逻辑格式化的区别。2. 系统引导流程。
磁盘结构
机械磁盘由一个或多个盘片组成;每个盘片的一个可记录面称为盘面。盘面上的同心圆是磁道,磁道再划分为若干扇区。同一半径、不同盘面上的磁道组成一个柱面;磁臂移动时,多个读写磁头会随之移动到同一柱面。磁头寻道调度关心的是柱面 / 磁道位置,而不是扇区在一圈中的具体角度。
| 名称 | 含义 | 做题时的作用 |
|---|---|---|
| 盘面 | 一张盘片的一个可记录表面 | 一个盘面上有许多磁道 |
| 磁道 | 盘面上的同心圆记录区域 | 寻道时间取决于磁头跨越的磁道距离 |
| 扇区 | 磁道划分出的最小物理读写单位 | 一次请求可覆盖一个或多个扇区 |
| 柱面 | 所有盘面上半径相同的磁道集合 | 多个磁头无需移动磁臂即可切换同一柱面的盘面 |
| 盘块 | 操作系统 / 文件系统管理的逻辑单位,常由若干扇区组成 | 不要把“文件系统块大小”误当成固定的物理扇区大小 |
磁盘初始化
一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须对其进行 物理格式化(也叫做 低级格式化)。
物理格式化是指在磁盘的物理表面上创建 磁道(track)、扇区(sector)、写入控制信息 以及 测试和标记坏扇区等过程。通过这一过程,磁盘被划分为可供读写头访问的物理存储单元,为数据存储和检索提供基础结构。
它处理的是介质与控制器可识别的物理布局,还会记录校验、备用扇区等信息;它本身不会创建目录、文件名或空闲块表。
一般来说,现代硬盘在出厂时已完成 物理格式化,并优化了 磁道 和 扇区 的布局。用户通常只需进行 逻辑格式化 即可使用。
分区
在使用磁盘存储文件之前,操作系统通常先对磁盘进行 分区,将磁盘划分为若干 逻辑存储区域。每个分区可以独立格式化并使用不同的文件系统,为数据的组织和管理提供基础。每个分区的起始扇区、大小等信息记录在相应的分区表中:传统磁盘使用 MBR 分区表,现代系统也可使用 GPT,不能把 GPT 的分区信息说成存放在 MBR 的分区表中。
分区表是存储在磁盘 主引导记录(MBR)或 GUID 分区表(GPT)中的关键数据结构,用于描述磁盘的分区布局(简单了解即可):
- 在 MBR 结构中,分区表位于磁盘的第一个扇区(主引导记录),最多支持 4 个主分区或 3 个主分区加 1 个扩展分区,每个分区记录包含起始扇区、结束扇区、分区类型和大小等信息。
- GPT 结构使用更现代的设计,支持更多的分区(通常 128 个),并存储在磁盘的前几个扇区,提供更高的可靠性和大容量磁盘支持。分区表的存在使操作系统能够准确识别和访问各个分区,确保数据存储的有序性和兼容性。
下图是一个 MBR 分区表的结构:
完成分区后,需对每个分区进行 逻辑格式化(也称高级格式化)。逻辑格式化负责创建文件系统结构,使操作系统能够识别、组织和管理磁盘上的数据,主要包括生成文件系统的元数据、分配表和目录结构等。
| 操作 | 处理对象 | 产物 | 不能替代 |
|---|---|---|---|
| 物理格式化 | 盘面与扇区布局 | 可供控制器寻址的物理记录单元、坏扇区标记 | 不能创建文件系统 |
| 分区 | 连续逻辑扇区范围 | 分区表与若干逻辑区域 | 不能直接保存有目录结构的文件 |
| 逻辑格式化 | 一个分区 | 文件系统元数据、根目录 / 分配结构 | 不能修复真正损坏的物理介质 |
物理格式化和逻辑格式化对比
物理格式化(低级格式化)是在磁盘物理层面创建磁道、扇区和控制信息的过程,通常由制造商出厂时完成。它直接处理磁盘的硬件结构,并测试、标记坏扇区,为数据存储提供物理基础;对现代硬盘而言,这不是用户日常执行的“清空磁盘”操作。
逻辑格式化(高级格式化)是在物理格式化基础上创建文件系统(如 NTFS、FAT32)的过程,由用户通过操作系统完成。它组织数据的逻辑结构,如文件分配表和目录,方便操作系统管理数据。
引导流程
在计算机启动时,初始化硬件并加载操作系统的过程依赖于一系列 引导程序。传统 BIOS/MBR 与现代 UEFI/GPT 是两条不同的常见路径,不能把“UEFI 固件”直接等同于“读取并执行 MBR 引导代码”。
传统 BIOS/MBR 启动流程如下:
- ROM/Flash 中的 BIOS 固件:计算机加电后,固件执行自检、初始化硬件并寻找可启动设备,然后把磁盘第 0 号扇区中的 MBR 读入内存。
- MBR 中的 Bootloader:MBR 包含引导代码、分区表和引导签名。引导代码解析分区表,找到活动分区,并加载该分区的第一个扇区。
- 分区启动扇区(Boot Sector):其中包含特定于操作系统的后续引导代码,例如 Windows 或 Linux 引导程序的一部分;它继续加载更完整的引导程序、操作系统内核和必要组件。
- 操作系统初始化程序:内核取得控制权后初始化内存、设备驱动和其他运行环境,再启动系统初始化程序与用户空间服务。
因此,传统 启动流程 可以概括为:BIOS 固件 → MBR 中的 Bootloader → 分区启动扇区中的引导程序 → 操作系统内核与初始化程序。
现代 UEFI/GPT 路径则通常是:UEFI 固件 → 读取 GPT 与 EFI 系统分区(ESP)→ 直接加载 .efi 引导程序 → 操作系统内核与初始化程序。UEFI 固件可提供兼容模式,但这不改变两条原生路径在考点上的区别。
坏块
随着时间的推移,物理磁盘上可能会出现无法读写的区域,这些区域被称为 坏块。坏块可以是出厂时就存在的,也可以是由于磁盘的长期使用和磨损导致的。
对坏块的处理实质上就是使用某种机制使系统不去使用 坏块。
处理可分为两层:控制器可把发现的坏扇区重映射到备用扇区,这对上层通常透明;文件系统也可把无法继续使用的逻辑块标记为不可分配。后一种做法只是绕开故障位置,不能让损坏介质恢复正常。
固态硬盘
固态硬盘(SSD)使用闪存页(page)进行读写、按更大的擦除块(block)擦除。修改一个已经写过的位置时,控制器通常先把新版本写到空闲页,再通过闪存转换层(FTL)更新逻辑块地址到物理页的映射;后台垃圾回收再集中擦除含有无效页的块。
SSD 没有机械寻道和旋转延迟,因此 FCFS、SSTF、SCAN、C-SCAN 这类“减少磁头移动”的算法不能直接套用。但闪存块有有限擦写寿命,控制器会用磨损均衡把写入分散到不同块:动态磨损均衡优先选择擦写较少的空闲块,静态磨损均衡还会搬移长期不变的冷数据,以避免少数块过早耗尽寿命。
机械硬盘调度算法
常在选择题中考察,也偶在大题中考察。需要掌握不同 磁盘调度算法 的工作方式,以及如何计算相应的性能指标。
在 磁盘性能指标 我们知道 磁盘数据读取时间 包含 寻道时间、旋转延迟 以及 传输时间。在一个时刻,磁盘可能有多个数据读写请求,这些数据可能分布在不同的 磁道 上,如何分配处理这些读写请求的顺序,也很大程度上影响了磁盘的性能。
磁盘调度算法主要优化的是 ,而不是把旋转延迟或传输时间变为零。
磁道的编号顺序
磁盘表面被划分为同心圆,这些同心圆称为 磁道。教材和题目通常约定最外侧磁道编号较小(例如 0 号磁道),向内编号递增;但磁道编号是寻址约定,与盘片从何处“开始旋转”没有因果关系。计算题应始终以题目给出的编号方向和磁头初始移动方向为准。
磁盘寻道调度算法包含以下几种:
FCFS
FCFS 即 First Come First Service,先来先服务算法。
FCFS 是一种最简单的磁盘调度算法,按照请求到达的先后顺序依次处理磁盘访问任务。
假设磁头初始位于 100 号磁道,磁道范围为 0~200,当前请求按 55、58、39、18、90、160、150、38、184 的顺序到达,那么 FCFS 会有如下图所示的访问顺序:
FCFS 磁头为何累计移动 498 个磁道
从 100 号磁道出发,按请求到达顺序逐步累加每一段寻道距离。
初始位于 100尚未服务请求,累计移动 0。
总移动量为:
然而,由于不考虑磁头当前位置与请求位置的距离,磁头可能频繁长距离移动,导致 平均寻道时间较长,尤其在请求分布不均时效率低下。
本节算法针对 机械硬盘 的磁头寻道讨论。对于 固态硬盘,不存在机械寻道和旋转延迟,因此不应照搬这些优化磁头移动距离的算法;简单调度通常已足够高效。
SSTF
SSTF 即 Shortest Seek Time First,最短寻道时间优先算法。
磁盘进行调度时每次都选择 距离当前磁头位置最近的请求 进行服务。旨在最小化磁头的移动距离,从而降低平均寻道时间。它的核心思想是“贪心”,每次选择最优的下一步。
沿用上例,SSTF 的访问顺序为 100 → 90 → 58 → 55 → 39 → 38 → 18 → 150 → 160 → 184:
SSTF 每一步如何选择最近请求
从 100 号磁道开始逐轮比较剩余请求,观察贪心选择的服务顺序和累计移动量。
初始位于 100最近的请求是 90。
虽然 SSTF 在减少寻道时间上表现优异,但可能导致“饥饿”问题,即远离磁头的请求长时间得不到服务。SSTF 适用于请求分布较均匀的场景,但在请求密集或分布极不均的情况下可能不够公平。
SCAN
SCAN 即 电梯调度算法。
磁头从一个方向开始移动,沿途服务请求,到达磁盘端点后 改变方向并继续服务请求。因为磁头移动规律与电梯运行类似,所以这种算法也称为电梯调度算法。若磁头只移动到该方向的最远请求便反向,而不到达物理端点,则是 LOOK,不要与 SCAN 混淆。
假设在当前时刻,磁道 55、58、39、18、90、160、150、38、184 正在等待服务,磁头正在向内移动(向更高编号的磁道移动),那么 SCAN 会有如下图所示的访问顺序:
沿用上例并设磁头先向高号方向移动:
服务路径为 100 → 150 → 160 → 184 → 200 → 90 → 58 → 55 → 39 → 38 → 18。其中 200 是磁盘端点,不是请求。
SCAN 先向高号磁道移动的完整轨迹
从 100 号磁道出发,依次观察沿途请求、必须到达的 200 号端点以及反向后的服务顺序。
磁头初始位于 100初始方向为向高号磁道移动;100 不是待处理请求。
SCAN 的优点是有效减少了磁头移动距离,同时避免了 SSTF 的 饥饿问题,因为所有请求最终都会被处理。它在高负载场景下表现良好,但对于靠近磁盘边界或反向区域的请求可能等待时间稍长。SCAN 广泛应用于需要平衡效率与公平性的场景。
C-SCAN
C-SCAN 即 Circular SCAN,循环扫描算法。
和 SCAN 相似,但进行了一些改进。在 C-SCAN 中,磁头始终沿一个方向移动(例如向外),处理沿途请求,到达磁盘边界后立即返回到另一端(例如最内侧)开始新一轮扫描,而不处理返回路径上的请求。
沿用上例并设磁头始终向高号方向服务:
服务路径为 100 → 150 → 160 → 184 → 200 → 0 → 18 → 38 → 39 → 55 → 58 → 90。从 200 回到 0 的回卷路程仍计入磁头移动量,但回卷途中不服务请求。
C-SCAN 回卷后为何仍只沿高号方向服务
从 100 向高号磁道移动,到 200 后回卷至 0,再继续按同一方向服务剩余请求。
初始位于 100初始方向为向高号磁道移动,累计 0。
C-SCAN 的优点是提供 更均匀的等待时间,尤其对不同磁道位置的请求更公平,因为它避免了 SCAN 中双向服务带来的位置偏向。它的总寻道距离可能大于 SCAN,适用于更强调等待时间均匀性的场景;但它本身不提供实时系统所需的截止期保证。
若题目规定“到本方向最远的请求就折返 / 回卷”,而不是必须到物理端点,则分别是 LOOK / C-LOOK;计算时不能擅自把路径延长到 0 或最大磁道号。
总结
| 算法 | 选择规则 | 优点 | 缺点 | 上例总移动量 |
|---|---|---|---|---|
| FCFS | 按请求到达顺序 | 公平、简单 | 可能不是最优,磁盘臂移动距离可能很长 | 498 |
| SSTF | 每次选择最近请求 | 通常比 FCFS 更高效,局部最小化磁盘臂移动 | 可能导致远端请求长时间延迟或饿死 | 248 |
| SCAN | 双向扫描,到端点后反向 | 避免长时间等待,效率与公平性较均衡 | 不同位置的等待时间仍可能不均匀 | 282 |
| C-SCAN | 单向服务,到端点后回卷 | 提供更均匀的等待时间 | 回卷路程不服务请求,总移动量可能更大 | 390 |
若题目要求平均寻道长度,可用
其中 是总磁头移动量, 是请求数。本例 ;计算时必须先写清磁头初始位置、磁道范围和初始移动方向。
调度计算题的统一步骤
- 写出磁头初始位置、请求序列、磁道边界和初始方向;这些条件缺一项,SCAN / C-SCAN 的路径可能不同。
- 按算法规则列出服务路径,并把端点或 C-SCAN 的回卷点明确写入路径;端点不是请求也要计入移动距离。
- 对相邻位置逐段取绝对值求和得到 (D)。只有题目要求平均寻道长度时,才再除以请求数 (n)。