Appearance
题目
下列设备中,适合采用 DMA 输入输出的设备是( )。
Ⅰ. 键盘 Ⅱ. 网卡 Ⅲ. 固态硬盘 Ⅳ. 针式打印机
错因
A
错把键盘判成"适合 DMA"。键盘的特点是事件驱动 + 单字节传输——按一次产生 1 字节扫描码,一秒最多十几次。这种"低速、零散、不可预测时机"的设备建立 DMA 通道反而会浪费大量初始化开销,标准做法是中断驱动(按键时发中断、CPU 读 1 字节进缓冲区即可)。键盘在所有 408 真题里都是中断方式的代表设备,不是 DMA 候选。
C
针式打印机被错判成"适合 DMA"。针式打印机走机械击打,速度极慢(每秒几十~几百字符),数据流是字节级别。即便要打印长文档,也是 CPU 用中断/查询方式按字节往缓冲区送即可。给如此慢的设备配 DMA 控制器是大材小用——CPU 本身的字节级控制完全跟得上,DMA 的"成块快传"优势在这里发挥不出来。
D
D 把固态硬盘判对了(适合 DMA),但坚持把针式打印机也算进来——同 C 的问题。漏掉网卡这个明确的高速 DMA 候选。
总解析
思路:判断一个设备是否适合 DMA,看两个核心指标:
- 传输速率高 vs 低:DMA 的优势是 CPU 不参与数据搬运,把高速 I/O 与 CPU 解耦;如果设备本身慢,CPU 反正也闲,没必要 DMA
- 数据是否成块:DMA 一次启动传输一个数据块(连续若干字节/扇区);如果数据是单字节级的零散输入(按键、字符回显),用中断更合算
逐项分析:
| 设备 | 速率 | 数据形态 | 适合的 I/O 方式 |
|---|---|---|---|
| Ⅰ. 键盘 | 极低(事件级) | 单字节 | 中断(适合);DMA(不适合) |
| Ⅱ. 网卡 | 高(百兆/千兆位级) | 成包成块 | DMA(适合) |
| Ⅲ. 固态硬盘 | 高(GB/s 级,PCIe NVMe) | 块(扇区/页) | DMA(适合) |
| Ⅳ. 针式打印机 | 极低(机械) | 单字节 | 中断 / 查询(适合);DMA(不适合) |
只有 Ⅱ 网卡和 Ⅲ 固态硬盘满足"高速 + 块传输"两条件——这正是 DMA 设计的本意:把大块数据搬运的工作交给专用 DMA 控制器,让 CPU 在传输期间能去执行别的指令。
最终答案是 B(Ⅱ、Ⅲ)。
三种 I/O 方式对照表:
| 方式 | CPU 介入 | 适合设备 | 典型例子 |
|---|---|---|---|
| 程序查询 | 全程轮询,CPU 完全占用 | 极少数严格实时、独占 CPU 的小型场景 | 旧式串口 |
| 中断驱动 | 设备就绪发中断,CPU 处理一次 | 低速、零散输入的设备 | 键盘、鼠标、慢速串口、针式打印机 |
| DMA | CPU 启动后撒手,由 DMA 控制器搬数据 | 高速、成块传输的设备 | 磁盘、固态硬盘、网卡、显卡 |
判定速记:
键盘 / 鼠标 / 慢速字符设备 → 中断 磁盘 / 网卡 / 大容量批量数据 → DMA 极简单/独占的小系统 → 查询
记住"高速且成块"两个关键词,DMA 题基本一眼出答案。