Disk Scheduling And Management
磁盘访问时间
平均存取时间可写为:
$$
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 的实际优化方式处理,把 C-SCAN 按 C-LOOK 处理。关键是看是否要求磁头必须走到最边界。
减少旋转延迟的方法
磁盘调度主要减少寻道时间,而连续读写还可能受到旋转延迟影响。为了减少连续块读取时的等待,可以调整扇区编号和地址结构。
交替编号
如果逻辑上相邻的扇区在物理上也紧挨着,读取完一个扇区后,系统还需要一点处理时间。处理完成时,下一个扇区可能已经转过磁头,只能等它再转一圈。
交替编号让逻辑相邻扇区在物理位置上隔开一段距离,使处理时间刚好被旋转过程吸收。
错位命名
多个盘面一起旋转。读完一个盘面的最后几个扇区后,系统切换到另一个盘面也需要处理时间。
错位命名让相邻盘面上的扇区编号错开,使切换盘面后,目标扇区更可能刚好转到磁头下方。
磁盘初始化
引导发生之前,磁盘必须已经完成了从物理到逻辑的逐级准备工作。四个阶段有严格的先后顺序——前一步没完成,后一步无法执行。
| 阶段 | 时机 | 执行者 | 作用 |
|---|---|---|---|
| 低级格式化 | 磁盘出厂时 | 制造商 | 将磁道划分为扇区,建立扇区头、数据区、校验等物理结构 |
| 分区 | 装机或重装系统时 | 用户 / 安装程序 | 把磁盘划分为若干分区,写入分区表 |
| 逻辑格式化 | 装机或重装系统时,紧接分区之后 | 操作系统安装程序 | 在分区上创建文件系统,建立根目录和空闲空间管理结构 |
| 安装操作系统 | 装机或重装系统时,紧接逻辑格式化之后 | 操作系统安装程序 | 向分区写入系统文件、引导程序和必要配置 |
低级格式化只在工厂做一次,普通用户接触不到。日常重装系统时,执行的是后三步:删除旧分区 → 新建分区 → 逻辑格式化 → 安装 OS。
低级格式化
低级格式化把磁盘表面划分为可由控制器识别的扇区。每个扇区不只包含用户数据区,还包含扇区头(标识扇区位置)和校验信息(用于检测读写错误)。低级格式化由制造商在出厂前完成,普通用户不会接触到这一步,也极少需要重做。
分区
分区把一块物理磁盘划分为若干逻辑区域。每个分区在操作系统看来可以像一块相对独立的磁盘来使用。分区通常在装机或重装系统时由用户(通过安装程序或磁盘工具)完成,分区工具会写入分区表记录每个分区的起始位置、大小和类型。
逻辑格式化
逻辑格式化由操作系统安装程序在分区之后立即执行。它在分区上建立文件系统,创建文件系统元数据:根目录、空闲空间管理结构(如空闲块链表或位图)、文件控制结构(如 inode)等。逻辑格式化完成后,操作系统才能按文件名创建、查找、读写和删除文件。日常使用中的”格式化 U 盘”就是这一层操作。
坏块管理
坏块是无法正常读写的扇区或块,属于硬件故障。操作系统不能真正修复坏块,只能避免继续使用它。
常见处理方式:
| 情况 | 处理方式 | 对 OS 是否透明 |
|---|---|---|
| 简单磁盘 | 逻辑格式化时检查坏块,并在 FAT 或相关结构中标记 | 不透明,OS 知道坏块存在 |
| 复杂磁盘 | 磁盘控制器维护坏块链表,并用备用扇区替换坏块 | 透明,OS 看到的是可用逻辑扇区 |
备用扇区替换也称扇区备用。它把坏块处理下移到磁盘控制器内部,使上层系统不用直接处理物理坏扇区。