CPU的处理速度远快于内存,硬盘的读写速度。同时由CPU搬运数据也是很低效的,无论是程序控制方式还是中断控制方式,数据的传输都必须经过CPU,例如将一个字节的数据从地址A搬运到地址B,则要将数据存在寄存器中,然后在将其写到地址B。
为了不让CPU的资源浪费在等待读写完成中,引入了DMA。它不仅能够提高数据吞吐量而且减轻了CPU的负载,提高了系统的性能。
在传输过程中不需要CPU介入,但是在DMA开始和结束时需要CPU进行相关设置(源地址、目的地址、传输长度)和校验。这样就实现了CPU与DMA的并行操作,提高了CPU利用率。其拷贝数据的速度也要快于CPU介入的方式(CPU需要从来源把每一片段的数据复制到寄存器,然后在把他们再次写回到新的地方)。
DMA控制器是内存储器同外设之间进行高速数据传送时的硬件控制电路,是一种实现直接数据传送的专用处理器,它必须能取代在程序控制传送中由CPU和软件所完成的各项功能。它的主要功能是:
- DMAC同外设之间有一对联络信号线--外设的DMA请求信号DREQ以及 DMAC向外设发出的DMA响应信号DACK;(如下图)
- DMAC在接收到DREQ后,同CPU之间也有一对联络信号线--DMAC向CPU 发出总线请求信号(HOLD或BUSRQ),CPU在当前总线周期结束后向DMAC发出总线响应信号(HLDA或BUSAK),DMAC接管对总线的控制权,进入DMA操作方式;
- 能发出地址信息,对存储器寻址,并修改地址指针,DMAC内部必须有能自动加1或减1的地址寄存器;
- 能决定传送的字节数,并能判断DMA传送是否结束。DMA内部必须有能自动减1的字计数寄存器,计数结束产生终止计数信号;
- 能发出DMA结束信号,释放总线,使CPU恢复总线控制权;
- 能发出读、写控制信号,包括存储器访问信号和I/O访问信号。DMAC内部必须有时序和读写控制逻辑。
DMA的工作方式
- CPU停止访问总线,全部交由DMAC控制,直到DMAC放弃总线。
这种方式可能会造成系统相应不及时,浪费CPU资源的情况 - 周期挪用
DMAC不全部占用总线,只是利用CPU不访问存储器时实现DMA操作,例如CPU在进行浮点运算或者乘除法时,总线是空闲的。 - CPU和DMA交替使用总线
参考文档: