Skip to content

I/O方式对比

考情分析

三种 I/O 方式的对比是 408 综合题的经典考点,尤其喜欢给出具体参数让你计算 CPU 用于 I/O 的时间占比、实际传输效率。这类题目的核心在于搞清楚每种方式中 CPU 在什么环节介入、介入多少次。

三种方式全面对比

特性程序查询中断驱动DMA
数据传输经过 CPU
传输单位字/字节字/字节数据块
CPU 在传输期间忙等(轮询)可执行其他程序可执行其他程序
CPU 介入频率每个字都全程参与每个字中断一次每个块开始/结束各一次
响应时机随时(查询到就处理)指令执行结束后存储周期结束后
硬件成本最低需要中断控制器需要 DMA 控制器
CPU 利用率最低中等最高
适用设备低速、简单系统中低速设备高速设备

定量分析框架

设 CPU 主频为 f(Hz),一个时钟周期为 T=1/f

程序查询方式的 CPU 开销

假设设备数据传输速率为 R(B/s),每次查询需要 c 条指令,每条指令 k 个时钟周期。

每秒查询次数(至少)=R(每传一个字节查询一次)。

CPU 用于查询的时钟周期数=R×c×kCPU 时间占比=R×c×kf×100%

但在忙等模型下,CPU 除了查询什么都不做,占比就是 100%。上面的公式适用于"CPU 既做查询也做计算"的分时模型。

中断方式的 CPU 开销

每传一个字节触发一次中断,每次中断服务需要 m 个时钟周期(含保存/恢复现场)。

CPU 用于中断的时钟周期数=R×mCPU 时间占比=R×mf×100%

DMA 方式的 CPU 开销

DMA 以块为单位传输,设块大小为 Bs 字节,每秒传输数据量为 R(B/s)。

每秒 DMA 中断次数 =R/Bs,每次中断 CPU 开销为 m 个时钟周期。

CPU 时间占比=(R/Bs)×mf×100%

由于 Bs 通常很大(如 512 B 或 4 KB),DMA 的 CPU 开销比中断方式低 Bs 倍。

定量对比示例

假设参数如下:

参数
CPU 主频 f1 GHz
设备传输速率 R1 MB/s
查询一次:c×k100 个时钟周期
中断一次:m500 个时钟周期
DMA 块大小 Bs4 KB
DMA 中断一次:m500 个时钟周期
方式每秒 CPU 开销(周期)CPU 时间占比
程序查询106×100=10810%
中断106×500=5×10850%
DMA(106/4096)×5001.22×1050.012%

这里中断的 CPU 开销反而高于查询,因为中断保存/恢复现场的开销(500 周期)大于单次查询(100 周期)。但关键区别是:查询方式下 CPU 在等待期间什么都不能做(忙等),中断方式下 CPU 在等待期间可以执行其他程序。

所以中断方式的优势不是减少 I/O 本身的 CPU 开销,而是让 CPU 在 I/O 等待期间去做有用的事

选择 I/O 方式的决策逻辑

判断标准:

  • 如果设备极慢(键盘、鼠标),中断频率低,中断方式就够了
  • 如果设备很快(磁盘 100 MB/s),每字节中断一次会导致每秒 108 次中断,CPU 完全崩溃,必须用 DMA
  • DMA 将中断频率降低了 Bs 倍(块大小倍)

交互可视化

加载可视化中...

例题

例 1:CPU 主频 800 MHz,某外设数据传输速率 0.5 MB/s,中断服务程序共需 200 个时钟周期。如果采用中断方式,CPU 用于该设备 I/O 的时间占比是多少?

:每秒中断 0.5×106 次,每次 200 周期。

占比=0.5×106×200800×106=1088×108=12.5%

例 2:承接例 1,如果改用 DMA 方式,块大小 512 B,中断处理同样 200 个时钟周期,CPU 时间占比变为多少?

:每秒中断次数 =0.5×106/512976.6 次。

占比=976.6×200800×1060.0244%

与中断方式的 12.5% 相比,DMA 将 CPU 开销降低了约 500 倍(Bs=512)。

例 3:某系统同时连接了键盘(10 B/s)和磁盘(50 MB/s),应该分别采用什么 I/O 方式?

:键盘速率极低,10 B/s 意味着每秒最多 10 次中断,开销可忽略不计,使用中断方式即可。磁盘 50 MB/s 如果用中断方式,每秒 5×107 次中断,CPU 根本处理不过来,必须使用 DMA,以块为单位传输(4 KB 块 → 每秒约 12207 次中断,开销很小)。

考点清单

  • 程序查询 CPU 全程忙等,中断方式释放 CPU 等待时间,DMA 释放 CPU 传输时间
  • 中断方式的优势不在于减少 I/O 的 CPU 开销,而在于 CPU 可以在等待期间做其他事
  • DMA 的 CPU 开销比中断方式低约 Bs 倍(块大小倍)
  • CPU 时间占比 = 每秒中断次数 × 单次中断周期数 / CPU 主频
  • DMA 响应在存储周期结束后(比中断更细粒度)
  • 高速设备必须用 DMA,否则中断频率会压垮 CPU

真题练习

相关真题(2题)

2025Q21选择题2分

DMA方式适用的I/O设备类型

2018Q43综合题8分

中断I/O与DMA方式的CPU开销对比综合题