第六节 DMA方式

一、DMA方式的特点

DMA是直接存储器访问的意思。

1.DMA和程序中断两种方式的数据通路

图6.1 DMA和程序中断两种方式的数据通路

由图6.1所示,由于主存和DMA接口之间有一条数据通路,因此主存和设备交换信息时,不通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场,因此工作速度比程序中断方式的工作速度高。这一特点特别适合于高速I/O或辅存与主存之间的信息交换。因为高速I/O设备每次申请与主机交换信息时,都需要等待CPU做出中断响应后在进行,很可能因此丢失数据。

2.DMA与主存交换数据的三种方式

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

(1)停止CPU访问主存。这种方式中,实际上只要外部设备要和内存数据交换,那么一块数据交换过程中,从第一个数据开始CPU就放弃了总线控制权,放弃了对内存的访问权,把这些权都交给了DMA。适合大量数据传输。这种方式控制简单,但是CPU出于不工作状态或保持状态,未充分发挥CPU对主存的利用率。

(2)周期挪用(周期是指访存周期)。

DMA访问主存有三种可能:

①CPU此时不访问。那么就直接分配给DMA就可以了。

②CPU正在访存。DMA只能等待

③CPU与DMA同时请求访存。此时CPU将总线控制权让给DMA

图6.2 周期挪用示意图

    如图6.2所示。数据准备好了,DMA就会窃取一个或多个主存周期完成数据传输。在数据准备时候,CPU可以控制和使用主存。提高了利用率。

(3)DMA和CPU交替访问。实用性不强。

CPU工作周期分为C1和C2两段时间,C1专供DMA访存,C2专供CPU访存。这种方法不需要申请建立和归还总线的使用权。如图6.3所示。

图6.3 DMA与CPU交替访问示意图

二、DMA接口的功能和组成

1.DMA接口功能

(1)向CPU申请DMA传送

(2)处理总线控制权的转交

(3)管理系统总线、控制数据传送

(4)确定数据传送的首地址和长度修正传送过程中的数据地址和长度

(5)DMA传送结束时,给出操作完成信号

2.DMA接口的组成

图6.4 DMA接口的组成

DMA接口是一个黑盒子,根据功能可以分析其结构。要进行数据传输,CPU要告诉DMA接口传输的内存地址是什么,所以需要一个地址寄存器(AR),需要知道数据量,所以需要一个计数器(WC),假设传入内存或者从内存输出,假设是从低地址开始,每次传输的数据单位和编址单位一致,每完成一个数据输入或输出,就要对地址进行修改,进行+1。WC保存的是一个补码,每传输一次要+1,我们需要一个数据缓存器,即BR。另外我们还需要一个设备地址寄存器(DAR),用来设备选择电路使用,还用来对硬盘进行访问时,保存硬盘的磁道号扇区号等。AR把要访问的地址送给主存,通过数据线要给AR置值,设备地址也通过数据线。外部设备直接用BR相连。

输入输出需要DMA控制逻辑,用来内部协调,控制在给定时序发出给定信号。外部设备要向DMA控制逻辑DREQ,DMA控制逻辑给出应答DACK信号,DMA还得通过总线向CPU发出总线请求信号HRQ,CPU回复HLDA。DMA接口电路还有一个中断机构,用于数据传输完成后对后续工作进行处理的。

具体各部分功能如下:

(1)主存地址寄存器(AR)。AR用于存放主存中需要交换数据的地址。在DMA传送数据前,必须通过程序将数据在主存中的首地址送到主存地址寄存器。在DMA传送过程中,每交换一次数据,AR+1,直到一批数据传输完成。

(2)字计数器(WC)。WC用于记录传送数据的总字数,通常以交换字数的补码值预置。在DMA传送过程中,每传送一个字,WC+1,直到计数器为0时,表示该批数据传送结束,于是DMA接口向CPU发送中断请求信号。

(3)数据缓冲寄存器(BR)。BR用于暂存每次传送的数据。

(4)DMA控制逻辑。DMA控制逻辑负责管理DMA的传送过程,由控制电路、时序电路和命令状态控制寄存器组成。

(5)中断机构。当一批数据交换完毕,由“溢出信号”通过终端机构向CPU提出中断请求,请求CPU作DMA操作的后续处理。

(6)设备地址寄存器(DAR)。DAR存放I/O设备的设备码或表示设备信息存储区的寻址信息,如对硬盘进行访问时,保存硬盘的磁道号扇区号等。具体内容取决于设备的数据格式和地址的编址方式。

三、DMA的工作过程

1.DMA传送过程:预处理、数据传送、后处理

(1)预处理

通过几条输入输出指令预置如下信息:

①通知DMA控制逻辑传送方向(入/出);

②设备地址àDMA的DAR;

③主存地址àDMA的AR;

④传送字数àDMA的WC。

(2)DMA传送过程示意

图6.5 数据传送流程

图6.5左侧是DMA传送过程,右侧是数据传送阶段的细化。结合图6.4可以描述一下数据输入传送过程:

①当设备准备好一个字时,发出选通信号,将该字读到DMA的BR中,表示BR“满”。

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

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

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

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

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

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

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

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

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

结合图6.4可以描述一下数据输出传送过程,如图6.6所示:

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

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

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

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

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

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

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

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

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

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

图6.6 输出过程演示图

(3)后处理——中断服务程序完

当DMA的中断请求得到响应,后,CPU停止源程序的执行,转去执行中断服务程序,做一些DMA的结束工作,包括:

①校验送入主存的数据是否正确;

②决定是否继续使用DMA传送其它数据块,若继续传送,则又要对DMA进行初始化,若不需要传送,则停止外设;

③测试在传送过程中是否发生错误,若出错则转错误诊断及处理错误程序。

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

(1)具有公共请求线的DMA请求

图6.7 公共请求线的DMA请求

(2)独立的DMA请求

图6.8 独立的DMA请求

排队工作是在CPU内部完成。

3.DMA方式与程序中断方式的比较

中断方式DMA方式
数据传送程序硬件
响应时间指令执行结束存取周期结束
处理异常情况不能
中断请求传送数据后处理
优先级

 

四、DMA接口类型

1.选择型:在物理上连接多个设备,在逻辑只允许连接一个设备。如图6.9所示。

图6.9 选择型接口

2.多路型:在物理上连接多个设备,在逻辑上允许连接多个设备同时工作(数据准备的时候),在真正数据传输的时候,只能一个设备工作。

图6.10 多路型接口

假设磁盘每隔30微秒提出数据请求,这30微秒包括数据传送和数据准备时间,磁带每隔45微秒提出一次DMA请求,打印机隔150微秒提出DMA请求,并假设真正数据传输是5微秒。一个多路型接口连接了这3个设备。

由于打印机是最早提出请求的,那么首先响应打印机请求,把5微秒时间给打印机数据传输,这个5秒结束后,磁盘和磁带同时发出请求,速度越高的设备优先级越高,所以优先响应磁盘的操作,用5微秒进行数据传输,响应完磁盘后响应磁带的请求。以此类推下去,这就是整个过程。

图6.11 多路型DMA接口的工作原理