发布于 2019-07-01 11:51:45
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只能在功能更强大的微处理器上使用。你不会在微控制器和大多数嵌入式系统上找到它。
https://stackoverflow.com/questions/56834833
复制相似问题