supplemental_page_table_copy() 구현
- 이전 project2에서 구현했던 fork() 작업에 있어 부모스레드 interrupt frame을 자식 스레드에 복사를 해주었었다.
- 동일하게 부모가 갖고 있는 SPT를 자식에게 복사하여 전달 해야 한다.
- = 부모프로세스의 SPT는 hash로 관리되어 있으므로 hash elem을 하나하나 복사 해야 한다.
SPT 복사 작업 과정
- 세 페이지를 만든다.
- SPT 내용을 복사하여 자식 SPT에 삽입(부모페이지의 유형에 따라 나뉨)
- 부모페이지가 STACK일때
- 부모페이지의 타입이 UNINIT 일때
- 부모페이지가 STACK에 있지도 않고 UNINIT도 아닐때
물리 메모리 데이터 복사
- 위 과정 후 UNINIT이 아닌 페이지들에 대응되는 물리메모리의 데이터를 부모로 부터 COPY
- supplemental_page_table_copy() 코드
supplemental_page_table_kill() 구현
- process_exit()에서 호출되는 함수로 SPT의 모든 자원을 free
<aside>
💡 hash_clear() 만 해도 되나, 이후 mmap 작업을 위한 while문
</aside>
- supplemental_page_table_kill() 코드
process_exec() 및 process_cleanup() 수정
- 각각의 process는 독립적인 메모리가 갖어야 하므로 cleanpu 후 init 해준다.
- process_exec() 코드
- process_cleanup() 코드