IOMMU(Input/Output Memory Management Unit, 입출력 메모리 관리 장치)는 DMA(Direct Memory Access, 특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능이다.) 가능한 버스와 주기억장치를 연결하는 메모리 관리 장치이다.
아래 그림은 IOMMU의 기능을 MMU(Memory Management Unit)의 기능과 비교하여 설명한 것으로, 사실 상 IOMMU의 기능을 완벽히 잘 설명한 그림이다.
MMU는 CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품이다. Virtual Memory Address를 Physical Memory Address로 변환하며, 메모리 보호, 캐시 관리, 버스 중재 등의 역할을 담당한다.
위 그림은 CPU와 MMU의 작동 방식을 보여주는 그림이다. CPU는 데이터가 필요할 시, 메모리 장치에 데이터를 요청한다.
문제는 CPU가 가지고 잇는 데이터의 주소는 virtual address상의 주소이다. 이를 실제 메모리 장치상의 physical address로의 변환이 필요한데, 이를 MMU가 처리한다.
MMU는 OS가 관리하는 Page table이라는 자료구조를 통해 Virtual-to-Physical 주소 변환을 하는데 Page table은 메모리 장치에 저장되기에 변환 속도가 다소 느리다. 이를 해결하기 위해 MMU는 TLB(Translation lookasibe buffer)라는 빠른 보조기억장치를 가지고 있으며, 이를 cache로 사용하며 반복 참조된 주소에 한해 빠른 주소 변환을 지원한다. 그림에서 보다시피, 현대 CPU상에는 CPU 칩 안에 MMU가 위치해 있다.
MMU가 필요한 이유를 예를 들어 설명하자면 다음과 같다. Multiple process 실행을 위해 CPU는 virtual address상에서 명령어를 실행한다. 예를 들어 program A, program B가 동시에 실행되는 경우, A와 B 모두 메모리상 주소 0x100000에 데이터를 동시에 쓰는 경우가 발생할 수 있다. 다행히 MMU 및 virtual memory 기술을 통해 A와 B가 동시에 가리키는 0x000001 주소는 실제 메모리 상의 다른 주소로 remapping(대체)된다. 그렇기 때문에 program A, B 모두 같은 메모리 주소를 사용하더라도 실제 메모리 장치의 같은 주소에 접근하는 불상사가 발생하지 않는다.
IOMMU는 DMA 가능한 입출력 버스와 주기억장치를 연결하는 메모리 관리 장치(MMU)이다.