307. 메모리 보호 (Memory Protection)

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

  1. 본질: 메모리 보호 (Memory Protection)는 각 프로세스가 자신에게 할당된 메모리 영역에만 접근할 수 있도록 제한하고, 다른 프로세스나 운영체제(OS)의 핵심 영역을 무단 침범하지 못하도록 하드웨어가 감시하는 제어 기술이다.
  2. 가치: 한 프로그램의 버그나 악의적인 공격이 시스템 전체의 붕괴(System Crash)로 이어지는 것을 원천 차단하여, 현대 멀티태스킹 환경의 **안정성(Stability)과 보안성(Security)**을 지탱하는 최후의 보루 역할을 한다.
  3. 융합: 가상 메모리의 페이지 테이블 엔트리(PTE)에 부착된 **보호 비트(Read/Write/Execute)**와 CPU의 **실행 권한 레벨(Ring)**이 융합되어, 실시간으로 모든 메모리 접근의 정당성을 판별한다.

Ⅰ. 개요 및 필요성

  • 개념: 운영체제 내부에서 실행되는 여러 프로세스가 서로의 데이터를 엿보거나 파괴하는 것을 방지하기 위해 메모리 접근 권한을 관리하는 기법이다. 주소 변환 과정에서 하드웨어(MMU)가 자동으로 권한을 체크한다.

  • 필요성: 초기 컴퓨터는 메모리 보호가 없었다. 사용자 프로그램 하나가 실수로 OS 영역의 값을 0으로 바꾸면 컴퓨터 전체가 즉시 멈췄다. 또한, 해커가 다른 프로그램의 비밀번호가 저장된 메모리를 읽는 것을 막기 위해 각 프로세스 사이에는 넘을 수 없는 '전자 벽'이 반드시 필요했다.

  • 💡 비유: 아파트의 각 세대(프로세스)에 현관문과 열쇠(메모리 보호)가 있는 것과 같습니다. 내 집 안에서는 자유롭게 움직일 수 있지만, 옆집 문을 열려고 시도하면 즉시 경비실(OS)에서 출동하여 강제 퇴거(Segmentation Fault) 시키는 안전 시스템입니다.

  • 등장 배경: 1960년대 멀티프로그래밍 시스템이 등장하면서 여러 사용자가 하나의 컴퓨터를 공유하게 되었고, 이들의 자원 격리를 위해 하드웨어 기반의 Base/Limit 레지스터 기법이 도입된 것이 시초다. 이후 페이징 기술과 결합하여 고도로 세분화된 보호 모델로 진화했다.

┌──────────────────────────────────────────────────────────────┐
│             메모리 보호(Memory Protection)의 다층 감시 체계              │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  [ CPU ] ──▶ [ 가상 주소 + 요청 권한 ]                             │
│                │                                             │
│                ▼                                             │
│      ┌──────────────────┐                                    │
│      │     [ MMU ]      │ ── (권한 위반!) ──▶ [ OS 커널 호출 ]     │
│      │  (보호 비트 체크)  │                      (Exception)     │
│      └──────────────────┘                      (Abort)       │
│                │                                             │
│                ▼                                             │
│      ┌──────────────────┐                                    │
│      │    물리 RAM 접근   │                                    │
│      └──────────────────┘                                    │
│                                                              │
│   * 핵심: "읽기 전용 영역에 쓰기 시도" 또는 "남의 주소 접근" 차단       │
└──────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 박물관의 전시품(메모리)마다 눈에 보이지 않는 레이저 센서(보호 비트)가 설치되어 있습니다. 눈으로 보는 것(Read)은 허용되지만, 손을 대거나(Write) 가져가려 하면 즉시 경보음이 울리며 퇴장 조치되는 것과 같습니다.

Ⅱ. 아키텍처 및 핵심 원리

하드웨어 기반의 3중 보호 메커니즘

  1. 경계 레지스터 (Base & Limit Register):

    • 가장 고전적인 방식이다. CPU가 주소를 낼 때마다 Base <= 주소 < Base + Limit 범위 안에 있는지 하드웨어가 실시간 비교한다. 범위를 벗어나면 즉시 트랩을 발생시킨다.
  2. 페이지 테이블 보호 비트 (Protection Bits):

    • 현대 페이징 시스템의 핵심이다. 각 페이지 엔트리(PTE)마다 3비트의 권한을 부여한다.
    • R (Read): 읽기 가능 여부.
    • W (Write): 쓰기 가능 여부. (예: 코드 영역은 W=0으로 설정하여 변조 방지)
    • X (Execute): 실행 가능 여부. (예: 데이터 영역은 X=0으로 설정하여 해킹 방지)
  3. 권한 레벨 (Privilege Levels / Ring):

    • CPU 자체의 실행 모드다.
    • Ring 0 (커널 모드): 모든 메모리에 접근 가능.
    • Ring 3 (사용자 모드): 오직 자신에게 할당된 가상 메모리 페이지만 접근 가능.

하드웨어-소프트웨어 협동 과정

  • OS: 프로세스를 띄울 때 해당 페이지의 성격(코드/데이터/스택)에 맞춰 페이지 테이블에 보호 비트를 적어준다.

  • 하드웨어(MMU): 매 메모리 접근마다 페이지 테이블을 읽으며, 요청한 명령(STORE 등)이 보호 비트와 충돌하는지 0.1ns 만에 판별한다.

  • 📢 섹션 요약 비유: 사원증(권한 레벨) 등급에 따라 들어갈 수 있는 층이 정해져 있고, 각 사무실 문(페이지)마다 "열람 전용", "수정 가능" 푯말이 붙어있는 철통 보안 빌딩과 같습니다.


Ⅲ. 비교 및 연결

메모리 보호 vs 메모리 격리 (Isolation)

구분메모리 보호 (Protection)메모리 격리 (Isolation)
목적권한 없는 행위 차단 (읽기 전용 등)다른 프로세스의 공간 접근 차단
방법R/W/X 비트 체크가상 주소 공간 분리 (Page Table 분리)
결과Read-only Violation 방지Segmentation Fault 유발

보안 기술과의 결합: NX 비트와 ASLR

  • NX 비트 (No-Execute): 데이터 저장 영역(Stack/Heap)에서는 절대로 코드가 실행되지 않게 막는 하드웨어 보호 비트다. 버퍼 오버플로우 공격을 원천 차단한다.

  • ASLR: 프로그램이 실행될 때마다 메모리 주소를 무작위로 배치하여, 보호 장벽을 뚫으려는 해커가 목표 주소를 찾지 못하게 교란한다.

  • 📢 섹션 요약 비유: 메모리 격리가 "남의 집에 못 들어가게 담장을 쌓는 것"이라면, 메모리 보호는 "내 집 안에서도 가스레인지(위험 자원)는 어른만 만질 수 있게 잠금 장치를 거는 것"입니다.


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

실무 시나리오

  1. C언어의 문자열 상수 수정 시 런타임 에러

    • 코드: char *s = "hello"; s[0] = 'z';
    • 현상: 컴파일은 되지만 실행하면 즉시 Segmentation Fault로 종료된다.
    • 원인: 문자열 상수 "hello"는 메모리의 RODATA(Read-only Data) 섹션에 배치되며, OS는 이 페이지의 보호 비트를 W=0으로 설정한다. s[0] = 'z'를 시도하는 순간 MMU가 권한 위반을 감지하여 프로세스를 죽인 것이다. 실무자는 수정이 필요한 문자열은 char s[] = "hello";와 같이 스택(W=1) 영역에 선언해야 한다.
  2. 멀티코어 환경의 공유 메모리 보안 두 프로세스가 고속 통신을 위해 특정 메모리 영역을 공유할 때. 한쪽은 데이터를 '쓰기'만 하고 다른 쪽은 '읽기'만 해야 한다면, OS는 같은 물리 프레임을 가리키는 두 프로세스의 페이지 테이블에 각각 **[W=1, R=1]**과 **[W=0, R=1]**로 서로 다른 보호 비트를 설정하여 데이터 오염을 방지한다.

도입 체크리스트

  • DEP(데이터 실행 방지) 활성화: 우리 시스템의 OS와 CPU에서 DEP(NX 비트) 기능이 켜져 있는가? 이것 하나만으로도 수많은 보안 취약점을 공짜로 막을 수 있다.

  • 📢 섹션 요약 비유: "왜 자꾸 프로그램이 죽지?"라고 불평하지 마세요. 메모리 보호가 프로그램을 죽이는 이유는, 놔두면 프로그램이 OS까지 다 망가뜨리고 컴퓨터를 폭발(데이터 소실)시킬 것이기 때문입니다. 즉, 프로그램을 죽여서 시스템을 살리는 '긴급 제동 장치'입니다.


Ⅴ. 기대효과 및 결론

정량적 기대효과

  • 시스템 가용성 1,000% 향상: 개별 프로그램의 오류가 전체 시스템으로 전이되지 않으므로, 블루스크린이나 커널 패닉 발생 빈도가 획기적으로 낮아진다.
  • 개발 생산성 증대: 잘못된 주소 접근 시 즉시 에러 위치를 알려주므로, 메모리 버그를 디버깅하는 시간을 수십 배 단축시킨다.

결론

메모리 보호는 현대 운영체제가 프로세스들에게 제공하는 **'민주주의적 질서'**다. 각자가 자신의 영토 안에서는 자유롭지만, 남의 자유(메모리)를 침해하는 순간 하드웨어가 철퇴를 내린다. 이 엄격한 통제 기법이 있기에 우리는 수만 개의 신뢰할 수 없는 앱들을 하나의 컴퓨터 위에서 안심하고 동시에 실행할 수 있는 것이다.

  • 📢 섹션 요약 비유: 메모리 보호는 컴퓨터 세상의 '헌법'입니다. 누구도 법 위에 군림할 수 없으며(Ring 0 제외), 법을 어기는 주소 접근은 즉시 가차 없는 심판(Process Kill)을 받게 됩니다.

📌 관련 개념 맵

개념 명칭관계 및 시너지 설명
PTE (페이지 엔트리)메모리 보호 비트가 실제로 저장되는 최소 단위의 데이터 구조.
MMU보호 비트를 실시간으로 읽고 실행 권한을 판별하는 집행 하드웨어.
Segmentation Fault메모리 보호 장벽을 넘으려다 적발되었을 때 발생하는 대표적 에러.
DEP (NX 비트)실행 권한(X)을 통제하여 보안을 강화하는 메모리 보호의 특수 기술.
커널 모드 (Ring 0)메모리 보호 규칙을 설정하고 관리할 수 있는 유일한 특권 레벨.

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

  1. 메모리 보호는 컴퓨터 안의 여러 프로그램 친구들이 서로의 장난감을 뺏거나 망가뜨리지 못하게 규칙을 정한 거예요.
  2. 내 책상에서 노는 건 괜찮지만, 옆 친구 책상에 있는 일기장을 몰래 읽으려 하면 선생님(OS)이 즉시 달려와서 혼을 내주시죠.
  3. 이 규칙 덕분에 많은 친구가 한 교실에서 놀아도 싸움이 나지 않고 즐겁게 지낼 수 있답니다!