所谓直接存储器传送是指将外设嘚数据不经过CPU直接送入内存储器或者从内存储器不经过CPU直接送往外部设备。一次DMA传送只需要执行一个DMA周期(相当于一个总线读/写周期)因而能够满足高速外设数据传输的需要。
在进行DMA存取时CPU让出总线控制权,不再采用输入/输出指令的方法进行数据存取而用一个专门嘚硬件控制电路控制外设与存储器或者存储器与存储器直接交换数据,减少了中间环节从而提高了传送速率和CPU的效率。用来控制DMA传送的硬件控制电路就是DMA控制器(DMAC)
系统I/O利用中断进行信息传送,可以大大提高CPU的利用率但是其传送过程必须由CPU进行监控。每次都要保护断點、保护现场、进入中断服务子程序中断服务完毕又要恢复现场、恢复断点、返回主程序,操作繁多步骤重复对低速外设和数据量不夶的I/O操作,这些缺点不明显中断传送不失为一种行之有效的传送方式。但对成批高速数据传输效率就较低会占用一定的CPU时间。如果需偠在内存的不同区域之间或者在内存与外设端口之间进行数据块的高速传送的话,使用查询或中断方式就不能满足速度上的要求这时應采用直接数据传送(Direct
DMA数据传送是在内存的不同区域之间,或者在内存与外设端口之间直接进行的数据传送它不经过CPU中转,是由硬件直接控制的一种数据传送方式而当进入DMA方式(内存和外设直接交换数据)时,CPU让出上述三类总线CPU连接这些总线的三态门处于高阻状态,洏由DMAC对总线进行控制和管理直接与外设和内存交换数据,这样就可以大大提高数据的传送速率
DMA传送的基本特点是不经过CPU,不破坏CPU各寄存器的内容直接实现存储器与I/O之间的数据传送。图7-1是DMA传送的基本原理图DMA传送的基本过程如下所示。
(1)当I/O接口准备好希望进行DMA操作時,就向DMAC发出DMA请求信号DRQ
(2)DMA控制器将此请求信号转变成对CPU的总线请求信号HRQ。
(3)CPU当前总线周期执行结束响应DMA请求,发出总线应答信号HLDA此时由DMA控制器接管对总线的控制。
(4)由DMA控制器对存储器寻址并发出相应控制信号(DACK、RD及WR),使存储器与I/O接口之间直接交换数据
(5)在传送一字节数据后,DMAC自动修改存储器地址和传送字节计数器并检测传送是否结束。
(6)DMA传送结束DMA控制器向CPU发出结束信号,并释放總线使CPU重新获得总线控制,恢复正常工作
下面简要介绍与DMA相关的一些内容。
DMA传送方式解决了内存的不同区域之间或内存与外设之间数據块的高速传送问题代价是需要增加专门的硬件控制电路,称为DMA控制器其复杂程度与CPU相当,其接口电路如图7-2所示
DMA的传送过程如下所礻。
(1)若外设有传送要求将向DMAC发送DMA请求信号DMAREQ,该信号维持到DMAACK响应为止DMAC收到请求后,向CPU发送总线请求信号HOLD表示希望占用总线,该信號在整个传送过程中维持有效CPU在当前总线周期结束时响应请求,向DMAC发送总线响应信号HLDA表示已放弃总线,即总线呈高阻态此时,控制器DMAC向设备回送DMA响应信号DMAACK该信号将清除DMA请求触发器,意味着传送即将开始
(2)传送开始时,DMAC向存储器发送读控制信号MEMR(或IOR)同时向输絀设备发送写控制信号IOW(或MEMW),完成一个字节的传送
(3)DMAC内部具有自动增减存储器地址和计数功能,据此判断任务是否完成如果传送尚未完成,重复上一步继续传送;如果传送完成将使CPU的总线请求信号HOLD无效,通知CPU传送结束此时,CPU将重新接管对总线的控制
2.DMA的数据傳送方式
DMA有以下两种数据传送方式。
· 字节方式:每次总线请求只传送一个字节数据传送完一个字节后释放总线,接着由CPU执行总线周期操作两者交替运行,直到DMA传送结束
· 字块方式:总线请求后连续传送一个数据块,待数据块全部传送完毕才释放总线
DMA操作有以下3种執行方法。
(1)CPU停止访问内存这是最常用最简单的方法。如前面所介绍的那样DMAC的总线请求迫使CPU让出总线控制权(CPU在当前总线周期结束後使数据、地址和三态控制引脚处于浮空状态),由DMAC控制总线进行DMA传送直到DMA传送结束,撤销DMA请求CPU恢复对总线的控制,继续执行中止的指令周期在DMA传送期间CPU只执行不需要总线传输的内部操作,这些操作执行完后动态停机
(2)周期挪用(cycle
stealing)。外设有DMA请求并得到CPU响应CPU让絀一个周期的总线控制权,由DMA控制器控制系统总线挪用一个存取周期传送一个字节或一个字;然后DMA控制器将总线控制权交回CPU,CPU继续进行洎己的操作等待下一个DMA请求的到来。重复上述过程直至数据块传输完毕。这实际上就是计算机中常用的字节传送方式若在同一时刻發生CPU与DMA的访问内存冲突,则DMA访问优先CPU等待一个存取周期。当内存工作速度高出外设较多时采用周期挪用法可以提高内存利用率对CPU的影響较小。若在DMA传输期间CPU无须访问内存则该方法对CPU执行程序无影响。
(3)周期扩展当需要进行DMA操作时,由DMAC发出请求信号给专门的时钟发苼器/驱动器电路使之提供给CPU的总线周期扩展,而提供给存储器和DMAC的不变这样CPU完成指令规定的操作后仍有几个相当于原有时钟周期的时間留给存储器和DMAC进行DMA传送。MC6844就是可以使用这种方法的DMAC周期扩展方法使CPU处理速度减慢,而且扩展的宽度受到限制一次只能传送一个字节。DMA传送只需CPU和DMAC各有一对相应的请求响应联络线而无须附加外部逻辑电路。
在8086最小系统中CPU通过HOLD引脚接收DMA控制器的总线请求,在HLDA引脚上发絀对总线请求的允许信号通常,CPU接收到总线请求信号并完成当前总线操作以后就会使HLDA出现高电平而响应总线请求,DMA控制器于是就成了控制总线的部件此后,DMA控制器将HOLD信号变为低电平时便放弃了对总线的控制。8086检测到HOLD信号变为低电平后也将HLDA信号变为低电平。于是CPU叒控制了系统总线。
8086 CPU工作于最大模式时通过RQ/GT0和RQ/GT1引脚接收DMA控制器的总线请求,在同一根线上发送对总线请求的允许信号RQ/GT0引脚具有较高的優先权。
直接存储器存取方式的工作过程如下所示
(1)当外设准备就绪后,通过I/O端口向DMAC发出DMA请求信号要求DMA传送。
(2)接着DMAC向CPU发出HOLD总线請求信号请求接管总线。
(3)CPU收到HOLD信号如果不在总线封锁状态,则在现行总线周期结束后便会响应发出HLDA信号到DMAC,使CPU与三态的系统总線(数据、地址和状态控制线)浮空
(4)DMAC收到HLDA后立即接管总线,并向I/O端口回送DMA响应信号通知外设进行DMA传送。
(5)进行DMA传送DMA传送的内存地址、读/写控制信号及传送的字节数或字数由DMAC控制(通过对DMAC事先初始化编程来设置)。
(6)DMA传送结束设定的字节数或字数传送完毕,戓者外部发送一个结束传送的控制信号DMAC撤销向CPU的总线请求信号HOLD,CPU也撤销总线响应信号HLDA重新控制系统总线继续运行原来的程序。