285. 페이징 (Paging)
핵심 인사이트 (3줄 요약)
- 본질: 페이징 (Paging)은 프로세스의 가상 메모리 공간과 실제 물리 메모리 공간을 항상 동일한 크기의 고정된 조각(보통 4KB)으로 잘게 쪼개어 매핑하는 메모리 관리 기법이다.
- 가치: 조각의 크기가 모두 똑같기 때문에, 물리 메모리의 빈 공간 아무 곳에나 조각을 끼워 넣을 수 있어 연속 할당 방식의 고질병인 외부 단편화 (External Fragmentation) 문제를 하드웨어적으로 완벽하게 제거한다.
- 융합: 프로그램을 무조건 정해진 규격으로 자르다 보니 마지막 조각에서 남는 공간이 버려지는 내부 단편화가 발생하며, 주소 변환을 위한 거대한 페이지 테이블 관리 오버헤드가 수반된다.
Ⅰ. 개요 및 필요성
-
개념: 가상 주소 공간을 '페이지(Page)'라는 고정 크기 블록으로 나누고, 이에 대응하는 물리 주소 공간(RAM)을 '프레임(Frame)'으로 나누어 이 둘을 매핑하는 비연속 메모리 할당 방식이다.
-
필요성: 페이징이 등장하기 전에는 프로그램이 물리 메모리에 통째로 연속해서 들어가야 했다. 이로 인해 메모리 중간중간에 작은 빈 공간들이 생겨나 전체 빈 공간의 합은 충분해도 정작 큰 프로그램은 로드하지 못하는 외부 단편화가 심각했다. 페이징은 프로그램을 레고 블록처럼 쪼개어 빈 공간 어디든 흩뿌려 저장함으로써 메모리 활용도를 극한으로 끌어올렸다.
-
💡 비유: 책을 통째로 꽂으려니까 책장에 얇은 빈틈만 남아서 새 책을 못 꽂는 상황입니다. 페이징은 책을 아예 한 장씩 다 뜯어서, 책장의 남는 빈틈 아무 데나 낱장으로 마구 쑤셔 넣는(그리고 목차만 따로 관리하는) 극단적이지만 효율적인 정리법입니다.
-
등장 배경: 1960년대 멀티프로그래밍이 보편화되면서 외부 단편화가 시스템의 사활을 거는 문제로 대두되었다. 1962년 Atlas 컴퓨터에서 처음 구현된 이후, 모든 현대 운영체제의 표준 메모리 관리 기법으로 자리 잡았다.
┌──────────────────────────────────────────────────────────────┐
│ 페이징(Paging)의 페이지-프레임 매핑 구조 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [ 가상 메모리 ] [ 물리 메모리 ] │
│ ┌────────────┐ ┌────────────┐ │
│ │ Page 0 │ ─────── (매핑 지도) ───────▶ │ Frame 5 │ │
│ ├────────────┤ ├────────────┤ │
│ │ Page 1 │ ──────────────┐ │ Frame 0 │ │
│ ├────────────┤ │ ├────────────┤ │
│ │ Page 2 │ ──────────────┼──────────────▶ │ Frame 3 │ │
│ └────────────┘ │ ├────────────┤ │
│ └──────────────▶ │ Frame 1 │ │
│ └────────────┘ │
│ │
│ * 핵심: 가상 공간에서는 연속적이지만, 실제 램에서는 흩어져 있음. │
└──────────────────────────────────────────────────────────────┘
- 📢 섹션 요약 비유: 페이지는 4KB짜리 규격화된 택배 상자이고, 프레임은 그 상자가 정확히 쏙 들어가는 물류 창고의 빈 선반입니다. 상자 크기가 다 똑같기 때문에 선반이 비어있기만 하면 무조건 넣을 수 있어, 공간 활용이 극대화됩니다.
Ⅱ. 아키텍처 및 핵심 원리
논리 주소에서 물리 주소로의 변환
CPU가 던지는 논리 주소는 두 부분으로 나뉜다.
- 페이지 번호 (p): 페이지 테이블의 인덱스로 사용되어 실제 물리 주소의 프레임 번호를 찾는 데 쓰인다.
- 페이지 오프셋 (d): 해당 페이지 내에서 실제 데이터가 위치한 상대적 거리다. 프레임 번호 뒤에 그대로 붙여져 최종 물리 주소가 된다.
내부 단편화 (Internal Fragmentation)
페이징은 외부 단편화는 없앴지만, 대신 내부 단편화를 남겼다.
-
프로그램 크기가 10,001 바이트이고 페이지가 4,000 바이트라면, 3개의 페이지(12,000 바이트)가 필요하다.
-
마지막 페이지에서 1,999 바이트가 남지만, 페이징 시스템은 무조건 한 페이지를 통째로 할당하므로 이 공간은 낭비된다.
-
하지만 외부 단편화로 수십 MB를 날리는 것보다 페이지 끝자락의 수 KB를 날리는 것이 훨씬 이득이기에 이를 수용한다.
-
📢 섹션 요약 비유: 피자를 무조건 1판(4KB) 단위로만 팔기 때문에, 한 조각만 먹고 싶어도 한 판을 다 사야 해서 조금 남는 조각이 생기는 상황과 같습니다. 하지만 손님이 꽉 찼을 때 합석(프레임 활용)시키기는 훨씬 쉽습니다.
Ⅲ. 비교 및 연결
페이징 vs 세그멘테이션
| 구분 | 페이징 (Paging) | 세그멘테이션 (Segmentation) |
|---|---|---|
| 분할 크기 | 고정 크기 (하드웨어 중심) | 가변 크기 (논리적 의미 중심) |
| 단편화 | 내부 단편화 발생 | 외부 단편화 발생 |
| 관리 단위 | 4KB 등 기계적인 조각 | 함수, 배열 등 논리적인 조각 |
| 장점 | 메모리 배치가 매우 자유로움 | 공유 및 보호 권한 설정이 용이함 |
현대의 표준: 페이지화된 세그멘테이션 (Paged Segmentation)
현대 시스템은 이 둘을 융합한다. 프로그램은 논리적으로 세그먼트로 나누고, 각 세그먼트 내부를 다시 고정된 페이지로 쪼개어 관리한다. 이를 통해 의미 단위 관리와 공간 활용의 효율성을 동시에 잡는다.
- 📢 섹션 요약 비유: 페이징은 원고지를 칸수에 맞춰 기계적으로 자르는 것이고, 세그멘테이션은 문단이나 챕터 단위로 자르는 것입니다. 요즘은 챕터(세그먼트)로 나누되, 각 챕터를 다시 규격화된 종이(페이지)에 인쇄하여 보관합니다.
Ⅳ. 실무 적용 및 기술사 판단
실무 시나리오
-
Huge Page를 이용한 성능 튜닝 데이터베이스(Oracle, MySQL) 서버에서 수십 GB의 램을 쓸 때, 기본 4KB 페이지를 쓰면 주소 변환 장부(페이지 테이블)가 너무 비대해져서 주소 찾다가 시간이 다 간다. 실무 아키텍트는 페이지 크기를 2MB나 1GB로 키우는 Huge Page를 활성화한다. 이렇게 하면 장부 크기가 줄어들고 주소 변환 속도(TLB 적중률)가 비약적으로 올라가 데이터베이스 응답 속도가 향상된다.
-
메모리 부족 시 스왑 (Swapping)의 단위 컴퓨터가 느려질 때 하드디스크를 긁는 소리가 나는 이유. 메모리가 부족하면 OS는 당장 안 쓰는 페이지 하나를 골라 디스크로 쫓아내고, 그 빈 프레임에 급한 페이지를 가져온다. 페이징 덕분에 프로그램 전체가 아닌 단 4KB만 옮겨도 되므로 훨씬 기민한 멀티태스킹이 가능해진다.
도입 체크리스트
- 기술적: 시스템의 워크로드가 작은 객체가 많은가, 아니면 거대 배열이 많은가? 이에 따라 최적의 페이지 크기(4KB vs 2MB)를 결정해야 한다.
- 보안적: 각 페이지마다 읽기/쓰기/실행 권한 비트를 엄격히 설정하여, 데이터 영역에서 코드가 실행되는 해킹 시도를 MMU가 차단하게 설계했는가?
안티패턴
-
지나치게 작은 페이지 크기 설정: 페이지를 1KB 이하로 너무 작게 잡으면 내부 단편화는 줄어들지만, 페이지 테이블의 엔트리 개수가 폭발하여 정작 데이터 저장할 램보다 주소 장부(Page Table)가 램을 더 많이 차지하는 배보다 배꼽이 더 큰 상황이 벌어진다.
-
📢 섹션 요약 비유: 짐을 쌀 때 아주 작은 성냥갑(작은 페이지)을 쓰면 빈틈없이 짐을 쌀 순 있지만 성냥갑 수만 개를 관리하느라 머리가 터집니다. 반면 컨테이너 박스(Huge Page)를 쓰면 관리는 편한데 박스 안이 텅텅 비어 굴러다니는 딜레마입니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 페이징 도입 전 | 페이징 도입 후 | 개선 효과 |
|---|---|---|---|
| 외부 단편화 | 심각 (메모리 낭비) | 제로 (0%) | 메모리 가용량 극대화 |
| 할당 속도 | 빈 공간 찾느라 느림 | 빈 프레임 아무 데나 꽂음 | 메모리 할당 시간 단축 |
| 보안/보호 | 통째로라 어려움 | 페이지별 권한 제어 | 보안성 대폭 향상 |
미래 전망
- 헤테로지니어스 페이지 (Heterogeneous Pages): 앞으로는 하나의 앱 안에서도 어떤 부분은 4KB로, 어떤 부분은 1GB로 다르게 쪼개는 기술이 더 정교해질 것이다.
- 클라우드와 페이징: 가상화 기술의 핵심인 '그림자 페이지 테이블(Shadow Page Table)' 기술이 하드웨어 지원(EPT/NPT)을 받으며, 클라우드 환경에서도 네이티브 속도에 가까운 주소 변환이 가능해지고 있다.
결론
페이징은 거대한 프로그램을 똑같은 크기의 레고 블록으로 부숴버림으로써 "메모리의 빈틈"을 정복한 혁명적 기술이다. 비록 장부 관리의 번거로움과 끝자락의 미세한 낭비라는 세금을 지불하고 있지만, 그 대가로 우리는 수천 개의 프로세스가 공존하는 안전하고 광활한 가상 세계를 얻었다.
- 📢 섹션 요약 비유: 페이징은 거대한 레고 성을 통째로 보관할 상자가 없을 때, 성을 똑같은 크기의 레고 블록으로 다 부숴버리는 거예요. 블록 크기가 다 똑같으니까, 서랍장에 남는 빈칸이 어디든 상관없이 쓱쓱 집어넣을 수 있어서 빈 공간을 아주 알뜰하게 쓸 수 있답니다!
📌 관련 개념 맵
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 가상 메모리 | 페이징을 주축으로 하여 실제 RAM보다 큰 공간을 쓰게 해주는 기술. |
| 페이지 테이블 | 논리 페이지가 실제 어느 프레임에 있는지 적어둔 매핑 지도. |
| 내부 단편화 | 고정 크기로 자르다 보니 마지막 조각에서 남는 미세한 낭비 공간. |
| 외부 단편화 | 페이징이 100% 완벽하게 해결해버린 고질적인 메모리 낭비 문제. |
| TLB | 매번 페이지 테이블을 읽는 속도 저하를 막아주는 초고속 주소 변환 캐시. |
👶 어린이를 위한 3줄 비유 설명
- 페이징은 커다란 도화지를 똑같은 크기의 작은 조각들로 다 잘라버리는 거예요.
- 조각들이 다 똑같이 생겨서, 책상의 좁은 빈틈이 어디에 있든 상관없이 쏙쏙 집어넣어 보관할 수 있죠.
- 이렇게 하면 책상을 아주 알뜰하게 쓸 수 있어서, 내 작은 책상에서도 커다란 그림을 마음껏 그릴 수 있게 된답니다!