핵심 인사이트 (3줄 요약)

  1. 본질: RISC-V PMP (Physical Memory Protection)는 머신 모드 (M-mode) 소프트웨어가 하위 특권 모드 (S-mode, U-mode)의 물리 메모리 접근 권한을 제한하여 시스템의 신뢰 경계를 물리적으로 강제하는 하드웨어 보안 메커니즘이다.
  2. 가치: MMU (Memory Management Unit)가 활성화되기 전이나 가상화 기능이 없는 임베디드 환경에서도 리소스 격리(Isloation)를 제공하며, 설정 레지스터의 락 (Lock) 비트를 통해 머신 모드 자체의 실수나 공격까지 방어한다.
  3. 융합: 보안 마이크로커널 및 TEE (Trusted Execution Environment)의 기반 기술로 활용되며, 주소 매칭 방식 (TOR, NA4, NAPOT)의 조합을 통해 파편화된 메모리 영역을 효율적으로 보호한다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: RISC-V PMP (Physical Memory Protection)는 RISC-V 프로세서 아키텍처에서 제공하는 물리 메모리 보호 기술로, 각 하트 (Hart, Hardware Thread)마다 독립적으로 구성된다. 머신 모드 (Machine Mode)에서 구성 레지스터 (pmpcfg)와 주소 레지스터 (pmpaddr)를 설정하여 특정 물리 주소 범위에 대해 읽기(R), 쓰기(W), 실행(X) 권한을 세밀하게 제어한다.

  • 필요성: 가상 메모리 시스템이 없는 소형 IoT 장치나 실시간 운영체제 (RTOS, Real-Time Operating System) 환경에서는 사용자 애플리케이션의 버그가 시스템 전체 메모리를 오염시킬 위험이 크다. PMP는 이러한 환경에서 최소한의 하드웨어 비용으로 '샌드박스'를 구축하여 시스템 안정성을 보장한다. 또한 하이퍼바이저 환경에서도 부팅 초기 단계의 물리 메모리 오염을 막는 필수 안전장치 역할을 수행한다.

  • 💡 비유: PMP는 "박물관의 전시관 유리벽"과 같다. 관람객(S/U 모드)이 전시품(메모리)을 볼 수는 있지만(R), 만지거나(W) 가져갈 수 없도록 투명한 벽을 세우는 것과 같다. 박물관 관리자(M-mode)만이 이 유리벽을 설치하고 제거할 수 있는 권한을 가진다.

  • 등장 배경:

    1. 임베디드 보안 강화: 기존 MCU 환경에서는 특권 모드 구분이 모호하여 단일 루틴의 실패가 전체 시스템 셧다운으로 이어지는 경우가 많았다.
    2. RISC-V의 모듈형 구조: MMU 없이도 보안을 유지해야 하는 가벼운 코어 설계 철학에 따라, 필수 보안 기능으로 PMP가 아키텍처에 내장되었다.
    3. TEE (Trusted Execution Environment) 구현: 하드웨어적으로 완전히 격리된 보안 영역을 생성하기 위해, 가상 주소가 아닌 물리 주소 레벨의 직접적인 통제가 필요해졌다.

PMP가 물리 메모리 공간을 어떻게 여러 영역(Regions)으로 나누어 보호하는지 시각화하면 다음과 같다. 우선순위 규칙에 따라 가장 낮은 번호의 PMP 항목이 적용되는 특성을 가진다.

  ┌───────────────────────────────────────────────────────────────────────┐
  │                 PMP 물리 메모리 영역 분할 개념도                      │
  ├───────────────────────────────────────────────────────────────────────┤
  │                                                                       │
  │  [물리 메모리 주소 공간 (Physical Address Space)]                     │
  │  0xFFFFFFFF ┌──────────────────────────────┐                          │
  │             │   Unprotected (Default)      │  ◀─ 매칭 안됨            │
  │             ├──────────────────────────────┤                          │
  │             │   PMP Entry 2 (Read-Only)    │  ◀─ Static Data          │
  │             ├──────────────────────────────┤                          │
  │             │   PMP Entry 1 (Read/Write)   │  ◀─ Stack/Heap           │
  │             ├──────────────────────────────┤                          │
  │             │   PMP Entry 0 (Execute-Only) │  ◀─ Code Section         │
  │  0x00000000 └──────────────────────────────┘                          │
  │                                                                       │
  │  * 동작 원리:                                                         │
  │  1. 접근 주소가 0번부터 순차적으로 검사됨                             │
  │  2. 가장 먼저 매칭된 항목의 권한(R/W/X) 적용                          │
  │  3. 어떤 항목에도 매칭되지 않으면 M-mode 외에는 접근 거부             │
  └───────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] RISC-V PMP는 최대 16개(최신 규격에 따라 확장 가능)의 엔트리를 제공한다. 위 그림처럼 메모리를 용도별로 나누어 0번 엔트리에는 실행 권한만 부여하여 코드 영역을 보호하고, 1번에는 데이터 쓰기 권한을 주는 식이다. 여기서 중요한 것은 '우선순위(Priority)'다. 만약 주소 범위가 겹친다면 번호가 낮은 엔트리가 승리한다. 또한, M-mode 소프트웨어가 실수로 영역 설정을 빠뜨린 주소 공간(Default 영역)은 보안을 위해 S/U 모드에서 접근이 원천 차단된다. 이는 "명시되지 않은 것은 모두 금지한다"는 보안의 기본 원칙을 충실히 따르는 구조다.

  • 📢 섹션 요약 비유: 건물 전체에 각기 다른 출입 권한이 걸린 여러 개의 문을 순서대로 배치하여, 첫 번째 문에서 권한이 확인되면 그 즉시 통과 여부를 결정하는 시스템과 같습니다.

Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

구성 요소

요소명전체 명칭 (Full Name)역할내부 동작비유
PMPCFGPMP Configuration Register각 엔트리의 권한 및 모드 설정8비트 단위로 L, A, X, W, R 비트 관리도어락 설정 버튼
PMPADDRPMP Address Register보호할 물리 메모리의 경계 주소 저장A 모드에 따라 주소 해석 방식 변경구역 경계선
L BitLock Bit설정 고정 및 M-mode 권한 제한한번 설정 시 리셋 전까지 변경 불가일회용 봉인 씰
A FieldAddress Matching Mode주소 범위를 계산하는 알고리즘 선택TOR, NA4, NAPOT 중 하나 선택경계선 측정 도구
ExceptionStore/Load/Instruction Fault권한 위반 시 발생하는 하드웨어 트랩CPU 파이프라인 중단 및 M-mode 전이경보 사이렌

PMPCFG 레지스터 구조 및 권한 제어

PMP 설정은 pmpcfg0~pmpcfg3 레지스터(RV32 기준)에 저장된다. 각 레지스터는 4개의 엔트리 설정을 포함하며, 1개 엔트리는 8비트로 구성된다.

  ┌──────────────────────────────────────────────────────────────────────┐
  │              PMPCFG 엔트리 비트 구조 (8-bit)                         │
  ├──────────────────────────────────────────────────────────────────────┤
  │                                                                      │
  │    7      6      5      4      3      2      1      0                │
  │  ┌───┬──────┬──────┬──────────┬──────┬──────┬──────┐                 │
  │  │ L │  0   │  0   │    A     │  X   │  W   │  R   │                 │
  │  └───┴──────┴──────┴──────────┴──────┴──────┴──────┘                 │
  │                                                                      │
  │  - R/W/X: 읽기, 쓰기, 실행 권한 (1=허용, 0=거부)                     │
  │  - A (Address Matching):                                             │
  │    00: OFF (비활성)                                                  │
  │    01: TOR (Top of Range) - 이전 엔트리와 현재 엔트리 사이 범위      │
  │    10: NA4 (Naturally Aligned 4-byte)                                │
  │    11: NAPOT (Naturally Aligned Power-of-Two)                        │
  │  - L (Lock):                                                         │
  │    1=설정 고정 및 M-mode에도 권한 적용 (보안 강화)                   │
  └──────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] PMPCFG의 각 비트는 물리적 차단벽의 속성을 정의한다. 특히 L (Lock) 비트는 PMP의 강력한 보안성을 상징한다. 일반적으로 M-mode는 모든 권한을 가진 절대자이지만, L=1이 설정되면 M-mode 조차도 해당 PMP 엔트리가 허용한 권한 내에서만 메모리에 접근할 수 있다. 이는 M-mode에서 동작하는 펌웨어에 취약점이 생겨 임의의 메모리 쓰기를 시도하더라도, 하드웨어가 이를 차단할 수 있음을 의미한다. A 필드는 주소를 어떻게 해석할지 결정하는데, 가장 유연한 방식은 TOR이지만 레지스터를 2개 소모하는 단점이 있어, 효율적인 범위를 설정할 때는 NAPOT 방식을 주로 사용한다.


주소 매칭 모드: TOR vs NAPOT

PMP는 한정된 레지스터 자원으로 복잡한 메모리 범위를 표현하기 위해 여러 매칭 방식을 제공한다. 특히 TOR와 NAPOT의 차이를 이해하는 것이 실무 설계의 핵심이다.

  ┌────────────────────────────────────────────────────────────────────────┐
  │                 PMP 주소 매칭 메커니즘 비교                            │
  ├────────────────────────────────────────────────────────────────────────┤
  │                                                                        │
  │  [TOR: Top of Range]            [NAPOT: Nat. Aligned Power of 2]       │
  │                                                                        │
  │   pmpaddr(i-1) ───┐              pmpaddr(i) 속의 0비트 개수로          │
  │                   │ 범위 형성      범위 크기 결정 (Mask 방식)          │
  │   pmpaddr(i)   ───┘                                                    │
  │                                                                        │
  │  ┌───────────────┐               ┌───────────────┐                     │
  │  │   Protected   │               │   Protected   │                     │
  │  │    Region     │               │    Region     │                     │
  │  └───────────────┘               └───────────────┘                     │
  │  임의의 시작/끝 주소 설정 가능      2^N 크기의 정렬된 범위만 가능      │
  │  (레지스터 2개 소요)               (레지스터 1개로 충분)               │
  └────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] TOR (Top of Range) 방식은 현재 엔트리(pmpaddr[i])를 상한선으로, 이전 엔트리(pmpaddr[i-1])를 하한선으로 삼는다. 이는 주소 경계가 복잡할 때 매우 유용하지만 엔트리를 2개 소모하므로 자원이 낭비될 수 있다. 반면 NAPOT (Naturally Aligned Power-of-Two)은 주소 레지스터 하위 비트에 연속된 1과 마지막 0을 배치하여 범위의 크기를 인코딩한다. 예를 들어 하위 비트가 ...0111이면 16바이트 범위를 의미한다. 이 방식은 레지스터 1개만으로 보호 영역을 정의할 수 있어 효율적이지만, 반드시 주소 범위가 자신의 크기에 맞춰 정렬(Alignment)되어 있어야 한다는 제약이 있다. 실무에서는 OS 커널이나 스택처럼 크기가 정형화된 영역은 NAPOT을, 파편화된 데이터 영역은 TOR를 혼용하여 설계한다.

  • 📢 섹션 요약 비유: TOR가 원하는 지점 어디든 줄자를 늘려 범위를 재는 방식이라면, NAPOT은 정해진 크기의 타일(2의 거듭제곱)을 격자에 맞춰 배치하는 방식과 같습니다.

Ⅲ. 융합 비교 및 다각도 분석

심층 기술 비교: PMP vs MMU

비교 항목PMP (Physical)MMU (Virtual)
대상 주소물리 주소 (PA)가상 주소 (VA)
동작 시점PA 발생 직후 (항시 동작)가상 주소 사용 시 (S/U 모드 주력)
제어 주체머신 모드 (M-mode)슈퍼바이저 모드 (S-mode, OS)
자원 소모고정된 하드웨어 레지스터메모리 상의 페이지 테이블 (RAM 소모)
보안 강도하드웨어적 강제, 우회 불가페이지 테이블 오염 시 우회 가능

PMP는 하드웨어 비용이 적고 반응 속도가 빠르기 때문에, MMU가 탑재된 고성능 프로세서에서도 OS 커널이 손상되었을 때의 '최후의 방어선'으로 PMP를 병행 사용한다.

과목 융합 관점: 가상화 및 임베디드 보안

  • 임베디드 (Embedded Systems): 실시간성(Real-time)이 중요한 환경에서 MMU의 주소 변환 지연(Translation Overhead) 없이 메모리 보안을 유지할 수 있게 해준다.
  • 보안 (Security): L 비트와 우선순위 규칙을 활용하여 "보안 모니터" 영역을 물리 메모리 최하단에 배치하고, 그 상위 영역에 대해서만 하위 모드의 접근을 허용함으로써 'M-mode 루트킷' 공격을 원천 차단한다.
  ┌─────────────────────────────────────────────────────────────┐
  │                PMP 권한 결정 의사결정 트리                  │
  ├─────────────────────────────────────────────────────────────┤
  │                                                             │
  │   [메모리 액세스 요청 (Addr, Mode)]                         │
  │                │                                            │
  │          ┌─────┴─────┐                                      │
  │          ▼           ▼                                      │
  │     [M-mode인가?]   [S/U-mode인가?]                         │
  │          │           │                                      │
  │    ┌─────┴──┐    ┌───┴───────────────────┐                  │
  │    ▼        ▼    ▼                       ▼                  │
  │ [L=1인   [L=0인 [매칭 엔트리           [매칭 안됨]          │
  │  엔트리]  엔트리]  존재?]                   │               │
  │    │        │      │                       ▼                │
  │  PMP권한  무조건  PMP권한               접근 거부!          │
  │  체크     허용    체크                  (Access Fault)      │
  └─────────────────────────────────────────────────────────────┘

[다이어그램 해설] PMP의 접근 제어 로직은 모드와 L비트 설정에 따라 달라진다. M-mode의 경우, L비트가 0이면 PMP의 제약을 받지 않고 자유롭게 접근한다(단, 매칭되는 엔트리가 있을 때만). 하지만 L비트가 1이면 M-mode 조차도 PMP 설정 권한을 따라야 한다. 반면 S/U 모드는 어떤 경우에도 PMP 설정 범위를 벗어날 수 없으며, 매칭되는 엔트리가 하나도 없다면 보안을 위해 접근이 거부된다. 이러한 계층적 권한 구조는 "권한의 분리(Separation of Privilege)"를 하드웨어 수준에서 완성시킨다.

  • 📢 섹션 요약 비유: 일반 시민(S/U 모드)은 허가된 구역만 다닐 수 있고, 관리자(M-mode)는 마스터키가 있어 어디든 가지만 스스로 잠근 문(L=1)에는 들어가지 못하게 하여 보안 사고를 예방하는 것과 같습니다.

Ⅳ. 실무 적용 및 기술사적 판단

실무 시나리오

  1. 시나리오 — 부트 로더 보호: 시스템 부팅 초기 단계에서 머신 모드 펌웨어가 PMP를 설정하여 부트 ROM 영역을 'Read/Execute'로 고정하고 L 비트를 세팅한다. 이후 로드되는 운영체제가 취약점을 통해 부트 로더를 변조하려 해도 물리적으로 쓰기가 차단되어 '신뢰의 뿌리(Root of Trust)'가 보호된다.
  2. 시나리오 — 주변 장치(I/O) 접근 제어: RISC-V는 Memory-mapped I/O를 사용하므로, 특정 하드웨어 레지스터 주소 범위를 PMP 엔트리로 등록하여 특정 애플리케이션만 직접 I/O를 조작하도록 제한할 수 있다. 이는 장치 드라이버 격리(Driver Isolation)를 실현한다.
  3. 시나리오 — 스택 오버플로우 방어: 사용자 스택 영역의 하단에 권한이 없는 'Guard Page'를 PMP로 설정한다. 스택이 넘쳐서 이 영역을 침범하는 순간 하드웨어 예외가 발생하여, 인접한 데이터가 파괴되기 전에 시스템을 안전하게 중단시킬 수 있다.

도입 체크리스트 및 안티패턴

PMP를 설계에 반영할 때 엔지니어가 반드시 검토해야 할 리스트다.

  ┌─────────────────────────────────────────────────────────────┐
  │                PMP 설계 및 검증 체크리스트                  │
  ├─────────────────────────────────────────────────────────────┤
  │                                                             │
  │  [ ] 엔트리 개수가 보호할 영역 수보다 충분한가? (최소 8개)  │
  │  [ ] TOR 방식 사용 시 주소 정렬(Alignment) 오류가 없는가?   │
  │  [ ] NAPOT 사용 시 2^N 정렬 조건이 하드웨어와 일치하는가?   │
  │  [ ] L비트 설정 전, M-mode 자신의 스택/데이터 영역 확보?    │
  │  [ ] 예외 처리 루틴(Trap Handler)이 PMP 영역 외부에 위치?   │
  └─────────────────────────────────────────────────────────────┘

[다이어그램 해설] PMP 설정 시 가장 치명적인 실수는 '스스로를 가두는 것'이다. M-mode에서 특정 영역에 L비트를 걸고 쓰기 권한을 제거했는데, 그곳에 M-mode의 스택이 포함되어 있다면 즉시 시스템은 패닉에 빠진다. 따라서 체크리스트의 4번 항목처럼, M-mode를 위한 최소한의 작업 공간을 먼저 확보하거나 M-mode 전용 보호 영역을 가장 먼저 설정하는 전략이 필요하다. 또한 예외 처리기 자체가 PMP에 의해 실행이 막혀 있다면 보안 위반 시 복구가 불가능하므로, 트랩 핸들러 주소는 항상 실행 가능(X) 상태여야 한다.

안티패턴

  • 우선순위 혼동: 번호가 높은 엔트리에 넓은 범위를 허용하고, 번호가 낮은 엔트리에 좁은 범위를 금지하면 의도한 대로 동작한다. 하지만 반대로 설정하면 넓은 범위 허용이 우선 적용되어 금지 구역이 뚫리게 된다.

  • 영역 파편화 (Fragmentation): 16개뿐인 엔트리를 너무 잘게 쪼개서 사용하다가, 정작 중요한 커널 영역 보호를 위한 엔트리가 부족해지는 경우. (NAPOT 활용을 극대화해야 함)

  • L비트 오남용: 모든 엔트리에 락을 걸어버리면 동적인 메모리 권한 변경이 불가능해져, OS의 동적 메모리 할당 기능을 마비시킬 수 있다.

  • 📢 섹션 요약 비유: 줄자를 잘못 읽어 경계선을 1cm만 틀리게 그어도(주소 설정 오류), 옆집 마당(보안 영역)을 침범하는 것과 같은 위험이 따르므로 정밀한 계산이 필수입니다.


Ⅴ. 기대효과 및 결론

도입 효과 분석

구분도입 전도입 후개선 효과
보안 신뢰성소프트웨어 기반 격리 (우회 가능)하드웨어 기반 물리 격리 (우회 불가)보안 강도 극대화
시스템 안정성앱 오류가 시스템 전체 중단 유발오류 발생 즉시 해당 앱만 차단고신뢰성 시스템 구현
자원 효율성MMU 운영을 위한 큰 메모리 소모몇 개의 CSR 레지스터만 사용초소형/저전력 장치 최적화
개발 복잡도복잡한 가상화 기술 필요단순 레지스터 설정으로 구현개발 기간 단축 및 검증 용이

미래 전망 및 표준

  • ePMP (Enhanced PMP): M-mode 자체를 더 세밀하게 격리하기 위해, M-mode 내에서도 권한을 강제하는 ePMP 규격이 확산되고 있다.
  • 가상화 확장 (H-extension): 하이퍼바이저 모드가 추가됨에 따라, 2단계 주소 변환(2-stage Translation)과 PMP가 결합하여 가상 머신 간의 물리 메모리 격리를 더욱 공고히 할 것이다.

RISC-V PMP는 단순하지만 강력한 물리적 장벽이다. 오픈 아키텍처인 RISC-V가 다양한 보안 칩 시장을 장악할 수 있었던 비결은, 바로 이 PMP와 같은 하드웨어 기반 보안 메커니즘이 군더더기 없이 설계되어 있기 때문이다.

  • 📢 섹션 요약 비유: 작지만 단단한 울타리를 꼼꼼하게 치는 것이, 크고 복잡한 성벽을 대충 쌓는 것보다 훨씬 안전하다는 것을 증명하는 기술입니다.

📌 관련 개념 맵 (Knowledge Graph)

개념 명칭관계 및 시너지 설명
M-mode (Machine Mode)PMP를 설정하고 관리하는 최상위 특권 모드이다.
NAPOT (Naturally Aligned Power-of-Two)1개의 레지스터로 효율적인 메모리 범위를 지정하는 PMP의 핵심 주소 매칭 방식이다.
CSR (Control and Status Register)PMP 설정값이 저장되는 프로세서 내부 특수 레지스터 군이다.
TEE (Trusted Execution Environment)PMP를 활용해 하드웨어적으로 격리된 보안 실행 환경을 구축할 수 있다.
Memory-mapped I/OPMP는 메모리뿐만 아니라 이 방식으로 연결된 주변 장치 접근 제어에도 사용된다.

👶 어린이를 위한 3줄 비유 설명

  1. PMP는 컴퓨터 안에 사는 경비원 아저씨예요. 아저씨는 "여기는 들어가면 안 돼!"라고 적힌 종이(설정값)를 들고 메모리 복도를 지키고 있어요.
  2. 나쁜 프로그램이 금지된 방에 들어가려고 하면, 아저씨가 바로 사이렌을 울려서 막아준답니다.
  3. 아저씨는 아주 힘이 세서, 컴퓨터 대장님(M-모드)이 스스로 만든 규칙도 꼭 지키게 만들어요!