Advanced Scheduler - gon2gon2/pintos-kaist GitHub Wiki
4.4BSD scheduler์ ๋น์ทํ MLFQS๋ฅผ ๊ตฌํํ๋ผ.
MLFQS
- CPU burst๊ฐ ์งง์ ํ๋ก์ธ์ค์๊ฒ ๋์ ์ฐ์ ์์๋ฅผ ์ฃผ๋ ๋ฐฉ์
- ์ฐ์ ์์๊ฐ ๋์์๋ก time quantum์ด ์๋ค.
- ์งง์ time quantum์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ค. -> CPU burst๊ฐ ์๋ค.
- time quantum์์ ๋ชป ๋๋๋ค. -> CPU burst๊ฐ ์ปค์ ์งง์ ์ ๋ค ๋จผ์ ์ฒ๋ฆฌํ๊ณ ๋์ค์ ์ฒ๋ฆฌํ๋ค.
- MLFQ๋ ์ต์ด์ ๋ฐฐ์ ๋ ํ์์ ์ด๋ํ ์ ์์ง๋ง, MLFQS๋ aging์ด๋ CPU burst์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋ก ์ด๋ํ ์ ์๋ค.
- ์ฒ์ ์์ฑ๋ ํ๋ก์ธ์ค๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ํ์ ๋ฐฐ์ ๋๊ณ ,
- ๋ค์๊ณผ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ค์ด ํ์ํ๋ค.
- ํ์ ์
- ๊ฐ ํ๋ง๋ค์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ(๋์ ์ฐ์ ์์๋ ์งง์ time quantum์ RR,๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ FCFS)
- ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์ํฅ/ํํฅ ์์ผ์ค ๊ฒ์ธ๊ฐ.
- ํ๋ก์ธ์ค๊ฐ service๊ฐ ํ์ํ ๋ ์ด๋ค ํ์ ๋ฃ์ด์ค์ง์ ๋ํ ๋ฐฉ๋ฒ
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ CPU ์ค์ผ์ค๋ฌ์ด์ง๋ง, ์ค์ ํ ํ๋ผ๋ฏธํฐ๊ฐ ๋ง์ ๊ฐ์ฅ ๋ณต์กํ๋ค.
4.4BSD scheduler
- scheduling metrics ์ค average response time ๋ฅผ ์ค์ด๊ธฐ ์ํ ์ค์ผ์ค๋ฌ, MLFQS๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฐ์ ์์๋ณ๋ก ๋ ๋ ํ๊ฐ ์๋ค.
Nice
- ๋ค๋ฅธ ์ค๋ ๋๋ค์๊ฒ ์ผ๋ง๋ niceํ์ง.(์ฌ๋ ค๊น์, ์ดํ์ ์ธ, ...)
- ๋์์๋ก niceํด์ ๋ค๋ฅธ ์ค๋ ๋์๊ฒ ์๋ณดํด์ฃผ๊ณ ๋ฎ์์๋ก ๋ค๋ฅธ ์ค๋ ๋๋ก๋ถํฐ ๋บ์ด์ค๋ ค๊ณ ํ๋ค.
- priority = PRI_MAX - (recent_cpu / 4) - (nice * 2).
Priority
- 0~63, ํด์๋ก ์ฐ์ ์์๊ฐ ๋๋ค. niceํ์ง ์์์๋ก, ์ต๊ทผ์ CPU๋ฅผ ์ฌ์ฉํ์ง ์์์๋ก ๋์์ง๋ค.
- ๊ฐ coefficient(4,2)๋ ํฐ ์๋ฏธ๋ ์๊ณ ์ ์๋ํ๋๋ผ.
Recent CPU
- ์ค์ฒฉ๋ ๊ณฑ์ ์ฐ์ฐ์ผ๋ก(๊ณฑ์ ๋ฎ์ด์์ฐ๋ ์ฐ์ฐ) ๊ตฌํ๋ค.
- exponential weighted moving average๋ฅผ ์ฌ์ฉํด์ ๊ณ์ฐํ๋ค
- ๊ณ์๋ฅผ ๋จผ์ ๊ตฌํ๊ณ recent cpu๋ฅผ ๊ณฑํด์ผ ํ๋ค.
- recent_cpu = (2load_avg)/(2load_avg + 1) * recent_cpu + nice.
Load AVG
- 1๋ถ๋์ ์ํ ๊ฐ๋ฅํ ์ค๋ ๋์ํ๊ท ๊ฐ์
- ์์คํ
์ด ๋ชจ๋ ํ๋์ ๊ฐ์ ๊ฐ์ง(์ ์ญ์ ์)
- load_avg = (59/60)*load_avg + (1/60)*ready_threads.
Fixed-Point Real Arithmetic(๊ณ ์ ์์์ ์ฐ์ฐ)
- ๋ถํธ๋นํธ, ์ ์๋ถ, ์์๋ถ๋ก ๋๋ ์ง๋ค.
- ์ ์๋ถ์ ์์๋ถ์ ๋นํธ ์๋ ์์คํ
๋ง๋ค ๋ฌ๋ผ์ง๋ค.
- ํํ ์ค์์๋ 1/17/14๋ก ๋๋ ์ ์ด๋ค.
- ์ ์์ ์ค์์ ํํ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ ๋นํธ์ฐ์ฐ์ ์ด์ฉํด ์ค์ผ์ผ์ ๋ง์ถฐ์ค์ผ ํ๋ค.(๋ณดํต ์ ์์ 2^14๋ฅผ ๊ณฑํ๋ ์ฐ์ฐ์ ํด์ค๋ค)