DMA 和 IOMMU 有什么区别?

What is the difference between DMA and IOMMU?

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

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

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

IOMMU 只能在更强大的微处理器上使用。您不会在微控制器和大多数嵌入式系统上找到它。