초기화 →
(페이지 폴트 발생 시) →
지연 로딩 (lazy loading) →
스왑 인 / 스왑 아웃 →
삭제
vm_alloc_page_with_initializer()uninit_new() 호출로 초기화되지 않은 페이지 생성 (페이지는 할당하되 frame은 초기화되지 않은)anon_initializer 또는 file_backed_initializer를 연결uninit_initialize()vm_initializer 함수 포인터를 이용해 진짜 초기화 함수 호출anon_initializer()page->operations에 설정struct anon_page 내용 설정load_segment() + lazy_load_segment()vm_alloc_page_with_initializer() 호출lazy_load_segment()는 페이지 폴트가 발생했을 때 실제 내용 로딩
aux구조체는 file 포인터, 읽을 바이트 수, 파일 오프셋 등을 담음
setup_stack() 수정vm_try_handle_fault()spt_find_page()로 fault 주소의 페이지 구조체 탐색vm_do_claim_page() 호출 → 초기화 실행destroy(page) 호출| 함수 이름 | 역할 |
|---|---|
vm_anon_init() | 익명 페이지 서브시스템 초기화 |
supplemental_page_table_copy() | fork 시 부모 → 자식 SPT 복사 |
setup_stack() | 첫 스택 페이지 즉시 할당 및 마킹 |
load_segment() | 실행파일 세그먼트에 대해 지연 로딩 등록 |
lazy_load_segment() | 페이지 폴트 발생 시 해당 세그먼트를 메모리에 로드 |
fork, SPT copy 구현이 완료되면 전체 통과 가능