5.3 磁盘与固态硬盘

磁盘的结构(盘面、磁道、扇区、柱面)与磁盘地址;磁盘的初始化、分区、引导块与坏块;寻道时间、旋转延迟与传输时间;FCFS、SSTF、SCAN、LOOK、C-SCAN、C-LOOK、N 步 SCAN、FSCAN 磁盘调度算法;减少旋转延迟的方法;固态硬盘的结构、读写特性与磨损均衡。

考查要求 ★★★ 重点掌握 柱面-磁头-扇区存取时间 = 寻道 + 旋转延迟 + 传输SSTF 的饥饿SCAN 与 LOOKC-SCAN 与 C-LOOKN 步 SCAN 与 FSCAN交替编号与错位命名SSD 的读写特性与磨损均衡

磁盘的结构

磁盘由表面涂有磁性物质的圆形盘片组成,每个盘片的上下两面都可以存储数据(称为盘面),每个盘面对应一个磁头。

  • 磁道:盘面上的一组同心圆,每个磁道有相同的宽度,相邻磁道之间有一定的间隙;
  • 扇区:每个磁道被划分为若干个弧段,即扇区,每个扇区存放相同数量的数据(如 512 B),因此内侧磁道的位密度比外侧高;扇区是磁盘读写的最小单位;
  • 柱面:所有盘面上相对位置相同的磁道组成一个柱面。所有磁头都装在同一个磁臂上,一起沿半径方向移动,因此同一时刻所有磁头都位于同一个柱面上。

磁盘地址用 (柱面号,盘面号,扇区号) 表示。按磁头是否可移动,磁盘分为固定头磁盘(每个磁道一个磁头)和活动头磁盘(磁头可沿径向移动),常见的是活动头磁盘。

磁盘的管理

  • 磁盘初始化:新磁盘要先进行低级格式化(物理格式化),把每个磁道划分为扇区。每个扇区由头、数据区(如 512 B)和尾三部分组成,头和尾中有扇区号、纠错码(ECC)等信息;
  • 分区:把磁盘划分为一个或多个分区,每个分区由若干柱面组成,可以作为一个独立的逻辑磁盘;
  • 逻辑格式化:在分区上创建文件系统,写入初始的文件系统数据结构(空闲空间、已分配空间的管理结构,以及一个空目录);
  • 引导块:计算机启动时运行的自举程序负责初始化 CPU、寄存器、设备控制器和内存,然后启动操作系统。ROM 中只保留很小的自举装入程序,完整的自举程序存放在磁盘的启动块(引导块)中,启动块位于磁盘的固定位置。拥有启动分区的磁盘称为启动磁盘或系统磁盘;
  • 坏块:对于简单的磁盘,坏块可以由文件系统手工标记(如在 FAT 中标明),使程序不会使用它;对于复杂的磁盘,控制器维护一个坏块链表,在低级格式化时用备用扇区替换坏块(扇区备用),这对操作系统透明。

磁盘的存取时间

一次磁盘读写操作的时间由三部分组成:

  1. 寻道时间 Ts:把磁头移动到指定磁道所需的时间。Ts = m × n + s,其中 s 为启动磁臂的时间,n 为跨越的磁道数,m 为跨越一个磁道的时间。题目中通常直接给出平均寻道时间;
  2. 旋转延迟时间 Tr:磁头定位到所要读写的扇区所需的时间。设磁盘转速为 r,则平均旋转延迟为转半圈的时间,即 Tr = 1 / (2r);
  3. 传输时间 Tt:从磁盘读出或向磁盘写入数据的时间。设每次读写 b 字节,一个磁道上有 N 字节,则 Tt = b / (rN)。
Ta=Ts+12r+brNT_a = T_s + \frac{1}{2r} + \frac{b}{rN}
计算器磁盘的平均存取时间
转一圈 = 60 s / 7200 = 8.333 ms
■ 寻道时间 Ts = 8 ms
■ 平均旋转延迟 = 半圈 = 1 / (2r) = 4.167 ms
■ 传输时间 = 1 / 1000 圈 = 0.008 ms
平均存取时间 Ta = Ts + 1/(2r) + b/(rN) = 12.175 ms
寻道时间和旋转延迟通常占了绝大部分,传输时间很短。因此磁盘调度算法主要用来减少寻道时间,而交替编号、错位命名等方法用来减少旋转延迟。

磁盘调度算法

寻道时间是存取时间中最主要的部分,也是唯一可以由操作系统通过调整服务次序来减少的部分。磁盘调度算法决定了多个磁盘访问请求的服务次序,目标是使平均寻道时间最短。

算法思想特点
先来先服务(FCFS)按请求到达的先后次序服务公平,但平均寻道距离大,只适合请求很少的场合
最短寻找时间优先(SSTF)每次选择离当前磁头最近的磁道每次寻道时间最短,但不能保证总寻道时间最短;可能产生饥饿(远处的请求长期得不到服务)
扫描(SCAN,电梯算法)磁头沿一个方向移动,依次服务途中的请求,到达磁盘端点后才改变方向不会饥饿;但对两端磁道的服务不均匀,刚被扫过的位置要等很久
LOOK与 SCAN 相同,但在移动方向上没有请求时就立即掉头,不必走到端点SCAN 的改进,减少了无效移动
循环扫描(C-SCAN)只在一个方向上服务;到达端点后立即返回起始端,返回途中不服务对各位置的等待时间更均匀
C-LOOK与 C-SCAN 相同,但只走到最远的请求,然后直接跳到另一侧最远的请求C-SCAN 的改进
N 步 SCAN把请求队列分成若干个长度为 N 的子队列,按 FCFS 依次处理各个子队列,每个子队列内部按 SCAN 处理;处理某个子队列时新到达的请求放入其他子队列避免「磁臂粘着」;N 很大时接近 SCAN,N = 1 时退化为 FCFS
FSCANN 步 SCAN 的简化:只分两个子队列——当前所有请求按 SCAN 处理,扫描期间新到达的请求放入另一个队列,留到下一次扫描处理同样避免磁臂粘着
动画演示磁盘调度算法:磁头移动轨迹
050100150199累计移动 0 道
1/11磁头当前在 100 号磁道。待访问:55、58、39、18、90、160、150、38、184

在 SSTF、SCAN、C-SCAN 中,如果一个或几个进程对某一磁道的访问频率很高,反复请求同一磁道,磁臂可能长时间停留在那里不动,其他请求得不到服务,这种现象称为磁臂粘着。N 步 SCAN 和 FSCAN 正是为此提出的。

减少旋转延迟的方法

磁盘调度算法减少的是寻道时间。为了减少旋转延迟,可以:

  • 交替编号:让逻辑上相邻的扇区在物理上有一定的间隔。因为读完一个扇区后需要一段时间处理数据,如果逻辑上相邻的扇区物理上也相邻,处理完时磁头已经错过下一个扇区,要再等将近一圈;
  • 错位命名:让相邻盘面上同一位置的扇区编号错开,这样从一个盘面切换到下一个盘面时,不必再等待一圈才能读到下一个逻辑扇区。

固态硬盘(SSD)

固态硬盘是一种基于闪存技术的存储器,它与 U 盘没有本质区别,只是容量更大、存取性能更好。一个 SSD 由一个或多个闪存芯片和闪存翻译层组成:闪存翻译层负责把来自 CPU 的逻辑块读写请求翻译成对底层物理设备的读写控制信号,因此它相当于磁盘控制器。

一个闪存由若干块组成,每块由 32~128 页组成,页大小为 512 B~4 KB。其读写特性是:

  • 数据以页为单位读写;
  • 只有在一页所属的块整块被擦除后,才能写这一页。一旦一个块被擦除,块中的每一页都可以直接再写一次;
  • 某个块进行了若干次(约 10⁵ 次)重复写之后就会磨损坏,不能再使用。

因此 SSD 的随机读很快;随机写较慢——写一页时,如果它所在的块中还有其他有效的页,要先把这些页复制到一个新的(已擦除的)块中,然后才能擦除原块并写入。SSD 没有机械部件,访问时间短、能耗低、抗震性好,但价格较高,而且有寿命限制。

为了延长寿命,闪存翻译层采用磨损均衡技术,把擦除平均分布在所有块上:

  • 动态磨损均衡:写入数据时,自动选择擦除次数较少的新块;
  • 静态磨损均衡:SSD 监测并自动进行数据分配,让老的块承担以读为主的存储任务(存放很少修改的数据),让较新的块承担更多的写任务。

即时练习

即时练习6 题
点击选项即可作答
  1. 1
    若磁盘转速为 7200 转/分,平均寻道时间为 8 ms,每个磁道包含 1000 个扇区,则访问一个扇区的平均存取时间大约是( )。
  2. 2
    假设磁头当前位于第 105 道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35、45、12、68、110、180、170、195,采用 SCAN 调度(电梯调度)算法得到的磁道访问序列是( )。
  3. 3
    磁头当前在 100 号磁道,请求序列为 55、58、39、18、90、160、150、38、184,采用 SSTF 算法时磁头移动的总磁道数为( )。
  4. 4
    下列磁盘调度算法中,可能会产生「饥饿」现象的是( )。
  5. 5
    下列关于固态硬盘(SSD)的叙述中,错误的是( )。
  6. 6
    在磁盘上为逻辑上相邻的扇区安排一定的物理间隔,目的是( )。
学完了吗?

标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。