在正文开始之前需要先搞明白以下几个问题:
1. 什么是DMA?
DMA的中文名称叫做 直接内存访问,是一种不需要CPU参与,就能实现数据搬移的技术(从一个地址空间到另一个地址空间)。
2. DMA有什么用?
一定程度上解放CPU,对于实现 高效嵌入式系统 与 加速网络数据处理 有极其重要的作用。
3. DMA的实现简述
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束 4个步骤。
scatter-gather DMA 与 block DMA
传统的block DMA 一次只能传输物理上连续的一个块的数据, 完成传输后发起中断。而scatter-gather DMA允许一次传输多个物理上不连续的块,完成传输后只发起一次中断。
传统的block DMA像这样:
先进的scatter-gather DMA像这样:
这样做的好处是直观的,大大减少了中断的次数,提高了数据传输的效率。