Scheduling Algorithms - gon2gon2/pintos-kaist GitHub Wiki
- CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋ค.
- schedule metrics์ค ๋ด๊ฐ ์ํ๋ Task๋ฅผ ์ํด ์ต์ ํ ํ ์งํ๋ฅผ ์ ํํ๊ณ ๊ทธ์ ์ด์ธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ฅธ๋ค.
1.FCFS(First-Come, First-Served) Scheduling
- ๋ค์ด์ค๋ ์์ฒญ ์์๋๋ก ์ฒ๋ฆฌํ๋ค.(non-preemptive)
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, Average Waiting Time์ด ๊ธธ๋ค.
- Convoy Effect: CPU๋ฅผ ์ค๋ ์ฌ์ฉํ๋ job๋๋ฌธ์ ์ฌ์ฉ ์๊ฐ์ด ์งง์ job์ด ์์ ์ ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ํ์
- context switching overhead๊ฐ ์ ์ด CPU utilization์ด ์ข๋ค.
2.SJF(Shortest Job First) Scheduling
- ๊ฐ์ฅ ์งง์ CPU burst๋ฅผ ๊ฐ์ง job๋ถํฐ ์ค์ผ์ค๋ง ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ waiting time์ ๋ธ๋ค.
- non-preemptive์ preemptive ๋ ๋ค ๊ฐ๋ฅํ๋ค. preemptive ๋ฐฉ์์ ํ์ฌ ์คํ์ค์ธ ํ๋ก์ธ์ค์ ๋จ์ cpu burst๋ณด๋ค ๋ ์งง์ ํ๋ก์ธ์ค๊ฐ ready queue์ ๋์ฐฉํ์ ๋, ๋ ์งง์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ํํ๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ job์ด ์ด๋์ ๋์ CPU burst๋ฅผ ๊ฐ์ง ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ค์ ์์ฒญ์ ์ด์ ์์ฒญ๊ณผ ์ ์ฌํ ๊ฒ์ด๋ผ๋ ๊ฐ์ ํ์ exponential average๋ฅผ ์ฌ์ฉํด ๊ทผ์ฌ์น๋ฅผ ์์ธกํ๋ค.
3.RR(Round-Robin) Scheduling
- FCFS์ ๋น์ทํ์ง๋ง ํ๋ก์ธ์ค๊ฐ์ ์ค์์น๊ฐ ์ผ์ด๋ ์ ์๋๋ก preemption์ด ์ถ๊ฐ๋๋ค.
- Time Slice ํน์ Time Quantum์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์ ๋จ์์๊ฐ ๋์ ready queue์ ๋งจ ์์ ์์ ์ ์ํํ๊ณ , ์๊ฐ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ค๋ฉด CPU๋ฅผ ์์งํด์ ๋ฐ๋ฉํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ready queue๋งจ ๋ค์ insertํ ๋ค์ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค.
- RR์ ์ฑ๋ฅ์ time quantum์ ๊ฐํ๊ฒ ์์กด์ ์ด๋ค. ๋๋ฌด ํฌ๋ฉด FCFS ๋ฐฉ์์ด ๋๊ณ , ๋๋ฌด ์์ผ๋ฉด context switching overhead๊ฐ ์ปค์ง๋ค.
- ๋๋ถ๋ถ ํ๋ ์์คํ ์์๋ time quantum์ 10~100 milliseconds ์ฌ์ด๋ก ์ค์ ํ๋ค.
- response time์ด ์งง์์ง๋ ์ฅ์ ์ด ์์ด ์ค์๊ฐ ์์คํ , ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ์์คํ ์ ์ ํฉํ๋ค.
4.Priority Scheduling
- ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค์๊ฒ CPU๊ฐ ํ ๋น๋๋ ๋ฐฉ์์ด๋ค.
- ๋์ผํ ์ฐ์ ์์ ๊ฐ์๋ FCFS๋ก ์ํ๋๋ค.
- ์ฐ์ ์์์ ๋ฒ์๋ 0
7, 04095๋ฑ ๋ค์ํ๊ฒ ์ค์ ๋ ์ ์๊ณ , 0์ ๋์ ํน์ ๋ฎ์ ์ฐ์ ์์๋ก ์ค์ ํ ์๋ ์๋ค. - non-preemptive, preemptive ๋ ๋ค ๊ฐ๋ฅํ๋ค. ์๋ก ์ถ๊ฐ๋ ํ๋ก์ธ์ค์ ์งํ์ค์ธ ํ๋ก์ธ์ค ๊ฐ์ ์ฐ์ ์์๋ฅผ ๋น๊ตํ๊ณ , ๋์ ํ๋ก์ธ์ค๋ก context switchingํด์ฃผ๋ฉด preemptive ๋ฐฉ์์ด๋ค.
- ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ ํ์(๋๋ ๋งค์ฐ ์ค๋ ์๊ฐ) ๋๊ธฐํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ indefinit blocking ๋๋ aging์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ค๋ ๊ธฐ๋ค๋ฆฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ฌ๋ ค์ฃผ๋ aging์ ๋์ ํ๊ฑฐ๋, round-robin๊ณผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ ์๋ ์๋ค.
- (SJF ์๊ณ ๋ฆฌ์ฆ์ Priority Scheduling์ ํน์ํ ๋ฒ์ ์ด๋ค.)
5.MLQ(Multi-Level Queue) Scheduling
- Priority๋ RR ๋ฐฉ์์ ๋ฌธ์ ๋ ๋ชจ๋ ready์ํ์ ํ๋ก์ธ์ค๋ค์ด ํ๋์ ready queue์๋ง ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํ์ ๊ด๋ฆฌ๋ฐฉ์์ ๋ฐ๋ผ ์คํ์ํฌ ํ๋ก์ธ์ค๋ฅผ ํ์ํ๋๋ฐ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
- MLQ๋ ์ฐ์ ์์์ ๋ฐ๋ผ ํ๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ๋๋ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๊ณ , ๊ฐ ํ์ ๋ํด์ RR ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ ์๋ํ๋ค.
- ํ๋ก์ธ์ค๋ ์ฒ์ ๋ฐฐ์ ๋ ํ๋ฅผ ๋ฒ์ด๋์ง ๋ชปํ๋ค.
- ํ๋ก์ธ์ค์ ํ์ (real-time, interactive, system, batch)์ ๋ฐ๋ผ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ค.
6.MLFQ(Multi-Level Feedback Queue) Scheduling
-
MLQ๋ ํ๋ก์ธ์ค๋ค์ด ์ฒ์ ๋ฐฐ์ ๋ ํ๋ฅผ ๋ฒ์ด๋ ์ ์๋ค๋ ํ๊ณ ๋๋ฌธ์ ์ค์ผ์ค๋ง ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์๋ ์์ง๋ง, ์ ์ฐํ ๋์ฒ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
-
MLFQ๋ ํ๋ก์ธ์ค๋ค์ CPU bursts์ ๋ฐ๋ผ ํ ์ฌ์ด๋ฅผ ์ด๋ํ ์ ์๋ค.
-
CPU burst๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ค(I/O bound, interactive)์ด๋ ์ค๋ ๋๊ธฐํ ํ๋ก์ธ์ค๋ค์ high priority queue์์ ์ฒ๋ฆฌ๋๋ค.
-
๋ฎ์ ์ฐ์ ์์์ ํ์ ๋ค์ด์๋ ํ๋ก์ธ์ค๋ค์ ๋์ ์ฐ์ ์์๋ค์ ํ๊ฐ ๋ชจ๋ ๋น์์ ๋๋ง ์คํ๊ฐ๋ฅํ๋ค.
-
๋ค์๊ณผ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ค์ด ํ์ํ๋ค.
- ํ์ ์
- ๊ฐ ํ๋ง๋ค์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ(๋์ ์ฐ์ ์์๋ ์งง์ time quantum์ RR,๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ FCFS)
- ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์ํฅ/ํํฅ ์์ผ์ค ๊ฒ์ธ๊ฐ.
- ํ๋ก์ธ์ค๊ฐ service๊ฐ ํ์ํ ๋ ์ด๋ค ํ์ ๋ฃ์ด์ค์ง์ ๋ํ ๋ฐฉ๋ฒ
-
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ CPU ์ค์ผ์ค๋ฌ์ด์ง๋ง, ์ค์ ํ ํ๋ผ๋ฏธํฐ๊ฐ ๋ง์ ๊ฐ์ฅ ๋ณต์กํ๋ค.