- 在计算机与外设交换数据的过程中,无论是无条件传送、利用查询方式传送还是利用中断方式传送,都需要由CPU通过执行程序来实现,这就限制了数据的传送速度
- 直接内存存储(Direct Memory Access,DMA)是指数据在内存与I/O设备间的直接成块传送,即在内存与I/O设备间传送一个数据块的过程中,不需要CPU的任何干涉,只需要CPU在过程开始启动(即向设备发出“传送一块数据”的命令)与过程结束(CPU通过轮询或中断得知过程是否结束和下次操作是否准备就绪)时的处理,实际操作由DMA硬件直接执行完成,CPU在此传送过程中可做别的事情
- DMA传送的一般过程如下图所示
- (1)外设向DMA控制器(DMAC)提出DMA传送的请求
- (2)DMA控制器向CPU提出请求,其请求信号通常加到CPU的保持请求输入端HOLD
- (3)CPU在完成当前的总线周期后立即对此请求作出响应,CPU的响应包括两个方面的内容:
- 一方面,CPU将有效的保持响应信号HLDA输出加到DMAC上,告诉DMAC它的请求已经已得到响应;
- 另一方面,CPU将其输出的总线信号置为高阻,这就意味着CPU放弃了对总线的控制权
- (4)DMAC获得了对系统总线的控制权,开始实施对系统总线的控制,同时向提出请求的外设送出DMAC的响应信号,告诉外设其请求已得到响应,准备开始进行数据的传送
- (5)DMAC送出地址信号和控制信号,实现数据的高速传送
- (6)当DMAC将规定的字节数传送完成时,它就将HOLD信号变为无效并加到CPU上,撤销对CPU的请求,CPU检测到无效的HOLD就知道DMAC已传送结束,CPU就送出无效的HLDA响应信号,同时重新获得系统总线的控制权,接着DMA前的总线周期继续执行下面的总线周期
- 在DMA传送过程中无须CPU的干预,整个系统总线完全交给了DMAC,由它控制系统总线完成数据传送。在DMA传送数据时要占用系统总线,根据占用总线方法的不同,DMA可以分为中央处理器停止法、总线周期分时法和总线周期挪用法等,无论采用那种方法,在DMA传送数据期间,CPU 不能使用总线
欢迎小伙伴讨论,文章内容如有错误请在评论区评论或发私聊消息,谢谢你。
|