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

  1. 본질: 페이징 (Paging)은 가상 주소 공간과 물리 메모리를 같은 크기의 페이지 (Page)·프레임 (Frame)으로 나누어 매핑함으로써, 프로그램에는 연속 공간을 보이게 하고 하드웨어에는 비연속 배치를 허용하는 주소 관리 방식이다.
  2. 가치: 고정 크기 단위로 쪼개면 외부 단편화 (External Fragmentation)를 사실상 제거하고, 운영체제 (Operating System)가 페이지 단위로 적재·보호·교체 정책을 세울 수 있어 가상 메모리의 실용성이 완성된다.
  3. 판단 포인트: 페이지 크기가 작으면 낭비는 줄지만 페이지 테이블과 TLB (Translation Lookaside Buffer) 부담이 커지고, 크면 변환 효율은 좋아지지만 내부 단편화와 입출력 증폭이 커지므로 워크로드에 맞는 절충이 핵심이다.

Ⅰ. 개요 및 필요성

페이징 (Paging)은 프로세스의 논리적 주소 공간을 고정 크기 블록으로 나눈 페이지와, RAM (Random Access Memory)을 같은 크기 블록으로 나눈 프레임을 1:1로 대응시키는 메모리 관리 기법이다. 핵심은 프로그램이 보기에는 0번지부터 연속인 메모리를 쓰는 것처럼 보이지만, 실제 데이터는 물리 메모리 곳곳의 빈 프레임에 흩어져 있을 수 있다는 점이다. 즉, 연속 배치의 제약을 없애고 주소 변환 계층으로 질서를 만든다.

이 방식이 필요해진 이유는 연속 할당이 메모리를 너무 쉽게 망가뜨렸기 때문이다. 프로그램을 통째로 올리던 시절에는 메모리 중간중간에 작은 빈칸이 남아도, 충분히 큰 연속 구간이 없으면 새 프로세스를 적재할 수 없었다. 이것이 외부 단편화이며, 멀티프로그래밍 환경에서는 시간이 갈수록 심해진다. 압축 (Compaction)으로 빈칸을 모을 수는 있지만, 실행 중인 데이터를 대량 이동해야 하므로 비용이 크고 운영 복잡도도 높다.

페이징은 이 문제를 규격화로 해결한다. 모든 조각 크기를 같게 만들면 운영체제는 "이 프레임이 비었는가"만 판단하면 되고, 빈 위치가 어디인지 자체는 중요하지 않다. 덕분에 가상 메모리, 요구 페이징 (Demand Paging), 페이지 보호 같은 상위 정책이 가능해진다.

이 그림은 왜 페이징이 필요한지를, 연속 할당과 고정 크기 매핑의 차이로 보여준다.

┌────────────────────────────────────────────────────────────────────────────┐
│              연속 할당의 한계와 페이징의 해결 방식 비교                   │
├───────────────────────────────┬────────────────────────────────────────────┤
│ 연속 할당                     │ 페이징                                    │
│                               │                                            │
│ [P1][빈칸][P2][빈칸][P3]      │ [F0][F1][F2][F3][F4][F5]                 │
│      ↑     ↑                 │   │   │   │   │   │   │                  │
│ 총합은 충분하지만             │  Pg2 Pg0  -  Pg1  -  Pg3                 │
│ 큰 프로세스를 넣을 연속 구간  │                                            │
│ 이 없음                       │ 빈 프레임이면 어디든 적재 가능            │
└───────────────────────────────┴────────────────────────────────────────────┘

왼쪽은 빈 공간의 총량과 실제 적재 가능성이 다를 수 있음을 보여주고, 오른쪽은 페이지 크기를 통일하면 빈 프레임만 있으면 된다는 점을 보여준다. 그래서 페이징은 단순 저장 기법이 아니라, 메모리 배치를 주소 변환으로 추상화한 구조적 해법이다.

  • 📢 섹션 요약 비유: 페이징은 제각각 크기의 짐을 창고에 쑤셔 넣는 대신, 모두 같은 규격 박스로 바꿔 보관하는 방식이다. 박스 크기가 같아지면 창고 관리자는 빈칸이 어디냐보다 빈칸이 있느냐만 보면 된다.

Ⅱ. 아키텍처 및 핵심 원리

페이징의 주소 변환은 가상 주소를 페이지 번호와 오프셋 (Offset)으로 나누는 데서 시작한다. 페이지 번호는 어느 페이지인지 식별하고, 오프셋은 그 페이지 내부 몇 번째 바이트인지를 나타낸다. MMU (Memory Management Unit)는 페이지 번호를 페이지 테이블 (Page Table)의 인덱스로 사용해 대응하는 프레임 번호를 찾고, 최종적으로 프레임 번호 + 같은 오프셋을 결합해 물리 주소를 만든다. 페이지 내부 상대 위치는 그대로 유지되고, 바뀌는 것은 "어느 프레임에 있느냐"뿐이다.

운영체제는 페이지 테이블 엔트리인 PTE (Page Table Entry)에 단순 위치 정보만 넣지 않는다. 존재 비트 (Present Bit), 수정 비트 (Dirty Bit), 접근 비트 (Access Bit), 읽기/쓰기/실행 권한 같은 제어 정보도 함께 기록한다. 덕분에 페이징은 주소 변환 기법인 동시에 보호 메커니즘이 된다. 코드 페이지는 실행 가능·쓰기 금지로, 데이터 페이지는 쓰기 가능·실행 금지로 분리할 수 있다.

아래 표는 페이징 구성 요소가 각각 어떤 역할과 트레이드오프를 가지는지 요약한다.

구성 요소역할핵심 설계 포인트
페이지 (Page)가상 주소 공간의 고정 크기 단위보통 4KB, 2MB, 1GB 등 크기 선택이 중요
프레임 (Frame)물리 메모리의 고정 크기 단위빈 프레임 관리와 교체 정책 연결
페이지 테이블페이지→프레임 매핑과 보호 정보 저장주소 공간이 커질수록 계층화 필요
TLB최근 변환 결과 캐시미스가 나면 변환 지연 증가
PTE상태·권한·존재 여부 기록보호, 페이지 부재 처리, 교체 알고리즘의 근거

이 그림은 CPU가 가상 주소를 실제 물리 주소로 바꾸는 최소 흐름을 보여준다.

┌────────────────────────────────────────────────────────────────────────────┐
│                    페이징 기반 주소 변환의 핵심 경로                      │
├────────────────────────────────────────────────────────────────────────────┤
│ CPU 가상 주소                                                              │
│      │                                                                     │
│      ▼                                                                     │
│  [ 페이지 번호 | 오프셋 ]                                                   │
│      │                                                                     │
│      ├──────────────▶ TLB 조회 ────── Hit ─────▶ [ 프레임 번호 | 오프셋 ]  │
│      │                                                                     │
│      └──────────────▶ 페이지 테이블 조회 ── Present=1 ─▶ 물리 주소 생성    │
│                                   │                                        │
│                                   └─ Present=0 ─▶ 페이지 부재 (Page Fault) │
│                                                     │                      │
│                                                     ▼                      │
│                                            OS가 디스크에서 적재             │
└────────────────────────────────────────────────────────────────────────────┘

페이징은 외부 단편화를 없애는 대신 내부 단편화 (Internal Fragmentation)를 감수한다. 예를 들어 페이지 크기가 4KB인데 프로세스의 마지막 조각이 1KB만 필요하면 나머지 3KB는 남더라도 그 프레임을 다른 페이지와 공유할 수 없다. 그러나 이 낭비는 보통 "마지막 페이지의 일부"에 국한되므로, 외부 단편화 때문에 큰 프로세스 전체가 못 들어가는 상황보다 훨씬 관리 가능하다.

결국 페이징의 핵심 원리는 고정 크기 매핑 + 페이지 단위 제어 + 오프셋 보존이다. 이 세 가지가 함께 있어야 운영체제는 큰 주소 공간, 보호, 교체, 지연 적재를 하나의 메커니즘으로 통합할 수 있다.

  • 📢 섹션 요약 비유: 페이징은 아파트 동·호수 체계와 같다. 몇 동인지가 프레임을 찾는 정보라면, 몇 호인지 오프셋은 그대로 유지된다. 집 내부 위치는 같고 건물 배치만 바뀌는 셈이다.

Ⅲ. 비교 및 연결

페이징의 경계를 가장 잘 드러내는 비교 대상은 세그멘테이션 (Segmentation)과 연속 할당이다. 연속 할당은 구현이 단순하지만 외부 단편화와 재배치 부담이 크다. 세그멘테이션은 코드, 데이터, 스택처럼 논리 단위가 분명해 공유와 보호 의미를 표현하기 좋지만, 세그먼트 크기가 가변적이라 결국 외부 단편화 문제를 피하기 어렵다. 반면 페이징은 논리 의미는 약하지만 하드웨어 구현과 물리 배치 자유도에서 압도적으로 유리하다.

비교 항목연속 할당세그멘테이션 (Segmentation)페이징 (Paging)
관리 단위프로세스 전체논리적 세그먼트고정 크기 페이지
분할 기준없음의미 중심 가변 크기하드웨어 친화적 고정 크기
주된 단편화외부 단편화 큼외부 단편화 존재내부 단편화 존재
보호/공유거칠게 적용의미 단위 적용 쉬움페이지 단위 세밀 적용
현대 활용제한적보조적 개념가상 메모리의 표준

현대 운영체제는 실제로 페이징을 중심에 두고, 필요하면 세그멘테이션의 개념적 보호를 일부 결합한다. 예를 들어 프로세스 주소 공간을 코드/데이터/힙/스택으로 나누어 이해하되, 실제 적재와 보호는 페이지 단위로 수행한다. 이 때문에 페이징은 컴퓨터구조만의 주제가 아니라 운영체제의 페이지 부재 처리, 보안의 NX (No-eXecute) 비트, 가상화의 EPT (Extended Page Tables)와 NPT (Nested Page Tables), 성능 최적화의 Huge Page로 확장된다.

또한 페이징은 TLB와 떼어 놓고 이해할 수 없다. 페이지 테이블이 너무 크고 변환이 잦기 때문에, 실제 성능은 페이징 자체보다 "페이징을 얼마나 빠르게 숨기느냐"에 달려 있다. 그래서 페이징은 메모리 공간 효율 문제를 해결한 뒤, TLB와 다단계 페이지 테이블을 통해 시간 효율 문제까지 보완하는 방향으로 진화했다.

  • 📢 섹션 요약 비유: 세그멘테이션이 방 용도에 따라 크기를 다르게 짓는 맞춤형 창고라면, 페이징은 모든 칸을 같은 크기로 만든 물류센터다. 맞춤성은 줄지만, 배치와 이동은 훨씬 빨라진다.

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

실무에서 페이징은 단순히 "메모리를 잘게 쪼갠다"가 아니라 페이지 크기, 변환 비용, 교체 비용, 보호 정책을 함께 설계하는 문제다. 특히 기술사 관점에서는 페이징의 장점만 말하는 답안보다, 어떤 워크로드에서 어떤 크기와 정책이 유리한지를 판단하는 문장이 중요하다.

대표적인 의사결정 포인트는 페이지 크기다. 기본 4KB 페이지는 내부 단편화를 줄이고 세밀한 보호에 유리하지만, 대용량 데이터베이스나 인메모리 분석처럼 수십 GB~수 TB 영역을 자주 순차 접근하는 워크로드에서는 TLB 엔트리가 너무 빨리 소진된다. 이 경우 Huge Page를 쓰면 TLB 적중률과 페이지 테이블 효율이 개선된다. 반대로 작은 객체가 많고 접근 패턴이 산발적이면 큰 페이지는 낭비와 I/O 증폭을 키울 수 있다.

운영 측면에서는 페이지 부재율과 스왑 활동을 구분해서 봐야 한다. 가벼운 페이지 부재는 정상 동작의 일부일 수 있지만, 지속적인 major fault와 디스크 스왑이 늘면 작업 집합 (Working Set)이 물리 메모리를 초과하고 있다는 뜻이다. 이 상태를 방치하면 스래싱 (Thrashing)으로 이어져 CPU는 계산보다 페이지 교체에 더 많은 시간을 쓰게 된다.

실무 체크리스트

  1. 페이지 크기 선택이 접근 패턴과 TLB 용량에 맞는가?
  2. 페이지 테이블 메모리 사용량과 Huge Page 이득을 함께 계산했는가?
  3. 실행 금지, 읽기 전용, Copy-on-Write 같은 페이지 보호 정책이 설계에 반영되었는가?
  4. vmstat, sar, perf 등으로 page fault, swap-in/out, TLB miss를 분리 관찰하는가?

대표 안티패턴

  • RAM 부족을 스왑으로 장시간 버티게 하며 "가상 메모리가 있으니 괜찮다"고 해석하는 운영

  • 데이터 특성을 보지 않고 무조건 Huge Page만 켜는 튜닝

  • 실시간 시스템에서 페이지 잠금 없이 최악 지연 시간을 보장하겠다고 주장하는 설계

  • 📢 섹션 요약 비유: 페이징 튜닝은 창고 선반 간격을 정하는 일과 같다. 칸을 너무 잘게 나누면 관리표가 너무 많아지고, 칸을 너무 크게 만들면 빈 공간이 늘어난다. 결국 물건 종류와 입출고 패턴을 보고 선반 규격을 정해야 한다.


Ⅴ. 기대효과 및 결론

페이징의 가장 큰 효과는 메모리 관리의 기준을 "연속 주소 확보"에서 "페이지 단위 정책"으로 바꾼 데 있다. 덕분에 현대 시스템은 프로세스마다 독립 주소 공간을 제공하고, 필요한 페이지만 적재하며, 페이지별 보호 비트로 안전성을 강제할 수 있다. 이는 멀티태스킹, 라이브러리 공유, 메모리 맵 파일, 프로세스 격리 같은 현대 운영체제 기능의 바닥을 이룬다.

다만 페이징은 공짜가 아니다. 페이지 테이블 메모리 오버헤드, TLB 미스 비용, 내부 단편화, 페이지 부재 지연이 항상 따라온다. 따라서 좋은 설계는 "페이징을 쓰느냐"가 아니라 "페이징의 비용이 드러나지 않도록 지역성, 메모리 용량, 페이지 크기, 교체 정책을 함께 맞추는가"로 평가해야 한다.

앞으로의 방향도 이 연장선에 있다. 첫째, 다단계 페이지 테이블과 역페이지 테이블 같은 구조로 메타데이터 부담을 줄인다. 둘째, Huge Page와 하드웨어 페이지 워커 개선으로 변환 비용을 낮춘다. 셋째, 가상화와 CXL (Compute Express Link) 같은 확장 메모리 환경에서도 페이지 단위 추상화를 유지하되 계층 간 지연 차이를 더 정교하게 다룬다.

결국 페이징은 "메모리를 잘게 자르는 기술"이 아니라 주소 공간을 질서 있게 운영하기 위한 고정 크기 계약으로 기억해야 한다. 외부 단편화를 없애고 운영 정책의 기반을 제공했지만, 성능은 언제나 변환 비용과 지역성 관리 위에서만 성립한다.

  • 📢 섹션 요약 비유: 페이징은 도시 전체 땅을 같은 크기 필지로 정리한 도시계획과 같다. 구획이 일정해지면 배치와 관리가 쉬워지지만, 교통과 인프라를 함께 설계하지 않으면 도시가 넓어도 살기 불편해진다.

📌 관련 개념 맵

개념연결 포인트
가상 메모리 (Virtual Memory)페이징을 바탕으로 프로세스마다 독립 주소 공간을 제공한다.
페이지 테이블 (Page Table)페이지 번호를 프레임 번호와 보호 정보로 연결하는 핵심 장부다.
TLB (Translation Lookaside Buffer)페이징의 주소 변환 비용을 캐시해 실효 성능을 만든다.
페이지 부재 (Page Fault)필요한 페이지가 메모리에 없을 때 운영체제가 적재를 개입하는 사건이다.
내부 단편화 (Internal Fragmentation)고정 크기 페이지의 대가로 마지막 페이지 일부가 남아 발생하는 낭비다.
Huge Page큰 페이지로 TLB 부담을 줄이지만, 낭비와 세밀성 손실이 따른다.
메모리 보호 (Memory Protection)페이지별 권한 비트로 읽기/쓰기/실행 정책을 강제한다.

📈 관련 키워드 및 발전 흐름도

연속 할당 · 외부 단편화 (External Fragmentation)
        │
        ▼
페이징 (Paging) · 페이지/프레임 고정 크기 분할
        │
        ▼
페이지 테이블 (Page Table) · PTE (Page Table Entry)
        │
        ▼
TLB (Translation Lookaside Buffer) · 다단계 페이지 테이블
        │
        ▼
요구 페이징 (Demand Paging) · 페이지 부재 (Page Fault)
        │
        ▼
Huge Page · 역페이지 테이블 · 가상화 이중 주소 변환

이 흐름은 "단편화 해결 → 주소 변환 정립 → 변환 가속 → 동적 적재 → 현대 확장"으로 이어지는 페이징의 발전 맥락을 보여준다.

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

  1. 페이징은 커다란 그림책을 똑같은 크기 상자에 나눠 담는 방법이에요.
  2. 상자 크기가 모두 같아서 빈 선반이 어디 있든 하나씩 쏙 넣을 수 있어요.
  3. 대신 상자 위치를 적은 목록을 잘 챙겨야 하고, 마지막 상자에 조금 빈 공간이 남을 수도 있어요.