Appearance
I/O方式对比
考情分析
三种 I/O 方式的对比是 408 综合题的经典考点,尤其喜欢给出具体参数让你计算 CPU 用于 I/O 的时间占比、实际传输效率。这类题目的核心在于搞清楚每种方式中 CPU 在什么环节介入、介入多少次。
三种方式全面对比
| 特性 | 程序查询 | 中断驱动 | DMA |
|---|---|---|---|
| 数据传输经过 CPU | 是 | 是 | 否 |
| 传输单位 | 字/字节 | 字/字节 | 数据块 |
| CPU 在传输期间 | 忙等(轮询) | 可执行其他程序 | 可执行其他程序 |
| CPU 介入频率 | 每个字都全程参与 | 每个字中断一次 | 每个块开始/结束各一次 |
| 响应时机 | 随时(查询到就处理) | 指令执行结束后 | 存储周期结束后 |
| 硬件成本 | 最低 | 需要中断控制器 | 需要 DMA 控制器 |
| CPU 利用率 | 最低 | 中等 | 最高 |
| 适用设备 | 低速、简单系统 | 中低速设备 | 高速设备 |
定量分析框架
设 CPU 主频为
程序查询方式的 CPU 开销
假设设备数据传输速率为
每秒查询次数(至少)
但在忙等模型下,CPU 除了查询什么都不做,占比就是 100%。上面的公式适用于"CPU 既做查询也做计算"的分时模型。
中断方式的 CPU 开销
每传一个字节触发一次中断,每次中断服务需要
DMA 方式的 CPU 开销
DMA 以块为单位传输,设块大小为
每秒 DMA 中断次数
由于
定量对比示例
假设参数如下:
| 参数 | 值 |
|---|---|
| CPU 主频 | 1 GHz |
| 设备传输速率 | 1 MB/s |
| 查询一次: | 100 个时钟周期 |
| 中断一次: | 500 个时钟周期 |
| DMA 块大小 | 4 KB |
| DMA 中断一次: | 500 个时钟周期 |
| 方式 | 每秒 CPU 开销(周期) | CPU 时间占比 |
|---|---|---|
| 程序查询 | ||
| 中断 | ||
| DMA |
这里中断的 CPU 开销反而高于查询,因为中断保存/恢复现场的开销(500 周期)大于单次查询(100 周期)。但关键区别是:查询方式下 CPU 在等待期间什么都不能做(忙等),中断方式下 CPU 在等待期间可以执行其他程序。
所以中断方式的优势不是减少 I/O 本身的 CPU 开销,而是让 CPU 在 I/O 等待期间去做有用的事。
选择 I/O 方式的决策逻辑
判断标准:
- 如果设备极慢(键盘、鼠标),中断频率低,中断方式就够了
- 如果设备很快(磁盘 100 MB/s),每字节中断一次会导致每秒
次中断,CPU 完全崩溃,必须用 DMA - DMA 将中断频率降低了
倍(块大小倍)
交互可视化
例题
例 1:CPU 主频 800 MHz,某外设数据传输速率 0.5 MB/s,中断服务程序共需 200 个时钟周期。如果采用中断方式,CPU 用于该设备 I/O 的时间占比是多少?
解:每秒中断
例 2:承接例 1,如果改用 DMA 方式,块大小 512 B,中断处理同样 200 个时钟周期,CPU 时间占比变为多少?
解:每秒中断次数
与中断方式的 12.5% 相比,DMA 将 CPU 开销降低了约 500 倍(
例 3:某系统同时连接了键盘(10 B/s)和磁盘(50 MB/s),应该分别采用什么 I/O 方式?
解:键盘速率极低,10 B/s 意味着每秒最多 10 次中断,开销可忽略不计,使用中断方式即可。磁盘 50 MB/s 如果用中断方式,每秒
考点清单
- 程序查询 CPU 全程忙等,中断方式释放 CPU 等待时间,DMA 释放 CPU 传输时间
- 中断方式的优势不在于减少 I/O 的 CPU 开销,而在于 CPU 可以在等待期间做其他事
- DMA 的 CPU 开销比中断方式低约
倍(块大小倍) - CPU 时间占比 = 每秒中断次数
单次中断周期数 / CPU 主频 - DMA 响应在存储周期结束后(比中断更细粒度)
- 高速设备必须用 DMA,否则中断频率会压垮 CPU