현재 핀토스에서는 **레벨 4 페이지 테이블(pml4)**을 사용하여 가상 메모리 주소와 물리 메모리 주소 간의 매핑 정보를 저장한다. 하지만 이것만으로는 충분하지 않다. 따라서 Page Fault와 Resource Management를 수월하게 진행할 수 있도록 Supplemental Page Table을 구현해 페이지에 대한 추가적인 정보들을 저장한다.

Supplemental Page Table

supplemental page table은 기존의 page table을 보완하기 위해 만든 것이다.

역할

크게 두 가지 역할을 수행한다.

추가 페이지 테이블을 만든 이유(출처)

struct supplemental_page_table 구현

먼저 추가 페이지 테이블의 구조체 struct supplemental_page_table을 구현한다. 그 후에 추가 테이블 구조체에 관계된 함수를 구현한다.

Supplemental page table을 구현하는 방식은 여러 가지가 있을 수 있다. 배열이나, 비트맵, 해시 테이블도 가능하다. 우리는 **hash table로 구현하기로 한다.**

Untitled

hash table이란?

lib/kernel/hash.h/struct hash

/* Hash table. */
struct hash {
	size_t elem_cnt;            /* Number of elements in table. */
	size_t bucket_cnt;          /* Number of buckets, a power of 2. */
	struct list *buckets;       /* Array of `bucket_cnt' lists. */
	hash_hash_func *hash;       /* Hash function. */
	hash_less_func *less;       /* Comparison function. */
	void *aux;                  /* Auxiliary data for `hash' and `less'. */
}

struct page 수정