DMA和IOMMU之间有什么区别?

12
  • DMA和IOMMU是什么?如何使用DMA和IOMMU?
  • 如果架构不支持IOMMU会怎样?
  • 如何在没有IOMMU的情况下使用DMA?
1个回答

18

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


在Linux内核中使用它有何不同(实际上)?是否有任何Linux API更改? - Pankaj Suryawanshi
我对 Linux 内核不够熟悉,无法回答该问题。 - Codo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接