운영체제 아주 쉬운 세가지 이야기 6주차 (메모리 가상화 2-1)

2025. 10. 14. 20:05개념 공부

Base–Bounds와 Segmentation의 차이 완전 정리

1️⃣ 기본 개념

Base–Bounds(동적 재배치)는 프로세스 전체를 하나의 덩어리로 보고, 시작 주소(Base)와 크기(Limit)로 관리합니다.
반면 Segmentation(세그멘테이션)은 프로그램을 여러 논리적 구역(세그먼트)으로 나누어 각 구역마다 Base와 Limit을 따로 둡니다.

Base–Bounds
 ┌──────────────────────┐
 │    프로세스 전체     │
 └──────────────────────┘
     Base     Limit

Segmentation
 ┌────────────┐  ← 코드 세그먼트 (Base0, Limit0)
 │   Code     │
 ├────────────┤  ← 데이터 세그먼트 (Base1, Limit1)
 │   Data     │
 ├────────────┤  ← 스택 세그먼트 (Base2, Limit2)
 │   Stack    │
 └────────────┘

2️⃣ 주소 변환 방식

  • Base–Bounds: 가상주소 VA가 주어지면 물리주소는 PA = Base + VA
  • Segmentation: (세그먼트번호, 오프셋) 쌍으로 구성되어 PA = Base[seg] + Offset

예를 들어, Heap 세그먼트(Base=34KB, Size=3KB)에서 VA=4200이라면:

Heap 오프셋 = 4200 - 4096 = 104 → PA = 34KB + 104 = 34920

3️⃣ 보호와 공유 측면

구분 Base–Bounds Segmentation
보호(Protection) 전체 범위 초과 시 차단 (단순) 세그먼트별로 읽기/쓰기/실행 권한 부여 가능
공유(Sharing) 어렵다 (전체를 통째로 공유해야 함) 코드 세그먼트 등 특정 부분만 공유 가능

4️⃣ 단편화(메모리 낭비 양상)

  • Base–Bounds → 내부 단편화
    프로세스 전체를 한 덩어리로 배치하므로 실제로 쓰지 않는 공간까지 포함될 수 있음.
  • Segmentation → 외부 단편화
    세그먼트들이 가변 크기라서 메모리 사이사이에 ‘구멍(hole)’이 생길 수 있음.

5️⃣ 성장과 확장성

  • Base–Bounds: 프로세스 크기가 커지면 더 큰 연속 공간이 필요 → 재배치 필요.
  • Segmentation: 힙/스택 세그먼트를 따로 두면 필요한 부분만 확장 가능(단, 여전히 연속 공간은 확보해야 함).

6️⃣ 하드웨어 복잡도

  • Base–Bounds: 단순한 경계 검사 + 더하기 1회 → 빠르고 구현 쉬움.
  • Segmentation: 세그먼트 선택 + 경계 검사 + 더하기 → 복잡하지만 유연.

7️⃣ 요약 비교표

항목 Base–Bounds Segmentation
주소 변환 단위 프로세스 전체 세그먼트별 (코드/데이터/스택 등)
레지스터 Base 1개 + Limit 1개 세그먼트마다 Base[i], Limit[i]
보호 단위 프로세스 전체 세그먼트별 (세밀한 보호)
공유 가능성 낮음 높음 (코드 세그먼트 공유 가능)
단편화 내부 단편화 외부 단편화
확장성 크기 변경 시 재배치 필요 세그먼트별 독립적 성장 가능
하드웨어 복잡도 낮음 높음

 핵심 요약

  • Base–Bounds: “한 덩어리, 단순한 보호”
  • Segmentation: “구조적, 세밀한 보호/공유, 하지만 단편화 문제 존재”
  • Paging: “균등 크기 블록으로 단편화 해결 → 현대 가상 메모리의 핵심”