DMA 简单的介绍

来源:互联网 发布:如何代理淘宝店 编辑:程序博客网 时间:2024/06/13 01:55

转载至:http://share.onlinesjtu.com/mod/tab/view.php?id=273

DMA方式是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在主存和I/O设备之间进行。DMA控制器向主存发出地址和控制信号,修改主存地址,对传送的字的个数进行计数,并且以中断方式向CPU报告传送操作的结束。DMA方式控制简单,适用于高数据传输率设备进行成组传送。

DMA方式的主要优点是速度快,由于CPU不参加传送操作,因此省去了CPU取指令、取数、送数等操作,也没有保存现场、恢复现场之类的工作。而且,主存地址的修改、传送字个数的计数等也不由软件实现,而是用硬件线路直接实现的。所以,DMA方式能够满足高速I/O设备的要求,也有利于CPU效率的发挥,一般用于高速传送成组数据。

DMA方式的工作过程如下:首先,当要求通过DMA方式传输数据时,DMA控制器向CPU发出请求,CPU释放总线控制权,交由DMA控制器管理;然后,DMA控制器向外设返回一个应答信号,外设与主存开始进行数据交换;最后,当数据传输完毕后,DMA控制器把总线控制权交还给CPU。在这种方式下,DMA控制器与CPU分时使用总线,其时间图如图7-7所示。



在DMA方式中,批量数据传送前的准备工作,以及传送结束后的处理工作,仍由CPU通过执行管理程序来承担,DMA控制器只负责具体的数据传送工作。

一次DMA数据块传送过程可分为三个阶段:传送前预处理、正式传送、传送后处理,如图7-8所示。



1)预处理阶段

CPU执行几条输入输出指令,测试设备状态,向DMA控制器的设备地址寄存器中送入设备号并启动设备,向主存地址计数器中送入起始地址,向字计数器中送入交换数据字个数。在这些工作完成后,CPU继续执行原来的主程序。

当外设准备好发送数据(输入)或接收数据(输出)时,它发出DMA请求,由DMA控制器向CPU发出总线使用权请求HOLD。

2)正式传送阶段

当外围设备发出DMA请求时,CPU在本机器周期执行结束后响应该请求,并使CPU的总线驱动器处于第三态(高阻状态)。之后,CPU与系统总线相脱离,而DMA控制器则接管数据总线与地址总线的控制,并向主存提供地址,于是在主存与外围设备之间进行数据交换。每交换一个字,地址计数器和字计数器加“1”,当字计数器溢出时,DMA操作结束,DMA控制器向CPU发出中断报告。

DMA数据传送是以数据块为基本单位进行的,因此,每次DMA控制器占用总线后,无论是数据输入操作,还是输出操作,都是通过循环来实现的。当进行输入操作时,外围设备的数据(一次一个字或一个字节)传向主存;当进行输出操作时,主存的数据传向外围设备。

3)后处理阶段

一旦DMA的中断请求得到响应,CPU停止主程序的执行,转去执行中断服务程序,完成DMA结束处理工作,这些工作包括校验送入主存的数据是否正确,决定继续DMA传送还是结束,测试传送过程中是否发生错误等等。

基本DMA控制器与系统的连接方式有两种,一种是公用的DMA请求方式,另一种是独立的DMA请求方式。


最简单的DMA控制器,一个控制器只控制一个I/O设备,而在实际应用中情况要复杂得多,因此通常采用选择型DMA控制器和多路型DMA控制器。

1. 选择型DMA控制器

选择型DMA控制器在物理上可以连接多个设备,而在逻辑上只允许连接一个设备。换句话说,在某一个时间段内只能为一个设备提供服务。

选择型DMA控制器的工作原理与基本DMA控制器大致相同。除了前面提到的基本逻辑部件外,还有一个设备号寄存器。数据传送是以数据块为单位进行的,在每个数据块传送之前的预置阶段,除了用程序中的I/O指令给出数据块的传送个数、起始地址、操作命令外,还要给出所选择的设备号。从预置开始,一直到这个数据块传送结束,DMA控制器只为所选的设备提供服务。下一次预置时再根据I/O指令指出的设备号,为所选择的另一设备提供服务。显然,选择型DMA控制器相当于一个逻辑开关,根据I/O指令来控制此开关与某个设备连接。

选择型DMA控制器只增加了少量的硬件就达到为多个外围设备提供服务的目的,它特别适合于数据传输率很高甚至接近于主存存取速度的设备,在高速传送完一个数据块后,控制器又可为其他设备提供服务。

2. 多路型DMA控制器

与选择型DMA方式相比,多路型DMA不仅在物理上可以连接多个外围设备,而且在逻辑上也允许这些外围设备同时工作,各个设备以字节交叉方式通过DMA控制器进行数据传送。

多路型DMA控制器适合于同时为多个慢速外围设备提供服务。

多路型DMA控制器可以对多个独立的DMA通路进行控制。当某个外围设备请求DMA服务时,操作过程如下:

(1)DMA控制器接到设备发出的DMA请求,将请求转送到CPU。

(2)CPU在适当的时刻响应DMA请求。若CPU不需要占用总线则继续执行指令;若CPU需要占用总线则进入等待状态。

(3)DMA控制器接到CPU的响应信号后,进行以下工作:①对现有DMA请求中优先权最高的请求予以响应;②选择相应的地址寄存器的内容来驱动地址总线;③根据所选设备操作寄存器的内容,向总线发出读、写信号;④外围设备向数据总线传送数据,或从数据总线接收数据;⑤每个字节传送完毕后,DMA控制器使相应的地址寄存器和长度寄存器加“1”或减“1”。

以上是一个DMA请求的过程,在一批数据传送过程中,要多次重复上述过程,直到外围设备表示一个数据块已传送完毕,或该设备的长度控制器判定传送长度已满。

0 0