본문 바로가기
임베디드 개발/펌웨어

Memory mapped I/O 와 I/O mapped I/O

by eteo 2022. 6. 23.

CPU가 메모리와 주변장치를 인터페이스 하는 방식에는 아래와 같은 대조적인 2가지 방법이 있다.

 

 

https://www.baeldung.com/cs/memory-mapped-vs-isolated-io

 

Memory Mapped I/O

마이크로프로세서(CPU)가 입출력 장치를 액세스할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식.

 

  • 메모리와 I/O가 연속된 어드레스 영역에 할당되기 때문에 I/O가 차지하는 만큼 메모리 용량은 감소한다.
  • CPU의 입장에서는 메모리와 I/O가 동일한 외부기기로 간주되므로 이들을 액세스하기 위한 제어신호는(read)와(write) 신호뿐이다.
  • 소프트웨어적으로도 메모리에 대한 데이터의 액세스나 I/O에 대한 데이터의 입출력이 동일한 것으로 간주되므로 load나 store 명령에 의해 수행된다.
  • 컴파일러의 최적화를 방지를 위해 I/O 영역 변수는 volatile로 선언해야 한다.
  • RISC, 임베디드 시스템에서 주로 사용한다. (ex. ARM)
  • 포트 입출력 구현 시, 복잡성이 사라지기 때문에 하드웨어 구성이 간단하지만 주소나 데이터 버스를 많이 사용하게 된다.

 

 

I/O Mapped I/O

메모리와 입출력의 주소 공간을 분리하여 접근 하는 방식

 

  • 메모리와 I/O가 별개의 어드레스 영역에 할당되기 때문에 I/O를 사용하더라도 메모리 용량은 감소하지 않는다.
  • CPU의 입장에서는 메모리와 I/O 구분하여 취급해야 하므로, 이들을 액세스하기 위한 제어신호는 (read)와(write) 신호 이외에(memory request)나(I/O request) 등과 같은 구분신호가 필요하다.
  • 소프트웨어적으로도 메모리에 대한 데이터의 액세스와 I/O에 대한 데이터의 입출력이 서로 다른 것으로 간주되므로, 메모리의 액세스는 load나 store 명령에 의해 수행되고 I/O의 입출력은 input이나 output 명령에 의해 수행된다.
  • 주로 인텔 계열 프로세서(x86)에서 채용된다.
  • 하드웨어 구성이 비교적 복잡하다.

 

참고 :

https://do-rang.tistory.com/76

https://shinluckyarchive.tistory.com/237

https://code-lab1.tistory.com/204