본문 바로가기

무언가 만들기 위한 지식/ARM Processor

Memory Mapped I/O


<Memory Mapped I/O 로 구성된 메모리 구조 예>

CPU와 입출력 기기를 접속하는 방법에는 크게 두가지가 있다.
첫번째는 Memory Mapped I/O 라는 방식이 있고,
두번째로 I/O Mapped I/O 가 존재한다.

이 두가지 방식의 차이점 및 각 방식의 특징을 알아보자

Memory Mapped I/O방식은 메모리와 I/O가 하나의 연속된 어드레스영역에 할당된다. 따라서 I/O가 차지하는 만큼 메모리 용량은 감소한다. CPU입장에서는 메모리와 I/O가 동일한 외부기기로 간주되므로 이들을 액세스 하기위하여 같은 신호를 사용한다.(read/write) 또한 소프트웨어적으로도 메모리에 대한 엑세스나 I/O에 대한 데이터 입출력이 동일한 것으로 간주되므로 Load나 Store 명령에 의해 수행된다.
(대표적인 프로세서 : ARM, MIPS, PowerPC, M68K)
위 방식의 가장 큰 장점은 포트 입출력을 구현할 때 부수적인 복잡성이 없어지기 때문에 CPU 내부적으로 로직이 덜 필요하고, 이는 더 저렴하고 빠르고 쉬운 CPU를 만들 수 있게 한다. 이 점이 RISC가 추구하는 바와 같다. 이러한 특징은 임베디드 시스템 구현시 장점으로 적용한다.
하지만 주소와 데이터 버스를 많이 사용하게 되어, 메인 메모리에 접근하는 것보다 매핑된 장치에 접근하는 것이 더 느리다.

※ 사용시 I/O영역 변수는 volatile 타입으로 선언해야 한다. (컴파일러의 최적화 방지)
    I/O영역은 Non-cacheable로 설정해야 한다. (캐쉬메모리로 접근할경우 변경된 내용을 못 가져올 수 있다.)


I/O Mapped I/O 는 메모리와 I/O가 별개의 어드레스 영역에 할당된다. 따라서 I/O를 사용하더라도 메모리 용량은 감소하지 않는다. CPU의 입장에서는 메모리와 I/O를 구분하여 취급해야 하므로 이들을 액세스하기 위해서는 RD, WR 신호 이외에 추가적으로 I/O에 접근하기 위한 신호가 필요하다. 소프트웨어 적으로도 메모리에 대한 데이터의 액세스와 I/O에 대한 데이터의 입출력이 서로 다른 것으로 간주됭 메모리에 대한 엑세스는 Load/Store에 의해 수행되고 I/O의 입출력은 Input이나 Output 명령에 의해 수행된다.
(주로 Intel 계열의 프로세서에서 사용 한다. x86)
이 방식의 가장 큰 장점은 어드레싱 능력이 제한된 CPU를 사용할 때이다. 입출력 접근을 메모리 접근과 분리하기 때문에 메모리용으로 주소영역 전체를 사용할 수 있다. 또한 어셈블리어상에서 소스를 볼때 입출력 수행 루틴을 알아보기 쉽다.

참고로 ARM Processor는 임베디드 시스템상의 프로세서로 RISC구조이며 Memory Mapped I/O(MMIO)방식을 취하고 있다.
ARM Assembler나 c로 작성할때 실제로 메모리 주소를 포인터로 잡아서 값에 접근하는 모습을 볼 수 있다. 특히 어셈블러상에서 in/out과 같은 i/o port 접근 명령어가 따로 존재하지 않고, 일반 메모리에 대한 접근인 ld/st 명령어를 사용한다. 어떻게 보면 이점이 작성시 더 편리한 듯 싶었다.

'무언가 만들기 위한 지식 > ARM Processor' 카테고리의 다른 글

SOC(System On Chip)  (0) 2010.02.20
DMA와 MMU  (0) 2010.02.20
CISC/RISC  (0) 2010.02.20
MicroProcessor  (0) 2010.02.19
About ARM Processor & Develop Tool  (0) 2010.02.19