1. ์ค์ผ์ค๋ง(Scheduling)
ํ๋ก์ธ์ค๊ฐ ์์ฑ๋์ด ์คํ๋ ๋ ํ์ํ ์์คํ ์ ์ฌ๋ฌ ์์์ ํด๋น ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ๋ ์์ ์ด๋ค.
1) ์ฅ๊ธฐ(์์ ) ์ค์ผ์ค๋ง
๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ ์ฌ์ด์ ์ค์ผ์ค๋ง์ ๋ด๋นํ๋ค. ๋ง์ ํ๋ก์ธ์ค๊ฐ ํ๊บผ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ฌ ๊ฒฝ์ฐ ๋์คํฌ์ ์์๋ก ์ ์ฅ๋๋๋ฐ ์ ์ฅ๋ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ์ฌ ์ค๋น ํ๋ก ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ค.
2) ์ค๊ธฐ ์ค์ผ์ค๋ง
ํ ์์คํ ์์ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ฌด ๋ง์ ํ๋ก๊ทธ๋จ์ด ๋์์ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ์กฐ์ ํ๋ค
3) ๋จ๊ธฐ(ํ๋ก์ธ์) ์ค์ผ์ค๋ง
CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์ค์ผ์ค๋ง๊ณผ ๋ฌธ๋งฅ ๊ตํ์ ๋ด๋นํ๋ค. ์ค๋น ํ์ ์กด์ฌํ๋ ํ๋ก์ธ์ค ์ค ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์คํ์ํฌ์ง ๊ฒฐ์ ํ๋ค.
4) ์ค์ผ์ค๋ง ํ(Queue)
- ์์ (Job) ํ: ํ์ฌ ์์คํ ๋ด์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ์งํฉ์ด๋ค.
- ์ค๋น(Ready) ํ: ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์์ผ๋ฉด์ CPU๋ฅผ ์ก์ ์คํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค์ ์งํฉ์ด๋ค.
- ์ฅ์น(Device) ํ: ์ ์ถ๋ ฅ ์์ ์ ๋๊ธฐํ๊ณ ์๋ ํ๋ก์ธ์ค์ ์งํฉ์ด๋ค.
2. ํ๋ก์ธ์ค ์ํ ๋ณํ
ํ๋ก์ธ์ค ์ํ์๋ ์ค๋น(Ready), ์คํ(Running), ๋๊ธฐ(Wait), ์ข ๋ฃ(Exit) 4๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
๋ณดํต ํ๋ก๊ทธ๋จ์ CPU๊ฐ ํด์ํ ์ ์๋ ๊ธฐ๊ณ์ด ํํ๋ก ๋์คํฌ์ ์ ์ฅ๋๋ค. ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋์คํฌ์ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์ค๋น ์ํ๋ก ์คํ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. ์ด๋ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๊ฑฐ๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ๋น์คํ ์ํ๊ฐ ๋๊ณ ์ค๋น ํ์ ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ ์ํ๊ฐ ๋๋ค.
1) Dispatch : ์ค๋น(Ready) → ์คํ(Running)
์ค๋น ์ํ๋ก ๋๊ธฐํ๊ณ ์๋ ํ๋ก์ธ์ค ์ค ํ๋์ ํ๋ก์ธ์๋ฅผ ํ ๋น๋ฐ์ ์คํ ์ํ๋ก ์ ์ด๋๋ ๊ณผ์ ์ด๋ค.
2) Time Runout : ์คํ(Running) → ์ค๋น(Ready)
์ด์์ฒด์ ๋ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ผ์ ์๊ฐ๋ง ์ฌ์ฉํ ์ ์๊ฒ ์๊ฐ์ ์ ํํ๋๋ฐ, ์ด ์๊ฐ์ด ๊ฒฝ๊ณผํ๋ฉด ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ ์ด์์ฒด์ ๊ฐ CPU ์ ์ด๊ถ์ ๊ฐ๊ฒ ๋๋ค. ์ด๋ ์คํ ํ๋ก์ธ์ค๋ ์ค๋น ์ํ๊ฐ ๋๊ณ ์ค๋น ํ์ ํ๋ก์ธ์ค ์ค ํ๋๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ ์ํ๊ฐ ๋๋ค.
3) Block : ์คํ(Running) → ๋๊ธฐ(Wait)
์คํ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ, ์๋ก์ด ์์ ์์ฒญ ๋ฑ์ด ํ์ํ๋ฉด ์ค์ค๋ก CPU๋ฅผ ๋ฐ๋ฉํ๊ณ ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
4) Wake Up : ๋๊ธฐ(Wait) → ์ค๋น(Ready)
์ ์ถ๋ ฅ ์์ ๋ฑ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ์์ ์ค๋น ์ํ๊ฐ ๋๋ค.
2. CPU ์ค์ผ์ค๋ง
์ค๋น ํ์ ์๋ ํ๋ก์ธ์ค๋ค์ ๋์์ผ๋ก ์ด๋ค ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ์์ ์ด๋ค.
1) FCFS(First Come First Served)
- ๋จผ์ ์จ ์์๋๋ก ์ฒ๋ฆฌ
- ๋น์ ์ (Non-Preemptive) ์ค์ผ์ค๋ง: ์ด๋ฏธ ํ ๋น๋ CPU๋ฅผ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ๋ก ๋นผ์์ ์ฌ์ฉํ ์ ์๋ ์ค์ผ์ค๋ง์ผ๋ก ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ผ๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฌ์ฉํ๋ค.
- ์์์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋๋ฌํ์ฌ ํจ์จ์ฑ์ ๋ฎ์ถ๋ ํ์์ด ๋ฐ์ํ๋ค.
2) SJF(Shortest Job First)
- ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋์ฐฉํ์ด๋ CPU burst time์ด ์งง์ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ ํ ๋น
- ๋น์ ์ (Non-Preemptive) ์ค์ผ์ค๋ง
- ๊ธฐ์(Starvation) ์ํ ๋ฐ์ ๊ฐ๋ฅ: ์ฌ์ฉ ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๋ ๊ฑฐ์ ์์ํ CPU๋ฅผ ํ ๋น๋ฐ์ ์ ์๋ค.
3) SRT(Shortest Remaining time First)
- ๋ ์งง์ burst time์ ๊ฐ์ง ํ๋ก์ธ์ค์๊ฒ ๋จผ์ ํ ๋น
- ์ ์ (Preemptive) ์ค์ผ์ค๋ง
- ๊ธฐ์(Starvation) ์ํ ๋ฐ์ ๊ฐ๋ฅ
4) Priority Scheduling
- ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ ํ ๋น
- ์ ์ (Preemptive) ์ค์ผ์ค๋ง
- ๋น์ ์ (Non-Preemptive) ์ค์ผ์ค๋ง: ๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด ์ค๋น ํ์ Head์ ๋ฃ๋๋ค.
- ๊ธฐ์(Starvation) ์ํ์ ๋ฌด๊ธฐํ ๋ด์(Indefinite blocking) ๋ฐ์ ๊ฐ๋ฅ
- ๋ฌด๊ธฐํ ๋ด์: ์คํ ์ค๋น๋ ๋์ด์์ผ๋ CPU๋ฅผ ์ฌ์ฉ ๋ชปํ๋ ํ๋ก์ธ์ค๋ฅผ CPU๊ฐ ๋ฌด๊ธฐํ ๋๊ธฐํ๋ ์ํ
- Aging(์์ด์ง)์ผ๋ก ํด๊ฒฐ: ์๋ฌด๋ฆฌ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ผ๋ ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ฐ์ ์์๋ฅผ ๋์ฌ์ค๋ค.
5) Round Robin
- ๊ฐ ํ๋ก์ธ์ค๋ ๋์ผํ ํฌ๊ธฐ์ ํ ๋น ์๊ฐ์ ๊ฐ๊ฒ ๋๊ณ ํ ๋น ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ ๋นํ๊ณ ์ค๋น ํ์ ์ ์ผ ๋ค๋ก ์ฎ๊ฒจ์ง๋ค.
- ์ ์ (Preemptive) ์ค์ผ์ค๋ง