정의
IOMMU(Input‑Output Memory Management Unit)는 컴퓨터 시스템에서 주변 장치가 메모리 접근을 수행할 때, 물리 주소와 가상 주소 사이의 매핑을 제어·변환하는 하드웨어 기능이다. 주로 DMA(Direct Memory Access) 작업을 보호하고, 시스템 보안을 강화하며, 주소 공간을 효율적으로 활용하기 위해 사용된다.
주요 기능
- 주소 변환 – 주변 장치가 제공하는 가상 주소를 실제 물리 주소로 매핑한다.
- 보호 – 장치가 허용되지 않은 메모리 영역에 접근하는 것을 방지하여 메모리 손상 및 보안 위협을 차단한다.
- 격리 – 다중 가상 머신 환경에서 각각의 VM이 사용하는 DMA 버퍼를 격리함으로써, 서로의 메모리 영역에 간섭하지 못하도록 한다.
- I/O 가상화 지원 – 하이퍼바이저가 가상 머신에 가상 I/O 장치를 제공할 때, IOMMU를 통해 물리 메모리와의 매핑을 관리한다.
구조 및 작동 원리
- 페이지 테이블: CPU의 가상 메모리 관리와 유사하게, IOMMU는 자체 페이지 테이블(또는 스캔 테이블)을 유지하여 가상 주소와 물리 주소 간의 매핑 정보를 저장한다.
- 리다이렉션: 주변 장치가 DMA 요청을 보낼 때, IOMMU는 해당 요청의 주소를 체크하고, 매핑 테이블에 따라 물리 주소로 변환한다. 매핑이 없거나 권한이 부족한 경우, IOMMU는 요청을 차단하고 오류를 발생시킨다.
- 버퍼 관리: 운영체제는 IOMMU에 매핑 정보를 사전에 설정하고, 사용이 끝난 뒤 이를 해제한다.
주요 구현체
- Intel VT‑d: Intel의 가상화 기술 중 하나로, IOMMU 기능을 제공한다.
- AMD‑Vi (IOMMU): AMD 프로세서에서 제공하는 IOMMU 구현체이다.
- ARM SMMU: ARM 아키텍처용 System MMU로, IOMMU와 유사한 기능을 수행한다.
- IBM Power IOMMU: IBM Power Systems에 탑재된 IOMMU 구현.
역사적 배경
IOMMU의 개념은 1990년대 초반부터 연구되어 왔으며, 초기에는 ‘Scatter‑Gather DMA’와 연계된 메모리 매핑 문제를 해결하기 위해 제안되었다. 2000년대 중반에 들어서면서 하이퍼바이저 기반 가상화 환경이 확대되면서, 보안 및 격리 요구가 증가함에 따라 IOMMU가 표준 하드웨어 기능으로 채택되었다.
운영체제 지원
- Linux:
iommu서브시스템을 통해 VT‑d, AMD‑Vi, ARM SMMU 등을 지원한다. - Windows: Hyper‑V와 연동하여 IOMMU 기능을 제공한다.
- FreeBSD, OpenBSD, macOS 등 주요 OS에서도 IOMMU 지원이 포함되어 있다.
보안 측면
IOMMU는 DMA 공격(예: Thunderbolt, FireWire 등의 외부 인터페이스를 통한 메모리 직접 접근)으로부터 시스템을 보호하는 핵심 메커니즘으로 평가받는다. 최신 시스템에서는 부트 시 IOMMU를 활성화하고, DMA‑capable 장치에 대한 정책을 세부적으로 설정하는 것이 일반적이다.
관련 기술
- SR‑IOV (Single Root I/O Virtualization): 가상화된 네트워크 인터페이스에 IOMMU 매핑을 활용해 고성능 I/O를 제공한다.
- Device Assignment: 가상 머신에 물리 장치를 직접 할당할 때, IOMMU가 메모리 접근을 제어한다.
참고 문헌
- Intel® 64 and IA‑32 Architectures Software Developer’s Manual, Volume 3A – “System Programming Guide”.
- AMD64 Architecture Programmer’s Manual – “I/O Virtualization”.
- Linux Kernel Documentation – “IOMMU Overview”.
- “Virtualization Technologies for I/O Virtualization”, IEEE Computer Society, 2014.