Appearance
题目
下列关于 I/O 控制方式的叙述中,错误的是( )。
错因
A
A 是正确叙述。程序查询方式由 CPU 轮询设备状态寄存器,循环检查"准备好了吗",准备好就 IN/OUT 搬数据——整个 I/O 都由 CPU 软件代码完成。题面"通过 CPU 执行查询程序"完全符合定义。
B
B 也正确。中断方式下,设备准备好后向 CPU 发中断请求,CPU 跑 ISR 一字节一字节搬数据——传送动作仍然是 CPU 在 ISR 里用 IN/OUT 执行的。"通过 CPU 执行中断服务程序"正是这个意思。
D
D 也正确。SSD(每秒数百 MB 到 GB)和网络适配器(千兆/万兆网卡每秒上百 MB)数据率极高,只能用 DMA——用程序查询或中断方式 CPU 全部时间都耗在搬数据上了,根本来不及。教科书标配高速设备配 DMA。
总解析
C 错在哪——"DMA 传送程序"是矛盾说法
DMA 方式的本质就是"绕过 CPU 让 DMA 控制器自己搬"——
- CPU 在预处理阶段调驱动程序设置 DMA 控制器(这是软件)
- DMA 控制器在数据传送阶段直接控总线搬数据(这不是 CPU 在执行任何程序,而是 DMA 控制器的硬件电路在动)
- CPU 在后处理阶段跑 ISR 收尾(这是软件)
C 说"CPU 执行 DMA 传送程序"——这话有两个错:
- 没有"DMA 传送程序"这个东西——传送阶段是 DMA 硬件电路在动,没有任何软件被 CPU 跑着
- CPU 不参与传送过程——这恰恰是 DMA 区别于程序查询/中断的核心优势:CPU 在 DMA 传送期间继续干自己的事,不被打扰
如果"CPU 执行 DMA 传送程序"成立,那 DMA 就退化成了"另一种程序中断",丧失了"硬件并行搬运"的核心意义。
三种 I/O 方式 CPU 参与度对照:
| 方式 | 预处理 | 数据传送 | 后处理 | CPU 总参与度 |
|---|---|---|---|---|
| 程序查询 | CPU 检查状态 | CPU 跑查询程序逐字节搬 | CPU 收尾 | 极高(全程 CPU) |
| 程序中断 | CPU 启动设备 | CPU 跑 ISR 逐字节搬(被中断打断时) | CPU 收尾 | 较高(每字节都中断一次) |
| DMA | CPU 设置参数 | DMA 控制器直接控总线搬整块 | CPU 收尾(处理结束中断) | 极低(只在头尾参与) |
逐项审计:
| 选项 | 说法 | 真实情况 | 对/错 |
|---|---|---|---|
| A | 查询方式 CPU 跑查询程序 | 整个 I/O 由 CPU 软件做 | ✓ |
| B | 中断方式 CPU 跑 ISR | 传送由 ISR 软件做 | ✓ |
| C | DMA 方式 CPU 跑 DMA 传送程序 | 传送由 DMA 控制器硬件做,CPU 不跑任何"传送程序" | ✗ |
| D | SSD / 网卡用 DMA | 高速设备的标准配 | ✓ |
最终答案是 C(这是错误叙述)。
记忆要点:DMA 的核心标语就是"直接存储器访问,不经 CPU"——只要看到选项里说"CPU 执行 XX 程序在 DMA 传送阶段做事",立刻判错。