DMA的基本概念
直接内存访问(DMA)是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行 。DMA方式一般用于高速传送成组数据。DMA控制器将向内存发出地址和控制信号,修改地址,对传送的字的个数计数,并且以中断方式向CPU报告传送操作的结束。
DMA方式的主要优点是速度快。由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。在数据传送过程中,没有保存现场、恢复现场之类的工作。内存地址修改、传送字个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。所以DMA方式能满足高速I/O设备的要求,也有利于CPU效率的发挥。
多种DMA至少能执行以下一些基本操作:
(1)从外围设备发出DMA请求;
(2)CPU响应请求,把CPU工作改成DMA操作方式,DMA控制器从CPU接管总线的控制;
(3)由DMA控制器对内存寻址,即决定数据传送的内存单元地址及数据传送个数的计数,并执行数据传送的操作;
(4)向CPU报告DMA操作的结束
注意 在DMA方式中,一批数据传送前的准备工作,以及传送结束后的处理工作,均由管理程序承担,而DMA控制器仅负责数据传送的工作。
8.3.2 DMA传送方式
DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序。DMA控制器与CPU分时使用内存通常采用以下三种方法:
1.停止CPU访问内存
当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传送。在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。在这种DMA传送过程中,CPU基本处于不工作状态或者说保持状态。这种传送方式的时间图如下:
优点: 控制简单,它适用于数据传输率很高的设备进行成组传送。
缺点: 在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周期,即使高速I/O设备也是如此。
2.周期挪用:
当I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。
I/O设备要求DMA传送时可能遇到两种情况:
(1)此时CPU不需要访内,如CPU正在执行乘法指令。由于乘法指令执行时间较长,此时I/O访内与CPU访内没有冲突,即I/O设备挪用一二个内存周期对CPU执行程序没有任何影响。
(2)I/O设备要求访内时CPU也要求访内,这就产生了访内冲突,在这种情况下I/O设备访内优先,因为I/O访内有时间要求,前一个I/O数据必须在下一个访内请求到来之前存取完毕。显然,在这种情况下I/O 设备挪用一二个内存周期,意味着CPU延缓了对指令的执行,或者更明确地说,在CPU执行访内指令的过程中插入DMA请求,挪用了一二个内存周期。
这种传送方式的时间图如下:
与停止CPU访内的DMA方法比较,周期挪用的方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。但是I/O设备每一次周期挪用都有申请总线控制权、建立总线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2—5个内存周期(视逻辑线路的延迟而定)。因此,周期挪用的方法适用于I/O设备读写周期大于内存存储周期的情况。
3.DMA与CPU交替访内:
如果CPU的工作周期比内存存取周期长很多,此时采用交替访内的方法可以使DMA传送和CPU同时发挥最高的效率。假设CPU工作周期为 1.2μs,内存存取周期小于0.6μs,那么一个CPU周期可分为C1和C2两个分周期,其中C1供DMA控制器访内,C2专供CPU访内。这种传送方式的时间图如下:
这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时进行的。CPU和DMA控制器各自有自己的访内地址寄存器、数据寄存器和读/写信号等控制寄存器。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内请求,同样传送地址、数据等信号。事实上,对于总线,这是用C1,C2控制的一个多路转换器,这种总线控制权的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。
这种传送方式又称为“透明的DMA”方式,其来由是这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。
8.3.3 基本的DMA控制器
1.DMA控制器的基本组成
一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路。这个接口电路是在中断接口的基础上再加DMA机构组成。其逻辑示意图见文字教材图8.12。
一个最简单的DMA控制器由以下逻辑部件组成:
(1)内存地址计数器 用于存放内存中要交换的数据的地址。在DMA传送前,须通过程序将数据在内存中的起始位置(首地址)送到内存地址计数器。而当DMA传送时,每交换一次数据,将地址计数器加“1”,从而以增量方式给出内存中要交换的一批数据的地址。
(2)字计数器用于记录传送数据块的长度(多少字数)。其内容也是在数据传送之前由程序预置,交换的字数通常以补码形式表示。在DMA传送时,每传送一个字,字计数器就加“1” ,当计数器溢出即最高位产生进位时,表示这批数据传送完毕,于是引起DMA控制器向CPU发中断信号。
(3)数据缓冲寄存器 用于暂存每次传送的数据(一个字)。当输入时,由设备(如磁盘)送往数据缓冲寄存器,再由缓冲寄存器通过数据总线送到内存。反之,输出时,由内存通过数据总线送到数据缓冲寄存器,然后再送到设备。
(4)“DMA请求”标志每当设备准备好一个数据字后给出一个控制信号,使“DMA请求” 标志置“1”。该标志置位后向“控制/状态”逻辑发出DMA请求,后者又向CPU发出总线使用权的请求(HOLD),CPU响应此请求后发回响应信号HLDA,“控制/状态”逻辑接收此信号后发出DMA响应信号,使“DMA请求”标志复位,为交换下一个字做好准备。
(5)“控制/状态”逻辑 由控制和时序电路以及状态标志等组成,用于修改内存地址计数器和字计数器,指定传送类型(输入或输出),并对“DMA请求”信号和CPU响应信号进行协调和同步。
(6)中断机构 当字计数器溢出时(全0),意味着一组数据交换完毕,由溢出信号触发中断机构,向CPU提出中断报告。这里的中断与上一节介绍的I/O中断所采用的技术相同,但中断的目的不同,前面是为了数据的输入或输出,而这里是为了报告一组数据传送结束。因此它们是I/O系统中不同的中断事件。
2.DMA数据传送过程
DMA的数据块传送过程可分为三个阶段:传送前预处理;正式传送;传送后处理。
预处理 由CPU执行几条输入输出指令,测试设备状态,向DMA控制器的设备地址寄存器中送入设备号并启动设备,向内存地址计数器中送入起始地址,向字计数器中送入交换的数据字个数。在这些工作完成后,CPU继续执行原来的主程序。
正式传送当外设准备好发送数据(输入)或接受数据(输出)时,它发出DMA请求,由DMA控制器向CPU发出总线使用权的请求(HOLD)。下图示出了停止CPU访内方式的DMA传送数据的流程图。
图8.13 DMA传送数据的流程图
DMA的数据传送是以数据块为基本单位进行的,因此,每次DMA控制器占用总线后,无论是数据输入操作,还是输出操作,都是通过循环来实现的。当进行输入操作时,外围设备的数据(一次一个字或一个字节)传向内存;当进行输出操作时,内存的数据传向外围设备。
后处理 一旦DMA的中断请求得到响应,CPU停止主程序的执行,转去执行中断服务程序做一些DMA的结束处理工作。这些工作包括校验送入内存的数据是否正确;决定继续用DMA方式传送下去,还是结束传送;测试在传送过程中是否发生了错误等等。
基本DMA控制器与系统的连接方式:
(1)公用的DMA请求方式;(2)独立的DMA请求方式,这与中断方式类似。
8.3.4 选择型和多路型DMA控制器:
1.选择型DMA控制器
选择型DMA控制器在物理上可以连接多个设备,而在逻辑上只允许连接一个设备。换句话说,在某一段时间内只能为一个设备服务。
选择型DMA控制器的逻辑框图请见CAI演示。
选择型DMA控制器的工作原理:
与前面的简单DMA控制器基本相同。除了前面讲到的基本逻辑部件外,还有一个设备号寄存器。数据传送是以数据块为单位进行的,在每个数据块传送之前的预置阶段,除了用程序中I/O指令给出数据块的传送个数、起始地址、操作命令外,还要给出所选择的设备号。从预置开始,一直到这个数据块传送结束,DMA控制器只为所选设备服务。下一次预置再根据I/O指令指出的设备号,为另一选择的设备服务。显然,选择型DMA控制器相当于一个逻辑开关,根据I/O指令来控制此开关与某个设备连接。
选择型DMA控制器只增加少量硬件达到了为多个外围设备服务的目的,它特别适合数据传输率很高以至接近内存存取速度的设备。在很快地传送完一个数据块后,控制器又可为其他设备服务。
2.多路型DMA控制器
选择型DMA控制器不适用于慢速设备。但多路型DMA控制器适合于同时为多个慢速外围设备服务。
链式多路型DMA控制器和独立请求方式多路型DMA控制器请见CAI演示。
多路型DMA不仅在物理上可以连接多个外围设备,而且在逻辑上也允许这些外围设备同时工作,各设备以字节交叉方式通过DMA控制器进行数据传送。
【例3】下图中假设有磁盘、磁带、打印机三个设备同时工作。磁盘以30μs的间隔向控制器发DMA请求,磁带以45μs的间隔发DMA请求,打印机以150μs间隔发DMA请求。根据传输速率,磁盘优先权最高,磁带次之,打印机最低,图中假设DMA控制器每完成一次DMA传送所需的时间是5μs。若采用多路型DMA控制器,请画出DMA控制器服务三个设备的工作时间图。
图8.16 多路DMA控制器工作时间图
【解】
由图看出,T1间隔中控制器首先为打印机服务,因为此时只有打印机有请求。T2间隔前沿磁盘、磁带同时有请求,首先为优先权高的磁盘服务,然后为磁带服务,每次服务传送一个字节。在150μs时间阶段中,为打印机服务只有一次(T1),为磁盘服务四次(T2,T4,T6,T7),为磁带服务三次(T3,T5,T8)。从图上看到,在这种情况下DMA尚有空闲时间,说明控制器还可以容纳更多设备。
由于多路型DMA同时要为多个设备服务,因此对应多少个DMA通路(设备),在控制器内部就有多少组寄存器用于存放各自的传送参数。
多路型DMA控制器的逻辑结构请见文字教材图8.17。通过配合使用I/O通用接口片子,多路型DMA控制器可以对8个独立的DMA通路(CH)进行控制,使外围设备以周期挪用方式对内存进行存取。
8条独立的DMA请求线或响应线能在外围设备与DMA控制器之间进行双向通信。一条线上进行双向通信是通过分时和脉冲编码技术实现的。也可以分别设立DMA请求线和响应线实现双向通信。每条DMA线在优先权结构中具有固定位置,一般DMA0线具有最高优先权,DMA7线具有最低优先权。
控制器中有8个8位的控制传送长度的寄存器,8个16位的地址寄存器。每个长度寄存器和地 址寄存器对应一个设备。每个寄存器都可以用程序中的I/O指令从CPU送入控制数据。每一寄 存器组各有一个计数器,用于修改内存地址和传送长度。
当某个外围设备请求DMA服务时,操作过程如下:
(1)DMA控制器接到设备发出的DMA请求时,将请求转送到CPU。
(2)CPU在适当的时刻响应DMA请求。若CPU不需要占用总线则继续执行指令;若CPU需要占用 总线,则CPU进入等待状态。
(3)DMA控制器接到CPU的响应信号后,进行以下工作:①对现有DMA请求中优先权最高的请求 给予DMA响应;②选择相应的地址寄存器的内容驱动地址总线;③根据所选设备操作寄存器 的内容,向总线发读、写信号;④外围设备向数据总线传送数据,或从数据总线接收数据; ⑤每个字节传送完毕后,DMA控制器使相应的地址寄存器和长度寄存器加“1”或减“1”。
以上是一个DMA请求的过程,在一批数据传送过程中,要多次重复上述过程,直到外围设备表示一个数据块已传送完毕,或该设备的长度控制器判定传送长度已满。
【例4】教材图8.18所示为微型机中软盘控制器的系统接口电路,请进行分析说明。