Process API
ํ๋ก์ธ์ค ์์ฑยท์ข ๋ฃ API
fork(): ๋ถ๋ชจ ํ๋ก์ธ์ค์๋ ์์ PID(>0), ์์ ํ๋ก์ธ์ค์๋ 0์ ๋ฐํํ๋ฉฐ, ์คํจ ์ โ1 ๋ฐํ ๋ฐ errno ์ค์
exec*() ๊ณ์ด: execvp(), execl(), execle() ๋ฑ์ผ๋ก ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์์ ํ ์๋ก์ด ํ๋ก๊ทธ๋จ ์ด๋ฏธ์ง๋ก ๋ฎ์ด์. ์ด๋ ค ์๋ ํ์ผ ๋์คํฌ๋ฆฝํฐ์ PID๋ ๊ทธ๋๋ก ์ ์ง๋จ
wait() / waitpid(): ๋ถ๋ชจ๊ฐ ์์ ํ๋ก์ธ์ค์ ์ข ๋ฃ๋ฅผ ๋๊ธฐํ๋ฉฐ, ๋ฐํ๊ฐ์ผ๋ก ์ข ๋ฃ๋ ์์์ PID๋ฅผ ๋ฐ๊ณ , WIFEXITED, WEXITSTATUS ๋งคํฌ๋ก๋ก ์ข ๋ฃ ์ฝ๋๋ฅผ ํด์
์๊ทธ๋(signal) API
kill(pid, sig): ํน์ ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ์๊ทธ๋ ์ ์ก (์: SIGINT, SIGTSTP). ์ผ๋ฐ ์ฌ์ฉ์๋ ๋์ผ UID ํ๋ก์ธ์ค์๋ง, root๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ์๊ทธ๋ ์ก์ ๊ฐ๋ฅ
signal(sig, handler): ์ฌ์ฉ์ ์ ์ ์๊ทธ๋ ํธ๋ค๋ฌ ๋ฑ๋ก. ๋น๋๊ธฐ ์ด๋ฒคํธ(ํ์ด๋จธ, I/O ์๋ฃ ๋ฑ)๋ฅผ ํ๋ก์ธ์ค์ ์ ๋ฌ
๊ถํ๊ณผ ๊ฒฉ๋ฆฌ
UID ๊ธฐ๋ฐ ๊ถํ ๊ฒ์ฌ๋ก, ์ฌ์ฉ์๋ ์์ ์ ํ๋ก์ธ์ค๋ง ์ ์ด
์ํผ์ ์ (root)๋ง์ด ์์คํ ์ ์ฒด์ ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ฐ ์๊ทธ๋ ์ก์ ๊ถํ์ ๊ฐ์ง
์ ์ฉํ ์์คํ ๋ชจ๋ํฐ๋ง ๋๊ตฌ
ps / top: ํ๋ก์ธ์ค ์ํยท์์ ์ฌ์ฉ๋ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
killall: ํ๋ก์ธ์ค ์ด๋ฆ ๊ธฐ์ค ์ผ๊ด ์๊ทธ๋ ์ ์ก
macOS ๋ฑ์์ MenuMeters ๊ฐ์ GUI ์ ํธ๋ฆฌํฐ ํ์ฉ ๊ฐ๋ฅ
์์ฝ
PID (Process ID): ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๋ ๊ณ ์ ๋ฒํธ
ํ๋ก์ธ์ค ์์ฑ API: fork(), exec(), wait()
- fork(): ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๊ฑฐ์ ์์ ํ ๋ณต์ฌ๋ณธ์ธ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑ
- exec(): ํ์ฌ ํ๋ก์ธ์ค ์ด๋ฏธ์ง๋ฅผ ์๋ก์ด ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฎ์ด์ฐ๊ธฐ
- wait(): ๋ถ๋ชจ๊ฐ ์์์ ์ข ๋ฃ๋ฅผ ๋๊ธฐ
ํ๋ก์ธ์ค ์ ์ด: ์๊ทธ๋(kill(), signal())์ ์ด์ฉํด ์ค๋จ, ์ผ์ ์ค๋จ, ์ข ๋ฃ ๊ฐ๋ฅ
- ์๊ทธ๋: ํ๋ก์ธ์ค ์ ์ด(์ค๋จยท์ฌ๊ฐยท์ข ๋ฃ ๋ฑ)๋ฅผ ์ํด OS๊ฐ ๋ณด๋ด๋ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
์ฌ์ฉ์ ๊ฒฉ๋ฆฌ: ์ผ๋ฐ ์ฌ์ฉ์๋ ์์ ์ ํ๋ก์ธ์ค๋ง ์ ์ดํ๊ณ , root๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌ
- superuser(root): ๋ชจ๋ ํ๋ก์ธ์ค์ ์์คํ ์์์ ๋ํ ๋ฌด์ ํ ๊ถํ ์ฌ์ฉ์
Direct Execution
๊ฐ์
์ด์์ฒด์ ์์ CPU ๊ฐ์ํ๋ฅผ ๊ตฌํํ ๋ ์ถฉ๋ํ๋ ๋ ๊ฐ์ง ๋ชฉํ๋
- ์ฑ๋ฅ: ๊ฐ๋ฅํ ํ ๋ค์ดํฐ๋ธ ์๋๋ก ํ๋ก๊ทธ๋จ์ ์คํ
- ์ ์ด: ์ธ์ ๋ OS๊ฐ CPU ์ ์ด๊ถ์ ํ์ํ ์ ์์ด์ผ ํจ
์ด ๋์ ๋ชจ๋ ๋ง์กฑ์ํค๋ ๋ฐฉ์์ด ๋ฐ๋ก ์ ํ์ ์ง์ ์คํ(Limited Direct Execution)์ ๋๋ค.
์ ํ์ ์ง์ ์คํ ๋ฉ์ปค๋์ฆ
- ํธ๋ฉ ํ ์ด๋ธ ์ด๊ธฐํ (๋ถํ ์)
- returnโfromโtrap์ผ๋ก ์ฌ์ฉ์ ๋ชจ๋ ์ง์ -> main() ์คํ
- ์ง์ ์คํ: ๋๋ถ๋ถ์ ๋ช ๋ น์ ํ๋์จ์ด์์ ๋ฐ๋ก ์คํ
- ํธ๋ฉ/์์คํ ์ฝ/์ธํฐ๋ฝํธ ๋ฐ์ ์: ํ๋์จ์ด๊ฐ CPU ๋ชจ๋๋ฅผ ์ปค๋๋ก ์ ํํ๊ณ , ์ปค๋ ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐ -> ์์ ํ ๋ค์ ์ฌ์ฉ์ ๋ชจ๋ ๋ณต๊ท
- ํ์ด๋จธ ์ธํฐ๋ฝํธ๋ฅผ ํตํด ๋นํ๋ ฅ์ ์ค์ผ์ค๋ง(์๊ฐ๋ถํ ) ์ ๋
๋ฌธ์ ย #1: ์ ํ๋ ์ฐ์ฐ
์ฌ์ฉ์ ๋ชจ๋ vs ์ปค๋ ๋ชจ๋
- ์ฌ์ฉ์ ๋ชจ๋์์๋ ํน๊ถ ๋ช ๋ น ์คํ ์ ํธ๋ฉ ๋ฐ์
- ์ปค๋ ๋ชจ๋์์๋ ๋ชจ๋ ํ๋์จ์ดยท๋ฉ๋ชจ๋ฆฌ ์์ ์ ๊ทผ ํ์ฉ
์์คํ ์ฝ ํ๋กํ ์ฝ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์(open(), read() ๋ฑ)๊ฐ ํธ๋ฉ ๋ช ๋ น์ด ์คํ
- ํ๋์จ์ด๊ฐ ์ฌ์ฉ์ ๋ ์ง์คํฐ๋ฅผ ์ปค๋ ์คํ์ ์ ์ฅ, ์ปค๋ ๋ชจ๋ ์ง์
- ํธ๋ฉ ํ ์ด๋ธ์ ๋ฑ๋ก๋ ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐํด ์๋น์ค ์ํ
- returnโfromโtrap์ผ๋ก ์ฌ์ฉ์ ๋ชจ๋ ๋ณต๊ท
๋ฌธ์ ย #2: ํ๋ก์ธ์ค ์ ํ
ํ์ด๋จธ ์ธํฐ๋ฝํธ ๊ธฐ๋ฐ ๋นํ๋ ฅ์ ์ ํ
์ปจํ ์คํธ ์ค์์น ํ๋กํ ์ฝ
- ํ์ด๋จธ ์ธํฐ๋ฝํธ -> ํ๋์จ์ด๊ฐ ์ฌ์ฉ์ ๋ ์ง์คํฐ๋ฅผ ์ปค๋ ์คํ์ ์ ์ฅ
- OS switch() ํธ์ถ:
- ์ด์ ํ๋ก์ธ์ค A์ ์ปค๋ ๋ ์ง์คํฐ๋ฅผ PCB๋ก ์ ์ฅ
- ๋ค์ ํ๋ก์ธ์ค B์ ๋ ์ง์คํฐ๋ฅผ PCB์์ ๋ณต์ -> ์ปค๋ ์คํ ๊ต์ฒด
- returnโfromโtrap -> B์ ๋ ์ง์คํฐ ๋ณต์ ํ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ณต๊ท
๋์์ฑ ๊ณ ๋ ค์ฌํญ
์ธํฐ๋ฝํธ ์ค์ฒฉ: ์์คํ ์ฝ ์ฒ๋ฆฌ ์ค ๋ ๋ค๋ฅธ ์ธํฐ๋ฝํธ ๋ฐ์
ํด๊ฒฐ ๊ธฐ๋ฒ:
- ์ธํฐ๋ฝํธ ๋นํ์ฑํ ๊ตฌ์ญ ์ต์ํ
- ๋ฝ(lock) ๋ฉ์ปค๋์ฆ์ผ๋ก ํต์ฌ ์๋ฃ๊ตฌ์กฐ ๋ณดํธ
- ๋ฉํฐํ๋ก์ธ์ ํ๊ฒฝ์์๋ ๋ ์ ๊ตํ ๋์์ฑ ์ ์ด ํ์
์์ฝ ๋ฐ ์ธก์ ๊ณผ์
Limited Direct Execution Protocol:
- ํธ๋ฉ ํ ์ด๋ธ โbabyโproofingโ
- ์ฌ์ฉ์ ์ฝ๋ ์ง์ ์คํ
- ํธ๋ฉยท์ธํฐ๋ฝํธ ์ ์ปค๋ ๊ฐ์
- ํ์ด๋จธ ์ธํฐ๋ฝํธ๋ก ์๊ฐ๋ถํ ์ ํ
์ธก์ ๊ณผ์ :
gettimeofday()
๋ก ์์คํ ์ฝ ๋น์ฉ ์ธก์ - ํ์ดํ+
sched_setaffinity()
๋ก ์ปจํ ์คํธ ์ค์์น ๋น์ฉ ์ธก์
ํต์ฌ ์ฉ์ด
Limited Direct Execution: ํจ์จ์ฑ๊ณผ ์ ์ด๊ถ ๋ณด์ฅ์ ์ํ ํ๋์จ์ด+OS ํ๋ ฅ ๊ธฐ๋ฒ
Trap / return-from-trap: ์์คํ ์ฝ ์ง์ ยท๋ณต๊ท์ฉ ํน๊ถ ๋ช ๋ น์ด
User Mode / Kernel Mode: ๊ถํ ์ ํ ๋ชจ๋ vs ํน๊ถ ๋ชจ๋
Context Switch: ํ๋ก์ธ์ค ์ ํ์ ์ํ ๋ ์ง์คํฐ ์ ์ฅ/๋ณต์ ํ๋กํ ์ฝ
Trap Table: ํธ๋ฉ ํธ๋ค๋ฌ ์ฃผ์ ๋ชฉ๋ก, ๋ถํ ์ OS๊ฐ ์ค์
CPU Scheduling
์ค์ผ์ค๋ง ๊ฐ์
์ด์์ฒด์ ์ค์ผ์ค๋ฌ๋ ์ปจํ ์คํธ ์ค์์น ๋ฑ ์ ์์ค ๋ฉ์ปค๋์ฆ ์์ ์๋ํ๋ ๊ณ ์์ค ์ ์ฑ (์ค์ผ์ค๋ง ๊ท์จ)์ ๊ฒฐ์ ํฉ๋๋ค. ์ด ์ฅ์์๋ ๋ํ์ ์ธ ์ค์ผ์ค๋ง ์ ์ฑ ์ ์ดํด๋ณด๊ณ , ๊ฐ ์ ์ฑ ์ ๊ฐ์ , ์ฑ๋ฅ ๋ฉํธ๋ฆญ, ์ฅ๋จ์ ์ ๋ถ์ํฉ๋๋ค.
์์ ๋ถํ ๊ฐ์ (Workload Assumptions)
- ๊ฐ ์์ (job)์ด ๋์ผํ ์คํ ์๊ฐ
- ๋ชจ๋ ์์ ์ด ๋์์ ๋์ฐฉ
- ์์๋๋ฉด ์ค๋จ ์์ด ์๋ฃ๊น์ง ์คํ
- I/O ์์ด CPU๋ง ์ฌ์ฉ
- ๊ฐ ์์ ์ ๋ฐํ์(์คํ ์๊ฐ)์ ๋ฏธ๋ฆฌ ์๊ณ ์์
์ค์ ํ๊ฒฝ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ์์ง๋ง, ์ดํ ์ฅ์์ ์์ฐจ์ ์ผ๋ก ์ํํด ๋๊ฐ๋๋ค.
์ค์ผ์ค๋ง ๋ฉํธ๋ฆญ (Scheduling Metrics)
Turnaround Time: ์์ ์๋ฃ ์๊ฐ โ ๋์ฐฉ ์๊ฐ (T_completion โ T_arrival)
Fairness: ์) Jainโs Fairness Index. ์ฑ๋ฅ ์ต์ ํ์ ๊ณต์ ์ฑ์ ์ข ์ข ์์ถฉํฉ๋๋ค.
FIFO (First In, First Out)
์ ์: ๋์ฐฉ ์์๋๋ก ์์ ์คํ
์ฅ์ : ๊ตฌํ์ด ๊ฐ๋จ
๋จ์ : ๊ธด ์์ ์ด ์์ ์ค๋ฉด ์งง์ ์์ ๋ค์ด ๋๊ธฐํ๋ ์ปจ๋ณด์ด ํจ๊ณผ ๋ฐ์
SJF (Shortest Job First)
๋น์ ์ ํ: ์คํ ์๊ฐ์ด ์งง์ ์์ ๋ถํฐ ์์ฐจ ์คํ
FIFO ๋๋น ํ๊ท Turnaround๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์
์ ์ : ์์ ๋ฐํ์์ ์์์ผ ํจ
STCF / PSJF (Shortest TimeโtoโCompletion First)
์ ์ ํ SJF: ์ ์์ ๋์ฐฉ ์ ๋จ์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์์ ์ ์ฆ์ ์คํ
Lateโarrival ๋ฌธ์ ํด์, ํ๊ท Turnaround ์ต์ ํ
์๋ต ์๊ฐ(Response Time)
์ ์: ์์ ๋์ฐฉ ์๊ฐ๋ถํฐ ์ฒซ ์คํ ์๊ฐ๊น์ง์ ์๊ฐ (T_first_run โ T_arrival)
STCF ๋ฑ์ Turnaround์ ์ข์ง๋ง, ์๋ต ์๊ฐ์ ์ด์
๋ผ์ด๋ ๋ก๋น(Round Robin)
Time Slice(ํํ ) ๋จ์๋ก ์์ ์ ์ํ ์คํ(์๊ฐ ๋ถํ )
์ฅ์ : ๊ณต์ ์ฑ ์ ์ง, ์๋ต ์๊ฐ ๋ํญ ๊ฐ์
๋จ์ : Context Switch ์ค๋ฒํค๋ -> ํํ ๊ธธ์ด ๊ฒฐ์ ์ tradeโoff ํ์
Amortization ํ
ํํ ์ ๋๋ ค Context Switch ๋น์ฉ์ ํฌ์(Amortize)ํด ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์
ํํ (time slice): Round Robin ์ค์ผ์ค๋ง์์, ํ ํ๋ก์ธ์ค๊ฐ ์ฐ์์ผ๋ก CPU๋ฅผ ์ฐจ์งํ๋ ์ต๋ ์๊ฐ ๋จ์์ ๋๋ค. ๋ณดํต ์ ๋ฐ๋ฆฌ์ด(ms) ๋จ์๋ก ์ค์ ํฉ๋๋ค.
์ปจํ ์คํธ ์ค์์น(Context Switch) ๋น์ฉ:
- ํ๋ก์ธ์ค A -> B ์ ํ ์, A์ ๋ ์ง์คํฐยทPCยท์คํ ํฌ์ธํฐ ๋ฑ์ ์ ์ฅํ๊ณ , B์ ์ํ๋ฅผ ๋ณต์ํ๋ ๋ฐ ๋๋ ์ค๋ฒํค๋(์์ญ~์๋ฐฑ ๋ง์ดํฌ๋ก์ด).
- ์ด ์๊ฐ๋งํผ CPU๋ โ์ค์ ์์ โ์ด ์๋๋ผ โ์ค์์นญ ์์ โ์ ์๋น๋ฉ๋๋ค.
ํํ ์ด ์งง์ผ๋ฉด
- ๋ ์์ฃผ ์ปจํ ์คํธ ์ค์์น๊ฐ ๋ฐ์ -> ์ค๋ฒํค๋๊ฐ ๋์ -> ์ ์ฉํ ๊ณ์ฐ ์๊ฐ์ด ์ค์ด๋ฆ.
ํํ ์ ๋๋ฆฌ๋ฉด
- ํ ๋ฒ ์ค์์น ํ ์ค๋ซ๋์ ๋์ผ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉ -> ์ค์์น ํ์ ๊ฐ์
- ์ ์ฒด ์คํ ์๊ฐ ๋๋น ์ค์์น ๋น์ฉ ๋น์จ์ด ์์์ ธ โํฌ์(amortize)โ๋จ
- ๋ฐ๋ผ์ CPU๋ ์ค์ ์์ (๋ฒ์คํธ) ์ํ์ ๋ ๋ง์ ์๊ฐ์ ์ธ ์ ์๊ฒ ๋ฉ๋๋ค.
I/O ํตํฉ (Incorporating I/O)
CPU ๋ฒ์คํธ์ I/O ๋ฒ์คํธ๋ฅผ ๋ ๋ฆฝ ์์ ์ผ๋ก ๊ฐ์ฃผ
I/O ๋๊ธฐ ์ค์ธ ์์ ์ด Blocked ์ํ๊ฐ ๋๋ฉด ๋ค๋ฅธ ์์ ์ ์คํํด CPU ํ์ฉ๋๋ฅผ ๊ทน๋ํ
CPU ๋ฒ์คํธ
- ํ๋ก์ธ์ค๊ฐ ์ฐ์ํด์ CPU ์ฐ์ฐ๋ง ์ํํ๋ ๊ตฌ๊ฐ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ซ์๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ๊ณ์ฐ ์์ ์ด ๊ณ์ ์ด์ด์ง ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ๊ธธ์ด๊ฐ ๋ค์ํ๊ฒ ๋ํ๋๋ฉฐ, ๊ณ์ฐ๋์ด ๋ง์ ์์ ์ผ์๋ก ๊ธธ๊ฒ ์ ์ง๋ฉ๋๋ค.
I/O ๋ฒ์คํธ
- ํ๋ก์ธ์ค๊ฐ ๋์คํฌ, ๋คํธ์ํฌ, ํฐ๋ฏธ๋ ๊ฐ์ I/O ์ฅ์น์ ์ ์ถ๋ ฅ ์์ ์ ์ํํ๋ ๊ตฌ๊ฐ์ ๋๋ค.
- ์์ปจ๋ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ๊ณ , ๋คํธ์ํฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ํค๋ณด๋ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์์ ๋งํฉ๋๋ค.
- ์ด ๊ตฌ๊ฐ ๋์์๋ CPU๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๊ณ , ๋์ I/O ์ฅ์น์ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋ฌด(็ก) ์ค๋ผํด(No More Oracle)
๋ฐํ์ ์ ๋ณด๋ฅผ ๋ชจ๋ฅด๋ ํ์ค์ ๋ฐ์ํด์ผ ํจ
์ดํ ์ฅ์์ MLFQ(MultiโLevel Feedback Queue)๋ก ๊ณผ๊ฑฐ ์คํ ํจํด์ ์ด์ฉํด ๋ฏธ๋ ํ๋์ ์์ธกํ๋ ๊ธฐ๋ฒ ์๊ฐ ์์
์์ฝ
๋ ๊ณ์ด์ ์ค์ผ์ค๋ฌ:
- ๊ธธ์ด ๊ธฐ๋ฐ(SJF, STCF) -> Turnaround ์ต์ ํ, ์๋ต ์๊ฐ ๋ฏธํก
- ๊ณต์ ์ฑ ๊ธฐ๋ฐ(RR) -> Response Time ์ต์ ํ, Turnaround ์ ํ
I/O, ์์ธก ๋ถ๊ฐ๋ฅ์ฑ ๋ฑ์ ๋ค๋ฃจ๊ธฐ ์ํด ํผํฉ ๊ธฐ๋ฒ๊ณผ ์์ธก ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค.
MultiโLevel Feedback
๋๊ธฐ ๋ฐ ๊ธฐ๋ณธ ๊ฐ๋
๋ชฉํ: ์งง์(interactive) ์์ ์๋ ๋น ๋ฅธ ์๋ต, ๊ธด(CPUโbound) ์์ ์๋ ๊ณต์ ํ ์งํ ๋ณด์ฅ
ํผ๋๋ฐฑ ๊ธฐ๋ฐ ์ฐ์ ์์ ์กฐ์ : ๊ณผ๊ฑฐ CPU ์ฌ์ฉ ํจํด์ ๊ด์ฐฐํด ์ฐ์ ์์๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝ
MLFQ์ ๋ค์ฏ ๊ฐ์ง ๊ท์น
- Ruleย 1: ์ฐ์ ์์(A) > ์ฐ์ ์์(B) -> A ์คํ
- Ruleย 2: ์ฐ์ ์์ ๋์ผ -> ํด๋น ํ์ timeโslice(quantum)๋ก Roundย Robin
- Ruleย 3: ์ ์์ ์ ์ต์์ ํ(Q0)์ ๋ฐฐ์น
- Ruleย 4: ์ฃผ์ด์ง ํ์์ ํ ๋น๋ ์๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด(ํ ๋น ์ฌ๋ฌ ๋ฒ ๋ถํ ์ฌ์ฉ ํฌํจ) ํ ๋จ๊ณ ๋ฎ์ ํ๋ก ๊ฐ๋ฑ
- Ruleย 5: ์ผ์ ๊ธฐ๊ฐ S๋ง๋ค ๋ชจ๋ ์์ ์ ์ต์์ ํ๋ก ์น๊ฒฉ(์คํ๋ฒ ์ด์ ๋ฐฉ์ง ๋ฐ ํ๋ ๋ณํ ๋ฐ์)
์ฐ์ ์์ ๋ถ์คํธ (Ruleย 5)
ํ์์ฑ: ๋ฎ์ ํ์ ๋ด๋ ค๊ฐ CPUโbound ์์ ์ด ๋ฌดํ ๋๊ธฐ(starvation) ๋๋ ๋ฌธ์ ํด๊ฒฐ
โvooโdoo constantโ ๋ฌธ์ : Boost ์ฃผ๊ธฐ S ์ค์ ์ด ์ํฌ๋ก๋๋ง๋ค ๋ฌ๋ผ, ์ ์ ํ ๊ฐ์ ์ฐพ๊ธฐ ์ด๋ ค์
AntiโGaming์ ์ํ ๊ฐ์ (Ruleย 4 ๊ฐ์ )
์๋ Ruleย 4a/4b: I/O ์ ์๋ ๊ฐ์ ํ ์ ์ง ๊ฐ๋ฅ -> CPU ๋ ์ (gaming) ์ ๋ฐ
๊ฐ์ ๋ Ruleย 4: I/O ์ฌ๋ถ์ ์๊ด์์ด ํ ๋น๋ ์ด ์๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฑ -> ๊ณต์ ์ฑ ํ๋ณด
ํ๋ผ๋ฏธํฐ ํ๋
ํ ์, ํ๋ณ quantum, boost ์ฃผ๊ธฐ S ๋ฑ์ ์ํฌ๋ก๋์ ๋ง์ถฐ ์กฐ์
Quantum ์ฐจ๋ณํ:
- ์์ ํ(Q0): ์งง์ quantum(โ10ย ms) -> ๋ฐ์์ฑ ํฅ์
- ํ์ ํ(Q2 ์ด์): ๊ธด quantum(์์ญย ~ย ์๋ฐฑย ms) -> CPUโbound ํจ์จ ํฅ์
์ค์ ์์คํ ๊ตฌํ ์
Solaris TS: 60๊ฐ ํ, 20ย ms->์๋ฐฑย ms๋ก ์ฆ๊ฐํ๋ quantum, ์ฝ 1ย s๋ง๋ค boost
FreeBSD (4.3BSD): decayโusage ๋ฐฉ์์ผ๋ก ์ฐ์ ์์ ์์ ๊ณ์ฐ, ์ฌ์ฉ๋ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๊ฐ์์์ผ boost ํจ๊ณผ
์ฌ์ฉ์ยท๊ด๋ฆฌ์ ์กฐ์ธ(Advice)
nice(์ค์ผ์ค๋ฌ), madvise(๋ฉ๋ชจ๋ฆฌ), ํ์ผ ์์คํ ํ๋ฆฌํ์น ๋ฑ ๋ค์ํ ๋ถ๋ถ์์ hint ์ ๊ณต ๊ฐ๋ฅ
์ผ๋ถ ์์คํ ์ OS ์ ์ฉ ๋์ ์ฐ์ ์์ ํ๋ฅผ ์์ฝํด ์ฌ์ฉ์ ์์ ๊ณผ ๊ฒฉ๋ฆฌ
์์ฝ
- Interactive ์ฑ๋ฅ: ์งง์ ์์ ์ ๋น ๋ฅธ ์๋ต ์ ๊ณต (SJF/STCF ์ ์ฌ)
- Fairness: ๊ธด ์์ ๋ starvation ์์ด ์ฃผ๊ธฐ์ ์คํ ๋ณด์ฅ
- ์ ์์ฑ: ์ํฌ๋ก๋ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ ์์ ๋์ ์กฐ์
MLFQ๋ โ๋ค๋จ๊ณ ํ + ์คํ ํผ๋๋ฐฑโ์ด๋ผ๋ ๊ฐ๋จํ ์์ด๋์ด๋ก, ๋ค์ํ ์์ ๋ถ๋ฅ๋ฅผ ๊ท ํ ์๊ฒ ์ฒ๋ฆฌํ๋ ๊ฐ๋ ฅํ ์ค์ผ์ค๋ง ๊ธฐ๋ฒ์ ๋๋ค.
Lottery Scheduling
Proportional Share Scheduling ๊ฐ๋
๋ชฉํ: ์์คํ ์์(CPU ์๊ฐ)์ ํฐ์ผ ์๋ ๊ฐ์ค์น์ ๋น๋กํ์ฌ ๊ณต์ ํ๊ฒ ๋ถ๋ฐฐ
์ ์ฉ: ๊ฐ์ํ ํ๊ฒฝ์์ ๊ฐ์ ๋จธ์ ์ CPU ์ฌ์ดํด์ ํ ๋นํ๊ฑฐ๋, ํ๋ก์ธ์ค๋ณ ์ฐ์ ์์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํ ๋ ์ ์ฉ
Lottery Scheduling
์์ด๋์ด: ๊ฐ ์์ ์ ํฐ์ผ์ ํ ๋นํ๊ณ , ๋งค ์ค์ผ์ค๋ง ์ ๋ฌด์์๋ก ํฐ์ผ์ ์ถ์ฒจ
ํน์ง:
- ๋จ์์ฑ: ํฐ์ผ ํ์ ๋ฒํธ๋ง ๋ฃ์๋ค ๋ฝ์ผ๋ฉด ๋จ
- ํ๋ฅ ์ ๊ณต์ ์ฑ: ์ถฉ๋ถํ ๊ธด ์๊ฐ ๋์, ๊ฐ ์์ ์ด ํ ๋น๋ ํฐ์ผ ๋น์จ์ ๋ฐ๋ผ CPU ์๊ฐ์ ์ฐจ์ง
- ์ ์ฐ์ฑ: ํฐ์ผ ์ ์กฐ์ ๋ก ์ฐ์ ์์ ๋ถ์ฌ ๋จ์ :
- ๋ฌด์์์ฑ์ผ๋ก ์ธํด ์งง์ ์๊ฐ ๊ตฌ๊ฐ์์๋ ๋ถ๊ณต์ ํ ์ ์์
- ํฐ์ผ ํ์ด ํด์๋ก ์ถ์ฒจ ๋น์ฉ ์ฆ๊ฐ (๋ณดํต ์ ํ ๊ฒ์)
Stride Scheduling
์์ด๋์ด: Lottery๋ฅผ ๊ฒฐ์ ๋ก ์ ๋ฐฉ์์ผ๋ก ๊ตฌํ
๊ตฌ์ฑ ์์:
- Stride = L / tickets (L์ ํฐ ์์, ์: 10,000)
- ๊ฐ ์์ ์ pass ๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋งค ์คํ๋ง๋ค ์์ ์ stride๋ฅผ pass์ ๋ํจ
- ๋ค์ ์คํ ์์ ์ ์ต์ pass ๊ฐ์ ๊ฐ์ง ์์ ์ ์ ํ
์ฅ์ : ์์ธก ๊ฐ๋ฅํ๊ณ , ํ๋ฅ ์ ๋ณ๋์ด ์์
๋จ์ : stride ๊ณ์ฐ์ ์ค๋ฒํค๋, ํฐ์ผ ์ฌํ ๋น ์ ๋ณต์ก๋
Completely Fair Scheduler (CFS)
Linux์ CFS๋ ๊ฐ์ค์น ๊ธฐ๋ฐ RoundโRobin์ ํ์ฅํ ํํ์ ๋๋ค.
๊ฐ์ค์น(Weight)์ nice ๋ ๋ฒจ
UNIX์ nice ๊ฐ์ โ20~+19 ๋ฒ์๋ก ์ง์ ํด ํ๋ก์ธ์ค ์ฐ์ ์์๋ฅผ ์ค์
CFS๋ nice ๊ฐ์ weight ํ ์ด๋ธ(40๊ฐ ํญ๋ชฉ)๋ก ๋งคํ, ๊ธฐ๋ณธ weightโ=1024 -> time_slice ๊ณ์ฐ ์ ์ฌ์ฉ
time slice ๊ณ์ฐ
n๊ฐ์ runnable ํ๋ก์ธ์ค์ ๋ํด:
\[timeslice_k = {weight_k\over \displaystyle\sum_{k=0}^{k=n}{weight_k}} \times SchedLatency\]์: A(niceโ=โโ5, weightโ=โ3121), B(niceโ=โ0, weightโ=โ1024), sched_latency=48ย ms -> Aย โย 36ย ms, Bย โย 12ย ms
vruntime ์ ๋ฐ์ดํธ
์ค์ ์คํ ์๊ฐ(runtimeแตข)์ ๋ํด:
\[vruntime_i += {weight_0\over weight_i} \times runtime_i\]๊ฐ์ค์น๊ฐ ํด์๋ก vruntime ์ฆ๊ฐ์จ์ด ๋๋ ค, ๋ ๋ง์ CPU ์๊ฐ์ด ๋ณด์ฅ๋จ
์๋ฃ๊ตฌ์กฐ: ๋ ๋-๋ธ๋ ํธ๋ฆฌ
runnable ํ๋ก์ธ์ค๋ฅผ vruntime ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๋ ๋โ๋ธ๋ ํธ๋ฆฌ์ ์ ์ฅ
๋ค์ ์คํํ ํ๋ก์ธ์ค๋ฅผ ์ต์ vruntime ๋ ธ๋์์ O(logย n) ์๊ฐ์ ์ ํ
sleep -> runnable ์ ํ ์ vruntime์ ํธ๋ฆฌ์ ์ต์ vruntime์ผ๋ก ์กฐ์ ํด starvation ๋ฐฉ์ง
์ฅ๋จ์ ๋ฐ ํ์ฉ
์ฅ์ :
- ํ์ฅ์ฑ: ์์ฒ ๊ฐ ํ๋ก์ธ์ค์์๋ O(logย n) ์ค์ผ์ค๋ง
- ๊ณต์ ์ฑ: ๊ฐ์ค์น์ ๋ฐ๋ฅธ ๋น๋ก ๋ถ๋ฐฐ, nice ๊ฐ ์กฐ์ ๊ฐ๋ฅ ๋จ์ :
- I/O ์ง์ค ์์ ์ wakeup ํ ๊ณผ๋ํ CPU ์ ์ ๊ฐ๋ฅ
- ํฐ์ผ/๊ฐ์ค์น ํ ๋น ์ ์ฑ ์ ์ฌ์ ํ ๊ด๋ฆฌ์๊ฐ ๊ฒฐ์ ํด์ผ ํจ
์ ์ฉ ์: ๊ฐ์ํ ํ๋ซํผ(ESX Server), ํด๋ผ์ฐ๋ ํ๊ฒฝ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ผํฐ
Address Spaces
์์ ์ฃผ์ ๊ณต๊ฐ ๊ตฌ์กฐ
๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ํฌ๊ฒ ์ธ ์์ญ์ผ๋ก ๋๋ฉ๋๋ค:
- ์ฝ๋(Code): ํ๋ก๊ทธ๋จ ๋ช ๋ น์ด๊ฐ ์ ์ฅ๋๋ ๊ณ ์ ํฌ๊ธฐ ์ธ๊ทธ๋จผํธ
- ํ(Heap): malloc() ๋ฑ์ผ๋ก ๋์ ํ ๋น๋ ๋ฐ์ดํฐ๊ฐ ์์นํ๋ฉฐ, ์ฝ๋ ๋ฐ๋ก ์๋์์ ์๋ก ์ฑ์ฅ
- ์คํ(Stack): ์ง์ญ ๋ณ์ยทํจ์ ์ธ์ยท๋ฆฌํด ์ฃผ์๋ฅผ ์ ์ฅํ๋ฉฐ, ์ฃผ์ ๊ณต๊ฐ์ ๋(์ต์์)์์ ์๋๋ก ์ฑ์ฅ
์ด์ฒ๋ผ ํ๊ณผ ์คํ์ ์ฃผ์ ๊ณต๊ฐ์ ์ ๋์ ๋ฐฐ์นํ๋ฉด ๋ ์์ญ์ด ์๋ก ์ถฉ๋ ์์ด ์ฑ์ฅํ ์ ์์ต๋๋ค
๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ์ ํต์ฌ ๊ณผ์
๊ฐ์ํ ๋ชฉํ: ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ฐ 32๋นํธ(๋๋ 64๋นํธ)์ฒ๋ผ ๋ณด์ด๋ ํฐ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉด์๋, ์ค์ ๋ก๋ ํ๋์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋๋ก ๋ง๋๋ ๊ฒ
์๋ ์๋ฆฌ: ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ์ฃผ์(์: 0)๋ฅผ ์ฐธ์กฐํ๋ฉด, ํ๋์จ์ด MMU์ ์ด์์ฒด์ ๊ฐ ํ๋ ฅํด ์ค์ ๋ฌผ๋ฆฌ ์ฃผ์(์: 320ย KB)๋ก ํฌ๋ช ํ๊ฒ ๋ณํํฉ๋๋ค
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์ ์ค๊ณ ๋ชฉํ
ํฌ๋ช ์ฑ(Transparency)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฐ์ํ๋์๋ค๋ ์ฌ์ค์ ์ธ์งํ์ง ๋ชปํด์ผ ํ๋ฉฐ, ๋ง์น ์์ ๋ง์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋์ํด์ผ ํฉ๋๋ค.
ํจ์จ์ฑ(Efficiency)
- ์๊ฐ์ ์ค๋ฒํค๋(TLB ํ์ฉ ๋ฑ)์ ๊ณต๊ฐ์ ์ค๋ฒํค๋(ํ์ด์ง ํ ์ด๋ธ ๋ฑ ์ง์ ๊ตฌ์กฐ) ์์ชฝ์ ์ต์ํํด์ผ ํฉ๋๋ค.
- ํ๋์จ์ด TLB ๊ฐ์ ์ง์ ์ฅ์น๋ฅผ ํ์ฉํด ์ฑ๋ฅ ์ ํ๋ฅผ ์ค์ ๋๋ค.
๋ณดํธ(Protection) / ๊ฒฉ๋ฆฌ(Isolation)
- ํ๋ก์ธ์ค ๊ฐ, ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค์ ์ปค๋ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์๊ฒฉํ ๋ถ๋ฆฌํด, ํ๋์ ์ค๋ฅ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ OS๋ฅผ ์์์ํค์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค
โ๋ชจ๋ ์ฃผ์๋ ๊ฐ์ ์ฃผ์โ
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ถ๋ ฅํ๋ ํฌ์ธํฐ ๊ฐ(์: main() ์์น, malloc() ๋ฐํ ์ฃผ์, ์คํ ๋ณ์ ์ฃผ์)์ ๋ชจ๋ ๊ฐ์ ์ฃผ์์ ๋๋ค.
์ค์ ๋ฌผ๋ฆฌ ์ฃผ์๋ ์ด์์ฒด์ ์ ํ๋์จ์ด๋ง์ด ์๊ณ ์์ผ๋ฉฐ, ๊ฐ์ ์ฃผ์๋ ๋จ์ง โ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ํ์โ์์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค
์์ฝ
์ด์์ฒด์ ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์๋ธ์์คํ ์
- ๊ฐ ํ๋ก์ธ์ค์ ํ๋ผ์ด๋น, ํฌ๊ณ ํฌ์ํ ์ฃผ์ ๊ณต๊ฐ์ ์ ๊ณตํ๊ณ ,
- ํ๋์จ์ด(TLB, MMU)์ ํ๋ ฅํ์ฌ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ฉฐ,
- ํฌ๋ช ์ฑ, ํจ์จ์ฑ, ๊ฒฉ๋ฆฌ๋ผ๋ ์ธ ๊ฐ์ง ํต์ฌ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋๋ก ์ค๊ณ๋ฉ๋๋ค. ์ดํ ์ฅ๋ค์์๋ ํ์ด์ง ํ ์ด๋ธ, TLB, ๋ค๋จ๊ณ ํ์ด์ง ํ ์ด๋ธ, ๊ต์ฒด ์ ์ฑ ๋ฑ์ ๋ฉ์ปค๋์ฆ๊ณผ ์ ์ฑ ์ ๋จ๊ณ์ ์ผ๋ก ํ์ตํด ๋๊ฐ๋๋ค
Address Translation
๋์ ์ฌ๋ฐฐ์น(Dynamic Relocation) ๊ฐ์
โBase-and-boundsโ ๋ฐฉ์์ผ๋ก, ํ๋ก์ธ์ค๊ฐ ์์ฑํ๋ ๊ฐ์ ์ฃผ์์ ํ๋์จ์ด๊ฐ base ๋ ์ง์คํฐ ๊ฐ์ ๋ํด ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ฉฐ, bounds ๋ ์ง์คํฐ๋ก ๋ฒ์ ๊ฒ์ฌ๊น์ง ์ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค๋ง๋ค ๋ ๋ฆฝ๋ ์ฐ์ ๋ฌผ๋ฆฌ ์์ญ์ ์ ๊ณตํ๋ฉด์๋ CPU์์ ์ง์ ์คํ ์๋๋ฅผ ์ ์งํฉ๋๋ค
ํ๋์จ์ด ์๊ตฌ์ฌํญ
- ํน๊ถ ๋ชจ๋(Privileged/User Mode): ์ฌ์ฉ์ ๋ชจ๋์์๋ง ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ ์ ํํ๊ณ , ์ปค๋ ๋ชจ๋์์๋ง base/bounds ์ค์ ๋ฑ ํน๊ถ ์์ ์ ํ์ฉํฉ๋๋ค.
- Base/Bounds ๋ ์ง์คํฐ: ๊ฐ CPU MMU์ ํ ์์ ๋ ์ง์คํฐ๊ฐ ์์ด, ๊ฐ์ ์ฃผ์์ base๋ฅผ ๋ํ๊ณ bounds๋ฅผ ์ฒดํฌํ๋ ์ ์ฉ ํ๋ก๊ฐ ํ์ํฉ๋๋ค.
- ์ฃผ์ ๋ณํ ๋ฐ ์์ธ ์ฒ๋ฆฌ ํ๋ก: ๊ฐ์->๋ฌผ๋ฆฌ ๋ณํ์ ๋น ๋ฅด๊ฒ ์ํํ๊ณ , bounds ์๋ฐ ์ ์์ธ(trap)๋ฅผ ๋ฐ์์์ผ OS ์์ธ ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐํ๋๋ก ์ง์ํฉ๋๋ค.
- ํน๊ถ ๋ช ๋ น์ด: OS๊ฐ ๋ถํ ์์ ์ปจํ ์คํธ ์ค์์น ์ base/bounds ๊ฐ์ ์ค์ ยท๊ฐฑ์ ํ ์ ์๋๋ก ํ๋ ๋ช ๋ น์ด ์์ด์ผ ํฉ๋๋ค
์ด์์ฒด์ ์ฑ ์
๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํ์
- ํ๋ก์ธ์ค ์์ฑ ์, free list ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฒ์ํด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋กฏ์ ํ ๋นํ๊ณ , ์ข ๋ฃ ์ ํด๋น ์ฌ๋กฏ์ ๋ค์ ํ์ํด ํ์ํฉ๋๋ค.
Base/Bounds ๊ด๋ฆฌ
- ์ปจํ ์คํธ ์ค์์น ์ CPU base/bounds ๋ ์ง์คํฐ ๊ฐ์ ํ์ฌ ํ๋ก์ธ์ค PCB์ ์ ์ฅํ๊ณ , ์ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ณต์ํด์ผ ํฉ๋๋ค.
- ๋ํ, ํ๋ก์ธ์ค ์ด๋(migration)์ด ํ์ํ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ํ PCB์ base ๊ฐ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์์ธ ํธ๋ค๋ง
- ๋ถํ ์ ํธ๋ฉ ํ ์ด๋ธ์ โoutโofโboundsโ ๋ฐ โprivileged instructionโ ์์ธ ํธ๋ค๋ฌ ์ฃผ์๋ฅผ ์ค์ ํ๊ณ , ์คํ ์ค ์์ธ ๋ฐ์ ์ ํด๋น ํธ๋ค๋ฌ๋ฅผ ํธ์ถํด ๋ณดํต ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข ๋ฃํฉ๋๋ค.
๋ถํ ์ด๊ธฐํ
- ํธ๋ฉ ํ ์ด๋ธ ์ค์ , ํ์ด๋จธ ์ธํฐ๋ฝํธ ์ด๊ธฐํ, ํ๋ก์ธ์ค ํ ์ด๋ธยทfree list ์ด๊ธฐํ ๋ฑ์ ์ํํด ์์คํ ์ ์ค๋นํฉ๋๋ค
๋์ ํ์๋ผ์ธ ์์ฝ
๋ถํ ์ (Boot)
- ํธ๋ฉ ํ ์ด๋ธ(์์คํ ์ฝยทํ์ด๋จธยท๋ฉ๋ชจ๋ฆฌ ์์ธ) ์ด๊ธฐํ
- ์ธํฐ๋ฝํธ ํ์ด๋จธ ์์
- ํ๋ก์ธ์คยทfree list ๊ตฌ์กฐ ์ด๊ธฐํ
์คํ ์ค (Runtime)
- ํ๋ก์ธ์ค A ์คํ: ๊ฐ์ ์ฃผ์ ๋ณํ์ ์ ๋ถ ํ๋์จ์ด๊ฐ ์ฒ๋ฆฌ
- ํ์ด๋จธ ์ธํฐ๋ฝํธ ๋ฐ์ -> ์ปค๋ ์ ํ -> ์ปจํ ์คํธ ์ค์์น(A->B)
- B ์คํ ์ค โbad loadโ ๋ฐ์ -> bounds ์์ธ -> OS๊ฐ B ์ข ๋ฃยท๋ฉ๋ชจ๋ฆฌ ํ์
- ์ดํ๋ ๋ชจ๋ LDE(์ ํ์ ์ง์ ์คํ) ํ๋กํ ์ฝ๋ก ๋์
์ฅ์ ยทํ๊ณ
์ฅ์ :
- ๋งค์ฐ ์ ์ ํ๋์จ์ด ์ถ๊ฐ ๋ ผ๋ฆฌ๋ก ๋น ๋ฅธ ์ฃผ์ ๋ณํ
- ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ(๋ณดํธ) ๋ณด์ฅ
- ํ๋ก์ธ์ค๋ ๋ฒ์ญ ์ฌ์ค์ ์ ํ ์ธ์งํ์ง ๋ชปํ๋ ํฌ๋ช ์ฑ
ํ๊ณ:
- ๋ด๋ถ ๋จํธํ(Internal Fragmentation): ๊ณ ์ ํฌ๊ธฐ ์ฌ๋กฏ์ ์ฃผ์ ๊ณต๊ฐ์ ๋ฐฐ์นํ๋ฏ๋ก ๋น ๊ณต๊ฐ์ด ๋ญ๋น๋ ์ ์์
- ๋ ์ธ๋ฐํ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ์ ์ํด ์ธ๊ทธ๋ฉํ ์ด์ ์ด๋ ํ์ด์ง ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฒ์ด ํ์ํฉ๋๋ค
Segmentation
๊ฐ์ ์ฃผ์์ ์คํ์
๊ฐ์ ์ฃผ์๋ (segment, offset) ์์ผ๋ก ํํ๋ฉ๋๋ค.
์คํ์ ์ฒ๋ฆฌ:
- ์๋ฐฉํฅ(positive) ์คํ์ : ์ฝ๋ยทํ ์์ญ์ฒ๋ผ ์๋ก ์ฑ์ฅํ๋ ์ธ๊ทธ๋จผํธ
- ์ญ๋ฐฉํฅ(negative) ์คํ์ : ์คํ์ฒ๋ผ ์๋๋ก ์ฑ์ฅํ๋ ์ธ๊ทธ๋จผํธ
ํ๋์จ์ด๋ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์์ base์ size๋ฅผ ์ฝ๊ณ ,
- ์คํ์ ์ ์ ๋๊ฐ์ด size ์ดํ์ธ์ง ๊ฒ์ฌ(๋ฒ์ ๊ฒ์ฌ)
- PA = base + offset ๊ณ์ฐ
- ์๋ฐ ์ ์์ธ(trap) ๋ฐ์
๋ณดํธ ๋ฐ ๊ณต์
์ธ๊ทธ๋จผํธ๋ณ ๋ณดํธ ๋นํธ(์ฝ๊ธฐยท์ฐ๊ธฐยท์คํ)๋ฅผ ์ค์ ํด, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ ์ ์์ต๋๋ค.
์ฝ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ํ์ํ๋ฉด, OS๋ ์ค์ ๋ก ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋๋ง ํ ๋นํด ๋๊ณ ๊ฐ ํ๋ก์ธ์ค์ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ๊ฐ์ base๋ฅผ ์ง์ ํด ๊ณต์ ํฉ๋๋ค.
์ด๋ก์จ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ ๋ฅผ ์ค์ด๋ฉด์๋ ํ๋ก์ธ์ค ๊ฐ ๊ฒฉ๋ฆฌ๋ ์ ์ง๋ฉ๋๋ค
Coarseโ vs Fineโgrained Segmentation
Coarseโgrained: ๋ณดํต ์ฝ๋ยทํยท์คํ์ฒ๋ผ ๋ช ๊ฐ์ ํฐ ์ธ๊ทธ๋จผํธ๋ง ์ฌ์ฉ
Fineโgrained: Multics ๋ฑ์์๋ ์์ฒ ๊ฐ์ ์์ ์ธ๊ทธ๋จผํธ๋ฅผ ์ง์
- ํ๋์จ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ ๋๊ณ , ํด์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ฐ ์ธ๊ทธ๋จผํธ๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํ
Fineโgrained๋ ์ ์ฐํ์ง๋ง, ํ๋์จ์ดยทOS ๋ณต์ก๋์ ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ํฌ๊ฒ ์ฆ๊ฐ์ํต๋๋ค
OS์ ์ถ๊ฐ ์ง์
์ปจํ ์คํธ ์ค์์น
- ํ๋ก์ธ์ค ์ ํ ์, ๊ฐ ํ๋ก์ธ์ค์ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(base, size, ๋ณดํธ ๋นํธ)๋ฅผ PCB์ ์ ์ฅยท๋ณต์ํด์ผ ํฉ๋๋ค.
์ธ๊ทธ๋จผํธ ์ฑ์ฅ/์ถ์
- malloc()์ผ๋ก ํ ํ์ฅ ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ sbrk() ๊ฐ์ ์์คํ ์ฝ์ ํตํด OS์ ์์ฒญ -> OS๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ ๋ ์ง์คํฐ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
FreeโSpace Management
- ์ฌ๋ฌ ํ๋ก์ธ์ค์ ๊ฐ๋ณ ํฌ๊ธฐ ์ธ๊ทธ๋จผํธ๊ฐ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ํฉ์ด์ง๋ฉด์ ์ธ๋ถ ๋จํธํ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ปดํฉ์ (๋น ๊ณต๊ฐ ํตํฉ)์ ๊ฐ๋ฅํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ๋น์ฉ์ด ๋งค์ฐ ๋์ต๋๋ค.
- ๋์ freeโlist ์๊ณ ๋ฆฌ์ฆ(bestโfit, firstโfit, buddy ๋ฑ)์ ์ฌ์ฉํด ํฐ ๋น ์์ญ์ ์ ์งํ๋ ค ๋ ธ๋ ฅํฉ๋๋ค.
์ธ๋ถ ๋จํธํ์ ์ปดํฉ์ ์์
์ธ๋ถ ๋จํธํ: 24ย KB์ ๋น ๊ณต๊ฐ์ด ์์ง๋ง, 3ย รย 8ย KB๋ก ๋ถ์ฐ๋์ด ์์ด 20ย KB ์์ฒญ์ ๋ง์กฑํ์ง ๋ชปํ๋ ์ํฉ
์ปดํฉ์ :
- ๋ชจ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ํ์ชฝ์ผ๋ก ๋ชฐ์๋ถ์ฌ ์ฐ์๋ ๋น ๊ณต๊ฐ์ ํ๋ณด
- ๊ทธ๋ฌ๋ ๋ณต์ฌ ์ค๋ฒํค๋๊ฐ ํฌ๊ณ , ๋ฐ๋ณต ์ ๋ ๋ค๋ฅธ ์ปดํฉ์ ์ด ํ์ํด ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค
์์ฝ ๋ฐ ํ๊ณ
์ฅ์ :
- ๋น ๋ฅธ ์ฃผ์ ๋ณํ(ํ๋์จ์ด๋ง์ผ๋ก ๊ณ์ฐ)
- ๊ฐ๋ณ ํฌ๊ธฐ ์ธ๊ทธ๋จผํธ๋ก ํฌ์(sparse) ์ฃผ์ ๊ณต๊ฐ ํจ๊ณผ์ ์ง์
- ์ฝ๋ ๊ณต์ ๋ฅผ ํตํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
๋จ์ :
- ์ธ๋ถ ๋จํธํ ๋ฌธ์ (๋ณ์ ํฌ๊ธฐ ์ธ๊ทธ๋จผํธ ํ ๋น)
- ์ฌ์ ํ ์์ ํ ์ ์ฐํ ํฌ์ ์ฃผ์ ๊ณต๊ฐ ์ง์์๋ ํ๊ณ
๋ค์ ๋จ๊ณ๋ก, ํ์ด์ง ๊ธฐ๋ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด ํ๊ณ๋ฅผ ์ด๋ป๊ฒ ๊ทน๋ณตํ๋์ง ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
Free Space Management
ํ ํ์ฅ(Heap Growth)
sbrk()
/brk()
์์คํ
์ฝ๋ก ํ์ ํ์ฅ
OS๋ free list์์ ํ์ํ ๋งํผ์ ๋ฌผ๋ฆฌ ํ์ด์ง๋ฅผ ์ฐพ์ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๋งคํํ ๋ค, ์๋ก์ด ํ ๋ ์ฃผ์๋ฅผ ๋ฐํํฉ๋๋ค
๊ธฐ๋ณธ ํ ๋น ์ ๋ต (17.3)
์ ๋ต | ์ฅ์ | ๋จ์ |
---|---|---|
Best Fit | ์์ฒญ ํฌ๊ธฐ์ ๊ทผ์ ํ ๋ธ๋ก์ ํ ๋นํ์ฌ ๋ด๋ถ ๋จํธํ ๊ฐ์ | ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ํ์ -> ๋์ ๊ฒ์ ๋น์ฉ |
Worst Fit | ๊ฐ์ฅ ํฐ ๋ธ๋ก์ ์ฌ์ฉํด ํฐ ์์ฌ ๋ธ๋ก ์ ์ง | ์ ์ฒด ํ์ ๋น์ฉ ๋์, ์ธ๋ถ ๋จํธํ ์ฆ๊ฐ ๊ฒฝํฅ |
First Fit | ๋ฆฌ์คํธ ์์์ ์ฒซ ๋ฒ์งธ ์ ํฉ ๋ธ๋ก ํ ๋น -> ๋น ๋ฅธ ๊ฒ์ | ์์ ๋ธ๋ก์ด ๋ฆฌ์คํธ ์์ ๋์ ๋ ์ ์์ |
Next Fit | ๋ง์ง๋ง ๊ฒ์ ์์น๋ถํฐ ํ์ ์์ -> ๋ธ๋ก ๋ถ์ฐ, First Fit ์ ์ฌ ์ฑ๋ฅ | First Fit๊ณผ ๋น์ทํ ์ฑ๋ฅ, ๋ฆฌ์คํธ ์์ ๊ด๋ฆฌ ํ์ |
๊ณ ๊ธ ๊ธฐ๋ฒ
Segregated Lists
- ์์ฃผ ์์ฒญ๋๋ ํฌ๊ธฐ์ ๋ํด ์ ์ฉ ๋ฆฌ์คํธ ์ ์ง
- ์ฅ์ : ํน์ ํฌ๊ธฐ ํ ๋น/ํด์ ๊ฐ ๋งค์ฐ ๋น ๋ฆ, ๋จํธํ ๊ฐ์
- ๋จ์ : ํ ํฌ๊ธฐ ๊ฒฐ์ ์ ์ด๋ ค์
- ์์: Solaris์ Slab Allocator
Buddy Allocation
- ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๋ฅผ 2^N ํฌ๊ธฐ ๋ธ๋ก์ผ๋ก ๊ด๋ฆฌ
- ์์ฒญ ํฌ๊ธฐ์ ๋ง๊ฒ ๋ฐ์ผ๋ก ๋ถํ ํ๋ฉฐ power-of-two ๋ธ๋ก ํ ๋น
- ํด์ ์ ์ธ์ ํ โ๋ฒ๋โ ๋ธ๋ก์ด ๋น์ด ์์ผ๋ฉด ๋ณํฉ(coalesce)
- ์ฅ์ : coalescing์ด ๋จ์(์ฃผ์์ ํน์ ๋นํธ ์ฐจ์ด๋ก ํ๋ณ)
- ๋จ์ : ๋ด๋ถ ๋จํธํ ๋ฐ์ ๊ฐ๋ฅ
๊ธฐํ ์๋ฃ๊ตฌ์กฐ
- ์ฑ๋ฅยทํ์ฅ์ฑ ์ํด ๊ท ํ ์ด์ง ํธ๋ฆฌ, ์คํ๋ ์ด ํธ๋ฆฌ, ๋ถ๋ถ ์์ ํธ๋ฆฌ ๋ฑ ํ์ฉ
์ค์ ํ ๋น๊ธฐ ์ค๊ณ ๊ณ ๋ ค์ฌํญ
์๋ vs. ๋จํธํ
- ๋น ๋ฅธ ๊ฒ์(First/Next Fit)๊ณผ ๋ฎ์ ๋จํธํ(Best Fit) ๊ฐ ํธ๋ ์ด๋์คํ
๋จ์์ฑ vs. ํ์ฅ์ฑ
- Buddy, Segregated Lists๋ ๋จ์ํ์ง๋ง ๋ฉํฐ์ฝ์ด ๋์์ฑ ์ ๊ธ ๋น์ฉ ๊ณ ๋ ค ํ์
- Hoard, jemalloc ๊ฐ์ ํ๋ ํ ๋น๊ธฐ๋ ๋ฉํฐ์ค๋ ๋ยท๋ค์ค ํ๋ก์ธ์ ํ๊ฒฝ์์ ์ต์ ํ
Introduction to Paging
ํ์ด์ง์ ๋๊ธฐ์ ๊ฐ์
์ธ๊ทธ๋ฉํ ์ด์ ์ฒ๋ผ ๊ฐ๋ณ ํฌ๊ธฐ ๋์ , ๊ณ ์ ํฌ๊ธฐ ํ์ด์ง(์: 4ย KB)์ ๊ณ ์ ํฌ๊ธฐ ํ๋ ์(๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๋จ์)์ผ๋ก ์ฃผ์ ๊ณต๊ฐ์ ๋ถํ
๋จํธํ(fragmentation) ๊ด๋ฆฌ๊ฐ ๋จ์ํด์ง๋ฉฐ, ์ฐ์์ฑ์ด ํ์ ์๋ ํ ๋นยทํ์๊ฐ ์์ ๋กญ๊ฒ ์ด๋ฃจ์ด์ง
ํ์ด์ง ํ ์ด๋ธ์ ์ ์ฅ ์์น
๊ฐ ํ๋ก์ธ์ค๋ง๋ค ํ์ด์ง ํ ์ด๋ธ์ ์ ์งํ์ฌ, ๊ฐ์ ํ์ด์ง ๋ฒํธ(VPN)->๋ฌผ๋ฆฌ ํ๋ ์ ๋ฒํธ(PFN)๋ฅผ ๋งคํ
32๋นํธ ์ฃผ์ยท4ย KB ํ์ด์ง ๊ธฐ์ค:
- ๊ฐ์ ํ์ด์ง ์ = \(2^{32}ย /ย 2^{12} = 2^{20}\)
- PTE ํฌ๊ธฐ 4B -> ํ์ด์ง ํ ์ด๋ธ ํฌ๊ธฐ โย 4ย MB
MMU ๋ด๋ถ์ ๋๊ธฐ์๋ ๋๋ฌด ์ปค์, ์ผ๋ฐ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋๊ณ ํ์ ์ ์ค์ํ๋ ๊ฐ๋ฅ
ํ์ด์ง ํ ์ด๋ธ ํญ๋ชฉ(PTE)์ ๊ตฌ์ฑ
Valid/Present ๋นํธ: ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋์ง
Protection ๋นํธ: ์ฝ๊ธฐ/์ฐ๊ธฐ/์คํ ๊ถํ
Dirty ๋นํธ: ํ์ด์ง๊ฐ ์์ ๋์๋์ง
Accessed ๋นํธ: ํ์ด์ง๊ฐ ์ฐธ์กฐ๋์๋์ง (๊ต์ฒด ์ ์ฑ ์ ํ์ฉ)
Physical Frame Number (PFN): ์ค์ ๋ฌผ๋ฆฌ ํ๋ ์ ๋ฒํธ
x86 PTE ์์ ํ๋: P, R/W, U/S, PWT, PCD, A, D, PFN
ํ์ด์ง ์ฑ๋ฅ ์ค๋ฒํค๋
์ฃผ์ ๋ณํ ๊ฒฝ๋ก:
- ๊ฐ์ ์ฃผ์ -> VPN/์คํ์ ๋ถํ -> MMU์ PTBR(Page Table Base Register)์์ PTE ์ฃผ์ ๊ณ์ฐ
- ๋ฉ๋ชจ๋ฆฌ์์ PTE ์ฝ๊ธฐ -> PFN ํ๋
- PFN + ์คํ์ ๊ฒฐํฉ -> ์ต์ข ๋ฌผ๋ฆฌ ์ฃผ์ ๊ณ์ฐ
- ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ
๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์๊ฐ ๋ ๋ฐฐ ์ด์ ์ฆ๊ฐ -> ์ฑ๋ฅ ์ ํ
์ด ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด TLB๊ฐ ํ์ ์ฅ์์ ์๊ฐ๋จ
๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํธ๋ ์ด์ค ์์
๊ฐ๋จํ ๋ฐฐ์ด ์ด๊ธฐํ ์ฝ๋(for (iโฆ) array[i]=0;)๋ฅผ ํตํด
- ๋ช ๋ น์ด ํ์น, ํ์ด์ง ํ ์ด๋ธ ์ ๊ทผ, ๋ฐ์ดํฐ ์ ๊ทผ์ด ์ค์ ๋ก ๋ช ๋ฒ ๋ฐ์ํ๋์ง ์ถ์
- ๊ฐ ๋ฃจํ ๋ฐ๋ณต๋ง๋ค ๋ฐ์ํ๋ ํ์ด์ง ํ ์ด๋ธ ์ํฌ์ ์๋ฅผ ์๊ฐํํ์ฌ, ์ค๋ฒํค๋์ ํฌ๊ธฐ๋ฅผ ์ ๋์ ์ผ๋ก ํ์ ํ ์ ์์
Translation Lookaside Buffers
TLB ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ ์ฃผ์์์ VPN์ ์ถ์ถํ ๋ค, ํ๋์จ์ด TLB๋ฅผ ์กฐํ
- ํํธ ์ PFN์ ๊บผ๋ด ์คํ์ ๊ณผ ๊ฒฐํฉํด ๋ฌผ๋ฆฌ ์ฃผ์ ๋ฐํ
- ๋ฏธ์ค ์ ํธ๋ฉ์ ๋ฐ์์์ผ OS(๋๋ ํ๋์จ์ด)๊ฐ ํ์ด์ง ํ ์ด๋ธ์ ์กฐํยทTLB ๊ฐฑ์ ํ ๋ช ๋ น ์ฌ์๋
๋ฐฐ์ด ์ ๊ทผ ์์
๋ฐฐ์ด์ ์์ฐจ ์ ๊ทผํ ๋, ๊ฐ์ ํ์ด์ง ๋ด ์ฐธ์กฐ๋ ๋์ TLB ํํธ์จ์ ๋ณด์ด๊ณ
ํ์ด์ง ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ ๋๋ง๋ค ๋ฏธ์ค๊ฐ ๋ฐ์ํจ์ ๊ทธ๋ํ๋ก ์๊ฐํํ์ฌ ๋ณด์ฌ ์ค
TLB Miss ์ฒ๋ฆฌ ์ฃผ์ฒด
ํ๋์จ์ด ๊ด๋ฆฌํ TLB (์: x86): ๋ฏธ์ค ์ CPU๊ฐ ์ง์ ํ์ด์ง ํ ์ด๋ธ ์ํฌ ์ํ
์ํํธ์จ์ด ๊ด๋ฆฌํ TLB (์: MIPS/SPARC): ๋ฏธ์ค๊ฐ ์์ธ(trap)๋ก ์ ํ๋์ด OS ์ปค๋์ด ์ฒ๋ฆฌ ํ ์ฌ์๋
TLB ์ํธ๋ฆฌ ๊ตฌ์ฑ
์ฃผ์ ํ๋: VPN, PFN, Valid/Present, Protection (R/W/X), Dirty, Accessed, ASID, Cache coherence bits ๋ฑ
ASID๋ฅผ ํ์ฉํด ํ๋ก์ธ์ค๋ณ ์ํธ๋ฆฌ ๊ตฌ๋ถ ๊ฐ๋ฅ
์ปจํ ์คํธ ์ค์์น ์ด์
ํ๋ก์ธ์ค ๊ฐ VPN -> PFN ๋งคํ ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด
- ์ ์ฒด ํ๋ฌ์ or
- ASID ์ฌ์ฉ(ํ๋ฌ์ ์์ด ํ๋ก์ธ์ค๋ณ ๋งคํ ์ ์ง)
๊ต์ฒด ์ ์ฑ
์ ์ฑ | ๊ต์ฒด ๋์ | ์ฅ์ | ๋จ์ |
---|---|---|---|
OPT | ์์ผ๋ก ๊ฐ์ฅ ๋์ค์ ๋ค์ ์ฌ์ฉ๋ ๋ธ๋ก | ์ด๋ก ์ ์ผ๋ก ์ต์ ๋ฏธ์ค์จ (ํํ) | ๋ฏธ๋ ์ฐธ์กฐ ์ ๋ณด๊ฐ ํ์ํด ์ค์ ๊ตฌํ ๋ถ๊ฐ |
LRU | ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์(๊ฐ์ฅ ์ต๊ทผ์ ์ฐธ์กฐ๋์ง ์์) ๋ธ๋ก | ์ค์ ์ํฌ๋ก๋์์ OPT์ ๊ทผ์ ํ๋ ์ฑ๋ฅ | โ๊ฐ์ฅ ์ต๊ทผ ์ฌ์ฉ ์๊ฐโ์ ์ถ์ ํ๊ธฐ ์ํ ํ๋์จ์ด/์ํํธ์จ์ด ์ค๋ฒํค๋ |
FIFO | ๊ฐ์ฅ ๋จผ์ ์บ์์ ๋ค์ด์จ(์ ์ฌ๋) ๋ธ๋ก | ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จ (์ํ ํ ํฌ์ธํฐ) | ์ ๊ทผ ํจํด ๋ฌด์ โ Belรกdy ์ญ์ค(์บ์ ํฌ๊ธฐ ์ฆ๊ฐ ์ ๋ฏธ์ค์จ ์ฆ๊ฐ ๊ฐ๋ฅ) |
Random | ๋ฌด์์๋ก ์ ํ๋ ๋ธ๋ก | ๊ตฌํ์ด ๊ฐ์ฅ ๋จ์, ์ค๋ฒํค๋ ์ต์ | ์ค์ํ ์ง์ญ์ฑ ์ ๋ณด ์ ํ ๋ฐ์ ๋ชปํจ โ ์ฑ๋ฅ์ด ์์ธก ๋ถ๊ฐ๋ฅํ๊ณ ๋์ฒด๋ก ๋นํจ์จ์ |
์ค์ TLB ์ํธ๋ฆฌ: MIPS R4000 ์ฌ๋ก
VPN: 19๋นํธ (32๋นํธ ์ฃผ์ ๊ณต๊ฐ์ ํ์ ์ ๋ฐ)
PFN: 24๋นํธ(์ต๋ 64ย GiB ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ง์)
๊ธฐํ: Global bit, 8๋นํธ ASID, Dirty, Valid, Cache bits, Page mask(์ํผํ์ด์ง)
์ํํธ์จ์ด ๊ด๋ฆฌ: TLBP, TLBR, TLBWI, TLBWR ํน๊ถ ๋ช ๋ น์ด๋ก OS๊ฐ ์ง์ ์ํธ๋ฆฌ ๊ด๋ฆฌ
์์ฝ
TLB๋ฅผ ํตํ ํ์ด์ง ํ ์ด๋ธ ์ ๊ทผ ์บ์ฑ์ผ๋ก, ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ๋๋ถ๋ถ ์ ๊ฑฐ
TLB ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ด๊ณผํ๋ ์ํฌ๋ก๋๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ ์ด๋
์ํผํ์ด์ง, ๊ฐ์ ์์ธ ์บ์ ๋ฑ ์ถ๊ฐ ๊ธฐ๋ฒ์ผ๋ก ์ค๋ฒํค๋ ์ํ ๊ฐ๋ฅ
Advanced Page Tables
๋ฌธ์ ์ ๊ธฐ
- ์ ํ(linear) ํ์ด์ง ํ ์ด๋ธ์ 32๋นํธ ์ฃผ์ ๊ณต๊ฐ, 4ย KB ํ์ด์ง, 4ย B/PTE ๊ธฐ์ค์ผ๋ก ์ฝ 4ย MB ํฌ๊ธฐ๋ฅผ ๊ฐ์ง.
- ํ๋ก์ธ์ค๊ฐ ์์ญ~๋ฐฑ ๊ฐ๋ผ๋ฉด, ํ์ด์ง ํ ์ด๋ธ๋ง ์๋ฐฑ MB๋ฅผ ์ฐจ์งํด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ๋งค์ฐ ํผ
ํต์ฌ ์ง๋ฌธ(CRUX)
- โํ์ด์ง ํ ์ด๋ธ์ ์ด๋ป๊ฒ ๋ ์๊ฒ ๋ง๋ค๊น? ์๋ก์ด ์๋ฃ๊ตฌ์กฐ๊ฐ ๋์ ๋๋ฉด ์ด๋ค ๋นํจ์จ์ด ์๊ธฐ๋๊ฐ?โ
๋ ํฐ ํ์ด์ง(Bigger Pages)
ํ์ด์ง ํฌ๊ธฐ๋ฅผ 4ย KB -> 16ย KB๋ก ๋ค ๋ฐฐ ๋๋ฆฌ๋ฉด, VPN ๋นํธ ์๊ฐ 20 -> 18๋ก ๊ฐ์ํด ํ์ด์ง ํ ์ด๋ธ ์ํธ๋ฆฌ ์๋ 1/4๋ก ์ค์ด๋ฆ(์ฝ 1ย MB)
์ฅ์ : ์ ํ ๊ตฌ์กฐ ์ ์ง, ๊ตฌํ ๊ฐ๋จ
๋จ์ :
- ๋ด๋ถ ๋จํธํ(internal fragmentation) ์ฆ๊ฐ
- ๋ํ ํ์ด์ง๋ TLB ์ปค๋ฒ๋ฆฌ์ง ๊ด์ ์์๋ ์ ๋ฆฌํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ ๋ฐ๋ผ ์ ์ฐ์ฑ ์ ํ
ํ์ด๋ธ๋ฆฌ๋(segmentation + paging)
Multics ์์ด๋์ด: ๋จผ์ ์ธ๊ทธ๋จผํธ(์: ์ฝ๋ยท๋ฐ์ดํฐยท์คํ)๋ก ์ฃผ์ ๊ณต๊ฐ์ ๋๋๊ณ , ๊ฐ ์ธ๊ทธ๋จผํธ๋ง๋ค ์ ํ ํ์ด์ง ํ ์ด๋ธ ์ฌ์ฉ
๋์:
- ์ธ๊ทธ๋จผํธ ์๋งํผ ์ํ ํ์ด์ง ํ ์ด๋ธ ๋ณด์ -> ์ ์ฒด ํฌ๊ธฐ ๊ฐ์
- TLB ๋ฏธ์ค ์, ์ธ๊ทธ๋จผํธ ์ ํ ํ ํด๋น ํ์ด์ง ํ ์ด๋ธ ์กฐํ
์ฅ์ : ์ฃผ์ ๊ณต๊ฐ์ ํฐ ๋น์ฌ์ฉ ์์ญ ๋ถ๋ฆฌ ๊ฐ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
๋จ์ :
- ์ธ๊ทธ๋จผํธ ์๋งํผ ๋ ์ง์คํฐยทPDE ํ์ -> ๊ตฌํ ๋ณต์ก
- ์ธ๋ถ ๋จํธํ(external fragmentation) ๋ฐ์, ๊ด๋ฆฌ ์ค๋ฒํค๋
๋ค๋จ๊ณ ํ์ด์ง ํ ์ด๋ธ(MultiโLevel Page Tables)
์์ด๋์ด: ์ ํ ํ ์ด๋ธ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ถํ
- ํ์ด์ง ๋๋ ํฐ๋ฆฌ(PD, Page Directory): ๊ฐ ์ํธ๋ฆฌ๊ฐ โํ์ด์ง ํ ์ด๋ธ ํ์ด์งโ ํ๋๋ฅผ ๊ฐ๋ฆฌํด
- ๋ ๋จ๊ณ ์กฐํ: PD -> ํน์ ํ์ด์ง ํ ์ด๋ธ ํ์ด์ง(PTE ํ์ด์ง) -> ์ต์ข PTE
์ฅ์ :
- ์ค์ ์ฌ์ฉ ์ค์ธ ๊ฐ์ ํ์ด์ง์ ๋์ํ๋ PTE ํ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น -> ์ ๊ฐ ํจ๊ณผ
- ํ์ด์ง ํ ์ด๋ธ ๊ณต๊ฐ์ด โ์ฃผ์ ๊ณต๊ฐ์์ ์ฌ์ฉ๋ ํฌ๊ธฐโ์ ๋น๋ก
- ๋น์ฐ์๋ ๋ฌผ๋ฆฌ ํ์ด์ง๋ ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ(ํ๋ฆฌ ํ์ด์ง ํ ํ์ฉ)
๋จ์ :
- TLB ๋ฏธ์ค ์ ๋ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์ -> ํ์ด์ง ํ ์ด๋ธ ์กฐํ ๋น์ฉ ์ฆ๊ฐ
- ์๋ฃ๊ตฌ์กฐยทํ๋์จ์ดยท์ํํธ์จ์ด ๊ตฌํ ๋ณต์ก๋ ์์น
์๊ฐยท๊ณต๊ฐ ์ ์ถฉ (TimeโSpace TradeโOff)
์ ํ ํ ์ด๋ธ: ์กฐํ ๋จ์ยทTLB ๋ฏธ์ค ์ ํ ๋ฒ ์ ๊ทผ, ๊ณต๊ฐ ๋นํจ์จ
๋ค๋จ๊ณ ํ ์ด๋ธ: ๊ณต๊ฐ ํจ์จ ๊ทน๋ํ, ์กฐํ ๋น์ฉยท๋ณต์ก๋ ์ฆ๊ฐ
์ค๊ณ ์ ๋ชฉํ ์ํฌ๋ก๋์ ์์คํ ์ ์ฝ์ ๋ฐ๋ผ ์ ์ ํ ๊ธฐ๋ฒ ์ ํ์ด ํ์