I/O 计算
I/O 题围绕设备与主存之间的数据传送展开。设备何时准备好、谁搬数据、CPU 为此忙多久,是三个相关但不同的问题。查询、中断和 DMA 的区别,也要放在这条传送路径里理解。
这个板块包含哪些知识
参照输入输出系统图谱,先认识连接关系,再分析传送方式:
- 总线与接口:数据、地址、控制信号;状态、控制和数据端口;总线宽度、频率、事务与突发传送。
- I/O 控制方式:程序查询、程序中断、DMA,以及各阶段 CPU 和控制器的分工。
- 中断机制:请求、响应、现场保存与恢复、屏蔽和优先级,硬件动作与软件处理的边界。
- 操作系统 I/O:驱动、设备独立软件、缓冲和进程唤醒。
- 设备性能:传输率、处理开销与磁盘的寻道、旋转、传输时间。
计算时要分开看数据传输量、CPU 工作量、经过的实际时间。DMA 搬运数据不需要 CPU 执行逐字传送指令,但仍占用总线,也需要初始化和完成处理。磁盘调度的完整题型见文件系统与磁盘。
常见考点与题型
综合题可能组合下面几类小问。先看要求求什么,再确定需要调用哪些知识。
| 题型 | 题干中的线索 | 解题思路 |
|---|---|---|
| CPU 开销与占用率 | 速率、单次指令数或周期数 | 求每秒需要处理几次,再乘单次 CPU 时间;查询次数按轮询规则确定 |
| 方式是否可行 | 设备准备间隔、响应时间、缓冲容量 | 比较服务能力与数据到达速度;有缓冲或重叠时按题设另建时间线 |
| DMA 与总线传输 | 块大小、总线宽度、突发长度 | 区分每块完成次数、总线事务次数和事务中的数据拍数 |
| 带宽与传送时间 | 主频、宽度、总线周期、等待周期 | 按一次事务的有效字节与耗时求带宽,再核对设备和内存瓶颈 |
| 中断与软件分工 | 动作排序、硬件或软件、驱动归属 | 沿请求到完成的过程定位动作,按题设处理器的机制说明职责 |
解题前要弄清的关系
在 408 常见的单设备、无并行重叠简化题中,一次 I/O 可按下面的路径分析;三种方式的区别包括如何检测就绪,以及第 4 步由谁搬运数据。若题目出现总线竞争、周期窃取或多设备并行,应以题设为准。
一、路径
- CPU 通过 I/O 接口下发命令字 —— 接口里有三类寄存器:状态、控制、数据缓冲,见 I/O 接口
- 设备准备一个传送单位(准备时间由数据传输率决定)
- 通知 CPU 数据就绪:程序查询 / 程序中断,或由 DMA 控制器管理传送,见 I/O 方式
- 传送这个单位:查询与中断经 CPU 寄存器搬,DMA 由控制器直接与主存交换,见 DMA 方式
- 全部传完后收尾:中断次数按设备与缓冲机制确定;常见简化题设为每单位一次中断、DMA 每块完成一次中断
二、三种方式的分工边界
| 方式 | CPU 每次花在什么上 | 数据传送阶段占 CPU 吗 |
|---|---|---|
| 程序查询 | 查询和传送的那几条指令 | 占 |
| 程序中断 | 中断响应 + 中断服务程序 | 占 |
| DMA | 只有预处理和后处理 | 不占,由 DMA 控制器搬 |
三、中断响应这一段的软硬件分界(选择题的固定落点)
- 硬件(中断隐指令):关中断 → 保存断点 PC 与 PSW → 切内核态 → 按向量转入
- 软件(中断服务程序):保存其余现场 → 具体传送 → 恢复现场 → 开中断返回
见 中断处理流程。
四、磁盘这一段是独立的时间模型
平均存取时间 = 寻道 + 旋转延迟 + 传输 + 控制器延迟,见 磁盘性能指标。
五、总线是所有传输率的上限
总线带宽 = 总线宽度(字节)× 总线时钟频率 ÷ 一次传送占用的时钟周期数
一次突发传送 = 一次寻址 + 连续若干个数据传送周期
三种问法各对应一个除法:**「至少需要多大主存带宽」用每秒要搬的字节数(2012#43 由每秒缺失次数反推)、「一个主存块要几次突发传送」用块大小除以一次突发能传的字节数(2013#43)、「总线请求几次」**用传送总量除以总线宽度(2022#44)。见 总线指标、突发总线传输事务、总线周期。
各类题的解法
CPU 占用率:次数乘单次处理开销
1. 一次传送多少字节?—— 看 I/O 接口数据缓冲寄存器的宽度,或总线宽度
2. 每秒传送多少次? —— 数据传输率 ÷ 一次传送的字节数
3. 一次花多少周期? —— 指令条数 × CPI,或题目直接给
CPU 占用率 = 次数 × 单次周期数 ÷ 主频
分子分母都统一成「周期 / 秒」,就不会算错量级。在上述简化假设下,查询和中断把传送本身也算进 CPU 时间,DMA 只算预处理和后处理;DMA 仍会占用总线带宽。
DMA 题有几种不同层次的“次数”,需要区分:按数据块算的是 DMA 请求次数和结束中断次数,每次只传一个总线字时,按总线宽度算的是总线事务次数;突发方式另看每次可连续传多少字。2022#44 问的是后者——一个 512B 扇区按 64 位总线要请求 64 次。
可行性:比较到达速度与服务能力
在单缓冲、数据持续到达且不能暂停的题设下,比较设备准备一个传送单位的间隔与该方式的单次响应处理时间;若来不及处理,会发生覆盖或丢失。有 FIFO、多缓冲或突发到达时,还需分析缓存容量和积压。
2018#43 第 2 问是这个套路最干净的样本:设备 B 传输率 40MBps,接口是 32 位缓冲寄存器,准备 4 字节需 4B ÷ 40MBps = 0.1μs;而中断响应加处理需 400 ÷ 500MHz = 0.8μs。0.1 < 0.8,所以设备 B 不能用中断方式。
同一道题的第 1 问和第 3 问则用上面的模型算出查询方式和 DMA 方式的 CPU 占用率都是 4%——这说明占用率相同的两种方式,可行性可以完全不同。
磁盘时间必须四项齐全
平均存取时间 = 寻道时间 + 旋转延迟(随机到达时平均转半圈)+ 传输时间 + 控制器延迟(题目给了才加)
调度题只数磁头移动的磁道数:SCAN 要走到端点再折返,CSCAN 回端点的那一整段位移也要计入,起点上就有的请求距离记 0。见 磁盘性能指标 和 磁盘调度算法。
单位统一
- 优先采用题设对 MB / MiB 的定义;常见题中传输率 MB/s 取 10⁶ B/s,容量常按 2²⁰ B 换算,不能不看约定直接混用;
- 转速先换成一圈多少毫秒:60 ÷ rpm;
- 主频、周期数、时间三者只保留一种,全部化到「周期 / 秒」再相除。
除了单位,还要检查处理次数、缓冲条件和并行重叠。每个中间结果都带上单位,便于复核量纲。
总线与 DMA:明确“一次”指什么
假设按题设每次总线事务只传一个 64 位字,传完 512 B 需要 512÷8=64 次事务;若每次获总线后可突发传 8 个字,则是 8 次突发事务、64 个数据拍。两者传输字节数相同,寻址和仲裁开销却可能不同。
所以先分别列出块数、每块事务数、每事务数据拍数,再计算 DMA 完成中断次数和总线占用时间。“每块中断一次”不能推出“每块只请求总线一次”。题干若不允许最后一拍传部分数据,次数还要向上取整。
概念题的高频落点
选择题这部分几乎不考计算,考的是分工边界:
| 问的是 | 边界在哪 | 去处 |
|---|---|---|
| 哪些动作由硬件完成 | 关中断、保存断点、切态、转向量 | 中断处理流程 |
| 哪些由操作系统完成 | 保存其余现场、建中断向量表、设备分配 | I/O 软件层次 |
| 外部中断还是内部异常 | 事件来自 CPU 之外还是指令执行内部 | 异常 |
| 多重中断谁先被处理 | 响应优先级与屏蔽字是两件事 | 中断屏蔽 |
| 哪些工作在驱动程序里 | CHS 换算、下发命令字 | CHS 地址 |