Input–output memory management unit
IOMMU (Input/Output Memory Management Unit, 입출력 메모리 관리 장치, IOMMU)는 DMA 가능한 입출력 버스와 주기억장치를 접속하는 메모리 관리 장치(MMU)이다. MMU가 CPU에 보이는 가상 주소를 물리 주소로 변환하듯이, IOMMU는 주변기기에서 보이는 가상 주소(장치 주소 또는 입출력 주소라고 부름)을 물리 주소로 변환한다. 주변기기의 오동작에서 메모리를 지키기 위해 메모리 보호 기능도 제공한다.
About
IOMMU는 다음과 같은 일들을 할 수 있다.
Transalation
- 디바이스(IO 또는 버스) 주소를 물리 주소로 변환할 수 있도록 매핑을 제공한다.
- DMA에 사용하는 버퍼는 연속된 물리 주소이어야 하는데, IOMMU를 사용하는 경우 그러한 제한이 없어진다.
- IOMMU가 MMU와는 별도의 매핑 테이블을 사용하므로 시스템 메모리에 페이지가 반드시 연속되지 않아도 된다.
- DMA에 사용하는 버퍼는 연속된 물리 주소이어야 하는데, IOMMU를 사용하는 경우 그러한 제한이 없어진다.
Isolation
- 메모리에 대한 디바이스의 접근 제어를 제공한다.
IO Virtualization
- 가상화를 지원하며 디바이스가 별개의 DMA 가상 주소 공간을 사용할 수 있다.
- cpu에 있는 MMU도 가상화를 위해 별개의 MMU가 있는 것처럼 IOMMU도 유사하다.