Input/Output Memory Management Unit
From Wikipedia, the free encyclopedia
実例と呼称
IOMMUの例として、AGPやPCI Expressのグラフィックスカードで使われるGraphics Address Remapping Table (GART) がある。
AMDは、HyperTransportアーキテクチャでのIOMMU技術の仕様を公表している[1]。インテルはIOMMUの仕様をVirtualization Technology for Directed I/O (VT-d) として公表している[2]。サン・マイクロシステムズのIOMMUはSolaris Developer Connection の Device Virtual Memory Access (DVMA) として公表されている[3]。IBMのIOMMUはTranslation Control Entry (TCE) と称している文書がある[4]。PCI-SIGでは関連する部分をI/O Virtualization (IOV) [5]とAddress Translation Services (ATS) と呼んでいる。
x86のIOMMUについては、x86仮想化#チップセットも参照のこと。
利点
物理アドレスを直接使う場合と比較したIOMMUの利点は以下の通りである。
- 大きなバッファを確保する際に、物理的に連続であることを保証する必要がない。IOMMUが連続な仮想アドレスと分断された物理アドレスのマッピングを行う。
- 主記憶メモリ全体を指定できるほどのアドレス幅を持たない周辺機器(バス)の場合、IOMMUを使えばメモリ上どこにバッファがあってもアクセス可能となる。これにより、周辺機器がアクセスできる範囲にあるバッファと実際のバッファの間でメモリコピーをする必要がなくなる。
- 例えば、最近のx86系プロセッサはPAE機能によって 4GiB以上のメモリ空間を扱える。しかし、32ビットのPCIデバイスは4GiBを越えるアドレスにあるメモリには単純にはアクセスできない。IOMMUがない場合、オペレーティングシステム (OS) はdouble buffering(Windows用語)とかbounce buffers(Linux用語)と呼ばれる時間のかかる処理を必要とする。
- メモリ保護機能により、明示的にアクセス権がないとデバイスからメモリにアクセスできない。これによりデバイスの誤動作や悪意あるデバイスからメモリを保護する。IOMMU の設定はCPU上で動作するOSが行うため、デバイス側から設定することはできない。
IOMMUはCPUがデバイスと(DMAではなく)ポートマップドI/Oで通信する場合には使われない。
