Skip to content

2019年 408 计算机组成原理 第 22 题

计算机组成原理2019年选择题2分

题目

下列关于 DMA 方式的叙述中,正确的是( )。

I. DMA 传送前由设备驱动程序设置传送参数

II. 数据传送前由 DMA 控制器请求总线使用权

III. 数据传送由 DMA 控制器直接控制总线完成

IV. DMA 传送结束后的处理由中断服务程序完成

错因

A

漏选 III 和 IV——可能误以为"DMA 传送过程不需 CPU 参与,所以也不存在 ISR 后处理",但 DMA 结束后必须由 CPU 跑 ISR 做后处理(关闭设备、唤醒等待进程、发完成信号),ISR 是必经环节。III 是 DMA 的核心定义(控制器直接控总线传数据),漏掉等于不知道 DMA 是什么。

B

漏选 II——可能想成"DMA 传送前 CPU 已经把总线让给 DMA 了,不需要再请求"。但实际上每次 DMA 启动 / 周期挪用 / 块结束时都需要 DMA 控制器主动向总线仲裁器申请使用权(CPU 不会无条件让出总线),II 是 DMA 工作流程的标准动作。

C

漏选 I——可能想成"DMA 自己干活,跟驱动程序无关"。但 DMA 控制器需要的源地址、目的地址、传送字节数、方向等参数都由设备驱动程序在传送前装入 DMA 控制器的寄存器——这是 CPU 在 DMA 预处理阶段必须做的工作。没有 I 这步,DMA 控制器根本不知道要搬什么。

总解析

DMA 工作的三阶段(教科书标配,背下来基本不丢分):

阶段谁主导做什么对应题项
预处理CPU(执行设备驱动程序)检测设备状态、设置 DMA 控制器参数(源/目的地址、字节数、方向)、启动设备I
数据传送DMA 控制器申请总线使用权 + 直接控制总线在设备↔主存之间搬数据II + III
后处理CPU(执行中断服务程序)DMA 结束发中断,CPU 跑 ISR 做收尾(关设备、唤醒进程、检验数据)IV

逐项审计

说法对应阶段对/错
I传送前由设备驱动程序设置参数预处理
II传送前 DMA 控制器请求总线使用权数据传送阶段开头
IIIDMA 控制器直接控制总线完成传送数据传送阶段主体
IV传送结束后处理由 ISR 完成后处理

四项全对——这是 408 真题里少见的"全选"题("总分总"式 DMA 流程考察)。

最终答案是 D(I、II、III、IV)

DMA 完整时序图(用于强化记忆):

CPU 调驱动程序

  ├─[I] 写 DMA 控制器:源地址 / 目的地址 / 字节数 / 方向 / 启动位

  ├─ 设置完毕,CPU 继续跑用户程序(解放!)

DMA 控制器:

  ├─[II] 设备准备好数据 → DMA 向总线仲裁器请求总线

  ├─[III] 拿到总线 → 直接在设备↔主存之间搬数据(不经 CPU)

  ├─ 重复 II/III 直到字节数耗尽

  ├─ 块传送结束 → DMA 向 CPU 发中断

CPU 响应中断:

  └─[IV] ISR 做后处理(关设备、唤醒进程、释放 DMA 通道)

为什么 DMA 既要驱动程序又要 ISR

  • 驱动程序在预处理阶段把"我要传什么"告诉 DMA(DMA 不是读心术)
  • ISR 在后处理阶段把"传完了"告诉操作系统 / 用户进程(DMA 结束后没人通知就等于丢了消息)
  • DMA 只负责"搬运",不负责"协议层"——前后的协议工作仍由 CPU 软件做

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题