Skip to content

LV006-DMA方式

一、DMA 方式的特点

图 5.45 示意了 DMA 方式与程序中断方式的数据通路。

image-20251020191809340

由图中可见, 由于主存和 DMA 接口之间有一条数据通路, 因此主存和设备交换信息时, 不通过 CPU, 也不需要 CPU 暂停现行程序为设备服务, 省去了保护现场和恢复现场, 因此工作速度比程序中断方式的工作速度高。这一特点特别适合于高速 I/O 或辅存与主存之间的信息交换。

因为高速 I/O 设备若每次申请与主机交换信息时, 都要等待 CPU 做出中断响应后再进行, 很可能因此使数据丢失。值得注意的是, 若出现高速 I/O(通过 DMA 接口)和 CPU 同时访问主存, CPU 必须将总线(如地址线、数据线)占有权让给 DMA 接口使用, 即 DMA 采用周期窃取的方式占用一个存取周期。

在 DMA 方式中, 由于 DMA 接口与 CPU 共享主存, 这就有可能出现两者争用主存的冲突。为了有效地分时使用主存, 通常 DMA 与主存交换数据时采用如下三种方法。

(1)停止 CPU 访问主存

当外设要求传送一批数据时, 由 DMA 接口向 CPU 发一个停止信号, 要求 CPU 放弃地址线、数据线和有关控制线的使用权。DMA 接口获得总线控制权后, 开始进行数据传送, 在数据传送结束后, DMA 接口通知 CPU 可以使用主存, 并把总线控制权交回给 CPU, 图 5.46(a)是该方式的时间示意图。

image-20251020192053517

这种方式的优点是控制简单, 适用于数据传输率很高的 I/O 设备实现成组数据的传送。缺点是 DMA 接口在访问主存时, CPU 基本上处于不工作状态或保持原状态。而且即使 I/O 设备高速运行, 两个数据之间的准备间隔时间也总大于一个存取周期, 因此, CPU 对主存的利用率并没得到充分的发挥。如软盘读一个 8 位二进制数大约需要 32us, 而半导体存储器的存取周期远小于 1us, 可见在软盘准备数据的时间内, 主存处于空闲状态, 而 CPU 又暂停访问主存。为此在 DMA 接口中, 一般设有一个小容量存储器(这种存储器是用半导体芯片制作的), 使 I/O 设备首先与小容量存储器交换数据, 然后由小容量存储器与主存交换数据, 这便可减少 DMA 传送数据时占用总线的时间, 即可减少 CPU 的暂停工作时间。

(2)周期挪用(或周期窃取)

在这种方法中, 每当 I/O 设备发出 DMA 请求时, I/O 设备便挪用或窃取总线占用权一个或几个主存周期, 而 DMA 不请求时, CPU 仍继续访问主存。I/O 设备请求 DMA 传送会遇到三种情况。一种是 CPU 此时不需要访问主存(如 CPU 正在执行乘法指令, 由于乘法指令执行时间较长, 此时 CPU 不需要访问主存), 故 I/O 设备与 CPU 不发生冲突。第二种情况是 I/O 设备请求 DMA 传送时, CPU 正在访问主存, 此时必须待存取周期结束, CPU 才能将总线占有权让出。第三种情况是 I/O 设备要求访问主存时, CPU 也要求访问主存, 这就出现了访问冲突。此刻, I/O 访存优先于 CPU 访问主存, 因为 I/O 不立即访问主存就可能丢失数据, 这时 I/O 要窃取一两个存取周期, 意味着 CPU 在执行访问主存指令过程中插入了 DMA 请求, 并挪用了一两个存取周期, 使 CPU 延缓了一两个存取周期再访问主存。图 5.46(b)示意了 DMA 周期挪用的时间对应关系。

image-20251020192253597

与 CPU 暂停访存的方式相比, 这种方式既实现了 I/O 传送, 又较好地发挥了主存与 CPU 的效率, 是一种广泛采用的方法。

应该指出, I/O 设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制权。因此, 尽管传送一个字对主存而言只占用一个主存周期, 但对 DMA 接口而言, 实质上要占 2~5 个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于 I/O 设备的读/写周期大于主存周期的情况。

(3)DMA 与 CPU 交替访问

这种方法适合于 CPU 的工作周期比主存存取周期长的情况。例如,CPU 的工作周期为 1.2us,主存的存取周期小于 0.6us,那么可将一个 CPU 周期分为 C1 和 C2 两个分周期,其中 C1 专供 DMA 访存,C2 专供 CPU 访存,如图 5.46(c)所示。

image-20251020192346725

这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过 C1 和 C2 分别控制的。CPU 与 DMA 接口各自有独立的访存地址寄存器、数据寄存器和读/写信号。实际上总线变成了在 C1 和 C2 控制下的多路转换器,其总线控制权的转移几乎不需要什么时间,具有很高的 DMA 传送速率。在这种工作方式下,CPU 既不停止主程序的运行也不进入等待状态,即完成了 DMA 的数据传送。当然其相应的硬件逻辑变得更为复杂。

二、接口功能和组成

1. DMA 接口的功能

利用 DMA 方式传送数据时,数据的传输过程完全由 DMA 接口电路控制,故 DMA 接口又有 DMA 控制器之称。DMA 接口应具有如下几个功能。

① 向 CPU 申请 DMA 传送。

② 在 CPU 允许 DMA 工作时,处理总线控制权的转交,避免因进入 DMA 工作而影响 CPU 正常活动或引起总线竞争。

③ 在 DMA 期间管理系统总线,控制数据传送。

④ 确定数据传送的起始地址和数据长度,修正数据传送过程中的数据地址和数据长度。

⑤ 在数据块传送结束时,给出 DMA 操作完成的信号。

2. DMA 接口基本组成

最简单的 DMA 接口组成原理如图 5.47 所示,它由以下几个逻辑部件组成。

image-20251020192547886

(1)主存地址寄存器(AR)

AR 用于存放主存中需要交换数据的地址。在 DMA 传送数据前,必须通过程序将数据在主存中的首地址送到主存地址寄存器。在 DMA 传送过程中,每交换一次数据,将地址寄存器内容加 1,直到一批数据传送完毕为止。

(2)字计数器(WC)

WC 用于记录传送数据的总字数,通常以交换字数的补码值预置。在 DMA 传送过程中,每传送一个字,字计数器加 1,直到计数器为 0,即最高位产生进位时,表示该批数据传送完毕(若交换字数以原码值预置,则每传送一个字,字计数器减 1,直到计数器为 0 时,表示该批数据传送结束)。于是 DMA 接口向 CPU 发中断请求信号。

(3)数据缓冲寄存器(BR)

BR 用于暂存每次传送的数据。通常 DMA 接口与主存之间采用字传送,而 DMA 与设备之间可能是字节或位传送。因此 DMA 接口中还可能包括有装配或拆卸字信息的硬件逻辑,如数据移位缓冲寄存器、字节计数器等。

(4)DMA 控制逻辑

DMA 控制逻辑负责管理 DMA 的传送过程,由控制电路、时序电路及命令状态控制寄存器等组成。每当设备准备好一个数据字(或一个字传送结束),就向 DMA 接口提出申请(DREQ),DMA 控制逻辑便向 CPU 请求 DMA 服务,发出总线使用权的请求信号(HRQ)。待收到 CPU 发出的响应信号 HLDA 后,DMA 控制逻辑便开始负责管理 DMA 传送的全过程,包括对主存地址寄存器和字计数器的修改、识别总线地址、指定传送类型(输入或输出)以及通知设备已经被授予一个 DMA 周(DACK)等。

(5)中断机构

当字计数器溢出(全 "0")时, 表示一批数据交换完毕, 由 "溢出信号" 通过中断机构向 CPU 提出中断请求, 请求 CPU 作 DMA 操作的后处理。必须注意, 这里的中断与 《计算机原理 第三版 唐朔飞》5.5 节介绍的 I/O 中断的技术相同, 但中断的目的不同, 前面是为了数据的输入或输出, 而这里是为了报告一批数据传送结束。它们是 I/O 系统中不同的中断事件。

(6)设备地址寄存器(DAR)

DAR 存放 I/O 设备的设备码或表示设备信息存储区的寻址信息, 如磁盘数据所在的区号、盘面号和柱面号。具体内容取决于设备的数据格式和地址的编址方式。

三、工作过程

1. DMA 传送过程

DMA 的数据传送过程分为预处理、数据传送和后处理 3 个阶段。

(1)预处理

在 DMA 接口开始工作之前,CPU 必须给它预置如下信息。

  • 给 DMA 控制逻辑指明数据传送方向是输入(写主存)还是输出(读主存)。
  • 向 DMA 设备地址寄存器送入设备号,并启动设备。
  • 向 DMA 主存地址寄存器送入交换数据的主存起始地址。
  • 对字计数器赋予交换数据的个数。

上述工作由 CPU 执行几条输入输出指令完成,即程序的初始化阶段。这些工作完成后,CPU 继续执行原来的程序,如图 5.48(a)所示。

image-20251020193408335

当 I/O 设备准备好发送的数据(输入)或上次接收的数据已经处理完毕(输出)时,它便通过 DMA 接口向 CPU 提出占用总线的申请,若有多个 DMA 同时申请,则按轻重缓急由硬件排队判优逻辑决定优先等。待 I/O 设备得到主存总线的控制权后,数据的传送便由该 DMA 接口进行管理。

(2)数据传送

DMA 方式是以数据块为单位传送的,以周期挪用的 DMA 方式为例,其数据传送的流程如图 5.48(b)所示。结合图 5.47,以数据输入为例,具体操作如下。

① 当设备准备好一个字时,发出选通信号,将该字读到 DMA 的数据缓冲寄存器(BR)中,表示数据缓冲寄存器 "满"(如果 I/O 设备是面向字符的,则一次读入一个字节,组装成一个字)。

② 与此同时设备向 DMA 接口发请求(DREQ)。

③DMA 接口向 CPU 申请总线控制权(HRQ)。

④CPU 发回 HLDA 信号,表示允许将总线控制权交给 DMA 接口。

⑤ 将 DMA 主存地址寄存器中的主存地址送地址总线,并命令存储器写。

⑥ 通知设备已被授予一个 DMA 周期(DACK),并为交换下一个字做准备。

⑦ 将 DMA 数据缓冲寄存器的内容送数据总线。

⑧ 主存将数据总线上的信息写至地址总线指定的存储单元中。

⑨ 修改主存地址和字计数值。

⑩ 判断数据块是否传送结束,若未结束,则继续传送;若已结束,(字计数器溢出),则向 CPU 申请程序中断,标志数据块传送结束。

若为输出数据,则应完成以下操作:

① 当 DMA 数据缓冲寄存器已将输出数据送至 I/O 设备后,表示数据缓冲寄存器已 "空"。

② 设备向 DMA 接口发请求(DREQ)。

③DMA 接口向 CPU 申请总线控制权(HRQ)。

④CPU 发回 HLDA 信号,表示允许将总线控制权交给 DMA 接口使用。

⑤ 将 DMA 主存地址寄存器中的主存地址送地址总线,并命令存储器读。

⑥ 通知设备已被授予一个 DMA 周期(DACK),并为交换下一个字做准备。

⑦ 主存将相应地址单元的内容通过数据总线读入 DMA 的数据缓冲寄存器中。

⑧ 将 DMA 数据缓冲寄存器的内容送到输出设备,若为字符设备,则需将其拆成字符输出。

⑨ 修改主存地址和字计数值。

⑩ 判断数据块是否已传送完毕, 若未完毕, 继续传送; 若已传送完毕, 则向 CPU 申请程序中断。

(3)后处理

当 DMA 的中断请求得到响应后, CPU 停止原程序的执行, 转去执行中断服务程序, 做一些 DMA 的结束工作, 如图 5.48(a)的后处理部分。这包括校验送入主存的数据是否正确; 决定是否继续用 DMA 传送其他数据块, 若继续传送, 则又要对 DMA 接口进行初始化, 若不需要传送, 则停止外设; 测试在传送过程中是否发生错误, 若出错, 则转错误诊断及处理错误程序。

2. DMA 接口与系统连接方式

DMA 接口与系统的连接方式有两种,如图 5.49 所示。

image-20251020193800887

图 5.49(a)为具有公共请求线的 DMA 请求方式,若干个 DMA 接口通过一条公用的 DMA 请求线向 CPU 申请总线控制权。CPU 发出响应信号,用链式查询方式通过 DMA 接口,首先选中的设备获得总线控制权,即可占用总线与主存传送信息。

3. DMA 小结

与程序中断方式相比, DMA 方式有如下特点。

① 从数据传送看, 程序中断方式靠程序传送, DMA 方式靠硬件传送。

② 从 CPU 响应时间看, 程序中断方式是在一条指令执行结束时响应, 而 DMA 方式可在指令周期内的任一存取周期结束时响应。

③ 程序中断方式有处理异常事件的能力, DMA 方式没有这种能力, 主要用于大批数据的传送, 如硬盘存取、图像处理、高速数据采集系统等, 可提高数据吞吐量。

④ 程序中断方式需要中断现行程序, 故需保护现场; DMA 方式不中断现行程序, 无须保护现场。

⑤DMA 的优先级比程序中断的优先级高。

四、接口的类型

现代集成电路制造技术已将 DMA 接口制成芯片, 通常有选择型和多路型两类。

1. 选择型 DMA 接口

这种类型的 DMA 接口的基本组成如图 5.47 所示, 它的主要特点是在物理上可连接多个设备, 在逻辑上只允许连接一个设备, 即在某一段时间内, DMA 接口只能为一个设备服务, 关键是在预处理时将所选设备的设备号送入设备地址寄存器。图 5.50 是选择型 DMA 接口的逻辑框图。选择型 DMA 接口特别适用于数据传输率很高的设备。

image-20251020193919316

2.多路型 DMA 接口

多路型 DMA 接口不仅在物理上可以连接多个设备, 而且在逻辑上也允许多个设备同时工作, 各个设备采用字节交叉的方式通过 DMA 接口进行数据传送。在多路型 DMA 接口中, 为每个与它连接的设备都设置了一套寄存器, 分别存放各自的传送参数。图 5.51(a)和(b)分别是链式多路型 DMA 接口和独立请求多路型 DMA 接口的逻辑框图。这类接口特别适合于同时为多个数据传输率不十分高的设备服务。

image-20251020194025331

图 5.52 是多路型 DMA 接口工作原理示意图。图中磁盘、磁带、打印机同时工作。磁盘、磁带、打印机分别每隔 30us、45us、150us 向 DMA 接口发 DMA 请求, 磁盘的优先级高于磁带, 磁带的优先级高于打印机。

image-20251020194048916

假设 DMA 接口完成一次 DMA 数据传送需 5us, 由图 5.52 可见, 打印机首先发请求, 故 DMA 接口首先为打印机服务(T1); 接着磁盘、磁带同时又有 DMA 请求, DMA 接口按优先级别先响应磁盘请求(T2), 再响应磁带请求(T3), 每次 DMA 传送都是一个字节。这样, 在 90 多微秒的时间里, DMA 接口为打印机服务一次(T1), 为磁盘服务 4 次(T2、T4、T6、T7), 为磁带服务 3 次(T3、T5、T8)。可见 DMA 接口还有很多空闲时间, 可再容纳更多的设备。