=> CPU
๋ก ์ผ๋ฐ ๋ช
๋ น์ด`๋ฅผ ์ํํ๋ ์์
CPU burst๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด cpu๋ฅผ ์ง์ ๊ฐ์ง๊ณ ๋น ๋ฅธ ๋ช ๋ น์ ์ํํ๋ ๋จ๊ณ์ด๋ค. ์ด ๋จ๊ณ์์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ cpu๋ด์์ ์ผ์ด๋๋ ๋ช ๋ น์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์ผ๋ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
=> ์ด์์ฒด์
์ ๋์์ ๋ฐ์ ์์
์ ์ํํด์ผํ๋ ์์
I/O burst๋ ์ปค๋์ ์ํด ์ ์ถ๋ ฅ ์์ ์ ์งํํ๋ ๋น๊ต์ ๋๋ฆฐ ๋จ๊ณ์ด๋ค. ์ด ๋จ๊ณ์์๋ ๋ชจ๋ ์ ์ถ๋ ฅ ๋ช ๋ น์ ํน๊ถ ๋ช ๋ น์ผ๋ก ๊ท์ ํ์ฌ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ง์ ์ํํ ์ ์๊ณ (user level X, kernal level O), ์ด์์ฒด์ ๋ฅผ ํตํด ์๋น์ค๋ฅผ ๋ํํ๋๋ก ํ๋ค.
์์
1. ํค๋ณด๋ ์
๋ ฅ์ ๋ฐ๋ ์์
2. ์ปดํจํฐ์์ ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์์
3. ๋์คํฌ์์ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์์
...
๊ฐ ํ๋ก๊ทธ๋จ๋ง๋ค cpu๋ฒ์คํธ์ io๋ฒ์คํธ๊ฐ ์ฐจ์งํ๋ ๋น์จ์ด ๊ท ์ผํ์ง ์๋ค. ์ด๋ค ํ๋ก์ธ์ค๋ io์์ ์ด ๋น๋ฒํ๋ฉด์ cpu์์ ์ด ์ ๊ณ ์ด ๋ฐ๋๋ ์๋ค. ์ด๋ค ๋ฒ์คํธ๊ฐ ๋ ์์ฃผ ์ผ์ด๋๋์ง์ ๋ฐ๋ผ์ io, cpu bound process๋ก ๋๋ ์ ์๋ค.
=> I/O ๋ฒ์คํธ
๊ฐ ๊ธด ํ๋ก์ธ์ค
I/O์์ฒญ์ด ๋น๋ฒํด CPU ๋ฒ์คํธ๊ฐ ์งง๊ฒ ๋ํ๋๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค. ์ฃผ๋ก ์ฌ์ฉ์๋ก๋ถํฐ interaction์ ๊ณ์ ๋ฐ์๊ฐ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ํํ๋ ๋ํํ ํ๋ก๊ทธ๋จ์ด ์ด์ ํด๋นํ๋ค.
=> CPU ๋ฒ์คํธ
๊ฐ ๊ธด ํ๋ก์ธ์ค
I/O์์
์ ๊ฑฐ์ ์ํํ์ง ์์ CPU ๋ฒ์คํธ๊ฐ ๊ธธ๊ฒ ๋ํ๋๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค. ์ฃผ๋ก ํ๋ก์ธ์ค ์ํ์ ์๋น ์๊ฐ์ ์
์ถ๋ ฅ ์์
์์ด CPU ์์
์ ์๋ชจํ๋ ๊ณ์ฐ ์์ฃผ์ ํ๋ก๊ทธ๋จ์ด ํด๋น๋๋ค.
=> CPU ์ฌ์ฉ์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ด์์ฒด์ ๊ฐ CPU ์ ์ ๊ถ
์ ์ฐ์ ์ ์ผ๋ก ํ ๋นํด์ผํ ํ๋ก์ธ์ค๋ฅผ ์ ์ ํ๋ ๊ณผ์ (schduling - OS๊ฐ ์ํ)
์ปดํจํฐ ์์คํ ๋ด์์ ์ํ๋๋ ํ๋ก์ธ์ค์ CPU ๋ฒ์คํธ๋ฅผ ๋ถ์ํด๋ณด๋ฉด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์งง์ CPU ๋ฒ์คํธ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ทนํ ์ผ๋ถ๋ถ๋ง ๊ธด CPU ๋ฒ์คํธ๋ฅผ ๊ฐ๋๋ค. ์ด๋ ๋ค์ ๋งํด์ CPU๋ฅผ ํ ๋ฒ์ ์ค๋ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ์ ๊น ์ฌ์ฉํ๊ณ I/O ์์ ์ ์ํํ๋ ํ๋ก์ธ์ค๊ฐ ๋ง๋ค๋ ๊ฒ์ด๋ค. ์ฆ ๋ํํ ์์ ์ ๋ง์ด ์ํํ๋ค๋ ์๋ฏธ์ด๋ค. ์ฌ์ฉ์์ ๋ํ ๋น ๋ฅธ ์๋ต์ ํ๊ธฐ ์ํด ํด๋น ํ๋ก์ธ์ค์๊ฒ ์ฐ์ ์ ์ผ๋ก CPU๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค. ๋ง์ฝ CPU ๋ฐ์ด๋ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ CPU๋ฅผ ํ ๋นํ๋ค๋ฉด ๊ทธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ๋๊น์ง ๋ง์ I/O ๋ฐ์ด๋ ํ๋ก์ธ์ค๋ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
=> ready ์ํ์ ์๋ ํ๋ก์ธ์ค๋ค ์ค ์ด๋ ํ ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ํ ๋นํ ์ง ๊ฒฐ์ ํ๋ ์ด์์ฒด์ ์ ์ฝ๋
์ ์ ํ(preemptive) : ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ธฐ ์ํด๋ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ ๋น์ ์ ํ(non-preemptive) : CPU๋ฅผ ํ๋ํ ํ๋ก์ธ์ค๊ฐ ์ค์ค๋ก CPU ์ ์ ๊ถ์ ํฌ๊ธฐํ๊ธฐ ์ ๊น์ง CPU๋ฅผ ๋นผ์์ง ์๋ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ
CPU Scheduler๊ฐ ํ์ํ ๊ฒฝ์ฐ
Running -> Blocked
= I/O์์ฒญํ๋ ์์คํ ์ฝ (non-preemptive, ์์์ ๋ด๋๊ธฐ ๋๋ฌธ)Runing -> Ready
= ํํ ์ ๋ชจ๋ ์ฌ์ฉํ timer interrupt (preemptive, ๊ฐ์ ๋บ๊ธฐ)Blocked -> Ready
= I/O ์์ ์๋ฃ ํ interruptTerminated
= ์์ ์ ๋ง์น ํ๋ก์ธ์ค๋ฅผ free (non-preemptive, ์์์ ๋ด๋๊ธฐ ๋๋ฌธ)
Dispatcher
- ์๋กญ๊ฒ ์ ํ๋ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ๊ณ ์์ ์ ์ํํ ์ ์๋๋ก ํ๊ฒฝ ์ค์ ์ ํ๋ ์ด์์ฒด์ ์ฝ๋
- CPU๋ฅผ ๋๊ตฌํํ ์ค ์ง ๊ฒฐ์ ํ์ฌ ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ฃผ๋ ์ญํ ์ ์ํ (Context switch)
- ๋์คํจ์น ์ง์ฐ์๊ฐ(Dispatch latency) : dispatcher๊ฐ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ ์ง์ํค๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ cpu๋ฅผ ์ ๋ฌํ๊ธฐ ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ (context switch overhead)
์์คํ ์ ์ฅ
- CPU Utilization(์ด์ฉ๋ฅ )
- ์ ์ฒด ์๊ฐ ์ค์์ CPU๊ฐ ์ผ์ ํ ์๊ฐ์ ๋น์จ
- CPU๋ฅผ ์ต๋ํ ๋ฐ์๊ฒ ๋ฌ๋ผ
- Throughput(์ฒ๋ฆฌ๋)
- ์ฃผ์ด์ง ์๊ฐ๋์ ์ค๋นํ์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค ์ค ๋ช ๊ฐ๋ฅผ ๋๋ง์ณค๋์ง ๋ํ๋ธ๋ค
ํ๋ก์ธ์ค ์ ์ฅ
- Turnaround time (์์์๊ฐ, ๋ฐํ ์๊ฐ)
- CPU๋ฅผ ๋ค ์ฐ๊ณ CPU ๋ฒ์คํธ ๋๋ ์์ - CPU ์์ฒญํ ์์
- ์ค๋นํ์์ ๊ธฐ๋ค๋ฆฐ ์๊ฐ + ์ค์ ๋ก cpu ์ฌ์ฉํ ์๊ฐ
- Waiting time(๋๊ธฐ ์๊ฐ)
- CPU ๋ฒ์คํธ ๊ธฐ๊ฐ์ค ์ค๋น ํ์์ ๊ธฐ๋ค๋ฆฐ ์๊ฐ
- Response time(์๋ต ์๊ฐ)
- ํ๋ก์ธ์ค๊ฐ ์ค๋น ํ์ ๋ค์ด์จ ํ ์ฒซ ๋ฒ์งธ cpu๋ฅผ ํ๋ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฐ ์๊ฐ
1. FCFS (First come first served, ์ ์
์ ์ถ ์ค์ผ์ค๋ง)
2. SJF (Shortest Job First, ์ต๋จ ์์
์ฐ์ ์ค์ผ์ค๋ง)
3. Priority (์ฐ์ ์์ ์ค์ผ์ค๋ง)
4. RR (Round Robin, ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง)
5. Multi-Level Queue (๋ฉํฐ ๋ ๋ฒจ ํ)
6. Multi-Level Feedback Queue(๋ฉํฐ ๋ ๋ฒจ ํผ๋๋ฐฑ ํ)
7. Multi-Processor (๋ค์ค ์ฒ๋ฆฌ๊ธฐ ์ค์ผ์ค๋ง)
8. Real-time (์ค์๊ฐ ์ค์ผ์ค๋ง)
9. Thread (์ค๋ ๋ ์ค์ผ์ค๋ง)
=> ๋จผ์ ์จ ์์๋๋ก ์ฒ๋ฆฌ
- CPU๋ฅผ ์ค๋ ์ฐ๋ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ค๋ฉด ์์ฒญ๋ ๋นํจ์จ ๋ฐ์ (= ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์ฐ์ ์ ์ผ๋ก ์ํ๋๋์ง์ ๋ฐ๋ผ ๋๊ธฐ ์๊ฐ์ ๋ง์ ์ํฅ์ ๋ผ์นจ)
- nonpreemptive
=> CPU ๋ฒ์คํธ๊ฐ ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ CPU๋ฅผ ํ ๋นํ๋ ๋ฐฉ์
- Preempive
- SRTF (Shortest Remaining Time First) - ๊ฐ์ฅ ๋จ์ ์๊ฐ์ด ์ ์ ์์ ์ฐ์ ์คํ
- CPU๋ฅผ ์ก์๋ ๋ ์งง์ ํ๋ก์ธ์ค ๋ค์ด์ค๋ฉด ์ ์ ๊ถ ๋นผ์๊น
- nonpreemptive
- ์ผ๋จ CPU๋ฅผ ์ก์ผ๋ฉด ๋ ์งง์ ํ๋ก์ธ์ค ๋ค์ด์๋ CPU ๋ฒ์คํธ ๋๋ ๋๊น์ง ์ ์ ๊ถ ๋นผ์๊ธฐ์ง ์์
- ๋ฌธ์ ์
- Starvation : ์งง์ ํ๋ก์ธ์ค๋ก ์ธํด ๊ธด ํ๋ก์ธ์ค๋ ์์ํ cpu๋ฅผ ์ ์ ํ์ง ๋ชปํ ์ ์์
- CPU ๋ฒ์คํธ ์๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ ์์, ๊ณผ๊ฑฐ CPU ์ฌ์ฉ์๊ฐ์ ์ด์ฉํ์ฌ ์ถ์
=> ์ฐ์ ์์๊ฐ ์ ์ผ ๋์ ํ๋ก์ธ์ค์๊ฒ CPU ํ ๋น
(์ฐ์ ์์๊ฐ ์์๊ฒ ๋์ ์ฐ์ ๊ถ)
- nonpreemptive
- cpu๋ฅผ ์ก์ผ๋ฉด ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋ค์ด์๋ CPU ๋ฒ์คํธ ์๋ฃ๋ ๋๊น์ง ์ ์ ๊ถ ๋นผ์๊ธฐ์ง ์์
- preemptive
- CPU๋ฅผ ์ก์๋๋ผ๋ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ฉด ์ ์ ๊ถ ๋นผ์๊น
- ๋ฌธ์ ์
- Starvation : ์ฐ์ ์์ ๋ฎ์ ํ๋ก์ธ์ค๋ ์์ํ cpu๋ฅผ ์ฐจ์ง ๋ชปํ ์ ์์
- ํด๊ฒฐ ๋ฐฉ์
- Aging : ์๋ฌด๋ฆฌ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ผ๋ ์๊ฐ์ด ์ง๋๋ฉด ์ฐ์ ์์ ๋์ฌ์ฃผ๋ ๊ธฐ๋ฒ
=> time quantum์ ๊ฐ ํ๋ก์ธ์ค์๊ฒ ๋ถ์ฌํ์ฌ ์ ํด์ง time quantum์ ์ฌ์ฉํ๋ฉด ready queue์ ๋ค๋ก ๊ฐ์ ์ค์ ์๊ณ , queue์ ๋งจ ์๋ถํฐ ์ฐจ๋ก๋๋ก ์ํํ๋ ๊ธฐ๋ฒ
- preemptive
- ์ ํด์ง ์๊ฐ๋งํผ cpu ๋ฒ์คํธ๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์ ํ๋ก์ธ์ค์๊ฒ ์ ์ ๊ถ์ ๋๊ฒจ์ฃผ๊ธฐ ์ํด ์ ์ ๊ถ ๋นผ์๊ธฐ ๋๋ฌธ
- ์งง์ ์๋ต ์๊ฐ (๋ชจ๋ n๊ฐ ํ๋ก์ธ์ค, q time, (n-1)*q ๋ฏธ๋ง์ผ๋ก ๋๊ธฐ)
- Quantum์ด ํฌ๋ฉด FCFS, Quantum์ด ์์ผ๋ฉด context switch overhead(dispatcher๋ง ๋ถ์ํด์ง)
- Job์ ์์ ์๊ฐ์ด ๋ถ์ฐ๋์ด ์์ผ๋ฉด ํจ์จ์ , ๋ชจ๋ ๋์ผํ ์์ ์๊ฐ ๋นํจ์จ์
=> Round-robin + FCFS + priority scheduling
- ์ฐ์ ์์์ ๋ฐ๋ผ ready queue ๋ถํ
- ์ ์ํ - ๋น ๋ฅธ ์๋ต(io, RR), ํ์ํ - ๊ณ์ฐ(cpu, FCFS)
- ๊ฐ๊ฐ์ ํ๋ scheduling ํ์
- ๊ณ ์ ์ฐ์ ์์ - ์ ์ํ ์ฐ์ ์ ์ผ๋ก cpuํ ๋น, ์ ์ํ ๋น๋ฉด ํ์ํ cpu ํ ๋น (starvation ์ ๋ฐ ๊ฐ๋ฅ)
- ํ์ ์ฌ๋ผ์ด์ค - ๊ฐ ํ์ cpu time์ ์ ์ ํ ๋น์จ๋ก ํ ๋น (8:2 = ์ ์:ํ์)
=> Multi-level queue + feedback ๊ธฐ๋ฅ
- ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ๋ถํ ๋ ready queue ๋ด์์ ๋ค๋ฅธ ํ๋ก ์ด๋ ๊ฐ๋ฅ
- aging ๊ตฌํ ๊ฐ๋ฅ
- ๋ฉํฐ ๋ ๋ฒจ ํผ๋๋ฐฑ ํ ์ ์ํ๋ ์์ : ํ์ ์, ๊ฐ ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ, ์น๊ฒฉ+๊ฐ๋ฑ ๊ธฐ์ค, ํ๋ก์ธ์ค ๋์ฐฉ ์ ์ด๋ ๋ ๋ฒจ๋ก ๋ค์ด๊ฐ์ง ๊ฒฐ์
=> CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ์์คํ
ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ
- ํ๋ก์ธ์ค๋ฅผ ready queue์ ํ ์ค๋ก ์ธ์์ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์์ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ๊บผ๋ด์ด ๊ฐ๋๋ก ํ๋ค.
- ๋์นญํ ๋ค์ค ์ฒ๋ฆฌ
- ๊ฐ CPU๊ฐ ๊ฐ์ ์์์ ์ค์ผ์ค๋ง์ ๊ฒฐ์
- ๋น๋์นญํ ๋ค์ค ์ฒ๋ฆฌ
- ํ๋์ CPU๊ฐ ๋ค๋ฅธ ๋ชจ๋ CPU์ ์ค์ผ์ค๋ง ๋ฐ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ฑ ์์ง๊ณ ๋๋จธ์ง CPU๋ ๊ฑฐ๊ธฐ์ ๋ฐ๋ผ ์์ง์ด๋ ๋ฐฉ์
=> deadline์ด ์๋ ํ๋ก์ธ์ค๋ค์ cpu ์ ์ ๊ถ์ ๊ฒฐ์ ํ๋ ๊ธฐ๋ฒ
- hard real-time system
- ์ ํด์ง ์๊ฐ ์์ ๋ฐ๋์ ์์ ์ด ๋๋๋๋ก ์ค์ผ์ค๋งํด์ผ ํจ
- soft real-time system
- ๋ฐ๋๋ผ์ธ์ด ์กด์ฌํ๊ธฐ๋ ํ์ง๋ง ์งํค์ง ๋ชปํ๋ค๊ณ ํด์ ์ํํ ์ํฉ์ด ์๊ธฐ์ง ์๋๋ค. (๋์ ์ทจ์ค..?)
=> thread๊ฐ ์ ์ ๊ถ์ ์ด๋ป๊ฒ ํ ๋นํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ๊ธฐ๋ฒ
- local scheduling
- ์ด์์ฒด์ ์ ์ฅ ์ค๋ ๋ ์กด์ฌ ๋ชจ๋ฆ
- Process๊ฐ cpu ์ ์ ๊ถ thread์๊ฒ ๋ถ์ฌ
- global scheduling
- ์ปค๋ ๋ ๋ฒ ์ค๋ ๋ ์ผ๋ฐ ํ๋ก์ธ์ค์ฒ๋ผ ์ปค๋์ ๋จ๊ธฐ ์ค์ผ์ค๋ฌ๊ฐ ์ด๋ค ์ค๋ ๋๋ฅผ ์ค์ผ์คํ ์ง ๊ฒฐ์