IOMMU
物理アドレスを直接使う場合と比較した IOMMU の利点は以下の通りである。
大きなバッファを確保する際に、物理的に連続であることを保証する必要がない。IOMMU が連続な仮想アドレスと分断された物理アドレスのマッピングを行う。
主記憶メモリ全体を指定できるほどのアドレス幅を持たない周辺機器(バス)の場合、IOMMU を使えばメモリ上どこにバッファがあってもアクセス可能となる。これにより、周辺機器がアクセスできる範囲にあるバッファと実際のバッファの間でメモリコピーをする必要がなくなる。 例えば、最近のx86系プロセッサはPAE機能によって 4GiB 以上のメモリ空間を扱える。しかし、32ビットのPCIデバイスは 4GiB を越えるアドレスにあるメモリには単純にはアクセスできない。IOMMU がない場合、OS は double buffering(Windows用語)とか bounce buffers(Linux用語)と呼ばれる時間のかかる処理を必要とする。
メモリ保護機能により、明示的にアクセス権がないとデバイスからメモリにアクセスできない。これによりデバイスの誤動作や悪意あるデバイスからメモリを保護する。IOMMU の設定は CPU 上で動作する OS が行うため、デバイス側から設定することはできない。 仮想化では、ゲストOSが IOMMU を直接制御すべきではない。 アークテクチャによっては、IOMMU が割り込みの再マッピングも行う。
IOMMU は CPU がデバイスと(DMAではなく)ポートマップドI/Oで通信する場合には使われない。