计算机 408 · 操作系统 · 输入/输出管理
计算机 408 · 操作系统
第 5 章「输入/输出管理」学习笔记
[!NOTE]
I/O 设备通常比 CPU 慢很多。本章的核心不是背设备名称,而是理解:CPU 如何发起 I/O、设备如何通知完成、操作系统如何把不同设备统一起来,以及磁盘如何减少等待。
快速导航
- 0. 全章地图
- 1. I/O 设备与接口
- 2. 四种 I/O 控制方式
- 3. I/O 软件层次与设备独立性
- 4. 缓冲、设备分配与 SPOOLing
- 5. 磁盘与调度
- 6. 固态硬盘 SSD
- 7. 高频易错点与自测
学习进度
- 能比较程序查询、中断、DMA、通道
- 能解释设备独立性、逻辑设备名与 LUT
- 能计算单缓冲/双缓冲时间
- 能画 I/O 软件层次与设备分配数据结构
- 能计算 FCFS、SSTF、SCAN、C-SCAN、LOOK 磁盘寻道顺序
0. 全章地图
用户 I/O 请求
↓
应用程序接口 → 设备独立性软件 → 设备驱动程序
↓
控制器 / 中断 / DMA
↓
具体 I/O 设备
磁盘请求 → 磁盘调度 → 寻道 + 旋转延迟 + 传输
1. I/O 设备与接口
1.1 设备分类
按数据交换方式可分为字符设备(键盘、串口)和块设备(磁盘、SSD);按使用特性可分为独占设备、共享设备和虚拟设备。
设备控制器通常包含:
| 寄存器 | 作用 |
|---|---|
| 数据寄存器 | 暂存要读写的数据 |
| 状态寄存器 | 忙/闲、完成、出错等状态 |
| 控制寄存器 | 启动、停止、设置模式 |
I/O 端口编址有两种:独立编址(专门的 I/O 指令)和内存映射 I/O(把寄存器映射到内存地址空间,用普通访存指令访问)。
2. 四种 I/O 控制方式
2.1 程序直接控制(程序查询)
CPU 发出命令后循环查询状态寄存器,直到设备完成。
CPU 发命令 → 查询状态 → 未完成?继续查询 → 完成 → 读写数据
优点是简单,缺点是 CPU 忙等,适合简单低速设备或早期系统。
2.2 中断驱动
CPU 发出命令后继续执行其他程序;设备完成后通过中断请求 CPU,CPU 保存现场,执行中断处理程序。
CPU 发命令 → 做其他工作
设备完成 → 中断请求 → 保存现场 → 中断服务 → 恢复现场
中断减少了忙等,但每个字节或小块都中断会有较大开销。
2.3 DMA
DMA 控制器在内存和设备之间直接传送一个数据块,CPU 只负责初始化,传输结束时接收一次中断。
CPU 设置:内存地址、传输方向、字节数
↓
DMA 直接搬运数据块(CPU 可并行执行)
↓
DMA 完成后中断 CPU
常见寄存器:内存地址寄存器 MAR、数据寄存器 DR、计数器 DC、控制/状态寄存器。DMA 适合高速块设备。
2.4 通道
通道是具有一定 I/O 指令能力的专用处理部件。CPU 给通道下达 I/O 指令,通道负责组织复杂的设备操作,完成后再通知 CPU。它比 DMA 更适合多设备、复杂 I/O 场景。
| 方式 | CPU 参与程度 | 典型特点 |
|---|---|---|
| 程序查询 | 最高 | 忙等 |
| 中断 | 较高 | 设备完成才打断 |
| DMA | 较低 | 以数据块传输 |
| 通道 | 最低 | 独立执行 I/O 指令序列 |
3. I/O 软件层次与设备独立性
3.1 I/O 软件层次
用户层 I/O 软件(库函数、系统调用)
↓
设备独立性软件(命名、缓冲、分配、错误处理)
↓
设备驱动程序(把通用请求翻译成具体设备命令)
↓
中断处理程序
↓
硬件控制器与设备
驱动程序是硬件相关的“翻译官”,设备独立性软件则让上层不必知道设备型号和控制器细节。
3.2 设备独立性
用户使用逻辑设备名(如标准输入、打印机),系统通过逻辑设备表 LUT 将其映射到物理设备。换设备时只需修改映射或驱动程序,不必修改应用程序。
4. 缓冲、设备分配与 SPOOLing
4.1 缓冲区的作用
- 缓解 CPU 与设备速度不匹配;
- 减少中断次数;
- 处理生产者与消费者的数据粒度差异;
- 让 CPU 计算与设备传输重叠,提高并行性。
设设备输入一个块的时间为 T,CPU 处理一个块的时间为 C,缓冲区转移时间为 M:
- 单缓冲常用总时间:
max(T, C) + M; - 双缓冲常用总时间:
max(T, C + M)。
题目若给出具体“装满缓冲、处理、交换”的过程,应按时间线逐段判断,不要机械套公式。
4.2 设备分配数据结构
| 结构 | 含义 |
|---|---|
| SDT | 系统设备表,记录系统中设备及状态 |
| DCT | 设备控制表,记录某设备的控制信息、队列和状态 |
| COCT | 控制器控制表,描述控制器及其连接设备 |
| CHCT | 通道控制表,描述通道和 I/O 请求 |
独占设备分配后通常由一个进程占有;共享设备可被多个进程交替使用;虚拟设备通过软件让独占设备表现为可共享。
4.3 SPOOLing
SPOOLing 用磁盘作为大容量中间缓冲,把慢速独占设备虚拟成多个进程可共享的逻辑设备。
进程 → 输出井(磁盘文件) → 井管理程序 → 打印设备
打印时用户进程很快写入磁盘,真正打印由后台程序排队完成。输入井也可预先把数据放入磁盘,供多个作业读取。
5. 磁盘与调度
5.1 磁盘访问时间
磁盘访问时间:
[
T_a = T_s + T_r + T_t
]
Where Ts is the seek time, Tr is the average rotational latency, and Tt is the transfer time. When the rotational speed is r revolutions per second:
[
T_r = \frac{1}{2r},\qquad T_t = \frac{b}{rN}
]
b is the number of bytes to transfer, and N is the number of bytes that can be transferred in one revolution. Pay attention to unit consistency during calculations.
5.2 磁盘调度算法
| 算法 | 规则 | 主要特点 |
|---|---|---|
| FCFS | 按到达顺序服务 | 公平但平均寻道可能很大 |
| SSTF | 选择距离当前磁头最近的请求 | 平均寻道短,远端请求可能饥饿 |
| SCAN | 磁头沿一个方向服务,到端点后反向 | 又称电梯算法 |
| C-SCAN | 只在一个方向服务,到端点后快速回到起点 | 等待更均匀 |
| LOOK | 类似 SCAN,但到该方向最后请求就反向 | 不必走到物理端点 |
| C-LOOK | 类似 C-SCAN,但只到最后请求再跳回 | 减少无效移动 |
| N-step-SCAN/FSCAN | 把请求分批冻结后扫描 | 避免请求不断涌入造成磁头偏向 |
做题步骤:确定初始磁头位置和方向 → 写服务顺序 → 相邻柱面号作差 → 求总移动量。SCAN/LOOK 的“是否走到端点”是最常见失分点。
6. 固态硬盘 SSD
SSD 以闪存页为读写单位、以块为擦除单位。闪存页写入前不能直接覆盖已有数据,必须先擦除所在块,因此随机写会引入额外开销。
闪存转换层 FTL 将逻辑块地址映射到物理页,并负责垃圾回收、坏块管理和磨损均衡:
- 动态磨损均衡:新数据写入时避开磨损严重块;
- 静态磨损均衡:连长期不变的数据也偶尔搬迁,均衡各块擦写次数。
7. 高频易错点与自测
| 易错点 | 正确理解 |
|---|---|
| 中断和 DMA 完全相同 | 中断是通知机制,DMA 是数据搬运机制,DMA 通常最后再中断 |
| 驱动程序负责所有 I/O 策略 | 驱动偏硬件相关,设备独立性软件负责通用策略 |
| 缓冲区只是暂存数据 | 还用于速度匹配、减少中断和并行传输 |
| SSTF 一定最优 | 可能导致远端请求饥饿 |
| SCAN 一定走到磁盘端点 | LOOK 只走到该方向最后一个请求 |
| SSD 可以像磁盘一样覆盖写 | 闪存写入前通常要擦除块,FTL 会做地址映射 |
轻量自测
- 为什么程序查询方式会浪费 CPU?
- DMA 为什么能减少 CPU 负担,却仍需要 CPU 初始化?
- 逻辑设备名和物理设备名之间为什么要有 LUT?
- 磁头从 50 号柱面服务请求 10、40、70,采用 SSTF 时顺序是什么?
- 为什么 C-SCAN 的等待时间通常比 SCAN 更均匀?
- CPU 在设备未完成时反复读取状态寄存器,不能有效执行其他工作。
- DMA 需要 CPU 设置内存地址、计数和方向;设置后由 DMA 控制器自行传输,结束时通知 CPU。
- LUT 把应用与具体设备解耦,换设备或设备故障时无需修改应用程序。
- 当前 50,最近是 40;再比较 10 和 70,10 距 30、70 距 30,按题目规定的平局规则处理(常见顺序为 50→40→10→70)。
- C-SCAN 只在一个方向提供服务,避免同一方向两端请求等待时间差异过大。
记忆卡片
I/O 四级:查询 → 中断 → DMA → 通道,CPU 参与逐渐减少
I/O 层次:用户层 → 设备独立性 → 驱动 → 中断处理 → 硬件
Ta = Ts + Tr + Tt;Tr = 1/(2r)
SCAN 是双向电梯;C-SCAN 单向循环;LOOK 不走到端点
SSD:页读写、块擦除、FTL 映射、磨损均衡
复习日志
| 日期 | 学习内容 | 能否脱稿讲解 | 仍然困惑的点 |
|---|---|---|---|
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)