DMA周期挪用(cycle-steal)

时间:2021-05-26 19:42:04
周期挪用是指利用CPU不访问存储器的那些周期来实现DMA操作,此时DMA可以使用总线而不用通知CPU也不会妨碍CPU的工作。周期挪用并不减慢CPU的操作,但可能需要复杂的时序电路,而且数据传送过程是不连续的和不规则的。 周期挪用(或周期窃取) 在这种方法中,每当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延缓了一二个存取周期再访存。 与CPU暂停访存的方式相比,它既实现了I/O传送,又较好地发挥了主存与CPU的效率,是一种广泛采用的方法。 应该指出,I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制级权。因此,尽管传送一个字对主存而言只占用一个主存周期,但对DMA接口而言,实质上要占2—5个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况。