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 ๋“ฑ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜๋„๋ก ๊ตฌํ˜„.