콘텐츠로 이동

페이지 테이블 (Page Table)

Jan 27, 2026

페이지 테이블은 논리 주소의 페이지 번호를 물리 주소의 프레임 번호로 변환해 주는 자료구조이다. 마치 호텔 프론트의 방 배정 목록처럼, “몇 번 페이지가 몇 번 프레임에 있는지”를 기록해 둔다.

각 **PTE(Page Table Entry)**에는 다음 정보가 담긴다.

필드역할
프레임 번호해당 페이지가 위치한 물리 프레임
Valid-Invalid Bit1이면 유효(메모리에 있음), 0이면 무효(접근 불가)
보호 비트Read / Write / Execute 권한 설정
참조 비트 (Reference Bit)최근에 접근되었는지 표시 (교체 알고리즘 사용)
수정 비트 (Dirty Bit)메모리에서 수정되었는지 표시 (swap out 시 디스크 쓰기 필요 여부)
방식특징접근 시간
전용 레지스터소규모 테이블에 적합, 빠름1회 메모리 접근
메인 메모리 + PTBR유연하지만 페이지 테이블 조회 + 실제 접근2회 메모리 접근
TLB (Translation Lookaside Buffer)고속 캐시로 PTBR 방식의 느림을 해결TLB hit 시 1회 접근

**PTBR (Page-Table Base Register)**은 메모리에 있는 페이지 테이블의 시작 주소를 가리킨다. 유연하지만, 데이터에 접근하려면 페이지 테이블 조회(1회) + 실제 데이터 접근(1회)으로 총 2회 메모리 접근이 필요하다.

TLB는 이 문제를 해결하는 하드웨어 캐시이다.

CPU ──► 논리 주소 [p | d]
┌──────────┐ hit ┌────────────┐
│ TLB │───────►│ 프레임(f)+d │──► 물리 주소
│ (캐시) │ └────────────┘
└────┬─────┘
│ miss
┌──────────────┐
│ 페이지 테이블 │──► 프레임(f) 획득 → TLB 갱신
│ (메인 메모리) │
└──────────────┘

**재진입 코드(Reentrant Code)**는 실행 중 변경되지 않으므로 여러 프로세스가 같은 물리 프레임을 공유할 수 있다. 예를 들어, 100개 프로세스가 libc를 사용해도 물리 메모리에는 libc 코드가 1벌만 있으면 된다.

  • 장점: 유연한 보호(페이지별 권한), 메모리 공유, 큰 논리 주소 공간 지원
  • 단점: 32비트 주소 + 4KB 페이지 → 약 100만 개 PTE → 4MB 페이지 테이블 오버헤드 → 계층적 페이징으로 해결
32비트 시스템, 4KB 페이지:
- 페이지 번호 비트 = 32 - 12 = 20비트 → 2^20 = 약 100만 개 PTE
- PTE 크기 = 4바이트라면 → 페이지 테이블 = 4MB
TLB 성능 계산 (hit ratio = 98%):
- TLB hit: 10ns(TLB) + 100ns(메모리) = 110ns
- TLB miss: 10ns(TLB) + 100ns(테이블) + 100ns(메모리) = 210ns
- EAT = 0.98 × 110 + 0.02 × 210 = 112ns
- TLB 없이: 200ns → 약 44% 성능 향상