Pintos
Implements the PintOS OS with priority scheduling, system calls, virtual memory, and a growable file system using indexed and sparse allocation.
๐ป Project Page: https://github.com/hoonably/pintos
Project 1: Threads
๋ฌธ์
- ๊ธฐ๋ณธ PintOS ์ค๋ ๋ ์์คํ ์ ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์ด ๊ตฌํ๋์ด ์์ง ์๊ณ , ๋๊ธฐํ์ ์ฐ์ ์์ ์ญ์ (priority inversion)์ ๊ณ ๋ คํ์ง ์์.
ํด๊ฒฐํ ๋ด์ฉ
- Priority Scheduling ๊ตฌํ โ ๊ฐ ์ค๋ ๋๋ ์ฐ์ ์์๋ฅผ ๊ฐ๊ณ , ๋์ ์ฐ์ ์์๋ฅผ ๋จผ์ ์คํํ๋๋ก ํจ.
- Priority Donation ์ ์ฉ โ ์ฐ์ ์์ ์ญ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฝ์ ๋ณด์ ํ ์ค๋ ๋์ ์ฐ์ ์์๋ฅผ ์์๋ก โ๊ธฐ๋ถโํ๋ ๊ตฌ์กฐ ๊ตฌํ.
- Nested Donation ์ฒ๋ฆฌ โ ๋ฝ์ด ์ค์ฒฉ๋ ์ํฉ์์๋ donation์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฌ๋๋๋ก ๊ตฌํ.
Project 2-1: User Programs (System Calls)
๋ฌธ์
- PintOS๋ ์ ์ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ผ๋, ์์คํ ์ฝ์ด ์ ๋๋ก ์ ์๋์ง ์์.
- ํ์ผ I/O, ํ๋ก์ธ์ค ์ ์ด ๋ฑ ๊ธฐ๋ณธ์ ์ธ ์ ์ -์ปค๋ ์ํธ์์ฉ์ด ๋ฏธ๊ตฌํ ์ํ.
ํด๊ฒฐํ ๋ด์ฉ
- System Call Handler ๊ตฌํ โ
syscall.c
์์ system call dispatcher๋ฅผ ๊ตฌํํ๊ณ , syscall ๋ฒํธ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌ. - ํ์ผ ์์คํ
ํธ์ถ ์ง์ โ
open
,read
,write
,create
,close
๋ฑ์ ๊ธฐ๋ณธ ํ์ผ ์กฐ์ ๊ตฌํ. - User Pointer Validation โ ์ฌ์ฉ์๋ก๋ถํฐ ๋ค์ด์ค๋ ํฌ์ธํฐ๊ฐ ์ ํจํ์ง ๊ฒ์ฌํ์ฌ kernel crash ๋ฐฉ์ง.
- Argument Fetching โ ์์คํ ์ฝ ํธ์ถ ์, ์ ์ ์คํ์์ ์ธ์๋ฅผ ์์ ํ๊ฒ ์ถ์ถํ๋ ๋ก์ง ๊ตฌํ.
Project 2-2: User Programs (Process Control)
๋ฌธ์
- PintOS๋ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ์ข ๋ฃํ ์ ์์ผ๋, ๋ถ๋ชจ-์์ ๊ฐ์ ๋๊ธฐํ ๋ฐ ์์ ํ์๊ฐ ๋ฏธํกํจ.
ํด๊ฒฐํ ๋ด์ฉ
-
exec
,wait
,exit
๊ตฌํ โ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์์ ์คํ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋๋ก wait ๋ฉ์ปค๋์ฆ ์ถ๊ฐ. - Load/Execution ์ฑ๊ณต ์ฌ๋ถ ์ ๋ฌ โ ์์ ํ๋ก์ธ์ค์ ์คํ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ถ๋ชจ์๊ฒ ์ ๋ฌํ๋ ๊ตฌ์กฐ ๊ตฌํ.
- File Descriptor Table ๊ด๋ฆฌ โ ํ๋ก์ธ์ค๋ง๋ค ๋ ๋ฆฝ์ ์ธ FD ํ ์ด๋ธ์ ์ ์งํ๊ณ , ํ์ผ ๊ณต์ ์ ์ด๋ฅผ ์ถ๊ฐ.
- Exit status ์ ์ฅ ๋ฐ ํ์ โ ์ข ๋ฃ ์ํ๋ฅผ ๋ถ๋ชจ๊ฐ ์ ํํ ํ์ํ๋๋ก ๊ตฌํ.
Project 3: Virtual Memory
๋ฌธ์
- ๊ธฐ๋ณธ PintOS๋ demand paging, swapping, mmap ๋ฑ์ ์ง์ํ์ง ์์ผ๋ฉฐ, ๋ชจ๋ ํ์ด์ง๋ฅผ ๊ณ ์ ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ.
ํด๊ฒฐํ ๋ด์ฉ
- Frame Table ๊ตฌํ โ ์ฌ์ฉ์ ํ์ด์ง๋ฅผ ๋ด๋ ํ๋ ์ ๊ด๋ฆฌ ํ ์ด๋ธ ๊ตฌํ.
- Supplemental Page Table (SPT) โ ๊ฐ ํ์ด์ง์ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ (Hash ๊ธฐ๋ฐ).
- Page Fault Handler โ ์คํ ์ค ์๋ ํ์ด์ง ์ ๊ทผ ์, ํด๋น ์ ๋ณด๋ฅผ SPT์์ ์ฐพ์์ ๋ฌผ๋ฆฌ ํ์ด์ง ํ ๋น ๋ฐ ๋ก๋.
- Swapping ๊ตฌํ โ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ, ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ๊ต์ฒด(swap out) ํ ๋์ค์ ๋ค์ ๋ถ๋ฌ์ด(swap in).
- Page Replacement Policy โ Second Chance ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ต์ฒด ๋์ ํ์ด์ง ์ ํ.
- Stack Growth โ ์ ์ ์คํ์ด ๋์ ์ผ๋ก ํ์ฅ๋๋๋ก ๊ตฌํ (8MB ์ ํ).
- Memory-Mapped File (mmap/munmap) โ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ๋งคํํ์ฌ lazy loading ๋ฐ ์ ์ฅ ๊ตฌํ.
Project 4: File System Extension
๋ฌธ์
- ๊ธฐ์กด PintOS ํ์ผ ์์คํ ์ ๊ณ ์ ํฌ๊ธฐ ํ์ผ๋ง ์ง์ํ๋ฉฐ, EOF ์ดํ ์ฐ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , ๊ณต๊ฐ ๋ญ๋น(์ธ๋ถ ๋จํธํ)๊ฐ ํผ.
ํด๊ฒฐํ ๋ด์ฉ
- Extensible File Structure ๊ตฌํ โ ์ฐ๊ธฐ ์์ฒญ ์ ํ์ผ์ด ์๋์ผ๋ก ํ์ฅ๋๋๋ก inode ๊ตฌ์กฐ ๋ณ๊ฒฝ.
- Indexed Allocation โ direct, indirect, double indirect ๋ธ๋ก ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ ํํฐ์ ํฌ๊ธฐ๊น์ง ์ง์ ๊ฐ๋ฅํ๋๋ก ๊ฐ์ .
- Sparse File ์ง์ โ ๋น ์์ญ์ ์ค์ ๋ก ๋ธ๋ก์ ํ ๋นํ์ง ์๊ณ ์ฝ์ ๋๋ง ์ด๊ธฐํํ์ฌ ํจ์จ์ ์ธ ๊ณต๊ฐ ์ฌ์ฉ.
- Block Allocation Strategy ๋ณ๊ฒฝ โ ํ์ผ์ด ์กฐ๊ฐ๋๋๋ผ๋ ํ ๋น ๊ฐ๋ฅํ๋๋ก ์ธ๋ถ ๋จํธํ ํด์.
- Grow ๊ด๋ จ ํ ์คํธ 7์ข ํต๊ณผ โ grow-create, grow-file-size, grow-sparse ๋ฑ ๋ค์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ๋๋ก ๊ตฌํ.