在计算机领域,IOMMU(Input/Output Memory Management Unit)
是一个内存管理单元(Memory Management Unit
),它的作用是连接DMA-capable I/O
总线(Direct Memory Access-capable I/O Bus
)和主存(main memory
)。传统的内存管理单元会把CPU
访问的虚拟地址转化成实际的物理地址。而IOMMU
则是把设备(device
)访问的虚拟地址转化成物理地址。为了防止设备错误地访问内存,有些IOMMU
还提供了访问内存保护机制。参考下图:
IOMMU
的一个重要用途是在虚拟化技术(virtualization
):虚拟机上运行的操作系统(guest OS
)通常不知道它所访问的host-physical
内存地址。如果要进行DMA
操作,就有可能破坏内存,因为实际的硬件(hardware
)不知道guest-physical
和host-physical
内存地址之间的映射关系。IOMMU
根据guest-physical
和host-physical
内存地址之间的转换表(translation table
),re-mapping
硬件访问的地址,就可以解决这个问题。
另外,在AMD
的VIRTUALIZING IO THROUGH THE IO MEMORY MANAGEMENT UNIT (IOMMU)文档中,也有一个更全面的总结图:
参考资料:
IOMMU。