0. 개요

Implement Supplemental Page Table

우리의 핀토스는 pml4라는 페이지 테이블을 갖고 있는데 얘는 가상 메모리와 물리 메모리 간 매핑을 관리한다. 하지만, 이것으로 충분치 않음. 이전 섹션에서 논의했듯, 우리는 page fault와 자원 관리를 다루기 위해서 각각 페이지에 대한 추가 정보를 들고 있는 supplementary page table이 필요하다. 따라서, 우리는 프로젝트 3 첫번째 과제로 supplemental page table에 대한 기본적인 기능을 구현할 것이다.

Implement supplemental page table management functions in vm/vm.c.

우리는 어떻게 supplemantal page table을 설계할 것인지를 결정해야 한다. 우리의 supplemental page table을 디자인해보자. 그 전에, Supplemental Page Table이란 놈에 대해 좀 더 알아보도록 한다.

Supplemental Page Table(SPT)

SPT는 위에서 설명한 것처럼 page fault 발생, 그리고 자원 관리를 위해 각 페이지에 대한 추가 정보를 들고 있는 페이지 테이블을 말한다. 기존에 공부했던 multi-level page table과는 또 다른 테이블이다. 앞서 배웠던 multilevel page table은 그 목적이 실제 사용하는 페이지만을 여러 단계에 걸쳐 페이지 테이블에 할당해줌으로써 페이지 테이블 공간 복잡도를 줄이는 것이다.

반면, 얘는 아래 두 가지 역할을 수행하기 위해 존재한다.

  1. Page fault시 커널이 supplement 페이지 테이블에서 오류가 발생한 가상 페이지를 조회하여 어떤 데이터가 있어야 하는지를 확인할 필요가 있다. 이를 위한 용도가 있으며
  2. 프로세스가 종료될 때 커널이 추가 페이지 테이블을 참조하여 어떤 리소스를 free시킬 것인지를 결정한다.

<aside> 💡 supplemental page table은 process별로 생성되는 별도의 구조체로써, 동일하게 virtual address와 physical address간 mapping을 지원하지만 struct page와 struct frame 구조체들을 이용하여 기존 page table(pml4 table)이 담지 못하는 정보들을 추가적으로 저장하기 위해 사용됩니다. (ex. evicted page. mmaped page, etc...)

</aside>