6.23直接存储器存取方式
直接存储器存取方式(DMA)是为了在主存储器与I/O设备间进行高速交换批量数据而设置的。它的基本思想是:通过硬件控制,实现主存与I/O设备间的直接数据传送,在传送过程中无需CPU程序干预。
在不同的计算机系统中,DMA功能可能有所不同。最简单的系统仅能实现I/O口与主存之间的数据传送。较复杂的还可实现I/O与I/O之间、主存单元与主存单元之间的数据传送。有的还能在传送时附加一些简单运算,如加1、减1及移位等。
1.硬件结构
由于DMA方式是为了在主存储器与I/O设备间进行高速交换批量数据的,实现的前提是CPU暂停与外部设备(存储器或其他I/O设备)间的工作,目的是交出总线控制权这也是为什么数据总线、地址总线和部分控制总线有高阻状态的原因之一),以便DMA控制器使用总线完成存储器与I/O设备间的数据传送。所以DMA控制器是必需的,它的作用是提供存储器地址、读/写控制信号等。当然也为外部设备提供必要的控制信号,如图6.17所示。
2.简单的工作流程
下面结合图6.17所示说明实现DMA方式的简单的工作流程。
(I)外部设备向DMA控制器发出DMA传送请求:
(2)DMA控制器向CPU发出使用总线请求:
(3)CPU若允许,则回答DMA控制器可以使用总线:
(4)DMA控制器接管系统总线:
(5)DMA控制器向外部设备回送一个回答(允许交换数据):
(6)外部设备与存储器交换数据:
(7)DMA控制器撤销总线请求,CPU收回总线控制权。
由于每次DMA传送的工作很简单,如从主存中读取一个字送到I/O口,或从I/O口读一个字送入主存,所以一次DMA传送过程是很快的,一般只占用一个或几个CPU存储器读写周期,完成一次DMA操作。这种方式又被称为“周期窃取方式”。因此DMA方式适用于高速数据传送。
由于DMA方式主要依靠硬件直接实现数据传送,它不执行程序,不能处理较复杂的事件,因此DMA方式并不能完全取代中断方式。如果某种事件处理已不是单纯的数据传送时,还必须采用中断方式。事实上,在以DMA方式传送完一批数据后,往往采用中断方式通知CPU进行结束处理。
在8086等CPU中采用了“指令预取”等缓冲技术,在目前使用的大多数个人机的CPU中更采用了片内Cache技术,只要CPU内的指令预取队列或Cache中有可供执行的指令,它仍能继续工作,仅当需要进行访内或外部访问时才会暂停,因而CPU工作与DMA传送间具有更高的并行度。