[크래프톤 정글 2기] Day 78
회고
오늘은 프로젝트 3의 첫 주간 발표일 이다. 일주일 동안 공부했던 것과 어려웠던 점이나 트러블 슈팅 등을 잘 정리해서 발표했다. 어젯밤에 늦게 자는 바람에 3시간 밖에 못 자고 와서 피곤해 죽을 것 같았다. 일찍 자야 하는데...
fork 구현을 마무리했다. 프로젝트 3에서는 프로젝트 2에서 구현했던 duplicate_pte를 사용하지 않는다. duplicate_pte() 함수는 페이지 테이블의 복사를 수행하지만, Lazy loading 방식에서는 페이지 테이블은 나중에 채워지기 때문에 보조 페이지 테이블의 복사를 수행해야 한다. 따라서 supplemental_page_table_copy() 함수를 구현해야 한다.
supplemental_page_table_copy()
말 그대로 보조 페이지 테이블의 요소를 부모에게서 자식으로 복사하면 된다. 이 때, 페이지의 type에 따라 다르게 처리해주어야 한다. type이 VM_UNINIT이면, 아직 초기화되지 않은 페이지이므로 vm_alloc_page_with_initializer()를 호출해서 부모 페이지의 va에 대한 새로운 page 구조체를 생성하고 보조 페이지 테이블에 넣어주면 된다.
type이 VM_UNINIT이 아닌 경우, 즉 VM_ANON 또는 VM_FILE인 경우에는 초기화되어서 물리 메모리와 매핑되어 있는 페이지이므로, 물리 메모리의 내용을 복사해주면 된다.
느낀 점
이번 프로젝트 3는 솔루션을 거의 보지 않고 오로지 깃북 만으로 구현해보았다. 직접 구현하는 것은 어렵지만 생각대로 코드가 작동하는 모습을 보면 즐겁다. 남은 과제도 성실히!
오늘의 저녁
비싼만큼 맛있다.