개요

Memory mapped I/O는 메인 메모리와 입출력 장치를 위해서 사용하는 영역이 같은 경우를 말한다. PIO처럼 전용 Instruction을 사용하는 방식과는 다르게 MMIO에서는 입출력 장치의 메모리와 레지스터가 마치 메모리의 특정영역에 있는 것처럼 생각할 수 있다. 예를 들어서 메모리의 0xFF에 접근하면 입출력 장치의 특정 레지스터값이 올라가는 방식이다. 이러한 방식을 사용하게 되면 매우 간결하게 그리고 빠르게 입출력 장치의 행위를 정의할 수 있게 되고, CPU그리고 입출력 장치의 구현이 현해지는 장점이 있다.

메모리 맵 입출력에서는 메모리와 입출력 장치의 접근을위해서 같은 메모리 영역을 사용한다. 또한 메모리에 접근하기 위한 명령어로 메모리에 읽고 쓰는 것이 디바이스에 접근하는 방식이 된다. 이러한 메모리의 특정영역을 정하는 것은 임시적으로 디바이스와 CPU사이의 일시적인 약속으로 정하거나 아니면 영구적으로 할당된 영역일 수도 있다. 각 입출력 장치는 CPU의 주소 버스를 감시하고 있다가, 메모리에 접근하면 디바이스가 명령을 처리하고 특정 메모리에다가 결과값을 작성하거나 명령을 수행하게 된다.

PIO방식과 달리 더 많은 메모리 영역을 먹지만 현재 64비트 컴퓨터처럼 매우 큰 메모리 영역을 사용하는 컴퓨팅 환경에서는 더이상 문제가 되지 않고 있다. 그러나 임베디드 시스템처럼 매우 한정된 메모리 영역을 사용하는 경우에는 (8이나 16비트 CPU), 이러한 방식을 사용하는 것은 약간 부담이 될 수도 있는 방식이다.