Study/임베디드 | Embedded System

[임베디드시스템] 02. RAM 메모리 구조와 메모리 맵 개요

도엔 2025. 3. 22. 15:07
728x90

1. 임베디드 시스템의 메모리 모델

  • 시스템 수준에서 메모리 구조가 단순함
    • PC나 서버처럼 복잡한 메모리 계층 구조를 가지지 않음
    • 대부분의 임베디드 시스템은 MMU(Memory Management Unit) 가 없거나 비활성화됨
      1. 주소 변환 과정이 없음 → CPU가 물리 주소(Physical Address) 를 직접 사용하여 메모리에 접근
      2. 디버깅과 시스템 제어가 직관적이지만, 메모리 보호 기능이 부족
  • 하드웨어 리소스 제약
    • 메모리 용량이 제한적이며, 고정된 메모리 맵을 사용하는 경우가 많음
    • 효율적인 메모리 사용이 필수적


==========𝔼𝔼𝟚𝟚==========

 

2. 메모리 관리의 중요성

  • OS가 없는 경우 (Bare-metal)
    • 메모리 초기화 및 영역 구분(코드, 데이터, 힙, 스택 등)을 개발자가 직접 정의해야 함
    • 오류 발생 시 보호 기제가 없으므로 시스템이 오작동하거나 멈출 수 있음
  • RTOS 또는 경량 OS 사용 시
    • 일부 메모리 보호 기능 제공 가능 (예: FreeRTOS + MPU)
    • 그러나 일반적인 OS (Linux, Windows) 수준의 보호 및 가상 메모리는 없음
  • 애플리케이션 수준의 주의점
    • 변수, 버퍼 등의 위치와 크기 확인 필요
    • 스택 오버플로우, 힙 충돌 방지에 대한 사전 고려가 필요함


==========𝔼𝔼𝟚𝟚==========

 

3. 메모리 구조

3.1 가상 메모리(Virtual Memory) – 범용 OS에서 사용

  • 각 프로세스는 독립적인 가상 주소 공간을 가진다:
    1. 코드(Code): 실행 명령이 저장됨
    2. 데이터(Data): 초기화된 전역 변수 및 정적 변수
    3. 힙(Heap): 동적 메모리 할당 영역 (malloc, new 등)
    4. 스택(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 메모리 맵을 이해할 때 핵심 포인트

  1. Flash는 프로그램 코드 저장용, 재부팅 후에도 유지됨 (비휘발성).
  2. SRAM은 런타임 데이터 저장용, 휘발성.
  3. 주변장치들은 전용 주소 공간에 매핑, MMIO(Memory Mapped IO) 방식으로 접근.
  4. 시작 주소는 링커 스크립트에서 정의되며, 부트로더/OS는 해당 주소 기준으로 코드 실행을 시작함.
728x90
반응형