5.3 磁盘与固态硬盘
磁盘的结构(盘面、磁道、扇区、柱面)与磁盘地址;磁盘的初始化、分区、引导块与坏块;寻道时间、旋转延迟与传输时间;FCFS、SSTF、SCAN、LOOK、C-SCAN、C-LOOK、N 步 SCAN、FSCAN 磁盘调度算法;减少旋转延迟的方法;固态硬盘的结构、读写特性与磨损均衡。
磁盘的结构
磁盘由表面涂有磁性物质的圆形盘片组成,每个盘片的上下两面都可以存储数据(称为盘面),每个盘面对应一个磁头。
- 磁道:盘面上的一组同心圆,每个磁道有相同的宽度,相邻磁道之间有一定的间隙;
- 扇区:每个磁道被划分为若干个弧段,即扇区,每个扇区存放相同数量的数据(如 512 B),因此内侧磁道的位密度比外侧高;扇区是磁盘读写的最小单位;
- 柱面:所有盘面上相对位置相同的磁道组成一个柱面。所有磁头都装在同一个磁臂上,一起沿半径方向移动,因此同一时刻所有磁头都位于同一个柱面上。
磁盘地址用 (柱面号,盘面号,扇区号) 表示。按磁头是否可移动,磁盘分为固定头磁盘(每个磁道一个磁头)和活动头磁盘(磁头可沿径向移动),常见的是活动头磁盘。
磁盘的管理
- 磁盘初始化:新磁盘要先进行低级格式化(物理格式化),把每个磁道划分为扇区。每个扇区由头、数据区(如 512 B)和尾三部分组成,头和尾中有扇区号、纠错码(ECC)等信息;
- 分区:把磁盘划分为一个或多个分区,每个分区由若干柱面组成,可以作为一个独立的逻辑磁盘;
- 逻辑格式化:在分区上创建文件系统,写入初始的文件系统数据结构(空闲空间、已分配空间的管理结构,以及一个空目录);
- 引导块:计算机启动时运行的自举程序负责初始化 CPU、寄存器、设备控制器和内存,然后启动操作系统。ROM 中只保留很小的自举装入程序,完整的自举程序存放在磁盘的启动块(引导块)中,启动块位于磁盘的固定位置。拥有启动分区的磁盘称为启动磁盘或系统磁盘;
- 坏块:对于简单的磁盘,坏块可以由文件系统手工标记(如在 FAT 中标明),使程序不会使用它;对于复杂的磁盘,控制器维护一个坏块链表,在低级格式化时用备用扇区替换坏块(扇区备用),这对操作系统透明。
磁盘的存取时间
一次磁盘读写操作的时间由三部分组成:
- 寻道时间 Ts:把磁头移动到指定磁道所需的时间。Ts = m × n + s,其中 s 为启动磁臂的时间,n 为跨越的磁道数,m 为跨越一个磁道的时间。题目中通常直接给出平均寻道时间;
- 旋转延迟时间 Tr:磁头定位到所要读写的扇区所需的时间。设磁盘转速为 r,则平均旋转延迟为转半圈的时间,即 Tr = 1 / (2r);
- 传输时间 Tt:从磁盘读出或向磁盘写入数据的时间。设每次读写 b 字节,一个磁道上有 N 字节,则 Tt = b / (rN)。
磁盘调度算法
寻道时间是存取时间中最主要的部分,也是唯一可以由操作系统通过调整服务次序来减少的部分。磁盘调度算法决定了多个磁盘访问请求的服务次序,目标是使平均寻道时间最短。
| 算法 | 思想 | 特点 |
|---|---|---|
| 先来先服务(FCFS) | 按请求到达的先后次序服务 | 公平,但平均寻道距离大,只适合请求很少的场合 |
| 最短寻找时间优先(SSTF) | 每次选择离当前磁头最近的磁道 | 每次寻道时间最短,但不能保证总寻道时间最短;可能产生饥饿(远处的请求长期得不到服务) |
| 扫描(SCAN,电梯算法) | 磁头沿一个方向移动,依次服务途中的请求,到达磁盘端点后才改变方向 | 不会饥饿;但对两端磁道的服务不均匀,刚被扫过的位置要等很久 |
| LOOK | 与 SCAN 相同,但在移动方向上没有请求时就立即掉头,不必走到端点 | SCAN 的改进,减少了无效移动 |
| 循环扫描(C-SCAN) | 只在一个方向上服务;到达端点后立即返回起始端,返回途中不服务 | 对各位置的等待时间更均匀 |
| C-LOOK | 与 C-SCAN 相同,但只走到最远的请求,然后直接跳到另一侧最远的请求 | C-SCAN 的改进 |
| N 步 SCAN | 把请求队列分成若干个长度为 N 的子队列,按 FCFS 依次处理各个子队列,每个子队列内部按 SCAN 处理;处理某个子队列时新到达的请求放入其他子队列 | 避免「磁臂粘着」;N 很大时接近 SCAN,N = 1 时退化为 FCFS |
| FSCAN | N 步 SCAN 的简化:只分两个子队列——当前所有请求按 SCAN 处理,扫描期间新到达的请求放入另一个队列,留到下一次扫描处理 | 同样避免磁臂粘着 |
在 SSTF、SCAN、C-SCAN 中,如果一个或几个进程对某一磁道的访问频率很高,反复请求同一磁道,磁臂可能长时间停留在那里不动,其他请求得不到服务,这种现象称为磁臂粘着。N 步 SCAN 和 FSCAN 正是为此提出的。
减少旋转延迟的方法
磁盘调度算法减少的是寻道时间。为了减少旋转延迟,可以:
- 交替编号:让逻辑上相邻的扇区在物理上有一定的间隔。因为读完一个扇区后需要一段时间处理数据,如果逻辑上相邻的扇区物理上也相邻,处理完时磁头已经错过下一个扇区,要再等将近一圈;
- 错位命名:让相邻盘面上同一位置的扇区编号错开,这样从一个盘面切换到下一个盘面时,不必再等待一圈才能读到下一个逻辑扇区。
固态硬盘(SSD)
固态硬盘是一种基于闪存技术的存储器,它与 U 盘没有本质区别,只是容量更大、存取性能更好。一个 SSD 由一个或多个闪存芯片和闪存翻译层组成:闪存翻译层负责把来自 CPU 的逻辑块读写请求翻译成对底层物理设备的读写控制信号,因此它相当于磁盘控制器。
一个闪存由若干块组成,每块由 32~128 页组成,页大小为 512 B~4 KB。其读写特性是:
- 数据以页为单位读写;
- 只有在一页所属的块整块被擦除后,才能写这一页。一旦一个块被擦除,块中的每一页都可以直接再写一次;
- 某个块进行了若干次(约 10⁵ 次)重复写之后就会磨损坏,不能再使用。
因此 SSD 的随机读很快;随机写较慢——写一页时,如果它所在的块中还有其他有效的页,要先把这些页复制到一个新的(已擦除的)块中,然后才能擦除原块并写入。SSD 没有机械部件,访问时间短、能耗低、抗震性好,但价格较高,而且有寿命限制。
为了延长寿命,闪存翻译层采用磨损均衡技术,把擦除平均分布在所有块上:
- 动态磨损均衡:写入数据时,自动选择擦除次数较少的新块;
- 静态磨损均衡:SSD 监测并自动进行数据分配,让老的块承担以读为主的存储任务(存放很少修改的数据),让较新的块承担更多的写任务。
即时练习
- 1若磁盘转速为 7200 转/分,平均寻道时间为 8 ms,每个磁道包含 1000 个扇区,则访问一个扇区的平均存取时间大约是( )。
- 2假设磁头当前位于第 105 道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35、45、12、68、110、180、170、195,采用 SCAN 调度(电梯调度)算法得到的磁道访问序列是( )。
- 3磁头当前在 100 号磁道,请求序列为 55、58、39、18、90、160、150、38、184,采用 SSTF 算法时磁头移动的总磁道数为( )。
- 4下列磁盘调度算法中,可能会产生「饥饿」现象的是( )。
- 5下列关于固态硬盘(SSD)的叙述中,错误的是( )。
- 6在磁盘上为逻辑上相邻的扇区安排一定的物理间隔,目的是( )。
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。