第六节 DMA方式

一、DMA方式的特点

  下图是DMA方式与程序中断方式两者数据通路的比较。

  由图可见,由于主存和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,下图(a)是该方式的时间示意图。

  这种方式的优点是控制简单,适用于数据传输率很高的I/O设备实现成组数据的传送。缺点是DMA接口在访存时,CPU基本上处于不工作状态或保持原状态。而且即使I/O设备高速运行,但其两个数据之间的准备间隔时间也总大于一个存取周期,因此,CPU对主存的利用率并没得到充分的发挥。如软盘读一个8位二进制数大约需要32μs,而半导体存储器的存取周期大大小于1μs。为此在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延缓了一二个存取周期再访存。图 (b)示意了DMA周期挪用的时间对应关系。

  与CPU暂停访存的方式相比,它既实现了I/O传送,又较好地发挥了主存与CPU的效率,是一种广泛采用的方法。
  应该指出,I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制级权。因此,尽管传送一个字对主存而言只占用一个主存周期,但对DMA接口而言,实质上要占2—5个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况。

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

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

二、DMA接口的功能和组成

  1.DMA接口的功能
  利用DMA方式传送数据时,数据的传输过程完全由DMA接口电路控制,故DMA接口又有DMA控制器之称。DMA接口应具有如下几个功能:
  (1) 向CPU申请DMA传送;
  (2) 在CPU允许DMA工作时,处理总线控制权的转交,避免因进入DMA工作而影响CPU正常活动或引起总线竞争;
  (3)在DMA期间管理系统总线,控制数据传送;
  (4)确定数据传送的起始地址和数据长度,修正数据传送过程中的数据地址和数据长度。
  (5)在数据块传送结束时,给出DMA操作完成的信号。

  2.DMA接口基本组成
  最简单的DMA接口组成原理如下图所示。

  它由以下几个逻辑部件所组成。
  (1)主存地址寄存器AR。AR用于存放主存中需要交换数据的地址。在DMA传送前,须通过程序将数据在主存中的首地址送到主存地址寄存器。在DMA传送过程中,每交换一次数据,将地址寄存器内容加1,直到一批数据传送完毕为止。
  (2)字计数器WC。WC用于记录传送数据的总字数,通常以交换字数的补码值预置。在DMA传送过程中,每传送一个字,字计数器加1,直到计数器为0,即最高位产生进位时,表示该批数据传送完毕。于是DMA接口向CPU发中断请求信号。
  (3)数据缓冲寄存器BR。BR用于暂存每次传送的数据。通常DMA接口与主存之间采用字传送,而DMA与设备之间可能是字节或位传送。因此DMA接口中还可能包括有装配或拆卸字信息的硬件逻辑,如数据移位缓冲寄存器、字节计数器等。
  (4)DMA控制逻辑。它用于负责管理DMA的传送过程,由控制电路、时序电路及命令状态控制寄存器等组成。每当设备准备好一个数据字(或一个字传送结束),就向DMA接口提出申请(DREQ),DMA控制逻辑便向CPU请求DMA服务,发出总线使用权的请求信号(HRQ)。待收到CPU发出的响应信号HLDA后,DMA控制逻辑便开始负责管理DMA传送的全过程,包括对主存地址寄存器和字计数器的修改、识别总线地址、指定传送类型(输入或输出)以及通知设备已经被授予一个DMA周期(DACK)等。
  (5)中断机构。当字计数器溢出(全“0”)时,表示一批数据交换完毕,由“溢出信号”通过中断机构向CPU提出中断请求,请求CPU作DMA操作的后处理。必须注意,这里的中断与上一节介绍的I/O中断的技术相同,但中断的目的不同,前面是为了数据的输入或输出,而这里是为了报告一批数据传送结束。它们是I/O系统中不同的中断事件。
  (6)设备地址寄存器DAR。DAR存放I/O设备的设备码或表示设备信息存储区的寻址信息,如磁盘数据所在的区号、盘面号和柱面号。具体内容取决于设备的数据格式和地址的编址方式。

三、DMA的工作过程

  1.DMA传送过程
  DMA的数据传送过程分预处理、数据传送和后处理三个阶段。
  (1)预处理。在DMA接口开始工作之前,CPU必须给它预置如下信息:
  ·给DMA控制逻辑指明数据传送方向是输入(主存写)还是输出(主存读);
  ·向DMA设备地址寄存器送入设备号,并启动设备;
  ·向DMA主存地址寄存器送入交换数据的主存起始地址;
  ·对字计数器赋以交换数据的个数。
  上述工作由CPU执行几条输入输出指令完成,即程序的初始化阶段。这些工作完成后,CPU继续执行原来的程序。
  当外部设备准备好发送的数据(输入)或上次接受的数据已经处理完毕(输出)时,它便通过DMA接口向CPU提出占用总线的申请,若有多个DMA同时申请,则按轻重缓急由硬件排队判优逻辑决定优先等级。待设备得到主存总线的控制权后,数据的传送便由该DMA接口进行管理。
  (2)数据传送。DMA方式是以数据块为单位传送的,以周期挪用的DMA方式为例,其数据传送的流程可用下图示意。

  以数据输入为例,具体操作如下:
  ①从设备读入一个字到DMA的数据缓冲寄存器BR中,表示数据缓冲寄存器“满”(如果I/O设备是面向字符的,则一次读入一个字节,组装成一个字);
  ②设备向DMA接口发请求(DREQ);
  ③DMA接口向CPU申请总线控制权(HRQ);
  ④CPU发回HLD信号,表示允许将总线控制权交给DMA接口使用;
  ⑤将DMA主存地址寄存器中的主存地址送地址总线;
  ⑥通知设备己被授予一个DMA周期(DACK),并为交换下一个字做准备;
  ⑦将DMA数据缓冲寄存器的内容送数据总线;
  ⑧命令存储器作写操作;
  ⑨修改主存地址和字计数值;
  ⑩判断数据块是否传送结束,若未结束,则继续传送;若已结束,(字计数器溢出),则向CPU申请程序中断,标志数据块传送结束。
  若为输出数据,则应完成以下操作:
  ①当DMA数据缓冲寄存器已将输出数据送至加设备后,表示数据缓冲寄存器已“空”;
  ②设备向DMA接口发请求(DREQ):
  ③DMA接口向CPU申请总线控制权(HRQ);
  ④CPU发回HLDA信号,表示允许将总线控制权交给DMA接口使用;
  ⑤将DMA主存地址寄存器中的主存地址送地址总线,并命令存储器读;
  ⑥通知设备已授予一个DMA周期(DACK),并为交换下一个字做准备;
  ⑦主存将相应地址单元的内容通过数据总线读入到DMA的数据缓冲寄存器中;
  ⑧将DMA数据缓冲寄存器的内容送到输出设备,若为字符设备,则需将其拆成字符输出;
  ⑨修改主存地址和字计数值;
  ⑩判断数据块是否已传送完毕,若未完,继续传送;若已送完,则向CPU申请程序中断。
  (3)后处理。当DMA的中断请求得到响应后,CPU停止源程序的执行,转去执行中断服务程序,做一些DMA的结束工作。它包括校验送入主存的数据是否正确;决定是否继续用DMA传送其他数据块,若继续传送,则又要对DMA接口进行初始化,若不需要传送,则停止外设;测试在传送过程中是否发生错误,若出错,则转错误诊断及处理错误程序。

  2.DMA接口与系统的连接方式
  DMA接口与系统的连接方式有两种。

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

  上图是独立的DMA请求方式,每一个DMA接口各有一对独立的DMA请求线和DMA响应线,它由CPU的优先级判别机构裁决首先响应哪个请求,并在响应线上发出响应信号,被获得响应信号的DMA接口使可控制总线与主存传送数据。

  3.DMA小结
  与程序中断方式相比,DMA方式有如下特点:
  (1)从数据传送看,程序中断方式靠程序传送,DMA方式靠硬件传送。
  (2)从CPU响应时间看,程序中断方式是在一条指令执行结束时响应,而  DMA方式可在指令周期内的任一存取周期结束时响应。
  (3)程序中断方式有处理异常事件的能力,DMA方式没有这种能力,它主要用于大批数据的传送,如硬盘存取、图像处理、高速数据采集系统等,可提高数据吞吐量。
  (4)程序中断方式要中断现行程序,故需保护现场,DMA方式不中断现行程序,无需保护现场。
  (5)DMA的优先级比程序中断高。

四、DMA接口的类型

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

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

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

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

  假设DMA接口完成一次DMA数据传送需5μs。由上图,打印机首先发请求,故DMA接口首先为打印机服务(T1),接着磁盘、磁带同时又有DMA请求,DMA接口按优先级别,先响应磁盘请求(T2),再响应磁带请求(T3),每次DMA传送都是一个字节。这样,在90多μs的时间里,DMA接口为打打印机服务一次(T1),为磁盘服务四次(T2T4T6T7)为磁带服务三次(T3T5T8)。可见DMA接口还有很多空闲时间,可再容纳更多的外部设备。