Skip to content

DMA vs 中断 vs 程序查询——模拟器使用指南

考情分析

三种 I/O 方式的对比是 408 选择题的常客。很多同学知道"DMA 最好、程序查询最差",但具体差在哪里——CPU 到底在干什么、数据由谁搬运——描述不清楚。

这个模拟器用同一个场景(CPU 从磁盘读一块数据)对比三种方式:

考点考频
三种 I/O 方式的工作原理🔥🔥🔥
CPU 参与程度和利用率🔥🔥🔥
传输单位(字 vs 块)🔥🔥
适用场景🔥🔥
加载可视化中...

三种模式

1. 程序查询(CPU 忙等)

CPU 不断查询设备状态寄存器:"好了没?好了没?好了没?"——直到设备准备好数据。

你会看到:CPU 一直显示"忙等轮询"状态,红色占满整个时间线。设备在准备数据的 6 个周期里,CPU 什么有效工作都没做

CPU 利用率最低

程序查询期间,CPU 100% 被 I/O 占用。如果设备很慢(比如磁盘),CPU 要等几百万个周期——全部浪费在轮询上。

2. 中断驱动(CPU 被打断)

CPU 发出 I/O 请求后转去做其他计算。设备准备好后发中断信号,CPU 暂停当前工作,执行中断服务程序搬运数据。

你会看到:CPU 在设备准备期间显示"正常计算"(绿色),直到收到中断才切换到"中断服务"(橙色)和"搬运数据"(蓝色)。

比程序查询好在哪?

CPU 的等待时间被利用起来了。但每传一个字都要中断一次——如果传 1000 个字,就要中断 1000 次,频繁的中断保存/恢复也有开销。

3. DMA(CPU 最轻松)

CPU 只需告诉 DMA 控制器三件事:源地址、目标地址、传输字节数。DMA 控制器自己接管总线搬运数据,搬完再中断 CPU 一次。

你会看到:CPU 几乎全程显示"正常计算"(绿色),只在开头(初始化 DMA)和结尾(确认完成中断)短暂参与。数据传输由 DMA 控制器完成,CPU 完全不参与

DMA 的核心考点

DMA 以为单位传输(不是字)。CPU 只在开始和结束各参与一次。DMA 传输期间需要窃取总线周期(周期窃取方式),可能让 CPU 访存稍微变慢,但比中断方式高效得多。

对比表

程序查询中断驱动DMA
CPU 在等待期间忙等轮询做其他计算做其他计算
数据搬运者CPUCPU(中断中)DMA 控制器
传输单位
中断次数0每字一次每块一次
CPU 利用率~5%~70%~95%
适用设备简单低速中速高速大量

考研高频考点速览

考点考频关键记忆
三种方式 CPU 参与度🔥🔥🔥查询:全程;中断:每次中断;DMA:首尾
传输单位差异🔥🔥🔥查询/中断 = 字,DMA = 块
DMA 周期窃取🔥🔥DMA 传输时"偷"总线周期,CPU 不能同时访存
中断的开销🔥🔥保存/恢复现场 + 中断判优,频繁中断也有代价

真题练习