Study/임베디드 | Embedded System
[임베디드시스템] 02. RAM 메모리 구조와 메모리 맵 개요
도엔
2025. 3. 22. 15:07
728x90
1. 임베디드 시스템의 메모리 모델
- 시스템 수준에서 메모리 구조가 단순함
- PC나 서버처럼 복잡한 메모리 계층 구조를 가지지 않음
- 대부분의 임베디드 시스템은 MMU(Memory Management Unit) 가 없거나 비활성화됨
- 주소 변환 과정이 없음 → CPU가 물리 주소(Physical Address) 를 직접 사용하여 메모리에 접근
- 디버깅과 시스템 제어가 직관적이지만, 메모리 보호 기능이 부족
- 하드웨어 리소스 제약
- 메모리 용량이 제한적이며, 고정된 메모리 맵을 사용하는 경우가 많음
- 효율적인 메모리 사용이 필수적
==========𝔼𝔼𝟚𝟚==========
2. 메모리 관리의 중요성
- OS가 없는 경우 (Bare-metal)
- 메모리 초기화 및 영역 구분(코드, 데이터, 힙, 스택 등)을 개발자가 직접 정의해야 함
- 오류 발생 시 보호 기제가 없으므로 시스템이 오작동하거나 멈출 수 있음
- RTOS 또는 경량 OS 사용 시
- 일부 메모리 보호 기능 제공 가능 (예: FreeRTOS + MPU)
- 그러나 일반적인 OS (Linux, Windows) 수준의 보호 및 가상 메모리는 없음
- 애플리케이션 수준의 주의점
- 변수, 버퍼 등의 위치와 크기 확인 필요
- 스택 오버플로우, 힙 충돌 방지에 대한 사전 고려가 필요함
==========𝔼𝔼𝟚𝟚==========
3. 메모리 구조
3.1 가상 메모리(Virtual Memory) – 범용 OS에서 사용
- 각 프로세스는 독립적인 가상 주소 공간을 가진다:
- 코드(Code): 실행 명령이 저장됨
- 데이터(Data): 초기화된 전역 변수 및 정적 변수
- 힙(Heap): 동적 메모리 할당 영역 (malloc, new 등)
- 스택(Stack): 지역 변수 및 함수 호출 시 스택 프레임이 생성됨
- MMU 역할:
- 가상 주소 ↔ 물리 주소 변환
- 프로세스 간 메모리 보호
- 페이징(Paging) 및 스와핑(Swapping) 지원
_
3.2 캐시(Cache)와 주 메모리(Main Memory)
- 캐시 계층 구조
- L1 (가장 빠름, 용량 작음) → L2 → L3 → Main Memory
- CPU는 우선 캐시를 통해 데이터 접근, 캐시에 없을 경우 메인 메모리 접근
- Main Memory (RAM)
- 실행 중인 코드와 데이터가 저장되는 공간
- DRAM 기반으로, 휘발성
_
3.3 디스크(Disk)
- SSD/HDD 등 비휘발성 저장장치
- 운영체제가 데이터나 코드를 디스크에서 메모리로 로드
- Swap 영역: RAM이 부족할 때 디스크의 일부를 임시 메모리처럼 사용
-
4. 임베디드 시스템과 범용 시스템의 메모리 차이 비교
항목 | 임베디드 시스템 | 범용 컴퓨터 시스템 |
---|---|---|
주소 방식 | 물리 주소 | 가상 주소 (MMU 통해 변환) |
메모리 보호 | 없음 또는 제한적 | 강력한 보호 기제 (MMU, OS) |
메모리 크기 | 제한적, 수 MB~GB | 수 GB 이상 |
가상 메모리 | 일반적으로 없음 | 기본 제공 |
디스크 스왑 | 없음 | 존재 (Swap 영역) |
==========𝔼𝔼𝟚𝟚==========
5. 실제 임베디드 시스템 메모리 맵 예시
: 실제 메모리 맵 예시는 MCU나 SoC 같은 임베디드 시스템에서 각 메모리 영역(코드, 데이터, 주변장치 등)이 어떤 주소에 매핑되어 있는지를 보여주는 구조도이다. 보통 데이터시트나 레퍼런스 매뉴얼에 나와 있음.
_
5.1 ARM Cortex-M 기반 MCU
주소 범위 | 설명 | 크기 |
---|---|---|
0x0000_0000 ~ 0x1FFF_FFFF | Code 영역 (ROM, Flash) | 최대 512MB |
0x2000_0000 ~ 0x3FFF_FFFF | SRAM (내부 RAM) | 최대 512MB |
0x4000_0000 ~ 0x5FFF_FFFF | Peripheral 영역 (주변장치 레지스터) | 최대 512MB |
0x6000_0000 ~ 0x9FFF_FFFF | 외부 RAM (External RAM) | 최대 1GB |
0xA000_0000 ~ 0xDFFF_FFFF | 외부 장치 (External Device) | 최대 1GB |
0xE000_0000 ~ 0xE00F_FFFF | System Control Space (SCS) – NVIC, SysTick 등 | 1MB |
0xE010_0000 ~ 0xFFFF_FFFF | Private Peripheral Bus (PPB) | 디버깅, 추적 등 |
_
- ex) STM32F103 (Cortex-M3)
주소 | 내용 |
---|---|
0x0800_0000 | Flash 메모리 시작 주소 (코드 저장) |
0x2000_0000 | SRAM 시작 주소 (데이터 저장) |
0x4001_0000 | GPIO 레지스터 (예: GPIOA, GPIOB 등) |
0xE000_ED00 | System Control Block (SCB) |
_
5.2 메모리 맵을 이해할 때 핵심 포인트
- Flash는 프로그램 코드 저장용, 재부팅 후에도 유지됨 (비휘발성).
- SRAM은 런타임 데이터 저장용, 휘발성.
- 주변장치들은 전용 주소 공간에 매핑, MMIO(Memory Mapped IO) 방식으로 접근.
- 시작 주소는 링커 스크립트에서 정의되며, 부트로더/OS는 해당 주소 기준으로 코드 실행을 시작함.
728x90
반응형