磁盘访问时间

平均存取时间可写为:

$$
T_a=T_s+T_r+T_t
$$

时间 含义
寻道时间 $T_s$ 磁头移动到目标磁道所需时间
旋转延迟 $T_r$ 目标扇区转到磁头下方所需时间
传输时间 $T_t$ 数据真正读出或写入所需时间

寻道时间不仅包含磁头跨越磁道的移动时间,还包含磁臂启动时间。若启动磁臂耗时为 $s$,磁头每跨越一个磁道耗时为 $m$,本次需要跨越 $n$ 个磁道,则:

$$
T_s=s+m\times n
$$

如果磁盘转速为 $r$,这里 $r$ 表示每秒转数,则平均旋转延迟为:

$$
T_r=\frac{1}{2r}
$$

如果本次读写字节数为 $b$,每个磁道可存 $N$ 字节,则传输时间为:

$$
T_t=\frac{b}{rN}
$$

因此总时间也可写成:

$$
T_a=s+mn+\frac{1}{2r}+\frac{b}{rN}
$$

磁盘调度算法直接影响的是 $n$,也就是磁头移动距离。旋转延迟和传输时间主要由转速、数据量和磁道容量决定,操作系统通常不能通过改变请求顺序直接优化这两项。

磁盘调度算法

当多个进程同时请求访问不同磁道时,操作系统可以改变请求处理顺序,从而减少磁头总移动距离。进而减少寻道时间。

常见算法如下。

算法 基本思想 优点 问题
FCFS 按请求到达顺序服务 公平,实现简单 请求分散时寻道距离长
SSTF 每次选择距离当前磁头最近的请求 平均寻道时间较短 远处请求可能饥饿
SCAN 磁头像电梯一样沿一个方向服务,到边界后反向 避免 SSTF 的局部来回 不同位置响应频率不完全均匀
LOOK SCAN 的优化,方向上没有请求就反向 不必走到最边界 刚错过当前扫描方向的请求要等磁头反向后才会被服务
C-SCAN 只在一个方向服务,回程不服务 各位置响应更均匀 平均寻道可能较长
C-LOOK C-SCAN 的优化,只回到最靠边的请求位置 减少无意义移动 从最大请求位置回到最小请求位置的移动不服务任何请求
  • FCFS 按请求到达顺序处理。它不会主动优化磁头移动,因此最公平,也最容易出现长距离来回移动。适合请求较少或请求位置比较集中的情况。
  • SSTF 每次选择离当前磁头最近的磁道。它是一种贪心策略,只保证当前一步的寻道距离最短,不保证全局最优。如果不断有靠近当前磁头的新请求到达,远处请求可能长期得不到服务,即会有饥饿

  • SCAN 规定磁头沿一个方向移动并服务沿途请求,到达边界后再反向。它像电梯运行,所以也叫电梯算法。LOOK 是 SCAN 的优化,它不要求磁头移动到最边界。如果当前方向上已经没有请求,就立即反向。

  • C-SCAN 只在一个方向上服务请求。磁头到达边界后快速回到另一端,回程不服务请求。C-LOOK 是 C-SCAN 的优化:不必回到物理边界,只需要回到当前请求序列中最靠边的请求位置。

SCAN 与 LOOK

若没有特别说明,很多场景会把 SCANLOOK 的实际优化方式处理,把 C-SCANC-LOOK 处理。关键是看是否要求磁头必须走到最边界。

减少旋转延迟的方法

磁盘调度主要减少寻道时间,而连续读写还可能受到旋转延迟影响。为了减少连续块读取时的等待,可以调整扇区编号和地址结构。

交替编号

如果逻辑上相邻的扇区在物理上也紧挨着,读取完一个扇区后,系统还需要一点处理时间。处理完成时,下一个扇区可能已经转过磁头,只能等它再转一圈。

交替编号让逻辑相邻扇区在物理位置上隔开一段距离,使处理时间刚好被旋转过程吸收。

错位命名

多个盘面一起旋转。读完一个盘面的最后几个扇区后,系统切换到另一个盘面也需要处理时间。

错位命名让相邻盘面上的扇区编号错开,使切换盘面后,目标扇区更可能刚好转到磁头下方。

磁盘初始化

引导发生之前,磁盘必须已经完成了从物理到逻辑的逐级准备工作。四个阶段有严格的先后顺序——前一步没完成,后一步无法执行。

阶段 时机 执行者 作用
低级格式化 磁盘出厂时 制造商 将磁道划分为扇区,建立扇区头、数据区、校验等物理结构
分区 装机或重装系统时 用户 / 安装程序 把磁盘划分为若干分区,写入分区表
逻辑格式化 装机或重装系统时,紧接分区之后 操作系统安装程序 在分区上创建文件系统,建立根目录和空闲空间管理结构
安装操作系统 装机或重装系统时,紧接逻辑格式化之后 操作系统安装程序 向分区写入系统文件、引导程序和必要配置

低级格式化只在工厂做一次,普通用户接触不到。日常重装系统时,执行的是后三步:删除旧分区 → 新建分区 → 逻辑格式化 → 安装 OS。

低级格式化

低级格式化把磁盘表面划分为可由控制器识别的扇区。每个扇区不只包含用户数据区,还包含扇区头(标识扇区位置)和校验信息(用于检测读写错误)。低级格式化由制造商在出厂前完成,普通用户不会接触到这一步,也极少需要重做。

分区

分区把一块物理磁盘划分为若干逻辑区域。每个分区在操作系统看来可以像一块相对独立的磁盘来使用。分区通常在装机或重装系统时由用户(通过安装程序或磁盘工具)完成,分区工具会写入分区表记录每个分区的起始位置、大小和类型。

逻辑格式化

逻辑格式化由操作系统安装程序在分区之后立即执行。它在分区上建立文件系统,创建文件系统元数据:根目录、空闲空间管理结构(如空闲块链表或位图)、文件控制结构(如 inode)等。逻辑格式化完成后,操作系统才能按文件名创建、查找、读写和删除文件。日常使用中的”格式化 U 盘”就是这一层操作。

坏块管理

坏块是无法正常读写的扇区或块,属于硬件故障。操作系统不能真正修复坏块,只能避免继续使用它。

常见处理方式:

情况 处理方式 对 OS 是否透明
简单磁盘 逻辑格式化时检查坏块,并在 FAT 或相关结构中标记 不透明,OS 知道坏块存在
复杂磁盘 磁盘控制器维护坏块链表,并用备用扇区替换坏块 透明,OS 看到的是可用逻辑扇区

备用扇区替换也称扇区备用。它把坏块处理下移到磁盘控制器内部,使上层系统不用直接处理物理坏扇区。