IOMMU ( anglicky input/output memory management unit ) je jednotka správy paměti (MMU) pro I/O operace. Stejně jako tradiční jednotka správy paměti procesoru, která převádí virtuální adresy viděné procesorem na fyzické adresy, převádí tato jednotka virtuální adresy viděné hardwarovým zařízením na fyzické adresy. Některé IOMMU také umožňují nastavit různé I/O limity pro ochranu před nesprávným chováním zařízení nebo pro izolaci, například při použití virtualizace (viz VT-d ).
Za přítomnosti IOMMU má zařízení schopnost provádět DMA operace nejen na fyzických adresách, ale také na logických (virtuálních) adresách. Tato funkce zjednodušuje zařízení, která se již nemusí starat o podporu DMA v nespojité (ve smyslu fyzických adres) paměťové oblasti (podpora takového DMA v ovladači s sebou nese režii).
Nevýhody použití IOMMU ve srovnání s přímým adresováním fyzické paměti v požadavcích DMA jsou:
IOMMU umožňuje virtualizovaným operačním systémům pracovat přímo s hardwarem hostitelského systému. Mít IOMMU pro tyto kombinace zlepšuje zabezpečení, výkon a zjednodušuje implementaci virtuálního počítače. [1] Příklady IOMMU pro virtualizaci na platformách x86/x86_64: Intel VT-d a AMD-Vi .
IOMMU byl vždy používán na počítačích Sun SPARC [2] pro sběrnici SBus a byl také používán na počítačích DEC Alpha [2] pro sběrnici PCI .
Variantou IOMMU je AGP GART (Graphics Address Remapping Table, graphic address remapping table [3] ).
Běžné počítače kompatibilní s PC zpravidla neměly IOMMU (kromě AGP GART). Místo toho byla všechna hlavní periferní zařízení od konce 90. let vyvíjena s podporou řetězového DMA.
Široké přijetí hypervizorů virtuálních strojů však vedlo k zahrnutí podpory IOMMU do „hostujících“ operačních systémů, jako je Windows (rozhraní API jádra Windows tuto funkci vždy podporovalo, i když tato podpora obvykle nebyla implementována).
Přítomnost takové podpory v hostujícím OS při virtualizaci samotného zařízení IOMMU značně usnadňuje úkol emulace složitých zařízení pomocí DMA v hostujícím OS a zlepšuje výkon a bezpečnost takové emulace.