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

1 回答 1

14

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

于 2019-07-01T11:51:45.517 回答