회고
오늘은 프로젝트 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는 솔루션을 거의 보지 않고 오로지 깃북 만으로 구현해보았다. 직접 구현하는 것은 어렵지만 생각대로 코드가 작동하는 모습을 보면 즐겁다. 남은 과제도 성실히!
오늘의 저녁
비싼만큼 맛있다.
'크래프톤 정글 2기' 카테고리의 다른 글
[크래프톤 정글 2기] Day 81 (0) | 2023.06.23 |
---|---|
[크래프톤 정글 2기] Day 80 (0) | 2023.06.22 |
[크래프톤 정글 2기] Day 76 (0) | 2023.06.18 |
[크래프톤 정글 2기] Day 75 (0) | 2023.06.17 |
[크래프톤 정글 2기] Day 74 (0) | 2023.06.17 |