第六节 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接口的工作原理