๐ Supplement Page Table ๋?
- supplement page table์ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๋ณด์กฐ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ
- ๊ฐ๊ฐ์ ํ์ด์ง์ ๋ํด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ณณ(frame, disk, swap ์ค์ ์ด๋์ ์กด์ฌํ๋์ง)์ ์ ๋ณด ๋ณด์
- ์์ ๋ฐ์ดํฐ์ ์์ํ๋ ์ปค๋ ๊ฐ์์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ์ ๋ณด ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค
๐ Supplement Page Table ์ฌ์ฉ ๋ชฉ์
- ๋ณด์กฐ ํ์ด์ง ํ ์ด๋ธ์ ์ต์ํ ๋ ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
- ํ์ด์ง ํดํธ๊ฐ ๋ฐ์ ํ์ ๋ ๊ทธ๊ณณ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์์์ด์ผ ํ๋์ง๋ฅผ ์์๋ด๊ธฐ ์ํด ์ปค๋์ ๋ณด์กฐ ํ์ด์ง ํ ์ด๋ธ์์ ํดํธ๊ฐ ๋ฐ์ํ ๊ฐ์ ํ์ด์ง๋ฅผ ํ์
- ์ปค๋์ด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ ์ด๋ค ์์์ ํด์ (free)ํ ์ง ๊ณ ๋ฅด๊ธฐ ์ํด์ ๋ณด์กฐ ํ์ด์ง ํ ์ด๋ธ์ ์กฐ์ฌ
๐ Supplement Page Table ์๋ฃ ๊ตฌ์กฐ ์ข ๋ฅ
- Arrays : ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ ๋ฐ๋๊ฐ ๋ฎ๋ค
- Lists : ๊ฝค๋ ์ฌํํ ํธ์ด์ง๋ง ๋ฆฌ์คํธ๋ฅผ ์ํํ๋๋ฐ ์๊ฐ์ ๋ง์ด ์๋ชจํ๋ค
- Bitmaps : true ๋๋ false๊ฐ ๋ ์ ์๋ ๋นํธ ๋ฐฐ์ด, ๋์ผํ ๋ฆฌ์์ค ์งํฉ์์ ์ฌ์ฉ๋์ ์ถ์ ํ ๋ ์ ์ฉ
- Hash Tabbles : key-value 1 ๋ 1 ๋งค์นญ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์ฝ์ , ์ญ์ , ๊ฒ์ ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ ๊ฐ์ง๋ค. ํ์ง๋ง ์์๋ฅผ ๋ณด์ฅํ์ง ์๊ณ , ๊ฐ์ ์ธ๋ฑ์ค์ ๋ชจ๋ ํค๊ฐ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด(์ ๋ถ ์ถฉ๋ํ ๊ฒฝ์ฐ) O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ Supplement Page Table ์ ์ธ
../thread.h
struct thread {
/* Owned by thread.c. */
'
'
#endif
#ifdef VM
/* Table for whole virtual memory owned by thread. */
struct supplemental_page_table spt;
#endif
'
'
};
๐ Supplement Page Table ์๋ฃ ๊ตฌ์กฐ ์ ์ธ ๋ฐ ์ด๊ธฐํ
- supplemental_page_table ๊ตฌ์กฐ์ฒด ์์ spt๋ฅผ ๊ด๋ฆฌํ hash ๊ตฌ์ด์ ์ ์ธ
../vm.h
/* supplemental_page_table ๊ตฌ์กฐ์ฒด ์์ hash ๊ตฌ์กฐ์ฒด ์ ์ธ */
struct supplemental_page_table {
struct hash hash;
};
- page ๊ตฌ์กฐ์ฒด ์์ ์ฐ๊ธฐ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ์ฉ writable์ ์ธ
- hash ์๋ฃ๊ตฌ์กฐ์ elem์ ์ ์ธ
../vm.h
struct page {
'
'
/* Your implementation */
bool writable; // project 3 Virtual Memory ์ถ๊ฐ
struct hash_elem hash_elem; // project 3 Virtual Memory ์ถ๊ฐ
'
'
};
};
- supplemental_page_table์ ์ด๊ธฐํ ์ํฌ ๋์ hash ์๋ฃ๊ตฌ์กฐ๋ก init์ ํด์ค
../vm.h
void
supplemental_page_table_init (struct supplemental_page_table *spt UNUSED) {
hash_init(&spt->hash,page_hash,page_less, NULL);
}