1. 原理
1.1 DMA
DMA是一种无需CPU的参加就可以让外设与系统内存之间进行双向数据传输的硬件机制。
它可以使系统CPU从实际的I/O数据传输过程中摆脱出来,大大提高系统的吞吐率,并且在传输期间,CPU还可以并发执行其他任务。
1.2 DMA与cache的一致性
cache用作CPU针对内存的缓存,避免CPU每一次都要与相对来说慢点的内存交互数据,从而来提高数据的访问速率,而DMA可以用作内存与外设之间传输数据的方式,数据不需要经过CPU周转。
“假设设备驱动程序把一些数据填充到内存缓冲区中,然后立刻命令硬件设备利用DMA传送方式读取该数据。如果DMA访问这些物理RAM内存单元,而相应的硬件高速缓存行的内容还没有写入RAM中,那么硬件设备所读取的至就是内存缓冲区中的旧值。”
1.2.1 保证DMA和cache一致性的方法
现在有两种方法来处理DMA缓冲区:
-
一致性DMA映射:
-
任何对DMA缓冲区的改写都要更新到内存子系统中,也称之为“同步的”或者“一致的”。
-
-
流式DMA映射:
-
这里的流即输入输出流,需要事先指定DMA缓冲区的方向。
-
1.3 启动DMA的过程
启动一次流式DMA数据传输分为如下步骤:
-
分配DMA缓冲区
-
建立流式映射
-
释放流式映射
1.3.1 分配DMA缓冲区
在DMA设备不采用S/G(分散/聚集)模式的情况下&#x