페이지 테이블은 가상 주소를 물리 주소로 변환하기 위해 운영체제가 유지하는 자료 구조입니다.

가상 주소는 다음과 같은 구조를 가집니다.
+----------------+-------------+
| Virtual Page # | Offset |
| (상위 비트) | (하위 비트) |
+----------------+-------------+
운영체제는 VPN → 물리 프레임 번호(PFN)을 매핑하는 페이지 테이블을 통해 다음과 같은 작업을 합니다
Pintos는 x86-64 아키텍처의 4단계 페이지 테이블 구조 사용합니다. 이를 pml4 로 다룹니다.
| 구조 요소 | Pintos 위치 | 설명 |
|---|---|---|
pml4 | struct thread의 멤버 | 각 프로세스가 가지는 최상위 페이지 테이블 |
pml4_activate() | userprog/process.c | 해당 프로세스의 page table을 활성화 |
pml4_get_page() | userprog/pagedir.c | VA에 해당하는 물리 주소(프레임) 검색 |
pml4_set_page() | 페이지 할당 시 사용 | VA에 프레임 매핑 등록 |
vm_try_handle_fault() | vm.c | 페이지 폴트 발생 시 page table 수정 (lazy loading 등) |
매핑 예시는 다음과 같습니다.
/* 주소 0x8048000에 물리 프레임 frame을 매핑 */
pml4_set_page (thread_current()->pml4, (void *)0x8048000, frame, true);
page_fault() → vm_try_handle_fault() 호출find_victim_page() → 페이지를 찾아 프레임 확보pml4_set_page()로 페이지 테이블에 매핑 등록