thread, user program을 모두 pass하고나서 vm 진행 가능!!
즉, 기존 코드가 정상 동작해야 3주차 내용을 진행 가능. vm하면서 기존 코드를 수정하게 될 건데,
load_segment()
<aside>
🥕
이 함수를 구현해야함
</aside>
#ifdef VM 이 load 함수에 존재
- VM에 해당하면
load_segment() 함수를 실행
- VM에 안 해당하면 그냥 물리 메모리에 필요한 공간만큼 전체 할당받아 가상주소와 물리 주소를 매핑하는 형태 → 무조건 페이지 폴트가 발생하지 않음
- 이번 3장에서는, CPU가 명령어를 실행해 TLB가 (VA → PA) 매핑 테이블(= pml4)에서 페이지를 찾아 해당하는 물리 메모리를 CPU에게 전달하는데, 이 과정에서 2장은 무조건 해당되는 물리 메모리가 존재하는거였던거고 3장에서는 요구 페이징을 통해 필요한 내용만 물리 메모리에 적재해놨던 상황에서 페이지 폴트가 발생하고, 해당하는 페이지 폴트 핸들러로 넘어가 오류 처리를 진행하고 해당하는 페이지를 적재하고 다시 TLB가 체크해 알맞은 메모리 주소를 CPU에게 반환한다
보조 페이지 테이블(supplement page-table)
스택 영역 범위 설정
Stack Growth까지는 해야 페이지 폴트를 벗어나 user-program 테스트들이 100% 패스 가능할 것이다
(anonymous page 내용까지 구현하고 args-none 테스트를 이용해 잘 구현이 되었는지 확인해보세요)
Swap in/out부터는 기존 코드를 전면적으로 변경해야하므로, 그 전까지 최대한 완벽히 하는 것을 목표로 하세요