2009. 5. 3. 00:34
Embedded System/Embedded Linux
임베디드 리눅스 시스템에서 볼 수 있는 세 가지 형태의 주소가 있다.
- 물리 주소(혹은 CPU가 변환하지 않는 주소) : 이 주소는 실제 메모리 버스상에서 사용되는 주소이다.
- 가상 주소(혹은 CPU가 변환하는 주소) : 이 주소는 CPU가 올바른 주소 영역으로 인식하는 영역이다. 예를 들면 커널에서 주로 사용되는 메모리 할당자인 kmalloc() 함수는 가상 주소를 반환한다. 이 가상 주소는 MMU에 의해 물리 주소로 변환된다.
- 버스 주소 : 이 주소는 CPU 외의 장치들에서 사용되는 메모리 주소이며, 버스의 종류에 따라 주소 영역이 달라질 수 있다.
시스템의 메모리 맵을 구성하기 위한 원칙은 다음과 같은 사항들로 나누어질 수 있다.
- 프로세서 메모리 맵 : 이것은 제일 먼저 생성해야하는 메모리 맵이다. 이것은 CPU가 (사용자 공간과 커널 공간 등의) 여러 주소 공간을 처리하는 방식과 다양한 메모리 영역 내에 보드상의 각 장치들의 메모리 관리 정책을 결정한다.
- 보드 메모리 맵 : 일단 프로세서 메모리 맵이 구성되면 다음으로 프로세서 메모리 영역 내에 보드상의 각 장치들에 대한 메모리 맵을 구성해야 한다. 이것은 하드웨어와 버스 컨트롤러에 대한 이해가 요구된다.
- 소프트웨어 메모리 맵 : 다음으로는 부트로더나 리눅스 커널과 같은 소프트웨어들에 대한 메모리 맵을 구성해야 한다. 리눅스 커널은 스스로 자신의 메모리 맵을 구성하고 코드나 힙과 같은 다양한 커널 섹션들이 위치할 장소를 결정한다.
- 리눅스 커널 레이아웃 - 링커 스크립트
- 부트 메모리 할당자
- 가상 주소 공간상에 메모리와 IO 매핑 생성
- 커널에 의한 메모리 할당 구역(zone) 생성
※ 출처 : ITC "임베디드 리눅스 시스템 설계와 개발"