本文已参与「新人创作礼」活动,一起开启掘金创作之路。
直接内存访问
直接内存访问(Direct Memory Access)技术,就是在和内存或I/O设备传输数据的时候,不再通过CPU控制数据传输,而是通过DMA控制器(DMA Controller,DMAC)。这块芯片是一个协处理器,当CPU要传输数据时,只需要告诉DMAC要传输什么,从哪里来,到哪里去就可以了。
连在总线上的设备,其实可以分成两种类型,分别是主设备和从设备。两者的区别就是,是否可以主动发起数据传输。比如CPU(主设备)向硬盘(从设备)写入数据,或者从硬盘读出数据。
从设备是可以主动发送控制信号的,是不同于数据内容的。从设备可以告诉主设备我这里有数据要传输,而不能主动把数据传输给主设备。
而DMAC既是主设备又是从设备。对于CPU来说它是从设备,对于硬盘这类从设备来说它是主设备。
DMAC如何工作
-
CPU向DMAC发起请求,修改DMAC寄存器里的数据。
-
修改的时候告诉DMAC数据从哪里来,到哪里去,一共要传输多少数据。
-
设置完后,DMAC变成一个空闲状态。
-
如果我们要把硬盘里的数据传输给内存的话,我们的硬盘会用总线之外的一条线通知DMAC有数据传输请求。
-
同样DMAC通过总线之外的一条线响应硬盘的请求。
-
硬盘请求后,DMAC完成了响应。DMAC就要通过总线向硬盘接口发起读数据请求。数据就从硬盘读到了DMAC。
-
DMAC拿到数据之后,就会通过总线向内存发起写数据的请求。把数据写到内存里面。
-
DMAC会不断重复6、7步,直到完成CPU要求传输的数据长度。
-
完成数据传输之后,DMAC又会回到空闲状态。
如今数据传输越来越复杂,各个设备里都有自己的DMAC了。