운영체제 페이징(Paging) 한 방에 정리
1) 왜 페이징(Paging)인가?
공간을 관리할 때 “변동 크기 조각”으로 나누면 외부 단편화가 생기고 관리가 어려워집니다(세그멘테이션의 한계). 페이징은 가상 주소 공간과 물리 메모리를 고정 크기로 잘라서(page / page frame) 단편화 문제를 완화하고, 할당/회수가 단순해집니다. [oai_citation:1‡vm-paging.pdf](sediment://file_00000000284c62069ffb249dea22ca10)
페이징의 목표는 “각 프로세스의 주소 공간을 유연하게 가상화하면서도(희소 주소 공간 포함) 시간/공간 오버헤드를 최소화”하는 것입니다.
2) 핵심 용어
- Page: 프로세스 가상 주소 공간을 고정 크기 블록으로 나눈 단위. 예: 4KB.
- Page Frame: 물리 메모리의 고정 크기 슬롯. 한 프레임에는 한 페이지가 올라감.
- VPN(가상 페이지 번호) / Offset: 가상 주소 =
[VPN | Offset](상위 비트는 페이지, 하위 비트는 페이지 내부 위치). - PFN(물리 프레임 번호): 물리 메모리 프레임 인덱스. 가상→물리 변환 시 VPN을 PFN으로 치환.
- Page Table(페이지 테이블): “VPN → PFN” 매핑을 담는 프로세스별 구조. 보통 선형 배열 형태(Linear page table)가 기본.
3) 주소 변환(Translation) 흐름
작은 예: 주소 공간 64B, 페이지 크기 16B → 가상 주소는 6비트, 상위 2비트가 VPN, 하위 4비트가 Offset.
- 가상 주소에서 VPN과 Offset을 분리한다.
- 페이지 테이블에서 VPN → PFN을 찾는다.
- 물리 주소 =
[PFN | Offset]으로 결합해 메모리 접근을 수행한다.
// 의사코드(하드웨어 관점)
VPN = (VA & VPN_MASK) >> SHIFT
PTEAddr = PTBR + (VPN * sizeof(PTE))
PTE = MEM[PTEAddr] // 테이블 조회
offset = VA & OFFSET_MASK
PA = (PTE.PFN << SHIFT) | offset
data = MEM[PA] // 실제 데이터 접근
Offset은 변환되지 않고 그대로 유지됩니다(“페이지 내부의 몇 번째” 정보이기 때문).
4) 페이지 테이블은 어디에 저장될까?
페이지 테이블은 매우 커질 수 있어(예: 32비트/4KB 페이지면 프로세스당 PTE 약 백만 개 ≈ 4MB) 일반적으로 메인 메모리(커널이 관리) 어딘가에 존재합니다. 하드웨어는 PTBR(Page Table Base Register)로 현재 프로세스의 페이지 테이블 시작 위치를 가리킵니다.
5) PTE(Page Table Entry)의 대표 필드
- PFN: 매핑 대상 물리 프레임 번호. [oai_citation:10‡vm-paging.pdf]
- Present/Valid: 메모리에 존재/유효 여부(없으면 트랩 발생, OS가 유효성/스왑 여부 판단). [
- R/W, U/S: 접근 권한(읽기/쓰기 가능, 사용자/커널 접근 허용 등). 위반 시 보호 예외.
- Accessed(참조), Dirty(수정): 교체 정책/스와핑 판단에 도움. Dirty는 디스크에 없는 변경 내용이 있다는 뜻.
예: x86 PTE에는 Present, R/W, U/S, Cache 관련 비트, Accessed, Dirty, PFN 등이 포함됩니다.
6) 성능 비용과 왜 느려지는가
매 메모리 접근마다 “먼저 페이지 테이블에서 PTE를 읽기 위한 메모리 접근”이 추가됩니다. 즉, 원래 1번이면 되던 메모리 접근이 최소 2번으로 늘어나는 셈이라 기본적으로 느려질 수밖에 없습니다. (실제 시스템은 이 오버헤드를 줄이기 위해 TLB 같은 캐시를 사용합니다.)
7) 작은 메모리 트레이스 예시(감 잡기)
단순한 C 루프(array[i]=0)도, 각 명령어 페치와 데이터 접근 전에 페이지 테이블 조회가 필요하기 때문에 실제 물리 메모리 접근이 상당히 많아집니다. 문서의 예시는 가상/물리 주소와 페이지 테이블 접근 패턴을 시각화하여, “페이지 테이블 조회 → 실제 접근” 흐름을 보여줍니다.
8) 요약 & 학습 체크리스트
- 세그멘테이션(가변 크기) vs 페이징(고정 크기). 페이징은 외부 단편화 완화.
- 가상 주소 =
[VPN | Offset], 물리 주소 =[PFN | Offset]. Offset은 그대로. - 페이지 테이블은 프로세스별, 일반적으로 메모리에 존재(매우 큼).
- PTE에는 Present/Valid, R/W, U/S, Accessed, Dirty, PFN 등 관리 비트가 포함.
- 기본 페이징은 접근당 추가 메모리 참조가 필요 → TLB 등 최적화 필요.