无论是我们平时台式机使用的网卡还是在存储系统中高速读写的磁盘,都离不开一个feature的支持那就是DMA。但是很多同学都只是听说过这个名词或对这名词理解仅停留在大学课本的8237 DMA芯片上,所以今天特地来写写DMA,和大家一起来探讨究竟什么是DMA,这个东西究竟包含了哪些东西,以及DMA的具体实现上有哪些不同。
What is DMA
Direct memory access (DMA) is a feature of computer systems that allows certain hardware subsystems to access main system memory (RAM) independently of the central processing unit (CPU).
从以上定义中我们看出DMA就是要使得一个硬件子系统来直接访问系统内存,并且不占用CPU的运算能力把CPU解放出来。
DMA本质上是一种功能,不是一种具体实现。所以如果要研究DMA的框架就必须从不同DMA的实现当中去寻找答案。
要弄清DMA的实现我们先要把系统中的单元抽离出来,把这些基本单元识别清楚再去分析。
- device:如一块网卡,一个硬盘,一个USB鼠标
- host controller: 控制设备,和设备直接打交道的单元,如PCIe的root complex,USB controller, SATA contoller,这种单元一般都是固化在主机的主板上或是SOC,CPU内部。
- system memory:主机的内存,一般就指DRAM。
- bus:分为device and HC之间的总线和HC and system memory之间的总线
但是非要从以上四个主要部件来说究竟是哪一部分实现了DMA,我觉得还要具体case具体分析,一概而论都是片面且不准确的,就像网络的可靠传输,可以通过HDLC之类的协议在L2实现也可以通过TCP在L4实现更可以通过L7来实现。
所以今天DMA架构的剖析就通过四个cases来说说不同的devic