Appearance
题目
下列关于中断 I/O 方式和 DMA 方式比较的叙述中,错误的是( )。
错因
A
A 描述完全正确——中断方式的本质是让 CPU 暂停当前任务、跑 ISR,所请求的是 CPU 时间;DMA 方式让 DMA 控制器直接搬数据进内存,全程不打扰 CPU 程序流,只在搬运瞬间需要总线使用权。被这条搞混的人多半把"DMA 也要 CPU 启动"当成"DMA 也要 CPU 时间"——其实启动只是 CPU 写几个寄存器,开销可忽略。
B
B 也正确。"指令执行结束后才响应中断"是中断隐指令的硬性约束——一条指令必须执行完才能形成完整状态供保存(断点),中途打断会破坏数据通路。DMA 则细到每个总线事务(bus transaction)——它要的是总线,不需要 CPU 处于完整指令边界,所以"事务结束就让权"是更细粒度的同步点。
C
C 也正确。中断方式下,传送由 ISR 软件代码(IN/OUT 指令)一字节一字节搬;DMA 由 DMA 控制器硬件电路自动搬数据块,CPU 全程不参与传送动作。这是"软件 vs 硬件传送"的标准教科书表述。
总解析
逐项审计:
| 选项 | 说法 | 正/误 | 关键判据 |
|---|---|---|---|
| A | 中断求 CPU 时间,DMA 求总线使用权 | 正 | 两种方式占用的核心资源不同——这正是 DMA 优于中断的根本原因 |
| B | 中断在指令结束后响应,DMA 在总线事务结束后响应 | 正 | 同步粒度差异——DMA 比中断更"轻",能更快接入 |
| C | 中断软件传送,DMA 硬件传送 | 正 | 数据搬运主体不同——中断是 CPU + ISR 代码,DMA 是控制器 |
| D | 中断适用所有外设,DMA 仅适用快速外设 | 误 | "仅"字过死——DMA 没有"必须快"的硬性限制 |
D 错在哪——"适用范围"的两个绝对化判断都不准:
- "中断适用所有外设"——这条本身偏激。对于数据率极低的设备(如键盘、鼠标),用中断没问题;但对数据率极高且要求传送整块数据的设备(典型如硬盘、网卡),如果用中断,每个字节都要 ISR 跑一次,CPU 大部分时间被 ISR 切换吃掉——理论"适用",实践不可行。
- "DMA 仅适用快速外设"——这条更错。DMA 的本质优势是"块传送时不打扰 CPU",只要设备支持 DMA 协议就能用,无关速度快慢。慢速设备用 DMA 也成立(虽然性价比不一定最优),所以"仅"字直接否决。
事实上,408 教科书里 DMA 适用场景的标准表述是:"批量数据传送、数据率较高的外设"——是"较高"不是"快速",更不是"仅"。
最终答案是 D(这是错误叙述)。
判断"适用范围"类陷阱的速记:
408 真题里凡是看到"仅适用于…"、"所有外设都用…"、"任何情况下都…"——绝对化判断先怀疑。计算机系统里很少有"非黑即白"的硬约束,"主要适用于"才是常态。
三种 I/O 方式适用对照表(背一下):
| 方式 | 主要适用 | 次要适用 | 不推荐 |
|---|---|---|---|
| 程序查询 | CPU 不忙、设备很慢 | 单一设备简单系统 | 高速、多设备 |
| 程序中断 | 中低速、随机性事件 | 键盘 / 鼠标 / 串口 | 高速、批量 |
| DMA | 高速、批量、连续 | 磁盘 / 网卡 / 显存 | 极慢且零散 |