操作系统磁盘管理
磁盘是计算机系统中最重要的辅助存储器(外存),本文介绍磁盘的物理结构(盘面、磁道、扇区、柱面)、存取时间(寻道时间、旋转延迟、传输时间)、常用的磁盘调度算法(如FCFS、SSTF、SCAN、C-SCAN、LOOK/C-LOOK)以及磁盘空闲空间管理方法(如空闲块链表、位示图、成组链接法)。
文章目录
一、定义与本质
磁盘是计算机系统中最重要的辅助存储器(外存),具有存储容量大、成本低、可脱机永久保存信息的特点,但存取速度相对内存较慢。磁盘管理是操作系统的核心功能之一,主要包括磁盘结构认知、存取时间计算、磁盘调度算法和空闲空间管理四个核心板块。
二、磁盘物理结构
1. 基本组成
磁盘由多个盘面堆叠而成,每个盘面划分为若干同心圆环磁道,磁道沿半径方向从外向内编号(0号磁道在最外侧)。每个磁道又被划分为若干弧段扇区,扇区是磁盘读写的最小单位,通常为512字节或4KB。同一半径位置上所有盘面的磁道构成一个柱面。
| 术语 | 说明 |
|---|---|
| 盘面 | 磁盘的一个记录面,每个盘面对应一个磁头 |
| 磁道 | 盘面上的同心圆环,信息记录在磁道上 |
| 扇区 | 磁道上划分的弧段,数据读写的最小单位 |
| 柱面 | 相同半径上所有磁道的集合,同一柱面的数据无需移动磁头即可读写 |
2. 格式化容量
磁盘容量有非格式化容量和格式化容量之分。非格式化容量是磁记录表面可利用的磁化单元总数;格式化容量是按特定记录格式存储信息的总量,即用户真正可用的容量。格式化容量一般为非格式化容量的60%~70%,因为格式化操作需要写入扇区标识、校验码等额外信息。
磁盘的物理结构可类比老式唱片机,唱片表面有若干圈音轨(磁道),每圈音轨被划分为若干音段(扇区),唱针(磁头)在音轨上移动来读取音乐(数据)。
三、磁盘存取时间
1. 时间构成
一次磁盘读写操作所需的时间由三部分组成:
| 时间类型 | 含义 | 可否优化 |
|---|---|---|
| 寻道时间 | 磁头臂移动到目标磁道所需的时间 | 可通过调度算法优化 |
| 旋转延迟时间 | 磁头定位后,目标扇区旋转到磁头下方的时间 | 与转速有关,不可通过算法优化 |
| 传输时间 | 实际读写数据的时间 | 与数据量和转速有关 |
存取时间公式:
存取时间 = 寻道时间 + 旋转延迟时间 + 传输时间
2. 平均存取时间
- 平均寻道时间:磁头从任意位置移动到任意磁道的平均时间,通常为最大寻道时间的一半,典型值为10~20ms。
- 平均旋转延迟:磁盘旋转一周所需时间的一半。若转速为r转/秒,则平均旋转延迟 = 1/(2r) 秒。例如转速为6000转/分(100转/秒),平均旋转延迟 = 1/(2×100) = 5ms。
寻道时间在存取时间中占比最大,因此磁盘调度算法的核心目标是减少平均寻道时间。
3. 示例
例题: 某磁盘磁头从一个磁道移至另一个磁道需要10ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均移动距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和2ms,则读取一个100块的文件需要( )ms时间。(假设无磁盘调度或每次访问均需独立寻道)
解析:
- 每块平均寻道时间 = 10 × 10 = 100ms
- 每块总时间 = 寻道时间 + 旋转延迟 + 传输时间 = 100 + 100 + 2 = 202ms
- 100块总时间 = 202 × 100 = 20200ms
四、磁盘调度算法
磁盘调度算法通过优化请求的响应顺序来减少磁头移动距离,从而降低平均寻道时间。
1. 先来先服务(FCFS)
按请求到达的先后次序进行调度。
| 优点 | 缺点 |
|---|---|
| 公平、简单,每个请求都能得到处理 | 平均寻道距离较大,性能较差 |
适用场景:磁盘I/O请求较少的场合。
2. 最短寻道时间优先(SSTF)
优先选择距离当前磁头位置最近的请求。
| 优点 | 缺点 |
|---|---|
| 平均寻道时间较短,吞吐量较好 | 可能产生饥饿现象,边缘磁道的请求长期得不到服务 |
饥饿现象:磁头长期在某一区域来回服务,导致较远磁道的请求无限期延迟。
3. 扫描算法(SCAN/电梯算法)
磁头在某一方向上移动并服务所有请求,直到到达该方向的最远端,然后调转方向反向移动服务。
| 优点 | 缺点 |
|---|---|
| 消除了饥饿现象 | 边缘磁道的响应频率低于中间磁道 |
因磁头移动规律类似电梯而得名,电梯从底层上升到顶层,沿途响应所有楼层请求,到达顶层后调头下行。
4. 循环扫描算法(C-SCAN)
磁头单向移动服务请求,到达最远端后快速复位到起始端(复位途中不服务),构成循环扫描。
| 优点 | 缺点 |
|---|---|
| 各磁道响应频率更均匀 | 复位时间增加了额外开销 |
5. LOOK与C-LOOK算法
SCAN和C-SCAN的改进版本:磁头不需要移动到磁盘的物理最远端,而是移动到当前方向上最远的请求位置后立即折返。
- LOOK:双向移动,途中服务请求(类似SCAN但折返点提前)
- C-LOOK:单向移动,复位途中不服务(类似C-SCAN但折返点提前)
6. 算法对比总结
| 算法 | 寻道优化 | 饥饿问题 | 响应均匀性 | 特点 |
|---|---|---|---|---|
| FCFS | 无 | 无 | — | 公平但效率低 |
| SSTF | 优 | 有 | 差 | 局部最优,可能饥饿 |
| SCAN | 良 | 无 | 一般 | 双向扫描,边缘响应慢 |
| C-SCAN | 良 | 无 | 优 | 单向扫描,响应均匀 |
| LOOK/C-LOOK | 优 | 无 | 优 | 提前折返,减少无效移动 |
五、磁盘空闲空间管理
文件系统需要记录磁盘中哪些块是空闲的,以便分配新文件时使用。常见的管理方式有以下几种:
1. 空闲块链表
将所有空闲块用指针串联成链表。分配时从链头取块,回收时插入链尾。实现简单但效率较低,适用于小型文件系统。
2. 位示图
用二进制位表示每个磁盘块的状态:0表示空闲,1表示已分配(或相反)。位示图通常以“字”为单位组织,每个字包含若干位。
位示图的优点:
- 空间效率高(1位表示1块)
- 便于快速查找连续空闲块
- 位运算速度快
3. 成组链接法
UNIX系统采用的方法,结合了链表和索引的优点:将空闲块分组,每组第一块记录下一组空闲块的块号和块数。
4. 位示图计算
例: 某文件系统采用位示图管理磁盘空闲空间,磁盘容量为300GB,物理块大小为1MB,字长为32位。问:位示图需要多少个字?
解析:
① 计算磁盘块数:300GB / 1MB = 300 × 1024 = 307200 块
② 每个字(32位)可表示32个块的状态
③ 所需字数 = 307200 / 32 = 9600 字
公式归纳:
块数 = 磁盘容量 / 块大小
字数 = ⌈块数 / 字长⌉ (向上取整)
例: 基于上题,求第2054个磁盘块在位示图中的位置(字号和位号均从0开始编号)。
解析:
① 字号 = ⌊2054 / 32⌋ = 64 (第65个字,编号为64)
② 位号 = 2054 mod 32 = 6 (第7位,编号为6)
注意:字号和位号的起始编号方式需根据说明确定,如果系统从1开始编号,则需要调整。
六、练习
题目1:在磁盘调度管理中,通常( )。
A. 先进行旋转调度,再进行移臂调度
B. 先进行移臂调度,再进行旋转调度
C. 仅进行移臂调度
D. 仅进行旋转调度
答案:B
解析:磁盘调度通常先进行移臂调度(寻道),再进行旋转调度(扇区定位)。寻道时间远大于旋转延迟,因此先优化移臂顺序可显著提升性能。
题目2:假设磁头当前位于53磁道,请求序列为:98, 183, 37, 122, 14, 124, 65, 67。若采用最短寻道时间优先(SSTF)算法,磁头移动的总磁道数是( )。
A. 208
B. 236
C. 299
D. 640
答案:B
解析(SSTF过程):
起始53
53 → 65(12) → 67(2) → 37(30) → 14(23) → 98(84) → 122(24) → 124(2) → 183(59)
总移动距离 = 12 + 2 + 30 + 23 + 84 + 24 + 2 + 59 = 236
题目3:题目2条件不变,若采用扫描算法(SCAN),假设磁头当前移动方向为磁道号增大方向,磁头移动的总磁道数是( )。
A. 208
B. 236
C. 299
D. 337
答案:C
解析(SCAN过程,向增大方向移动):
53 → 65(12) → 67(2) → 98(31) → 122(24) → 124(2) → 183(59)
到达183后,调转方向向减小方向移动:
183 → 37(146) → 14(23)
总移动距离 = 12+2+31+24+2+59 + 146+23 = 299
题目4:在文件系统中,用于记录磁盘上空闲空间信息的数据结构通常被称为( )。
A. 访问控制列表
B. 磁盘分配表
C. 缓存表
D. 页表
答案:B
解析:磁盘分配表(如位示图、空闲块链表)用于跟踪未使用的磁盘块。A是安全权限管理结构,C是性能优化缓存,D是内存分页管理结构。
题目5:下列关于磁盘碎片整理的说法,正确的是( )。
A. 碎片整理可以优化内存的分配效率
B. 碎片整理通过合并文件碎片和空闲区来提升文件访问效率
C. 碎片整理主要作用于CPU缓存
D. 碎片整理消除了磁盘的内部碎片
答案:B
解析:磁盘碎片整理程序通过将分散存储的文件块合并为连续区域,并整合空闲空间,从而减少磁头移动,提升文件访问效率。它作用于磁盘(外存),而非内存或CPU缓存。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)