PintOS 가상 메모리 구현 파일 vm.c 전체를 기반으로, 내부 함수의 동작 방식과 흐름을 퀴즈 형식으로 복습했다.
단순히 함수별 역할을 외우기보다는 "왜 이렇게 작동하는가?", "어떤 조건에서 호출되는가?" 같은 맥락 중심의 문제들로 구성했다. 문제는 GPT가 내줬다.
vm_try_handle_fault() 동작 흐름 요약문제 요약
페이지 폴트 발생 시 호출되는 vm_try_handle_fault()의 흐름을 설명하라.
spt_find_page()가 NULL일 경우 어떻게 되는가?풀이 요약
not_present == true이면 해당 주소에 매핑된 물리 페이지가 없다는 의미vm_stack_growth() 호출spt_find_page()로 보조 페이지 테이블을 확인exit(-1)!page->writable → exit(-1)vm_do_claim_page(page) 호출로 페이지 확보포인트
user_rsp - 8 == addr 또는 USER_STACK - (1 << 20) <= user_rsp < addr < USER_STACKvm_get_frame()이 evicted frame을 반환하는 조건문제 요약
다음 중 교체된 frame을 반환할 수 있는 조건은?
palloc_get_page()가 NULL일 경우풀이 요약
palloc_get_page()가 실패하면 → 메모리 부족calloc()으로 할당한 frame 구조체는 free()로 해제vm_evict_frame() 호출 → 교체 프레임 확보frame을 재사용포인트
cnt_page == 0, frame already connected 같은 조건은 무관vm_alloc_page_with_initializer()의 누락된 처리문제 요약
새로운 페이지 생성 후 어떤 처리를 해줘야 하는가?
풀이 요약
calloc()으로 새 struct page 할당uninit_new()로 lazy loading 준비spt_insert_page(spt, newpage)로 SPT에 등록 필요page fault 시 spt_find_page()로 찾을 수 없음포인트
문제 요약
newpage->operations는 anon_initializer로 설정된다풀이 요약
newpage->operations = page->operations로 복사file_ops가 설정됨포인트
file_duplicate()로 복사cnt_page++)pml4_set_page()로 다시 매핑vm_get_victim()이 모든 accessed 비트가 true일 때문제 요약
Clock 알고리즘에서 모든 프레임이 accessed==true면?
풀이 요약
포인트
install_page() 호출이 필요한 경우문제 요약
다음 중 install_page() 호출이 필요한 타입은?
풀이 요약
vm_do_claim_page()에서 바로 install_page() 호출swap_in()에서 처리되므로 필요 없음포인트
이 퀴즈를 통해 다음과 같은 포인트들을 확실히 정리할 수 있었다:
vm_try_handle_fault()는 stack growth와 lazy loading을 구분해서 처리함install_page()는 UNINIT 전용단순히 코드를 읽는 것보다 이런 식으로 조건 분기와 흐름을 직접 따라가며 퀴즈를 푸는 방식이 확실히 깊은 이해에 도움이 되었다.