DMA方式是指在硬件(DMA控制器)的管理、控制下,数据交换不经过CPU,直接在内存与I/O设备之间进行数据交换。
图7-12示出了DMA方式和中断方式的数据通路。中断方式的数据通路要经过CPU。每传送一个数据,CPU要执行一次中断服务程序,数据在内存单元、CPU中的寄存器和I/O接口中的数据缓冲寄存器之间传送。DMA方式的数据通路直接在内存和I/O设备之间。数据在I/O接口中的数据缓冲器和内存单元之间直接传送,传送数据不经过CPU,也不需要CPU执行中断服务程序,省去了保护现场和恢复现场,因此工作速度比中断方式快。DMA方式特别适用于高速外存与内存之间传送成组数据。因为若用中断方式,每次交换一个数据都要申请一次中断,都要等待CPU做出中断响应,保护好断点和现场后再交换,很可能会因此丢失数据。
图7-12 DMA方式和中断方式的数据通路
在DMA方式中,由于DMA控制器与CPU共享内存,就可能会出现两者争用内存的冲突,为有效地分时使用内存,DMA与内存交换数据时可采用如下三种方法。
1.停止CPU访问内存
当I/O设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对总线的使用权(因为读、写内存要使用地址总线、数据总线和控制总线),DMA控制器获得总线控制权以后,开始进行数据传送。在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。在这种DMA传送过程中,CPU基本上处于不工作状态或者说保持状态,如图7-13所示。
图7-13 停止CPU访问内存
这种方式的优点是控制简单,它适用于数据传输率很高的设备进行成组数据的传送。缺点是在DMA控制器访内阶段,CPU基本上处于不工作或保持原状态。因为即使是高速的I/O设备,其速度总比内存要慢,传送两个数据之间的准备间隔时间总大于一个存取周期,因此相当一部分的内存工作周期是空闲的,即在DMA访内阶段,CPU的利用率没有充分发挥。
2.周期挪用
当I/O设备没有DMA请求时,CPU按程序要求访问内存。一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。
I/O设备要求DMA传送时可能遇到三种情况。(www.xing528.com)
①此时CPU不需要访内,如CPU正在执行乘法指令。由于乘法指令执行时间较长,此时I/O设备访内,即I/O设备挪用几个内存周期对CPU执行程序没有任何影响。
②此时CPU正在访内,则必须待该访内周期结束后,再I/O设备访内。
③I/O设备要求访内时,CPU也要求访内,这就产生了访内冲突,在这种情况下I/O设备访内优先,因为I/O设备访内的优先级高(前一个I/O数据必须在下一个访内请求到来之前存取完毕)。显然,在这种情况下I/O设备挪用几个内存周期,意味着CPU延缓了对指令的执行。
如图7-14所示。与停止CPU访内的DMA方法比较,周期挪用的方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。但是,I/O设备每一次周期挪用都有申请总线控制权、建立线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2~5个内存周期(视逻辑线路的延迟而定)。
图7-14 周期挪用
3.DMA与CPU交替访内
如果CPU的工作周期比内存存取周期长很多,此时采用交替访内的方法可以使DMA传送和CPU同时发挥最高的效率。假设CPU工作周期为1.2μs,内存存取周期小于0.6μs,那么一个CPU周期可分为C1和C2两个分周期,其中C1供DMA控制器访内,C2专供CPU访内,如图7-15所示。
图7-15 DMA与CPU交替访内
这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时控制的。CPU和DMA控制器各自有自己的地址寄存器、数据寄存器和读/写信号。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内请求,同样可将地址、数据等信号传送到总线上。事实上,对于总线来说,这是用C1,C2控制的一个转换器,这种总线控制权的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。
这种传送方式又称为“透明的DMA”方式。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。