우선 간단하게 위키피디아에 따르면
Memory Mapped I/O : 마이크로프로세서(CPU)가 입출력 장치를 접근할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식
I/O Mapped I/O : 메모리와 입출력의 주소 공간을 분리하여 접근 하는 방식
이라고 적혀있지만 우리가 실제로 이런 문구만을보고 왜 주소공간을 분리하는지 어떻게 분리되어 있는지 이해하기 힘들다. 자세히 알아보자
1. Memory Mapped I/O
- 메모리의 일부 공간을 I/O포트에 할당
- 메모리와 입출력번지 사이의 구별이 없음
- 메모리 명령으로 사용가능
- 기억장치 이용효율이 낮고 H/W가 간단
2. I/O Mapped I/O
- I/O인터페이스 번지와 메모리 번지를 구별가능
- 메모리 명령과 I/O명령을 구별하여 사용
- 전체 메모리 공간을 사용한다
- 기억 장치 이용 효율이 높다 ·
- H/W가 복잡하다
구분 | Memory Mapped I/O | I/O Mapped I/O |
대표 프로세서 |
ARM, MIPS 등 | X86계열(Intel) |
특징 | - CPU내부 로직이 덜 필요하고 더 저렴하고 빠르고 쉬운 CPU가 설계 가능함 | - Addressing 능력이 제한 된 CPU를 사용할 시 메모리 주소영역 전체를 사용 할 수 있음 |
고려사항 | - 주소와 데이터 버스를 많이 사용하게 되어, 메인 메모리에 접근하는 것 보다 매핑한 장치에 접근하는 것이 느림 - 사용시 I/O영역 변수는 volatile 타입으로 선언해야 한다. (컴파일러의 최적화 방지) |
- I/O 제어를 위해 I/O 명령어들만 이용할 수 있으므로, 프로그래밍이 불편 |
사용분야 | RISC, 임베디드 프로세서 등에서 주로 사용 | - 범용성 넓어 입출력장치 추가/삭제가 자유로운 PC 환경에서 주로 사용 |