操作系统第 5 章:输入/输出(I/O)管理
408 操作系统「输入/输出(I/O)管理」复习:核心知识点、真题题型、通用解法与易错点。
Last updated on
本章对照本站本章的 408 真题 和 408 模拟选择题 整理。本站把真题分成 I/O 管理基础、设备独立软件、外存管理 三部分;模拟题进一步细化到 I/O 控制方式、应用程序接口、缓冲、设备分配、SPOOLing、设备驱动、磁盘、磁盘调度、SSD。(Any Docs)
这一章看起来知识点比较碎,但实际上 408 的命题高度集中。真正需要建立的是下面这条主线:
用户发出 I/O 请求 → 操作系统 I/O 软件各层处理 → 驱动程序控制设备 → 中断 / DMA 完成传输 → 缓冲与设备独立性提高效率 → 磁盘调度进一步降低机械访问时间。
其中最值得重点掌握的三大块是:
- I/O 软件层次、驱动程序、中断和 DMA:选择题核心
- 单缓冲 / 双缓冲时间计算:经典计算题
- 磁盘调度 + 磁盘结构 + 访问时间:本章最重要综合题
一、先把整章框架搭起来
可以把 I/O 系统想成下面这条链:
用户程序
↓
用户层 I/O 软件
↓
设备独立性软件
↓
设备驱动程序
↓
中断处理程序
↓
设备控制器
↓
I/O 设备
这里最重要的问题是:
一道题问“谁完成这个工作”,必须先判断工作离硬件有多近。
越往上越“通用”,越往下越“设备相关”。
二、题型一:I/O 软件层次与一次 I/O 到底怎么走
这是本章非常稳定的选择题考点。
1. 四层 I/O 软件
从用户向硬件方向:
用户层 I/O 软件 → 设备独立性软件 → 设备驱动程序 → 中断处理程序
【2012 年 408 真题】
题目问:
操作系统 I/O 子系统由四个层次组成,合理的排列顺序是什么?
答案:
用户级 I/O 软件 → 设备无关软件 → 设备驱动程序 → 中断处理程序。
(Any Docs)
这个顺序不能死背,要理解。
用户层 I/O 软件
离应用最近,例如:
- I/O 库函数
- 格式化输入输出
- 用户态接口
典型思想:
“用户想做什么?”
设备独立性软件
核心是:
把各种不同设备抽象成统一接口。
负责的典型工作:
- 逻辑设备名
- 设备保护
- 设备分配
- 缓冲
- SPOOLing
- 统一错误处理
- 将逻辑设备映射到物理设备
设备驱动程序
核心是:
把抽象 I/O 命令翻译成具体硬件操作。
比如上层说:
“读取逻辑块 100530”
驱动程序可能要进一步算出:
哪个柱面? 哪个磁头? 哪个扇区? 控制器寄存器写什么?
中断处理程序
最靠近硬件。
设备完成工作后:
设备控制器 → 发中断 → CPU → 中断处理程序。
三、题型二:用户发出 I/O 请求以后,谁先谁后?
【2011 年 408 真题】
题目:
用户程序发出磁盘 I/O 请求后,系统正确的处理流程是什么?
答案:
用户程序 → 系统调用处理程序 → 设备驱动程序 → 中断处理程序。
(Any Docs)
这条链非常重要。
实际上可以展开成:
① 用户程序
例如执行:
read()
但用户程序不能直接操作磁盘寄存器。
↓
② 系统调用
CPU 从用户态进入内核态。
↓
③ 设备独立性软件 / I/O 子系统
检查:
- 参数是否合法
- 权限是否合法
- 设备状态
- 缓冲区
- 请求队列
↓
④ 设备驱动程序
设置:
- 设备寄存器
- DMA 参数
- 读写方向
- 地址
- 数据量
并启动设备。
↓
⑤ 设备执行
↓
⑥ 设备完成 → 发中断
↓
⑦ 中断处理程序
↓
⑧ 唤醒等待进程
一个非常常见的坑
很多同学会写:
用户程序 → 驱动程序 → 系统调用
这是错的。
用户程序没有资格直接调用硬件驱动完成特权操作。
一定先:
系统调用进入内核。
四、题型三:到底是谁最先得到键盘输入?
【2010 年 408 真题】
题目:
本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是谁?
选项包括:
- 命令解释程序
- 中断处理程序
- 系统调用服务程序
- 用户登录程序
答案是:
中断处理程序。
(Any Docs)
为什么?
按下键盘以后:
键盘控制器检测按键
↓
向 CPU 发中断
↓
CPU 进入键盘中断服务程序
↓
读取键盘控制器数据
↓
再经过驱动程序 / 终端系统
↓
最后才可能交给登录程序或 Shell。
所以题目看到:
“首先获得设备数据”
高度警惕:
中断处理程序。
五、题型四:系统调用、驱动程序、中断程序分别干什么
这是这一章最容易混的一组概念。
可以记成:
| 层次 | 核心问题 |
|---|---|
| 系统调用 | 用户想干什么 |
| 设备独立软件 | 用哪个逻辑设备、如何统一管理 |
| 驱动程序 | 这个具体硬件该怎么干 |
| 中断程序 | 硬件干完以后怎么办 |
【2013 年 408 真题】
题目:
把磁盘逻辑地址转换成柱面号、磁头号和扇区号,是哪个程序完成?
答案:
设备驱动程序。
(Any Docs)
原因非常重要:
只有驱动程序真正了解具体硬件。
例如:
- 一柱面多少磁道?
- 一磁道多少扇区?
- 设备寄存器怎么控制?
这些都是设备相关信息。
所以只要题目出现:
“将抽象操作转成硬件相关操作”
基本找:
设备驱动程序。
六、题型五:I/O 控制方式——轮询、中断、DMA
这一部分通常以判断题、选择题出现,也可能和组成原理结合。
可以把 I/O 控制方式理解成:
CPU 到底参与数据搬运到什么程度?
1. 程序直接控制 / 程序查询方式
CPU 不断问:
“设备好了没有?”
没好:
继续问。
好了:
CPU 自己搬数据。
特点:
- 硬件简单
- CPU 利用率低
- CPU 大量忙等
2. 中断驱动方式
CPU 启动设备后先去干别的。
设备完成后:
“I/O 操作已完成,可以由 CPU 继续处理。”
于是产生中断。
CPU 再来处理数据。
优点:
CPU 不需要一直轮询。
缺点:
如果高速设备每传一个字节都中断一次:
CPU 会被中断淹没。
3. DMA
DMA 的核心:
让设备与内存直接成块传输数据。
CPU 只负责:
- 初始化 DMA
- 设置主存地址
- 设置数据量
- 设置传输方向
- 启动 DMA
然后 DMA 自己搬。
完成后:
DMA 发一个中断通知 CPU。
七、2017 年 DMA 顺序题——必须会
【2017 年 408 真题】
给出:
① DMA 控制器发出中断请求 ② 初始化 DMA 控制器并启动磁盘 ③ 从磁盘传输一块数据到内存缓冲区 ④ 执行 DMA 结束中断服务程序
要求排序。
正确顺序:
② → ③ → ① → ④
(Any Docs)
逻辑就是:
CPU 设置 DMA
↓
DMA 开始搬数据
↓
DMA 搬完
↓
DMA 发中断
↓
CPU 执行中断服务程序。
八、DMA 最常见的四个陷阱
本站模拟题里专门考了:
“DMA 整个传输过程中是否完全不需要 CPU、操作系统或中断?”
正确认识是:
错误 1
DMA 完全不需要 CPU。
错。
CPU 需要初始化 DMA。
错误 2
DMA 完全不需要操作系统。
错。
设备驱动仍然需要:
- 设置 DMA
- 申请缓冲区
- 管理权限
- 处理完成事件
错误 3
DMA 不产生中断。
错。
通常:
一批数据传输完成后产生一次中断。
正确本质
DMA 减少的是:
CPU 对每个字 / 每个字节数据传输的参与。
而不是:
CPU 从此与 I/O 完全无关。
本站模拟题也明确考了这一点。(Any Docs)
九、题型六:中断中哪些事情硬件做,哪些操作系统做
【2020 年 408 真题】
题目给出:
I. 保存被中断程序的中断点 II. 提供中断服务 III. 初始化中断向量表 IV. 保存中断屏蔽字
问哪些是操作系统完成的。
答案:
II、III、IV。
(Any Docs)
这里必须知道:
中断点
通常就是当前程序下一条要执行的位置,比如 PC。
发生中断时:
硬件自动保存关键断点信息。
而:
- 中断服务程序
- 中断向量表初始化
- 更多现场保存和恢复
主要由操作系统处理。
十、题型七:设备独立性——“逻辑设备”与“物理设备”
这是本章非常高频的概念题。
最核心一句话
应用程序不依赖具体物理设备。
应用程序使用:
逻辑设备名
操作系统再映射成:
物理设备。
【2009 年 408 真题】
题目:
程序员使用系统调用打开 I/O 设备时,通常使用什么设备标识?
答案:
逻辑设备名。
(Any Docs)
【2020 年 408 真题】
题目问设备独立性。
一个错误说法是:
更换物理设备后必须修改访问该设备的应用程序。
这是错的。
因为理想状态是:
应用程序
↓
逻辑设备名
↓
逻辑设备表
↓
物理设备
所以替换同类打印机:
改映射 / 驱动即可。
应用程序不用改。(Any Docs)
十一、设备独立性和驱动程序独立性千万别混
网站模拟题有一道非常好的题:
“设备独立性是不是指设备驱动程序独立于物理设备?”
答案:
不是。
恰恰相反:
驱动程序高度依赖具体设备。
真正独立的是:
用户程序。
所以:
用户程序:设备无关
设备驱动:设备相关
(Any Docs)
十二、题型八:设备分配
【2023 年 408 真题】
题目问设备分配需要考虑:
I. 设备类型 II. 访问权限 III. 占用状态 IV. 逻辑设备与物理设备映射关系
答案:
四个都要考虑。
(Any Docs)
为什么?
例如请求:
“提交打印请求。”
操作系统首先要判断:
设备类型
是:
- 独占设备?
- 共享设备?
- 虚拟设备?
权限
这个进程能不能访问?
状态
设备是否正被别人占用?
映射
用户说的是逻辑打印机,到底对应哪台物理打印机?
十三、设备分配数据结构题
模拟题里考:
- SDT:系统设备表
- DCT:设备控制表
- COCT:控制器控制表
- CHCT:通道控制表
设备分配顺序:
SDT → DCT → COCT → CHCT
(Any Docs)
理解:
先从系统层面找:
哪个设备?
然后:
这个设备自身能不能分?
然后:
它连接的控制器能不能分?
最后:
所属通道能不能分?
十四、题型九:缓冲——本章最重要的计算题之一
缓冲的本质非常简单:
解决生产者和消费者速度不匹配。
比如:
磁盘:慢
CPU:快
如果没有缓冲:
CPU 经常等磁盘。
有缓冲:
磁盘先把数据放到缓冲区。
CPU 再拿。
十五、先理解三个时间
以后所有缓冲计算都设:
- 设备 → 系统缓冲区:时间 T
- 系统缓冲区 → 用户区:时间 M
- CPU 处理数据:时间 C
十六、单缓冲到底哪里能并行?
这是最容易算错的地方。
假设只有一个系统缓冲区。
处理第 1 块:
设备读取第 1 块 → 缓冲区
↓
缓冲区 → 用户区
↓
CPU 处理
但 CPU 处理第 1 块期间:
系统缓冲区已经空出来了。
于是:
设备可以开始读第 2 块。
所以:
设备读下一块,可以和 CPU 处理上一块并行。
但是:
缓冲区向用户区复制数据的时候,同一个缓冲区正在被访问,设备不能同时往里面写下一块。
因此稳定周期为:
对于 n 块,完整时间可以写成:
注意这是标准单缓冲模型。
十七、2011 年真题——单缓冲 / 双缓冲经典题
【2011 年 408 真题】
题目:
某文件有 10 个磁盘块。
每块:
磁盘 → 缓冲区:
缓冲区 → 用户区:
CPU 分析:
问单缓冲和双缓冲时间。
真题答案:
单缓冲:1550 μs 双缓冲:1100 μs
(Any Docs)
单缓冲
代入:
得到:
十八、双缓冲为什么快?
现在有:
缓冲区 A
缓冲区 B
例如:
磁盘 → A:第 1 块
接着:
CPU 处理 A 中对应的数据
同时:
磁盘 → B:第 2 块
然后交换。
所以可以形成真正的流水。
一边:
输入下一块
另一边:
搬运并处理上一块。
所以稳定流水周期为:
总时间:
代入:
十九、需要直接记住的两个缓冲模型
单缓冲
稳定一块平均时间:
n 块完整时间:
双缓冲
稳定周期:
完整时间:
这两个式子非常值得记。
但考试时最好还是:
画流水线。
因为题目如果改变“数据复制是否可忽略”“用户区是否也是缓冲区”等条件,直接套式子容易错。
二十、2013 年真题——只有 2 块数据也能考
【2013 年 408 真题】
题目:
外设 → 系统缓冲:
系统缓冲 → 用户工作区:
CPU 分析:
问读取并分析 2 块数据最短时间。
答案:
300。
(Any Docs)
具体过程:
第 1 块进入缓冲:
复制到用户区:
现在:
之后 CPU 分析第 1 块,时间 90。
与此同时:
磁盘读取第 2 块。
整个下一阶段受慢的一边控制。
最后还要处理第 2 块。
所以:
真正的思考方式不是死记 300,而是:
找哪些阶段可以重叠。
二十一、磁盘高速缓存和缓冲区不要混
【2015 年 408 真题】
题目:
在系统内存中设置磁盘缓冲区的主要目的是什么?
答案:
减少磁盘 I/O 次数。
(Any Docs)
不是:
- 减少磁头本身一次寻道距离
- 提高磁盘物理可靠性
- 实现设备无关性
而是:
原来要访问磁盘,现在可能直接从内存命中。
二十二、磁盘 Cache 在哪里?
模拟题有一个很经典的陷阱:
“磁盘高速缓存是在磁盘中设置的缓冲区。”
错误。
这里课程意义上的磁盘高速缓存通常是:
内存中的一部分空间,用来缓存磁盘块。
如果命中:
不需要启动磁盘。
(Any Docs)
二十三、提前读和延迟写
也是很容易考判断。
提前读
猜:
已经读了块 100,很可能马上要读 101。
于是:
顺便读 101、102……
依赖:
顺序局部性。
所以随机访问很难有效提前读。
延迟写
修改数据后:
先改内存中的缓存。
暂时不立即写盘。
之后:
- 缓冲区被淘汰
- 定期刷新
- 系统同步
再写盘。
所以模拟题中:
“随机写就不能使用延迟写”
是错的。(Any Docs)
二十四、题型十:SPOOLing——概念题必考区
SPOOLing 可以理解成:
用高速磁盘模拟低速独占设备。
最典型:
打印机。
二十五、为什么打印机可以被“共享”?
假设 10 个进程都想打印。
现实中:
一台打印机一次只能真正打印一个作业。
但操作系统让每个进程认为:
“打印请求已经提交给系统。”
实际上:
进程 A
↓
输出井
进程 B
↓
输出井
进程 C
↓
输出井
……
然后后台输出进程:
输出井
↓
输出缓冲
↓
打印机
逐个打印。
因此:
一个独占设备被虚拟成多个逻辑设备。
二十六、SPOOLing 的组成
典型结构:
- 输入井
- 输出井
- 输入缓冲区
- 输出缓冲区
- 预输入进程
- 缓输出进程
其中:
井一般在外存。
缓冲区:
在内存。
这是常考区别。
二十七、2016 年 SPOOLing 真题
【2016 年 408 真题】
题目问哪项错误:
A. 需要外存支持 B. 需要多道程序设计支持 C. 多个作业可以共享一台独占设备 D. 由用户作业控制设备与输入 / 输出井之间的数据传送
答案:
D。
因为:
设备和井之间的数据传输由操作系统控制。
不是用户进程直接控制。(Any Docs)
二十八、SPOOLing 三句话总结
看到 SPOOLing,优先想到:
第一:
外存上的输入井 / 输出井。
第二:
把独占设备虚拟成逻辑共享设备。
第三:
数据传输由操作系统后台进程控制。
二十九、题型十一:磁盘结构和物理地址换算
这一部分既能出选择题,也非常适合综合题。
磁盘典型结构:
柱面 → 磁头 / 磁道 → 扇区。
如果:
- 每柱面有 H 个磁道
- 每磁道有 S 个扇区
则每柱面:
个扇区。
三十、逻辑块号转 CHS 的万能方法
设逻辑扇区号为 L。
首先算柱面:
剩余:
磁头号:
扇区号:
注意:
是否从 0 编号必须看题目。
三十一、模拟题:5687 号记录放哪里?
本站模拟题:
80 个柱面,每柱面 12 条磁道,每磁道 16 个扇区。记录大小等于扇区大小,从 0 编号。问第 5687 号记录在哪里。
每柱面:
将 5687 分解:
然后:
所以:
第 29 柱面、第 7 磁道、第 7 扇区。
(Any Docs)
这类题本质就是:
不断做整除和取余。
三十二、2019 年综合真题——这一题非常重要
【2019 年 408 真题】
题目给:
- 300 个柱面
- 每柱面 10 个磁道
- 每磁道 200 个扇区
- 每扇区 512 B
- 每簇 2 个扇区
问:
- 磁盘容量
- SSTF 下几个簇的访问顺序
- 某簇对应的柱面 / 磁头 / 扇区,并问谁完成地址转换
(Any Docs)
这题几乎把整章串起来了。
第 1 问:容量
直接乘:
得到:
如果:
则:
第 2 问:先把簇号变成柱面号
每磁道:
个簇。
每柱面:
个簇。
因此:
- 100260 → 柱面 100
- 60005 → 柱面 60
- 101660 → 柱面 101
- 110560 → 柱面 110
磁头原本在:
柱面 85。
SSTF:
85 → 100 → 101 → 110 → 60
因此访问簇:
100260 → 101660 → 110560 → 60005
(Any Docs)
第 3 问:100530 簇
因为每柱面 1000 簇:
所以柱面:
100。
每磁道 100 簇:
所以磁头:
5。
磁道内第:
30 个簇。
一个簇 2 扇区:
所以占:
第 60、61 扇区。
转换工作由:
设备驱动程序完成。
这道题非常典型,因为它把:
磁盘结构 + 地址转换 + SSTF + 驱动程序
四个知识点揉在了一起。(Any Docs)
三十三、题型十二:磁盘调度——本章最高频计算题
必须熟练区分:
| 算法 | 核心思想 |
|---|---|
| FCFS | 按到达顺序 |
| SSTF | 每次找最近 |
| SCAN | 电梯,来回扫描 |
| LOOK | 扫到最后一个请求就回头 |
| CSCAN | 永远一个方向服务,另一端循环回来 |
| CLOOK | 到最后一个请求后直接循环到另一侧请求 |
三十四、FCFS
最简单。
例如请求:
100 → 20 → 180 → 30
就严格这样访问。
优点:
- 公平
- 简单
- 不饥饿
缺点:
- 寻道可能很长
三十五、SSTF
Shortest Seek Time First。
每一步都:
找距离当前磁头最近的请求。
例如磁头:
100
请求:
90,108,142
距离:
10,8,42
所以先:
108。
然后重新算。
注意:
每移动一步,都必须重新计算。
不能一开始排序一次就结束。
三十六、2021 年 SSTF 真题
【2021 年 408 真题】
磁头:
184
请求:
184、187、176、182、199
SSTF:
184
↓
182
↓
187
↓
176
↓
199
总距离:
答案:
41。
(Any Docs)
三十七、SSTF 最大缺点
如果磁头附近不断来新请求:
很远的请求可能一直等。
这叫:
饥饿。
并容易出现:
磁臂黏着。
三十八、SCAN——电梯算法
假设:
磁头在 105
方向:
磁道号增加
请求:
35,45,12,68,110,180,170,195
【2009 年 408 真题】
先往大方向:
110 → 170 → 180 → 195
然后反向:
68 → 45 → 35 → 12
所以:
110 → 170 → 180 → 195 → 68 → 45 → 35 → 12
(Any Docs)
三十九、SCAN 和 LOOK 的核心区别
这是模拟题很爱考的变式。
假设当前向右,最右边物理磁道是 199。
但最右请求只有 170。
SCAN
通常:
扫到物理端点,再回头。
也就是:
到 199 再返回。
LOOK
只“看”请求。
所以:
到 170 就回头。
因此 LOOK 通常少走一些路。
本站模拟题中“改进的扫描算法”就是 LOOK,并考了这一点。(Any Docs)
四十、2015 年 SCAN 真题
【2015 年 408 真题】
磁道:
0~199。
当前磁头:
58。
“从外侧向内侧移动”。
题目特别说:
最外侧磁道号是 0。
因此:
外 → 内
等价于:
磁道号增大。
请求:
130、42、180、15、199。
先向内:
58 → 130 → 180 → 199
再反向:
199 → 42 → 15
所以移动距离:
加:
得到:
答案:
325。
(Any Docs)
四十一、这里有一个特别重要的坑
不要想当然地认为:
“向内就是编号减小。”
磁道编号完全是题目规定的。
所以磁盘调度题第一件事:
把方向翻译成数字增加 / 数字减少。
四十二、CSCAN——循环扫描
与 SCAN 不同:
SCAN:
→ → → 到头 ← ← ←
CSCAN:
→ → → 到头 跳回另一头 → → →
只有一个服务方向。
四十三、2024 年 CSCAN 真题
【2024 年 408 真题】
磁道:
0~399。
刚访问完:
200。
向磁道号减小方向。
请求:
300、120、110、0、160、210、399。
先向小:
160 → 120 → 110 → 0
到 0。
然后循环到:
399
再继续向小:
300 → 210
磁头移动:
加上返回另一端:
再从 399 到 210:
因此:
答案:
788。
(Any Docs)
四十四、为什么 2024 这题特别值得掌握
因为它明确给了:
0~399。
所以:
CSCAN 的回卷距离必须算。
很多人只计算请求之间距离,会漏掉:
这一大段。
四十五、2010 年综合大题——磁盘题王之一
【2010 年 408 真题】
题目给:
- CSCAN
- 2 KB 内存
- 16384 个磁盘块
- 转速 6000 r/min
- 每磁道 100 扇区
- 相邻磁道平均移动 1 ms
- 当前磁头 100
- 向磁道号增大
- 请求:50、90、30、120
- 每个磁道随机读取 1 个扇区
问:
- 空闲块怎么管理
- 总访问时间
- 换成 Flash 后用什么算法
(Any Docs)
这道题必须拆开做。
四十六、第 1 问:位图
内存:
位数:
刚好:
每磁盘块用 1 bit。
所以使用:
位图 / 位示图法。
四十七、第 2 问:磁盘访问时间
磁盘总访问时间通常包括:
也就是:
寻道 + 旋转延迟 + 数据传输。
1. 寻道时间
真题标准解答采用的服务顺序:
120 → 30 → 50 → 90。
对应移动:
所以:
这一点本站和其他真题资料给出的标准答案一致。(Any Docs)
这里有个值得特别留意的地方:
2010 真题没有像 2024 真题那样给出完整物理磁道范围,因此标准答案直接按 120 → 30 计算循环距离;而当题目明确给出 0~399 这样的物理端点时,像 2024 真题那样,CSCAN 回卷的端点距离就必须计入。
所以以后不要机械套:
CSCAN 一定怎么算。
而要看题目有没有明确给:
磁道端点。
2. 平均旋转延迟
转速:
每秒:
一圈:
随机扇区平均等待半圈:
4 次:
3. 数据传输时间
每圈:
100 个扇区。
一圈 10 ms。
所以 1 扇区:
4 扇区:
于是:
四十八、磁盘访问时间万能公式
给定转速 N,单位 r/min。
一圈时间:
平均旋转延迟:
每磁道有 S 个扇区。
读取一个扇区:
如果连续读取 k 个扇区:
最终:
这组公式务必会。
四十九、第 3 问:为什么 SSD 用 FCFS 可能更好?
2010 真题问:
换成 Flash / SSD 后,还有必要用 CSCAN 吗?
答案:
可以采用 FCFS。
(Any Docs)
因为机械硬盘的 CSCAN 是为了:
减少磁头来回移动。
但是 SSD:
没磁头。
所以没有:
- 寻道时间
- 旋转延迟
这样复杂的机械磁盘调度:
收益大幅下降。
公平简单的:
FCFS
反而可能更适合。
五十、题型十三:物理格式化、分区、逻辑格式化
顺序一定记住:
物理格式化 → 分区 → 逻辑格式化 → 安装操作系统
物理格式化
解决:
这块盘从物理上怎么组织?
例如:
- 磁道
- 扇区
- 扇区控制信息
- 校验信息
分区
解决:
整块盘分成哪几个逻辑区域?
例如:
C 盘
D 盘
逻辑格式化
解决:
这个分区使用什么文件系统?
例如建立:
- 根目录
- 空闲块管理结构
- 文件系统元数据
五十一、2017 年真题
【2017 年 408 真题】
题目问逻辑格式化做什么:
I. 分区 II. 建立根目录 III. 确定扇区校验码位数 IV. 初始化空闲磁盘块管理结构
正确:
II、IV。
(Any Docs)
原因:
分区:
不属于逻辑格式化。
扇区校验:
更靠近物理格式化。
根目录和空闲空间:
属于文件系统,所以是逻辑格式化。
五十二、2021 年启动大题
【2021 年 408 真题】
题目给出了:
- ROM 引导程序
- 磁盘引导程序
- 分区引导程序
- OS 初始化程序
问执行顺序。
正确:
ROM 引导 → 磁盘引导 → 分区引导 → 操作系统初始化
(Any Docs)
理解:
开机 CPU 什么都不知道。
只能先执行:
固化在 ROM 中的程序。
ROM 去找:
磁盘第一个扇区 / 主引导记录。
然后:
磁盘引导程序选择分区
↓
分区引导程序
↓
加载 OS
↓
OS 初始化。
五十三、题型十四:SSD
SSD 是目前非常适合继续出新题的部分。
模拟题里已经考了:
- Flash Translation Layer
- 擦除块
- 页
- 磨损均衡
- SSD 与 HDD 调度差异。(Any Docs)
五十四、SSD 最重要结构
典型 NAND Flash:
页是读写单位,块是擦除单位。
也就是说:
写:
页级。
擦除:
块级。
因此:
修改一个已经写过的页,往往不能像内存一样原地覆盖。
可能需要:
- 写到新页
- 更新地址映射
- 老页失效
- 垃圾回收
五十五、FTL
Flash Translation Layer:
闪存转换层。
主机看到:
逻辑块地址 LBA。
但真正数据可能在:
Flash 某芯片、某块、某页。
FTL 负责:
LBA → Flash 物理地址。
模拟题正确选项也明确指出了这一地址转换功能。(Any Docs)
五十六、磨损均衡
Flash 块:
擦写次数有限。
因此不能永远使用同一批块。
SSD 控制器会尽量让:
各块擦写次数相近。
这就是:
Wear Leveling,磨损均衡。
所以模拟题中:
“优先不断使用更老、已经擦写更多的块”
是错误的。(Any Docs)
五十七、本章最容易混的 10 组概念
建议最后复习时专门检查。
1. 逻辑设备 vs 物理设备
用户:
逻辑设备。
驱动:
物理设备。
2. 设备独立软件 vs 驱动程序
设备独立:
通用。
驱动:
硬件相关。
3. 中断驱动 vs DMA
中断:
数据传输 CPU 参与较多。
DMA:
数据块主要直接在设备和内存之间传输。
4. Cache vs Buffer
Cache:
重点是避免重复访问慢速层。
Buffer:
重点是协调速度差、支持并行。
现实系统中二者功能会有交叉,但考试概念要分清。
5. 输入井 / 输出井 vs 输入 / 输出缓冲区
井:
外存。
缓冲:
内存。
6. 设备独立性 vs 虚拟设备
设备独立性:
用户不依赖具体物理设备。
虚拟设备:
一台物理独占设备看起来变成多台逻辑设备。
7. SCAN vs LOOK
SCAN:
物理端点。
LOOK:
最远请求。
8. CSCAN vs SCAN
SCAN:
来回服务。
CSCAN:
只在一个方向服务。
9. 物理格式化 vs 逻辑格式化
物理:
磁道、扇区。
逻辑:
文件系统。
10. HDD vs SSD
HDD:
寻道 + 旋转。
SSD:
无机械寻道,但有擦除、垃圾回收、磨损等问题。
五十八、从真题看,第 5 章应该怎么分优先级
结合本站目前整理的真题,建议这样复习。
第一梯队:必须熟练
磁盘调度
重点:
- SSTF
- SCAN
- CSCAN
- LOOK
- 移动距离
真题出现非常多,包括 2009、2010、2015、2018、2019、2021、2024 等不同角度。(docs.any1.tech)
缓冲计算
重点:
- 单缓冲
- 双缓冲
- 流水并行
2011、2013 均有典型真题。(Any Docs)
I/O 软件层次
一定知道:
系统调用 → 驱动 → 中断
和:
谁负责什么。
第二梯队:选择题高频
- DMA
- 中断
- 设备独立性
- SPOOLing
- 驱动程序
- 磁盘格式化
第三梯队:很适合新题
- SSD
- FTL
- 磨损均衡
- Cache / 延迟写
- 设备分配数据结构
- 网络设备驱动
五十九、总结的“看到题干 → 立刻反应”
以后做题可以建立这种条件反射。
看到:
“逻辑设备名”
想到:
设备独立性。
看到:
“柱面、磁头、扇区转换”
想到:
设备驱动程序。
看到:
“设备完成”
想到:
中断。
看到:
“设备与内存大块数据直接传输”
想到:
DMA。
看到:
“打印机共享”
想到:
SPOOLing。
看到:
“输入井 / 输出井”
想到:
外存。
看到:
“系统缓冲区和 CPU 同时工作”
想到:
画流水线。
看到:
“最近磁道”
想到:
SSTF。
看到:
“像电梯一样”
想到:
SCAN。
看到:
“始终一个方向”
想到:
CSCAN。
看到:
“只到最远请求”
想到:
LOOK / CLOOK。
看到:
“6000 r/min”
马上算:
所以:
平均旋转:
六十、很可能出现的综合新考法
结合现在 408 越来越喜欢跨知识点组合的特点,这一章非常适合这样出题。
预测 1:DMA + 缺页 + I/O
例如:
用户进程读取磁盘文件,目标缓冲区某页尚未装入内存,描述从系统调用、页框分配、DMA、磁盘完成中断到进程重新运行全过程。
这种题实际上把:
第 3 章虚拟内存 + 第 5 章 I/O
结合。
预测 2:文件系统 + 磁盘调度
例如:
给出 inode / 索引块后:
算出要访问的逻辑块。
再要求:
转换成柱面。
最后:
用 SSTF 或 SCAN 求访问顺序。
这就是:
第 4 章 + 第 5 章。
2019 真题已经体现了这种综合化趋势。(Any Docs)
预测 3:缓冲 + DMA + CPU 利用率
例如:
磁盘传输每块需要 100 μs,
DMA 完成中断处理需要 2 μs,
CPU 每块计算 80 μs,
采用双缓冲,
问:
- 总执行时间
- CPU 忙碌比例
- DMA 中断次数。
本质:
流水线 + DMA。
预测 4:SSD 与 HDD 对比
比如给两个请求序列:
要求分别判断:
HDD 用哪个调度算法更好?
以及:
SSD 为什么不一定需要 SSTF / SCAN?
进一步加入:
- 写放大
- 垃圾回收
- 磨损均衡
都完全有可能。
六十一、最后给出一张本章“解题路线图”
遇到第 5 章题,建议按下面判断。
如果是“谁来做”
判断它的位置:
用户接口 → 设备独立软件 → 驱动 → 中断 → 硬件。
如果是“怎么传数据”
判断:
查询 / 中断 / DMA。
问自己:
CPU 是否忙等?
CPU 是否逐个参与数据搬运?
完成后是否发中断?
如果是“缓冲时间”
绝对不要第一反应就加:
先画:
第 1 块 第 2 块 第 3 块
看哪些能重叠。
如果是“磁盘地址”
按:
柱面容量 → 整除得到柱面 → 余数继续除磁道容量 → 得扇区。
如果是“磁盘调度”
先写五件事:
- 当前磁头位置
- 当前方向
- 磁道编号范围
- 请求序列
- 算法
然后:
先确定访问顺序,再算距离。
绝对不要边想顺序边直接算。
如果是“磁盘时间”
拆成:
如果是“格式化”
记:
物理格式化 → 分区 → 逻辑格式化 → 安装系统。
如果是“SSD”
记:
无机械寻道 + FTL + 页写块擦 + 垃圾回收 + 磨损均衡。
本章真正要达到的水平
不是背“2011 年答案 1550 μs”,也不是背“2024 年答案 788”。
而是看到任何新题,都能马上识别:
它到底是在考 I/O 层次、控制方式、缓冲流水线、设备虚拟化,还是磁盘机械访问模型。
尤其建议把下面 5 道真题作为这一章的核心母题反复做:
2011 单 / 双缓冲:掌握流水并行。 2017 DMA 顺序:掌握 DMA 工作过程。 2019 磁盘综合题:掌握簇号、CHS、SSTF、驱动程序。 2010 磁盘综合题:掌握位图、CSCAN、寻道 / 旋转 / 传输时间、SSD。 2024 CSCAN:掌握循环扫描和端点距离。(docs.any1.tech)
这 5 道吃透以后,第 5 章绝大多数计算题和综合题就已经形成体系了。