8.6 DMA的实现 (Implementation of DMA)
老师强调:DMA是解决“高速外设 ↔ 主存”数据交换的专用接口 + 总线控制权切换机制,核心是让外设与主存直接对话,尽量不占用CPU。
1. DMA控制器的“硬核”组成 (DMAC)
DMA控制器本身就是一个专用接口芯片(如 Intel 8237),关键在于硬件自运算 + 总线控制权交接:
- 主存地址计数器 (MAR):存放要交换数据的主存地址,硬件自动 +1。
- 传送长度计数器 (WC, Word Count):记录剩余数据量,硬件自动 -1,减到 0 时结束。
- 数据缓冲寄存器 (DB):数据中转。
- DMA请求触发器:记录外设发来的 DMA 请求。
- 自动加1/减1装置:DMAC 内置硬件修改地址/计数,不占用CPU的ALU。
- 中断机构(内置中断触发器):传送结束(WC=0)时,以“中断”通知CPU做收尾。
2. ★ 核心考点:DMA与中断的 5 大区别
| 特性 | 程序中断方式 | DMA方式 |
|---|---|---|
| 数据传送 | CPU执行程序(软件) | DMA控制器控制(硬件) |
| 响应时间 | 指令周期结束时 | 机器周期结束时(更快) |
| 现场保护 | 需保护断点与寄存器 | 不用保护现场(不切换程序) |
| 优先级 | 较低 | 最高(高于所有中断请求) |
| 应用场景 | 异常/低速 I/O | 高速外设成组传送 |
3. 三种传送方式(老师的“三板斧”)
- CPU停止访存法:DMA 工作时 CPU 完全闲置,简单但霸道。
- 存储器分时法:把周期一分为二,CPU/DMA 各用一半;缺点是内存需提速到 2 倍。
- 周期挪用法(Cycle Stealing)——最常考:
- 外设无请求:CPU正常访存。
- 外设有请求:DMA“挪用”一个访存周期,CPU短暂停一下。
- 优势:兼顾 CPU 运行与 DMA 需求,适配低/中速设备。
4. DMA传送过程(三大阶段)—— 全过程考点
阶段1:预处理 (Initialization)
- 控制者:CPU。
- 操作:CPU执行几条I/O指令,向DMAC写入:
- 传输方向(读还是写)。
- 主存起始地址。
- 传输字数。
- 注:此时CPU是主设备,DMAC是从设备。
阶段2:数据传送 (Data Transfer) —— 最核心步骤
- 控制者:DMAC。
- 操作:DMAC接管总线,控制数据在外设与主存之间直接流动。
- 握手信号流程(含 MEMR/MEMW 细节,必背顺序):
- DREQ (外设→DMAC):外设准备好数据,请求 DMA。
- HRQ (DMAC→CPU):总线请求;DMAC 要求接管总线。
- HLDA (CPU→DMAC):总线响应;CPU 三态门高阻,交出总线权并挂起。
- DACK (DMAC→外设):确认外设请求,开始传送。
- 传送阶段:DMAC 发出 MEMR/MEMW 与 IOR/IOW,数据直达主存,不进 CPU 寄存器。
- WC=0 善后:DMAC 拉低 HRQ,把总线权还给 CPU,并用内置中断触发器通知 CPU 收尾。
阶段3:后处理 (Post-processing)
- 控制者:CPU。
- 操作:当字节计数器减为0(传送结束):
- DMAC向CPU发送中断请求。
- CPU恢复现场,检查传输是否正确(校验),决定是否继续或报错。
💡 学习要点
关键信号记忆法
- DREQ:Device Request(设备请求)
- HRQ:Hold Request(保持请求)
- HLDA:Hold Acknowledge(保持确认)
- DACK:DMA Acknowledge(DMA确认)
- MEMR/MEMW:主存读/写;配合 IOR/IOW 完成“外设 ↔ 主存”直传。
三大阶段的控制权转移
预处理阶段:CPU控制 → 数据传送阶段:DMAC控制 → 后处理阶段:CPU控制老师的“坑点”提醒
- DMA请求 vs 总线请求:外设→DMAC 叫 DMA 请求;DMAC→CPU 叫总线请求(HRQ),别混。
- 为什么 DMA 优先级最高:磁盘等高速外设数据不及时取会丢失,CPU必须先让路。
- 谁是主设备:预处理时 CPU 为主、DMAC 为从;传送时 DMAC 为主,主存为从,CPU挂起。
考试重点
- 必背:握手信号完整流程(含 MEMR/MEMW / IOR/IOW 的控制权交接)。
- 理解:DMA 与中断的 5 大区别、DMA 优先级最高的原因。
- 应用:能根据题干判断当前阶段,画出控制权/信号时序,比较三种传送方式的优劣。