[PintOS] Project3: WIL(1,2)

김상호·2022년 6월 28일
0

Development Log

목록 보기
43/45

WIL

Project3 요약 정리

정말 빠르게 지나간 2주였다. 새로운 팀으로 변경되고나서 2주간의 어렵다는 VM 주제를 시작하였다. 막상 개념을 공부할땐 그렇구나.. 하면서 배웠던 것 같은데 코드 구현에선 정말 멘붕이 왔었다.. 그래도 잘 보낸 2주였던 것 같다..

  1. 시작 전 개념 정리

  2. 과제

Project2 고민한 것들

  1. SPT 이 기존의 plm4를 완전히 대체하는 page table인줄 알았다.

    • 그렇기에 물리 메모리와 맵핑되는 부분에 대해서 해결되지 않았다.
    • thread.h 에 있는 pml4가 userprog에서만 thread에 포함되어 있었기에 사용하지 않는 것인줄 알았다.
    • 기존에 있던 코드라도 구현할 때 의심이 든다면 생각해보고 수정해보자
    • SPT는 기존의 plm4를 보조하여 효율적인 가상메모리 paging을 구현할 수 있게 도와주는 자료구조이다.
    • 기존의 pml4를 수정하여 구현할 수 있지만 매우 어려운 작업이기에 추천하지 않음

    → pml4 page table을 같이 사용하여 문제 해결

  2. pintos에서 제공하는 hash table을 정확히 이해하지 못함

  1. page, frame 구조체를 malloc이냐 palloc_get_page로 할당해주어야 할지 헷갈림

    • 결론: page와 frame의 구조체는 malloc, frame→kva에는 palloc_get_page 로 할당해줌
    💡 `palloc_get_page` 는 메모리풀에서 4kb만큼 물리메모리 공간을 잡고 물리 메모리의 시작 주소를 return 해준다. 그렇기에 page, frame을 `palloc_get_page` 으로 할당하면 물리메모리를 계속해서 4KB만큼 할당하게 된다.
  2. page fault 발생 시 SPT 에서 해당 page를 찾지 못하는 문제

    • 만들어진 page va는 0x400000, 0x401000, 0x402000 값이고 Hash Table의 key값이 된다.
    • page fault가 발생한 주소는 0x400bfa 값이 들어오고 key로 찾으려하니 찾을 수 없었다.
    • key값으로 저장되는 page의 va는 4KB(12bit)단위로 정렬되어 있어 12bit 앞 부분이 page table number로 사용된다.

    → 해결: page fault가 발생한 주소의 뒤 offset부분을 0으로 만들어서 SPT에서 찾으면 해결할 수 있다.

  3. vm_alloc_page_with_initializer 함수에서 uninit_new 함수의 호출이 끝나고 new_page에 값을 넣어주어야 정상 동작하고 uninit_new 전에 구조체 안의 값을 할당해주면 제대로 동작하지 않았다. ???이유를 잘 모르겠음

어려웠던 점과 느낀점

이번 프로젝트에서는 핀토스 프로젝트 중에서 제일 긴 2주간의 시간 동안 목표를 향해 달려갔다. 2주란 정말 긴 시간이지만 핀토스를 하면서 2주는 정말 짧은 시간이였구나..를 많이 느꼈던 것 같다.

초반에는 많이 해맸던 것 같다. 개념을 공부하고 코드를 익히는 과정이 혼돈이 많았던 시간이였다. 마지막 남은 프로젝트 4 그리고 정글에서의 마지막 프로젝트 "나만의 무기 갖기" 프로젝트 발제가 되고 반 분위기도 새로워졌다..

남은 1주일 어떻게 될지 잘 모르겠지만 열심히 해야겠다..

PintOS Project3 GIthub 주소 PintOS

0개의 댓글