Appearance
408 > ### 计算机组成原理 > #### DMA方式
一、定位信息
| 项目 | 内容 |
|---|---|
| 知识单元编号 | CO-06-07 |
| 所属章节 | 第六章 总线与I/O系统 |
| 核心主题 | DMA方式的工作原理、传送方式与特点 |
| 考试权重 | ★★★★(高频重点,选择+大题均可出) |
| 前置知识 | CO-06-05 程序查询方式、CO-06-06 中断方式 |
| 后续衔接 | 无(本章最后一单元) |
二、知识点讲解
2.1 DMA方式的基本概念
DMA(Direct Memory Access,直接存储器访问) 是一种不经过CPU,由DMA控制器直接控制外设与主存之间数据传送的I/O方式。
在程序查询和中断方式中,每一个数据的传送都必须经过CPU(外设→CPU→主存 或 主存→CPU→外设),CPU是数据传送的"中转站"。而DMA方式中,数据直接在外设和主存之间传送,CPU只需在传送开始时进行初始化设置(传送方向、数据量、起始地址等),传送过程中CPU不参与,传送结束后DMA控制器通过中断通知CPU。
2.2 DMA控制器的组成
DMA控制器(DMAC)主要包含以下寄存器:
| 寄存器 | 名称 | 作用 |
|---|---|---|
| MAR | 主存地址寄存器 | 存放主存中数据的起始地址,每传送一个数据自动+1 |
| WC | 字计数器 | 存放要传送的数据总数,每传送一个数据自动-1,减到0时传送结束 |
| BR | 数据缓冲寄存器 | 暂存传送过程中的数据 |
| CR | 控制/状态寄存器 | 存放控制命令和状态信息(传送方向、DMA允许等) |
此外还需要:
- DMA请求触发器:外设准备好数据时置1,向DMAC发出DMA请求
- 中断逻辑:传送结束时向CPU发出中断请求
2.3 DMA方式的工作过程
(1) 预处理阶段(CPU完成)
CPU执行初始化程序,向DMA控制器设置:
- 传送方向(读/写)
- 主存起始地址 → MAR
- 数据传送数量 → WC
- 启动DMA控制器
设置完成后,CPU继续执行原程序。
(2) 数据传送阶段(DMA控制器完成,CPU不参与)
外设准备好数据
│
▼
外设向DMAC发出DMA请求
│
▼
DMAC向总线仲裁器发出总线请求(BRQ)
│
▼
总线仲裁器授权(BG),DMAC获得总线控制权
│
▼
DMAC发出:
- 主存地址(MAR → 地址总线)
- 读/写命令(控制总线)
- 数据传送(数据总线)
│
▼
MAR ← MAR + 1(地址递增)
WC ← WC - 1(计数递减)
│
▼
WC = 0? ──否──→ 继续传送下一个数据
│
是
▼
传送结束,DMAC向CPU发出中断请求(3) 后处理阶段(CPU完成)
CPU响应中断,执行中断服务程序:
- 校验传送数据的正确性
- 判断是否需要继续传送
- 进行必要的数据处理
2.4 DMA的三种传送方式
(1) 停止CPU访问主存(CPU停止法)
- DMA传送期间,CPU完全放弃总线控制权,不能访问主存
- DMA传送结束后,CPU重新获得总线控制权
- 优点:控制简单,适合高速数据传送
- 缺点:CPU在DMA期间完全停止工作,浪费严重
(2) 周期挪用/窃取(Cycle Stealing)
- DMA控制器在CPU不访问主存的空闲周期中"借用"总线进行一次数据传送
- 若CPU正在访问主存,则DMA等待当前存取周期结束后再挪用
- 优点:CPU损失较小(仅损失个别周期)
- 缺点:每次挪用一个周期,传送效率较低;控制较复杂
(3) DMA与CPU交替访问(交替分时访问)
- 将一个CPU周期分为两个时间片:一个给CPU,一个给DMA
- CPU和DMA交替访问主存,互不影响
- 优点:既不浪费CPU时间,DMA传送效率也高
- 缺点:需要复杂的时序控制;硬件实现复杂
三、三种I/O方式对比表
| 对比维度 | 程序查询方式 | 中断方式 | DMA方式 |
|---|---|---|---|
| 数据传送主体 | CPU | CPU | DMA控制器 |
| CPU参与程度 | 全程参与 | 每个数据都参与 | 仅预处理和后处理 |
| CPU与外设并行性 | 无(串行) | 部分并行 | 高度并行 |
| 数据传送路径 | 外设→CPU→主存 | 外设→CPU→主存 | 外设↔主存(直传) |
| 响应速度 | 慢(轮询等待) | 较快(中断响应) | 最快(硬件控制) |
| 适用场景 | 低速简单设备 | 中低速设备 | 高速大批量数据 |
| 硬件复杂度 | 最低 | 中等 | 最高 |
| CPU效率 | 最低 | 中等 | 最高 |
| 单位数据传送 | 字(每次1字) | 字(每次1字) | 块(每次一批) |
| 结束通知CPU | 程序判断 | 中断(每字) | 中断(整块传完) |
四、DMA三种传送方式对比表
| 对比维度 | 停止CPU访问 | 周期挪用 | 交替访问 |
|---|---|---|---|
| CPU活动 | 完全停止 | 仅损失个别周期 | 不受影响 |
| 总线使用权 | DMA独占 | DMA借用空闲周期 | CPU和DMA分时 |
| CPU效率影响 | 大(完全停顿) | 小(仅个别周期) | 无 |
| DMA效率 | 最高(独占) | 较低(每次挪一周期) | 高(稳定分时) |
| 控制复杂度 | 简单 | 中等 | 复杂 |
| 适用场景 | 高速传送 | 一般速度传送 | 高性能系统 |
五、记忆辅助
DMA = "不用CPU搬砖":CPU只负责"开工交底"(预处理)和"验收成果"(后处理),中间的搬数据工作交给DMA控制器。
DMA三个阶段:"预→传→后"——预处理(CPU设置)→数据传送(DMAC干活)→后处理(CPU验收中断)。
DMA四个关键寄存器:"地缓数控"——MAR(地址)、BR(缓冲)、WC(字计数)、CR(控制)。口诀:"马(MAR)帮(BR)我(WC)控(CR)"。
三种传送方式:
- 停止CPU = "你歇着,我全干"(CPU完全停)
- 周期挪用 = "你不用时我借用"(借用空闲周期)
- 交替访问 = "咱俩轮流来"(分时共享)
三种I/O方式递进:程序查询(CPU全程)→ 中断(CPU每字参与)→ DMA(CPU基本不参与)。CPU参与度递减,效率递增。
六、例题精解
例题1
题目:某系统采用DMA方式从磁盘向主存传送数据。磁盘数据传输率为4MB/s,主存周期为0.5μs,采用"周期挪用"方式。问:(1) 每次DMA传送占用几个主存周期?(2) DMA传送对CPU的影响有多大?
四步解题:
Step 1 审题:DMA周期挪用方式,磁盘4MB/s,主存周期0.5μs。
Step 2 知识定位:
- 周期挪用:每次DMA传送占用1个主存周期
- 主存带宽 = 1 / 0.5μs = 2M次/秒
Step 3 计算:
(1) 每次DMA传送占用1个主存周期(0.5μs)
(2) DMA需要的主存访问频率:
- 磁盘传输率 4MB/s,假设每次传送1字节
- 每秒DMA访问主存次数 = 4M次/秒
- 每次占用0.5μs
- DMA每秒占用总线时间 = 4M × 0.5μs = 2Mμs = 2秒
这超过了1秒,说明在0.5μs主存周期下,主存带宽(2M次/秒)不足以支撑4MB/s的DMA传输。
重新分析(假设每次传送1个字=4字节):
- 每秒DMA传送次数 = 4MB / 4B = 1M次/秒
- DMA占用时间 = 1M × 0.5μs = 0.5秒
- CPU损失率 = 0.5 / 1 = 50%
Step 4 答案: (1) 每次DMA传送占用 1个主存周期(0.5μs) (2) CPU每秒损失约 50% 的主存访问时间(假设每次传送4字节)
例题2
题目:某计算机系统需要将一块10KB的数据从I/O设备传送到主存,起始地址为1000H。系统采用DMA方式,每次传送1个字节。主存存取周期为1μs,采用"停止CPU访问主存"方式。CPU预处理需要20μs,后处理(中断服务)需要30μs。求:(1) DMA传送阶段的时间;(2) CPU的总开销时间;(3) 整个传送过程的时间。
四步解题:
Step 1 审题:10KB数据,DMA停止CPU方式,主存周期1μs,预处理20μs,后处理30μs。
Step 2 知识定位:
- 停止CPU方式:DMA独占总线,每次传送1个字节占用1个主存周期
- CPU在DMA传送期间完全停止工作
Step 3 计算:
(1) DMA传送阶段时间:
- 数据量 = 10KB = 10 × 1024 = 10240字节
- 每字节传送时间 = 1个主存周期 = 1μs
- DMA传送时间 = 10240 × 1μs = 10240μs = 10.24ms
(2) CPU总开销时间:
- 预处理 + 后处理 = 20μs + 30μs = 50μs
- DMA传送期间CPU不工作,不计入CPU开销
- CPU实际开销 = 50μs
(3) 整个传送过程时间:
- 总时间 = 预处理 + DMA传送 + 后处理
- = 20μs + 10240μs + 30μs = 10290μs ≈ 10.29ms
Step 4 答案: (1) DMA传送阶段时间为 10240μs(约10.24ms) (2) CPU总开销时间为 50μs (3) 整个传送过程时间为 10290μs(约10.29ms)
CPU效率分析:CPU开销仅占总时间的 50/10290 ≈ 0.49%,远优于程序查询和中断方式。
七、考情分析
| 维度 | 分析 |
|---|---|
| 出题频率 | 近10年约出现15-18次,最高频考点之一 |
| 题型 | 选择题(DMA特点辨析、三种方式对比)、综合题(DMA传送时间计算) |
| 难度 | ★★★★(概念+计算结合) |
| 考查重点 | DMA三种传送方式的区别;DMA与中断方式的对比;DMA传送时间计算 |
| 命题趋势 | 三种I/O方式的对比是必考内容;DMA传送时间计算与效率分析是综合题热点 |
八、易错点
DMA不需要CPU参与是错误的:DMA的预处理和后处理都需要CPU参与。"不需要CPU参与"仅指数据传送阶段。
DMA传送的单位是"块"不是"字":程序查询和中断方式每次传送1个字(CPU参与每个字的传送);DMA方式一次传送整个数据块(CPU只参与开头和结尾)。
周期挪用≠不中断CPU:周期挪用虽然只"借用"一个主存周期,但如果CPU正好要访问主存,就必须等待。对CPU来说,相当于这个存取周期被"偷走"了。
DMA结束用中断通知CPU:DMA传送结束后,通过中断方式通知CPU进行后处理。不要以为DMA完全不涉及中断。
停止CPU访问 vs 周期挪用的效率:停止CPU方式DMA效率最高但CPU损失最大;周期挪用方式CPU损失小但DMA效率较低。选择时需要权衡。
DMA地址自动递增:MAR在每次传送后自动+1(指向下一个存储单元),WC自动-1(计数递减)。这是硬件自动完成的,不需要CPU干预。
九、来源标注
| 来源 | 说明 |
|---|---|
| 《计算机组成原理》(唐朔飞) | 第8章 I/O系统,DMA方式 |
| 《计算机组成原理》(蒋本珊) | 第7章 DMA方式 |
| 408统考大纲 | 第六章 总线与I/O系统 - DMA方式 |
| 历年真题 | 2009-2025年408真题高频考点,几乎每年都有涉及 |