目录
为什么采用 DMA 传送方式?
中断方式 消除了程序查询方式中 CPU 空闲等待的现象,并且在没有中断处理任务时,CPU 和外设可以并行工作。但在中断响应和执行中断服务程序时仍然需要依靠 CPU 来完成。为了解决高速设备与主存间的大数据量传输问题,因此采用 DMA 的传送方式。
一、DMA 的基本概念
1. DMA 的定义
DMA(Direct Memory Access)即直接存储器访问,直接依靠硬件系统来控制主存与外部设备之间进行数据传输,在传送期间不需要 CPU 执行程序来干预,在传送结束后通常用中断方式通知 CPU 。
因为数据传输是直接由硬件控制实现的,不依靠执行程序指令来实现,所以在 DMA 传送期间不需要 CPU 执行程序来控制干预。
- 传送之前,CPU 需要向 DMA 送出有关的控制信息。
- 传送之后,CPU 可能需要处理数据。
(考判断题)CPU 只是在传送期间不干预,但在传送之前和传送之后是要干预的。
DMA 传送过程:
主从设备
申请并掌握总线控制权的一方称为 “主设备”,另一方则被称为 “从设备”。
注意:区别主设备与从设备身份差异的基本依据在于谁申请并掌握总线控制权,并不在于谁发送数据、谁接收数据,主设备可以发送数据也可以接收数据。反之,从设备也一样。
2. DMA 的特点
- 响应随机请求
- 不影响 CPU 程序的执行:仅占用总线、无程序切换
- 实现大批量数据的简单传送
不影响 CPU 程序的执行 —— 不存在访存冲突。
举例、前提:有指令在 Cache 中等着 CPU 去执行。若 Cache 中没有指令或者没有 Cache,CPU 肯定会需要利用系统总线去取指,那么 DMA 占用总线就会影响到 CPU 的工作。考试时忽略模型机没有 Cache 这一事实。
3. 典型的应用
- 主存与高速 I/O 设备之间的简单数据传送
- 大批量数据采集系统
- 动态存储器(DRAM)的自动刷新
DRAM 的刷新操作是对存储内容按行读出,可视为存储器内部的数据批量传输。因此,可以采用 DMA 方式实现。将每次刷新请求当成 DMA 请求,CPU 在刷新周期中让出系统总线。DMA 控制器掌控总线后,发行地址、发读信号。一个存储周期刷新一行,一行刷新完立马将总线还给 CPU。
4. DMA 的工作流程
(1)DMA 的初始化
在传送之前,CPU 需要事先向 DMA 控制器送出有关的控制信息。
- 向接口送出 I/O 设备的寻址信息。
- 向 DMA 控制器送出控制字。
- 向 DMA 控制器送出主存缓冲区首地址。
- 向 DMA 控制器送出交换量。
(2)DMA 的数据传送方式
CPU 响应 DMA 请求是在一个总线周期结束时。
在传送期间,CPU 停止访问主存,无法执行需要占用总线的指令。
① 单字传送方式
DMA 请求获得批准后,CPU 让出一个总线周期用于字或字节的传送。结束后, DMA 控制器归还总线控制权,CPU 再重新判断下一个总线周期的总线控制权是 CPU 保留,还是继续响应一次新的 DMA 请求。这种方式称为单字传送方式,又称为周期挪用或周期窃取。
② 块传送方式/成组连续传送方式
DMA 请求获得批准后,DMA 控制器掌管总线控制权,连续占用若干个总线周期,进行成组连续的批量传送,直到批量传送结束,才将总线的控制权交还给 CPU。这种方式称为成组连续传送方式。
二、DMA 控制器与接口功能
多路型 DMA 控制器:
DMA 控制器的功能
① 接收 CPU 初始化信息(主存首址、传送方向、交换量)—— 初始化
② 接收外设的 DMA 请求,判优,向 CPU 申请总线 —— 传送前
③ 接管总线权,发总线地址、读/写命令,并向 I/O 接口发响应信号 —— 传送期间
④ 向 CPU 撤销请求,并向 I/O 接口发结束信号 —— 传送结束
DMA 控制器控制 DMA 传送的起始和终止:DMA 控制器内部有一个计数器,只有 DMA 控制器知道传送是否结束。
接口的功能
① 接收 CPU 初始化信息(I/O 设备的寻址信息)—— 初始化
② 向 DMA 控制器发请求 —— 传送前,外设准备完毕
③ 向总线传送数据 —— 传送期间
④ 向 CPU 发中断请求 —— 传送结束
有需要才向 CPU 发中断请求,没有就不发。
三、DMA 传送全过程
Q:DMA 包含哪四个阶段?各阶段分别完成哪些操作?
A:四个阶段如下:
- 程序准备:CPU 用程序对 DMA 控制器和 I/O 接口进行初始化。
- 传送请求:DRQ → HRQ → HLDA → DACK
- DMA 传送:依靠硬件实现主存与 I/O 设备之间的数据传输。
- 善后处理:CPU 执行中断处理程序。