在計算機領域,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)文檔中,也有一個更全面的總結圖: