Memory Mapped IO, I/O Mapped I/O

KWANHO PARK·2025년 10월 21일

CPU가 키보드, 마우스, 하드 디스크, 네트워크 카드와 같은 주변 장치(I/O 장치)와 데이터를 주고받는 방식

Memory Mapped IO, I/O Mapped I/O의 가장 근본적인 차이

  • I/O 장치를 위한 주소 공간을 메모리와 공유하느냐 vs 별도로 분리하느냐

1. 메모리 맵 I/O (Memory Mapped I/O, MMIO)

I/O 장치를 메모리의 일부처럼 취급하는 방식

  • I/O 장치의 레지스터(데이터를 쓰거나 읽는 통로)를 메모리 주소 공간의 특정 영역에 그대로 할당(매핑)
  • 동작 방식: CPU 입장에서는 I/O 장치에 접근하는 것이 그냥 메모리의 특정 주소에 값을 읽고 쓰는 것과 동일. 따라서 MOV, LOAD, STORE와 같은 일반 메모리 접근 명령어를 사용하여 I/O 장치 제어

장점

  • 단순한 명령어: I/O를 위한 별도 명령어가 필요 없는 단순한 CPU 설계 가능(주로 RISC 계열 CPU,
    예: ARM, MIPS, RISC-V에서 선호)
  • 프로그래밍 유연성: C언어에서 포인터를 사용하듯 메모리에 접근하는 모든 방식을 I/O 제어에도 동일하게 사용 가능

단점

  • 메모리 주소 공간 잠식: I/O 장치에 할당된 주소 영역만큼 실제 메모리(RAM)가 사용할 수 있는 공간이 줄어듦
  • 캐시 문제: I/O 장치의 상태는 실시간으로 변해야 하는데, CPU가 해당 주소의 값을 캐시(Cache)해버리면 이전의 값(Stale data)을 읽는 문제 발생 가능. 따라서 MMIO 영역은 반드시 캐시 비활성화(Non-cacheable)로 설정해야 함

2. I/O 맵 I/O (I/O Mapped I/O)

  • 메모리 주소 공간과 I/O 주소 공간을 완전히 분리하는 방식

  • 포트 맵 I/O (Port-Mapped I/O, PMIO) 또는 '고립형 I/O (Isolated I/O)'라고도 함

  • 동작 방식: CPU는 메모리 주소 공간(예: 0번지~FFFF번지)과는 완전히 별개인 I/O 포트 주소 공간(예: 0번 포트~FF번 포트)을 가짐. 이 I/O 포트에 접근하기 위해서 IN, OUT과 같은 I/O 전용 특수 명령어 사용

장점

  • 메모리 공간 절약: I/O 장치가 메모리 주소 공간을 전혀 차지하지 않으므로, 모든 메모리 주소를 RAM에 할당할 수 있음
  • 명확한 구분: 메모리 접근과 I/O 접근이 명령어로 명확하게 분리되어 하드웨어적, 소프트웨어적으로 구분 용이

단점

  • 전용 명령어 필요: I/O 접근을 위한 별도의 명령어 필요(주로 CISC 계열 CPU, 예: Intel x86에서 사용)
  • 제한된 유연성: IN, OUT과 같은 단순한 명령어만 사용 가능하므로, 메모리처럼 다양한 주소 지정 방식을 활용하기 어려움

구분메모리 맵 I/O (MMIO)I/O 맵 I/O (PMIO)
주소 공간메모리와 I/O가 동일한 주소 공간 공유메모리와 I/O가 분리된 별도 주소 공간 사용
사용 명령어일반 메모리 명령어 (예: MOV, LOAD, STORE)I/O 전용 명령어 (예: IN, OUT)
메모리 영향I/O 장치 매핑 영역만큼 메모리 공간 감소메모리 공간에 영향 없음
유연성높음 (다양한 메모리 접근 방식 사용 가능)낮음 (제한된 I/O 명령어만 사용)
주요 아키텍처RISC (ARM, MIPS, RISC-V 등)CISC (Intel x86 등)
특징캐시 관리(비활성화)가 필수적임하드웨어적으로 주소 버스와 I/O 버스 분리 필요

실제 사용 예시

  • 스마트폰, 임베디드 기기 (ARM CPU): 대부분 MMIO 방식 사용
  • 현대 PC (Intel/AMD x86 CPU): 두 가지 방식 모두 사용
    • 키보드, 시리얼 포트 등 오래된 레거시(Legacy) 장치들은 I/O 맵 I/O (PMIO) 사용
    • 그래픽 카드(VRAM)나 고성능 네트워크 카드처럼 대량의 데이터를 빠르게 전송해야 하는 현대적인 장치들은 메모리 맵 I/O (MMIO) 사용 (DMA 전송 등에 훨씬 유리하기 때문)

0개의 댓글