什么是DMA和IOMMU? DMA和IOMMU如何使用?
如果架构不支持IOMMU怎么办?
没有IOMMU的情况下如何使用DMA?

最佳答案

DMA(直接内存访问)是一项硬件功能,它使内存访问独立于微处理器当前运行的程序而发生。 I / O设备可以使用它直接执行对内存的读取或写入操作,而无需执行任何微处理器指令。或者,它可以用来有效地复制内存块。在DMA传输期间,微处理器可以同时执行不相关的程序。

IOMMU(输入输出内存管理单元)是一项硬件功能,可将MMU扩展到I / O设备。 MMU将虚拟内存地址映射到物理内存地址。普通MMU用于为每个进程提供自己的虚拟地址空间,而IOMMU用于为每个I / O设备提供自己的虚拟地址空间。这样,I / O设备将看到一个简单的连续地址空间,可能使用32位地址进行访问,而实际上,物理地址空间是碎片化的,并超过了32位。

没有IOMMU的DMA要求I / O设备使用实际的物理地址。设置DMA传输时,处理器还必须使用物理地址。另外,没有IOMMU的DMA可以用于内存复制(因为它不涉及I / O设备)。

IOMMU仅在功能更强大的微处理器上可用。在微控制器和大多数嵌入式系统上都找不到。

09-12 10:16