最初的PC体系结构中,CPU是系统的唯一总线控制器,提取与存储RAM存储单元的值,只有CPU才可以驱动地址/数据总线的硬件设备
随着PCI设备的出现,每一个外围设备都可以做总线的控制器
DMA一旦被激活就可以自行传送数据
数据传送完毕之后, 当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。
当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后带着本次操作结果及状态继续执行原来的程序
使用DMA最多的是磁盘驱动器和需要一次性传送大量字节的设备,因为DMA的设置时间,在传送少数量的数据时直接使用CPU效率比较高
由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。
二、DMA传送方式 DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序.
那么DMA控制器与CPU怎样分时使用内存呢?通常采用以下三种方法:(1)停止CPU访内;(2)周期挪用;(3)DMA与CPU交替访内存.
1.停止CPU访问内存 当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址 总线、数据总线和有关控制总线的使用权.
DMA控制器获得总线控制权以后,开始进行数据传送.在一批数据传送完毕后,DMA控制器通知CPU可以使用内 存,并把总线控制权交还给CPU.
图(a)是这种传送方式的时间图.很显然,在这种DMA传送过程中,CPU基本处于不工作状态或者说保持状态.
优点: 控制简单,它适用于数据传输率很高的设备进行成组传送。
缺点: 在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。
这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周 期,即使高速I/O设备也是如此。
例如,软盘读出一个8位二进制数大约需要32us,而半导体内存的存储周期小于0.5us,因此许多空闲的存储周期不能 被CPU利用.
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访内。 这种传送方式的时间图如下:
假设CPU工作周期为1.2us,内存存取周期小于0.6us,那么一个CPU周期可分为C1和C2两个分周期,其中C1专供DMA控制器访内,C2专供CPU访内. 这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时制的。 CPU和DMA控制器各自有自己的访内地址寄存器、数据寄存器和读/写信号等控制寄存器。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信 号送到总线上。在C2周期中,如CPU有访内请求,同样传送地址、数据等信号。事实上,对于总线,这是用C1,C2控制的一个多路转换器,这种总线控制权 的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。 这种传送方式又称为“透明的DMA”方式,其来由是这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。
DMA每次数据传送需要一个内存缓冲区,包含硬件设备要读出或者写入的数据,启动一次数据传输,设备驱动程序必须确保DMA电路可以直接访问RAM单元
总线地址:除CPU之外的硬件设备驱动数据总线时所用的存储器地址
DMA操作时,数据传送不需要CPU参加,IO设备和DMA电路直接驱动数据总线,内核开始DMA时,需要将内存缓冲区总线地址写入DMA适当的IO端口
不同的总线具有不同的总线大小,ISA的地址总线是24位长,在80X86体系结构中,可以在物理内存的低16MB完成DMA传送