计算机 408 · 操作系统

第 5 章「输入/输出管理」学习笔记

[!NOTE]
I/O 设备通常比 CPU 慢很多。本章的核心不是背设备名称,而是理解:CPU 如何发起 I/O、设备如何通知完成、操作系统如何把不同设备统一起来,以及磁盘如何减少等待。

快速导航

学习进度

  • 能比较程序查询、中断、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 会做地址映射

轻量自测

  1. 为什么程序查询方式会浪费 CPU?
  2. DMA 为什么能减少 CPU 负担,却仍需要 CPU 初始化?
  3. 逻辑设备名和物理设备名之间为什么要有 LUT?
  4. 磁头从 50 号柱面服务请求 10、40、70,采用 SSTF 时顺序是什么?
  5. 为什么 C-SCAN 的等待时间通常比 SCAN 更均匀?
展开答案
  1. CPU 在设备未完成时反复读取状态寄存器,不能有效执行其他工作。
  2. DMA 需要 CPU 设置内存地址、计数和方向;设置后由 DMA 控制器自行传输,结束时通知 CPU。
  3. LUT 把应用与具体设备解耦,换设备或设备故障时无需修改应用程序。
  4. 当前 50,最近是 40;再比较 10 和 70,10 距 30、70 距 30,按题目规定的平局规则处理(常见顺序为 50→40→10→70)。
  5. C-SCAN 只在一个方向提供服务,避免同一方向两端请求等待时间差异过大。

记忆卡片

I/O 四级:查询 → 中断 → DMA → 通道,CPU 参与逐渐减少
I/O 层次:用户层 → 设备独立性 → 驱动 → 中断处理 → 硬件
Ta = Ts + Tr + Tt;Tr = 1/(2r)
SCAN 是双向电梯;C-SCAN 单向循环;LOOK 不走到端点
SSD:页读写、块擦除、FTL 映射、磨损均衡

复习日志

日期 学习内容 能否脱稿讲解 仍然困惑的点
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐