- 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仅在更强大的微处理器上可用。您不会在微控制器和大多数嵌入式系统中找到它。