Appearance
题目
DMA 方式中,DMA 控制器控制的数据传输通路位于( )。
错因
A
误把 DMA 当成"加速 CPU 访存"的硬件——其实 CPU 和主存之间的访存通路是 CPU 自己直连的(通过总线),不需要 DMA 介入。DMA 是为了外设和主存之间的数据交换设计的,不是给 CPU 访存提速。
B
理解反了——DMA 控制器和 CPU 之间只有"启动信号 + 完成中断"等控制信号交流(通过总线),没有数据传输通路。如果数据真要经过"设备 → DMA → CPU → 主存"这条路,就跟程序中断方式没区别了,DMA 就废掉了。
D
错把"DMA 控制器内部缓冲"当成端到端的数据通路——确实 DMA 控制器内部可能有少量缓冲寄存器(如 32 位数据缓冲,参见 2020-22),但端到端的传输通路两端是设备接口和主存,DMA 控制器只是"中间的指挥者",不是通路的一端。
总解析
DMA 数据通路示意:
设备 ─┬─[设备接口]──┐
│ │
│ 总线 │ ← DMA 控制器仲裁、控制
│ │
[主存]────────────┘
↑
[DMA 控制器]——发控制信号 / 地址信号关键事实:
- 数据从设备接口直接进/出主存——不绕路 CPU、不绕路 DMA 控制器
- DMA 控制器只发送控制信号(地址、读写方向、字节计数)和总线请求/应答,不存储数据(除少量过渡用缓冲)
- 这是 DMA 之所以"高速"的关键——不绕路,端到端最短
所以数据传输通路 = 设备接口 ↔ 主存,对应选项 C。
三种 I/O 方式数据通路对照:
| 方式 | 数据通路 | 控制者 |
|---|---|---|
| 程序查询 | 设备接口 → CPU 寄存器 → 主存 | CPU 软件(查询程序) |
| 程序中断 | 设备接口 → CPU 寄存器 → 主存 | CPU 软件(ISR) |
| DMA | 设备接口 ↔ 主存(直连) | DMA 控制器硬件 |
注意前两种方式数据必须经过 CPU 寄存器(IN/OUT 指令把数据从设备接口装载到 CPU 寄存器,再 store 到主存),而 DMA 的数据根本不进 CPU——这是 DMA 命名"Direct Memory Access"(直接存储器访问)的字面意义。
最终答案是 C(设备接口和主存之间)。
送分题口诀:DMA = Device ↔ Memory Access。Device(设备接口)↔ Memory(主存),通路两端都在题面里给出来了,闭着眼也能选 C。