📢 “여기까지 잘 오셨습니다. OS프로젝트를 시작합니다.”
OS프로젝트는 PintOS의 코드를 직접 수정해가며 진행하는 프로젝트입니다.
PintOS는 2004년 스탠포드에서 만들어진 교육용 운영체제예요. 우리 프로젝트는 이를 기반으로 KAIST 권영진 교수님 주도 하에 만들어진 KAIST PintOS
로 진행됩니다.
💡 팀 별로 프로젝트 1~3을 완수해갑니다.
KAIST PintOS Assignment : https://casys-kaist.github.io/pintos-kaist/
내용은 어렵지만, 매우 상세하게 접근 방법을 기술하고 있습니다.
💡 프로젝트3에서 해야하는 내용과 시작 방법 간략히...
지금 단계에서 당신의 Pintos에는 메모리의 가상 및 물리 매핑을 관리하기 위한 페이지 테이블(pml4)이 있습니다. 그러나 이것만으로는 부족합니다. 이전 섹션에서 논의한 대로, 페이지 폴트와 리소스 관리를 처리하기 위해 각 페이지에 대한 추가 정보를 보유할 보조 페이지 테이블이 필요합니다. 따라서 프로젝트 3의 첫 번째 작업으로 보조 페이지 테이블의 기본 기능을 구현하는 것을 제안합니다.
우선 이 Supplemental Page Table을 위해서 우리는 3가지를 구현해야한다.
void supplemental_page_table_init (struct supplemental_page_table *spt)
struct page *spt_find_page (struct supplemental_page_table *spt, void *va)
bool spt_insert_page (struct supplemental_page_table *spt, struct page *page)
이를 위해서 우리는 hash를 선언해줘야하는데, 그 이유는 introduction에 보면
Pintos also includes a hash table data structure (See Hash Table).
Pintos hash tables efficiently support insertions and deletions over a wide range of table sizes.
Pintos는 또한 해시 테이블 자료구조를 포함하고 있습니다 (해시 테이블 참고).
Pintos 해시 테이블은 다양한 테이블 크기에서의 삽입과 삭제를 효율적으로 지원합니다.
이런식으로 이야기가 되어있기 때문에 우리는 자료구조를 들고 있는 hash를 supplemental_page_table안에 선언해주어야한다.
이제 함수에 필요한 부분의 구조체를 만들고, 함수를 직접적으로 만들어 보면서 시작!
프로젝트 4는 왜 필수가 아닐까 의문이 들었는데... 프로젝트 3를 시작하면서 바로 알아버렸다. 구현해야할 야이 어마어마하다. 또한 테스트 케이스도 소주제별로 나누어져 있다기 보다, 다 연결되어있어서 앞의 내용을 완벽하게 구현해야 다음 테스트를 성공할 수 있다. 프로젝트 1,2의 경우에는 구현을 하면서 구현 내용을 바로 포스팅을 하였는데, 이번에는 그렇게 하지 못하였다. 왜냐하면 양이 많고 연결되어 있는 부분이 많아 프로젝트를 완성하고 한번에 정리하려고 한다. 버그 내용을 어떻게 고쳤는지 포스팅을 해둔 선배분들도 계시던데, 그 분들의 포스팅을 보고 많은 도움이 되었다. 버그 수정 내용을 따로 정리를 했어야했나... 하지만 지금 소주제별로 포스팅을 작성하는 것도 빡셌다.. ㅋㅋㅋㅋ
다음주면 핀토스가 끝나는데 유종의 미를 위해 열심히 달려야겠다! 내일 다른 팀들의 WIL 발표를 들으면서 부족한 개념 내용과 구현 방법을 얻어가고 싶다.