什么是DMA
DMA(Direct Memory Access),直接内存访问
DMA的作用是帮助CPU在硬件设备之间传输数据,避免硬件设备之间低速的数据传输拖住执行速度极高的CPU
在使用DMA之前的数据拷贝
当想要读取磁盘上的某个文件时,CPU向磁盘发出IO请求
磁盘将数据放入到磁盘控制器的缓冲区中,准备好后,向CPU发起中断,告诉CPU可以读取了
CPU将磁盘控制器缓冲区中的内容传输到内存中。
这种数据拷贝存在的问题
需要CPU亲自将数据从磁盘控制器缓冲区传输到内存。CPU是整个硬件系统中执行速度最快,也是最昂贵的设备。因此内存和磁盘控制缓冲区低速的读写,会拉低CPU的速度,让CPU把时间浪费在搬运数据的过程上。如果需要拷贝的数据量极大,那么对CPU的占用对于其他任务来所无意是噩梦。
基于此,引入了DMA技术
DMA
在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务。
有了DMA之后的数据拷贝
当想要读取磁盘上的某个文件时,CPU通知DMA我想要把磁盘上的某些数据拷贝内核内存中
DMA负责准备数据,DAM数据准备好后,向CPU发起中断告诉CPU,你要的数据我已经准备好了。
可以看到:有了DMA之后,拷贝数据这样的笨活和重活就不需要CPU来干了
DMA将数据从磁盘拷贝到内核内存的具体过程为:DMA向磁盘发起IO请求,磁盘收到请求后将数据放入到磁盘控制器缓冲区,磁盘控制器缓冲区放满数据后,向DMA发起中断,通知DMA将数据从磁盘控制器缓冲区放入到内核内存中。当DMA准备好数据以后,发起中断通知CPU。