본문 바로가기
시스템 반도체/Arm

Arm Memory Map ( 메모리 맵, 메모리 공간 분할, I/O )

by 전컴반 2022. 4. 7.
반응형
I/O

 

CPU는 어떻게 I/O device의 정보를 얻고 변경할까? 

메인 메모리에선 ldr, str과 같은 명령어를 사용하여 정보를 얻고 업데이트하는 것처럼 I/O 장치에서는 어떻게 정보를 얻는지 궁금증이 생긴다.

 

Arm에선 메모리든, I/O 장치든 모두 같은 명령어를 사용한다. 무슨 말이냐 하면, I/O 장치에 접근할 때도 메모리 접근 명령어와 마찬가지로 ldr, ldm을 사용하고, 업데이트할 때도 str, stm을 사용한다.

 

어떻게 가능할까?? 바로 Memory map을 이용하기 때문에 가능하다.

 

Memory Map 

 

Arm CPU에서 32bit를 제공한다고 하면, 메모리 공간은 2의 32승 byte의 공간을 가진다. 말 그대로 공간이다. 어떤 것도 배정되지 않은 빈 공간을 가진다. 이 공간에 메인 메모리와 여러 I/O를 설정할 수 있다.

 

예를 들어보자,

4GB를 4 등분하여 각각 1GB를 지정한다고 하자. 4등분 했기 때문에 각각의 위치를 지정하는 비트가 필요하다. 그러니 00, 01, 10, 11로 공간의 구분이 필요하다. 즉 32bit 중에 위치를 나타내는 2bit가 필요하다는 의미다. 그러니 30bit만 가지고 표현을 해야 한다.

 

제일 아래 공간에 메인 메모리로 설정한다고 해보자, 그렇다면 시작은 0x0000_0000이고, 마지막 주소는 0x3FFF_FFFF이다. 3은 0011이기 때문이다. 정리하면 제일 상위 2bit가 00일 때는 Memory, 11일 때는 GPIO와 같이 설정할 수 있다. 

 

이런 식으로 메모리 공간에서 실제 메모리 공간을 지정하는 것을 memory map이라고 한다.

 

 

이렇기 때문에 결국 메모리 접근이나, I/O장치의 접근이다. 결국은 동일한 메모리 공간에 존재하기 때문에 같은 메모리 접근 명령어를 사용할 수 있다. (intel에선 I/O space를 따로 제공했었다.)

반응형

댓글