๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ <์ด์์ฒด์ > ๊ฐ์๋ฅผ ๋ฃ๊ณ ,
<ํผ์ ๊ณต๋ถํ๋ ์ปดํจํฐ๊ตฌ์กฐ + ์ด์์ฒด์ > ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ๋ <์ด์์ฒด์ > ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค.
CPU ์ค์ผ์ค๋ง์ด๋?
๋ชจ๋ ํ๋ก์ธ์ค๋ CPU๋ฅผ ํ์๋ก ํ๊ณ , ๋จผ์ CPU๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ด ํฉ๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค๋ค์๊ฒ ๊ณต์ ํ๊ณ ํฉ๋ฆฌ์ ์ผ๋ก CPU ์์์ ํ ๋นํ๊ธฐ ์ํด ์ด์์ฒด์ ๋ ์ด๋ค ํ๋ก์ธ์ค์ CPU๋ฅผ ํ ๋นํ ์ง, ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ค์๊ฒ ๊ณต์ ํ๊ณ ํฉ๋ฆฌ์ ์ผ๋ก CPU ์์์ ๋ฐฐ๋ถํ๋ ๊ฒ์ CPU ์ค์ผ์ค๋ง(CPU Scheduling)์ด๋ผ๊ณ ํฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์คํ ๋จ๊ณ (CPU and I/O Bursts)
ํฉ๋ฆฌ์ ์ด๊ณ ํจ์จ์ ์ธ CPU ์์ ๋ฐฐ๋ถ์ ์ํด ์ด๋ค ํ๋ก์ธ์ค์๊ฒ CPU๋ฅผ ๋จผ์ ํ ๋นํ๋ ๊ฒ์ด ์ข์์ง๋ฅผ ํ๋จํ๊ธฐ ์ํด์๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ค ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉฐ ์คํ๋๋์ง ์๊ฐํด๋ณด์์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ํ๋ก์ธ์ค๋ค์ CPU์ ์ ์ถ๋ ฅ์ฅ์น๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉฐ ์คํ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์คํ ์ค์ธ ํ๋ก์ธ์ค(= ํ๋ก๊ทธ๋จ)๋ ๋๋ถ๋ถ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด CPU ์ฌ์ฉ, I/O ์ฅ์น ์ฌ์ฉ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๊ฒ ๋ฉ๋๋ค.
- CPU Burst: CPU๋ง ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ instruction์ ์คํํ๋ ๋จ๊ณ
- I/O Burst: I/O๋ฅผ ์คํํ๊ณ ์๋ ๋จ๊ณ
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค๋ ๊ฒ์ CPU Burst์ I/O Burst๊ฐ ๋ฐ๋ณต๋๋ฉฐ ์คํ๋๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋จ, ํ๋ก์ธ์ค์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ฐ๊ฐ์ ๋น๋๋ ๊ธธ์ด๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. (ํ๋ก์ธ์ค๋ง๋ค CPU, I/O ์ฅ์น ์ด์ฉ ์๊ฐ ์ฐจ์ด๊ฐ ์์)
- CPU bound process: CPU๋ฅผ ์ด์ฉํ๋ ์๊ฐ์ด ์๋์ ์ผ๋ก ๊ธด ๊ณ์ฐ ์์ฃผ์ ์์ ์ ํ๋ ํ๋ก์ธ์ค
- I/O bound process: CPU๋ฅผ ์ก๊ณ ๊ณ์ฐํ๋ ์๊ฐ๋ณด๋ค ์ ์ถ๋ ฅ ์์ ์ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ ํ๋ก์ธ์ค
์์ ๊ทธ๋ํ์์ ์ ์ ์๋ฏ์ด, I/O bound process์ ๊ฒฝ์ฐ์๋ CPU๋ฅผ ์ฌ์ฉํ๋ ์๊ฐ์ ์งง์ง๋ง CPU๋ฅผ ์ก๋ ๋น๋๊ฐ ๋์ต๋๋ค.
๋ฐ๋ฉด, CPU bound process์ ๊ฒฝ์ฐ CPU๋ฅผ ํ ๋ฒ ์ก์ผ๋ฉด ์ฌ์ฉ์๊ฐ์ด ๊ธธ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ์์ฌ ์๊ธฐ ๋๋ฌธ์ CPU์ I/O ์ฅ์น ๋ฑ ์์คํ ์์์ ๊ณจ๊ณ ๋ฃจ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด CPU ์ค์ผ์ค๋ง์ด ํ์ํ ๊ฒ์ ๋๋ค.
CPU Scheduler & Dispatcher
CPU Scheduler
- Ready ์ํ์ ํ๋ก์ธ์ค ์ค์์ ์ด๋ฒ์ CPU๋ฅผ ์ค ํ๋ก์ธ์ค๋ฅผ ๊ณ ๋ฆ
- CPU๋ฅผ ํ ๋นํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฐ์ ํ๋ ์ด์์ฒด์ ์ฝ๋๋ก, ๋ณ๋์ ํ๋์จ์ด๋ ์ํํธ์จ์ด๊ฐ ์๋
Dispatcher
- CPU์ ์ ์ด๊ถ์ CPU Scheduler์ ์ํด ์ ํ๋ ํ๋ก์ธ์ค์๊ฒ ์ค์ ๋ก ๋๊ฒจ์ฃผ๋ ๊ณผ์ ์ ๋ด๋นํ๋ ์ฝ๋
- ์ด ๊ณผ์ ์ ๋ฌธ๋งฅ ๊ตํ(context switch)์ด๋ผ๊ณ ํจ
CPU ์ค์ผ์ค๋ง์ด ํ์ํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ํ ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ
1. Running -> Blocked (ex. I/O ์์ฒญ ์์คํ ์ฝ)
2. Running -> Ready (ex. timer ์ธํฐ๋ฝํธ (=ํ ๋น ์๊ฐ ๋ง๋ฃ))
3. Blocked -> Ready (ex. I/O ์๋ฃ ํ ์ธํฐ๋ฝํธ)
4. Terminate - nonpreemptive (์์ง ๋ฐ๋ฉ)
CPU ์ค์ผ์ค๋ง์ด ํ์ํ ๊ฒฝ์ฐ๋ ํ๋ก์ธ์ค๊ฐ ์์ง ๋ฐ๋ฉํ ๊ฒฝ์ฐ(nonpreemptive, ๋น์ ์ ํ)์ ๊ฐ์ ๋ก ๋นผ์์์ ์๋ก์ด ํ๋ก์ธ์ค์๊ฒ CPU ์ ์ด๊ถ์ ๋๊ฒจ์ค์ผํ๋ ๊ฒฝ์ฐ(preemptive, ์ ์ ํ)๋ก ๋๋ฉ๋๋ค.
1, 4 ์์์ ์ค์ผ์ค๋ง์ nonpreemptive, ๋๋จธ์ง ๊ฒฝ์ฐ preemptive
์ค์ผ์ค๋ง ์ฑ๋ฅ ์ฒ๋
1. ์์คํ ์ ์ฅ์์์ ์ฑ๋ฅ ์ฒ๋ - CPU๊ฐ ์ผ์ ๋ง์ด ํ๋ฉด ํ ์๋ก ์ฑ๋ฅ์ด ๋์ ๊ฒ
- CPU utilization (์ด์ฉ๋ฅ ): CPU๊ฐ ์ผ์ ํ ์๊ฐ / ์ ์ฒด ์๊ฐ
- Throughput (์ฒ๋ฆฌ๋): ์ฃผ์ด์ง ์๊ฐ ์์ ๋ช ๊ฐ์ ์ผ(process)๋ฅผ ์ฒ๋ฆฌํ๋๊ฐ
2. ํ๋ก๊ทธ๋จ ์ ์ฅ์์์ ์ฑ๋ฅ ์ฒ๋ - CPU๋ฅผ ์ป์ด์ ์์ ์ ๋นจ๋ฆฌ ๋๋ผ์๋ก ์ฑ๋ฅ์ด ๋์ ๊ฒ
- Turnaround time(์์์๊ฐ, ๋ฐํ์๊ฐ): CPU๋ฅผ ์ป์ด์ ์ฐ๊ณ ๋น ์ ธ๋๊ฐ ๋๊น์ง ๊ฑธ๋ฆฐ ์ด ์๊ฐ (๋๊ธฐ์๊ฐ + CPU์ฌ์ฉ ์๊ฐ ์ดํฉ)
- Waiting time (๋๊ธฐ ์๊ฐ): ready queue์์ ๊ธฐ๋ค๋ฆฐ ์๊ฐ์ ์ดํฉ(ํ ๋ฒ์ burst ์๋ ์ป์๋ค ๋นผ์๊ฒผ๋ค ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต ๋ ์ ์์)
- Response time (์๋ต ์๊ฐ): ์ต์ด๋ก CPU๋ฅผ ์ป๊ธฐ ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ
CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ
FCFS (First-Come First-Served)
๋จ์ํ ready queue์ ์ฝ์ ๋ ์์๋๋ก ํ๋ก์ธ์ค๋ค์ ์ฒ๋ฆฌํ๋ ๋น์ ์ ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ ๋๋ค.
์ฆ, CPU๋ฅผ ๋จผ์ ์์ฒญํ ํ๋ก์ธ์ค๋ถํฐ CPU ํ ๋นํ๋ ์ค์ผ์ค๋ง ๋ฐฉ์์ด๋ฏ๋ก ๊ณต์ ํด๋ณด์ด๊ธด ํ์ง๋ง ํจ์จ์ฑ์ด ๋์ง๋ ์์ต๋๋ค.
๋น์ ์ ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋จผ์ ์ ์ ํ ํ๋ก์ธ์ค์ ์์ ์ด ์ค๋๊ฑธ๋ฆด ๊ฒฝ์ฐ, ๋ค์ ์๋ ํ๋ก์ธ์ค๋ค์ ์์ ์๊ฐ์ด ์งง๋๋ผ๋ ์ ์ ํ ํ๋ก์ธ์ค์ ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก ์ด๋ฌํ ๊ฒฝ์ฐ ํจ์จ์ฑ์ด ๋ฎ์์ง๊ฒ ๋ฉ๋๋ค.
์์ ๊ทธ๋ฆผ์์ ๋จผ์ ์ ์ ํ P1์ด 24์ด ๋์ CPU๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ค์ ์๋ ํ๋ก์ธ์ค๋ค์ ๊ณ ์ 3์ด๊ฐ CPU๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๊ฐ 24์ด, 27์ด๋์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ฏ๋ก ํ๊ท ๋๊ธฐ์๊ฐ(waiting time)์ 17์ด((0 + 24 + 27) / 3 = 17)๊ฐ ๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ์ ๊ฐ์ด ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๊ฐ CPU์์ ์ํ๋๋ ๋ฒ์คํธ ์๊ฐ์ด ๋งค์ฐ ๊ธธ์ด ๊ทธ ๋ค์ ๋์ฐฉํ ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ๊ธด ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ ๊ฒ์ convoy effect(ํธ์ ํจ๊ณผ) ๋ผ๊ณ ํฉ๋๋ค.
SJF (Shortest-Job-First)
ready queue์ ์ฝ์ ๋ ํ๋ก์ธ์ค๋ค ์ค CPU ์ด์ฉ ์๊ฐ์ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ถํฐ ์คํํ๋ ์ค์ผ์ค๋ง ๋ฐฉ์์ ๋๋ค.
SJF์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค. (๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋น์ ์ ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ถ๋ฅ๋๊ธด ํจ)
Nonpreemptive(๋น์ ์ ํ)
- ์ผ๋จ CPU๋ฅผ ์ก์ผ๋ฉด ์ด๋ฒ CPU burst๊ฐ ์๋ฃ๋ ๋๊น์ง CPU๋ฅผ ์ ์ ๋นํ์ง ์์
Preemptive(์ ์ ํ)
- ํ์ฌ ์ํ ์ค์ธ ํ๋ก์ธ์ค์ ๋จ์ burst time๋ณด๋ค ๋ ์งง์ CPU burst time์ ๊ฐ์ง๋ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด CPU๋ฅผ ๋นผ์๊น
- ์ด ๋ฐฉ๋ฒ์ Shortest-Remaining-Time-First(SRTF)์ด๋ผ๊ณ ๋ ๋ถ๋ฆ
- ๊ฐ์ฅ ์งง์ ํ๊ท ๋๊ธฐ ์๊ฐ(waiting time)์ ๋ณด์ฅ
Nonpreemptive vs. Preemptive
Process | Arrival Time | Burst Time |
P1 | 0.0 | 7 |
P2 | 2.0 | 4 |
P3 | 4.0 | 1 |
P4 | 5.0 | 4 |
- ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ค ์ฌ์ฉํ๊ณ ๋๊ฐ๋ ์์ ์ ์ค์ผ์ค๋ง์ ๊ฒฐ์
- ๋์ฐฉ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ P1์ด ๊ฐ์ฅ ๋จผ์ CPU ์ ์
- P1์ ์์ ์ด ๋๋๋ ์์ ์ P2, P3, P4 ๊ฐ ๋ชจ๋ ๋์ฐฉํด์์ผ๋ฏ๋ก ๊ทธ ์ค CPU ์ด์ฉ์๊ฐ ๊ฐ์ฅ ์งง์ P3 ๋จผ์ ์คํ
- ํ๊ท ๋๊ธฐ ์๊ฐ: (0 + 6 + 3 + 7) / 4 = 4
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ ๋ ๋ง๋ค ์๋ก ์ค์ผ์ค๋ง
- ๊ฐ์ฅ ๋จผ์ ๋์ฐฉํ P1์ ์์ ์ด ๋๋๊ธฐ ์ ์ CPU ์ด์ฉ์๊ฐ์ด ๋ ์งง์ P2๊ฐ ๋์ฐฉํ๋ฉด P1์๊ฒ์ CPU๋ฅผ ๋นผ์์ P2์ ํ ๋นํ๋ ๋ฐฉ์์ผ๋ก P4์ ์์ ๊น์ง ๋๋๋ ๋์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋ฒ๊ฐ์์ CPU๋ฅผ ์ฌ์ฉํ๊ฒ ๋จ
- ํ๊ท ๋๊ธฐ ์๊ฐ: (9 + 1 + 0 + 2) / 4 = 3
- ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์จ๋ SRTF(= preemptive SJF) ๋ณด๋ค ์งง์ waiting time์ ๊ฐ์ง ์ ์์ (ํ๊ท ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ฅ ์งง์)
SJF์ ๋จ์
1. starvation (๊ธฐ์ ํ์)
๊ทน๋จ์ ์ผ๋ก CPU ์ฌ์ฉ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๋ฅผ ์ ํธํ๊ธฐ ๋๋ฌธ์ ์์ํ CPU๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ๋ ํ๋ก์ธ์ค๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
CPU ์ด์ฉ ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ ready queue์ ํ๋ ์๋ ์ํฉ์์ CPU ์ด์ฉ ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๋ค์ด ๊ณ์ํด์ ๋ค์ด์ค๊ฒ ๋๋ฉด ๊ธด ํ๋ก์ธ์ค๋ ์์ํ ์คํ๋์ง ๋ชปํ ์ ์์ต๋๋ค.
2. CPU ์ฌ์ฉ์๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ ์๋ค.
SJF๋ CPU burst time์ด ์งง์ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ CPU๋ฅผ ํ ๋นํ๊ฒ ๋๋๋ฐ, ๋ค์ ์คํํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฐ์ ํ ๋ OS๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ผ๋ง๋ ์ฌ์ฉํ ์ง ์ ํํ ์ ์ ์๊ณ , ๊ณผ๊ฑฐ์ CPU burst time์ ํตํด ์์ธกํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฌ์ฉ์๊ฐ๊ณผ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค.
Priority Scheduling (์ฐ์ ์์ ์ค์ผ์ค๋ง)
์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค์๊ฒ ๋จผ์ CPU๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ ๋๋ค.
์ฐ์ ์์์ ๊ธฐ์ค์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ SJF๋ ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ํฌํจ๋ ์ ์์ต๋๋ค. (๊ธฐ์ค: CPU ์ด์ฉ ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๊ฐ ๋์ ์ฐ์ ์์)
์ฐ์ ์์ ์ค์ผ์ค๋ง์๋ ๋น์ ์ ํ, ์ ์ ํ(์ฐ์ ์์ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ฉด CPU ๋นผ์๊น) ์ด๋ ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค.
๋ํ, starvation(๊ธฐ์ ํ์)์ด๋ผ๋ ๋ฌธ์ ์ ์ด ์กด์ฌ(์ฐ์ ์์ ๋ฎ์ ํ๋ก์ธ์ค๊ฐ ์์ํ CPU๋ฅผ ํ ๋น ๋ฐ์ง ๋ชปํ๋ ์ํฉ์ด ์๊ธธ ์ ์์)ํ๋๋ฐ, ์ด๋ ํน์ ํ๋ก์ธ์ค๊ฐ ์ง๋์น๊ฒ ์ฐจ๋ณ๋ฐ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ์ด๋ฏ๋ก ์๋ฌด๋ฆฌ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ผ ํ๋๋ผ๋ ์ง๋์น๊ฒ ์ค๋ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ฉด ์ฐ์ ์์ ๋์ฌ์ฃผ๋ aging์ผ๋ก ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
RR(Round Robin)
FCFS์ ํ์ ์ฌ๋ผ์ด์ค๋ผ๋ ๊ฐ๋ ์ด ๋ํด์ง ์ค์ผ์ค๋ง ๋ฐฉ์์ ๋๋ค.
ํ์ ์ฌ๋ผ์ด์ค: ๊ฐ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ ํด์ง ์๊ฐ
์ฆ, Round Robin ์ค์ผ์ค๋ง์ ์ ํด์ง ํ์ ์ฌ๋ผ์ด์ค๋งํผ์ ์๊ฐ ๋์ ๋์๊ฐ๋ฉฐ CPU๋ฅผ ์ด์ฉํ๋ ์ ์ ํ ์ค์ผ์ค๋ง์ ๋๋ค.
ํ๋์ ์ธ ์ปดํจํฐ ์์คํ ์์ ์ฌ์ฉํ๋ CPU ์ค์ผ์ค๋ง์ ๋ผ์ด๋ ๋ก๋น์ ๊ธฐ๋ฐํ๊ณ ์์ต๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ๋์ผํ ํฌ๊ธฐ์ ํ ๋น ์๊ฐ(time quantum)์ ๊ฐ์ง (์ผ๋ฐ์ ์ผ๋ก 10-100 milliseconds)
- ํ ๋น ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ ๋นํ๊ณ ready queue์ ์ ์ผ ๋ค์ ๊ฐ์ ๋ค์ ์ค์ ์๊ฒ ๋จ
- ํ ๋น ์๊ฐ์ด ๋๋ฌด ๊ธธ์ด์ง๋ฉด FCFS์ ๋์ผํด์ง
- ํ ๋น ์๊ฐ์ด ๋๋ฌด ์งง๋ค๋ฉด context switching์ด ๋น๋ฒํด์ ธ ์ค๋ฒํค๋๊ฐ ์ปค์ง
์ผ๋ฐ์ ์ผ๋ก SJF๋ณด๋ค ํ๊ท ๋๊ธฐ์๊ฐ์ด ๊ธธ์ง๋ง ์๋ต์๊ฐ(response time)์ ๋ ์งง์ต๋๋ค.
RR์ ์ฅ์
1. ์๋ต์๊ฐ(CPU๋ฅผ ์ต์ด๋ก ์ป๊ธฐ ๊น์ง์ ์๊ฐ)์ด ๋นจ๋ผ์ง๋ค.
n๊ฐ์ ํ๋ก์ธ์ค๊ฐ ready queue์ ์๊ณ ํ ๋น ์๊ฐ์ด q time unit์ธ ๊ฒฝ์ฐ, ๊ฐ ํ๋ก์ธ์ค๋ ์ต๋ q time unit ๋จ์๋ก CPU ์๊ฐ์ 1/n์ ์ป๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ค ํ๋ก์ธ์ค๋ (n-1)q time unit ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค.
2. CPU ์ฌ์ฉ์๊ฐ ์์ธก์ด ํ์์๋ค.
์ด๋ค ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ค๋ ์ฌ์ฉํ๊ฒ ๋ ์ง ๋ชจ๋ฅด๋ ์ํฉ์์ ๊ตณ์ด ์์ธกํ ํ์์์ด burst time์ด ์งง์ ํ๋ก์ธ์ค๊ฐ ๋นจ๋ฆฌ CPU๋ฅผ ์ฌ์ฉํ๊ณ ๋๊ฐ ์ ์๋๋ก ํด์ค๋๋ค.
3. waiting time์ด burst time์ ๋น๋กํด์ ๊ธธ์ด์ง๋ค. (๊ณต์ ์ฑ)
CPU ์ฌ์ฉ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๋ ํ ๋น ์๊ฐ ์์ CPU๋ฅผ ์ฌ์ฉํ๊ณ ๋นจ๋ฆฌ ๋๊ฐ ์ ์์ผ๋ฏ๋ก ์๋์ ์ผ๋ก ๋๊ธฐ ์๊ฐ์ด ์งง์์ง๊ธฐ ๋๋ฌธ์ waiting time์ด CPU ์ฌ์ฉ์๊ฐ์ ๋น๋กํด์ ธ ๊ณต์ ํ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
Multilevel Queue
์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๋ฐ์ ๋ ํํ๋ก, ์ฐ์ ์์๋ณ๋ก ready queue๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
CPU๋ ์ฐ์ ์์๊ฐ ๋์ ํ๋ถํฐ ์ค์ผ์ค๋งํ๊ฒ ๋ฉ๋๋ค.
- Ready Queue ๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ๋ถํ - ํ๋ก์ธ์ค ์ ํ๋ณ๋ก ์ฐ์ ์์๋ฅผ ๊ตฌ๋ถํ์ฌ ์คํํ๋ ๊ฒ์ด ํธ๋ฆฌํด์ง
- foreground : interactive
- background : batch - no human interaction
- ๊ฐ ํ๋ ๋
๋ฆฝ์ ์ธ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง(๊ฐ ํ์ ๋ง๋ ์ค์ผ์ค๋ง ๋ฐฉ์)
- foreground : RR
- background : FCFS
- ํ์ ๋ํ ์ค์ผ์ค๋ง ํ์
- Fixed priority scehduling
- ex) background๋ณด๋ค forground ๋จผ์
- starvation ๊ฐ๋ฅ์ฑ ์์ (์ฐ์ ์์ ๋ฎ์ ํ๋ ์์ํ CPU ํ ๋น๋ฐ์ ์ ์์์๋)
- Time slice
- ๊ฐ ํ์ CPU Time ์ ์ ์ ํ ๋น์จ๋ก ํ ๋น
- ex) 80% foreground in RR, 20% background in FCFS
- Fixed priority scehduling
Multilevel Feedback Queue
Multilevel Queue ๋ฐฉ์์์๋ ํ๋ก์ธ์ค๋ค์ด ํ ์ฌ์ด๋ฅผ ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ CPU ํ ๋น์ด ๊ณ์ ์ฐ๊ธฐ๋์ด ์์ํ ํ ๋น ๋ฐ์ง ๋ชปํ๋ starvation(๊ธฐ์ ํ์)์ ๊ฐ๋ฅ์ฑ์ด ์๋๋ฐ, ์ด๋ฅผ ๋ณด์ํ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ด Multilevel Feedback Queue์ ๋๋ค.
- ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก ์ด๋ ๊ฐ๋ฅ
- aging ๊ธฐ๋ฒ์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ฌ stavation ์๋ฐฉ
- ๊ณ ๋ ค์ฌํญ
- Queue ์ ์
- ๊ฐ ํ์ schedhuling algorithm
- Process๋ฅผ ์์ ํ๋ก ๋ณด๋ด๋ ๊ธฐ์ค
- Process๋ฅผ ํ์ ํ๋ก ์ซ์๋ด๋ ๊ธฐ์ค
- ํ๋ก์ธ์ค๊ฐ CPU ์๋น์ค๋ฅผ ๋ฐ์ผ๋ ค๊ณ ํ ๋ ๋ค์ด๊ฐ ํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ์ค
Multilevel Feedback Queue ์๊ณ ๋ฆฌ์ฆ์์๋ ์๋ก ready ์ํ๊ฐ ๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ์ฐ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ์ ์ฝ์ ๋๊ณ ์ผ์ ์๊ฐ(time quantum)๋์ ์คํ๋ฉ๋๋ค. ์ด ๋, ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ์๊ฒ๋ time quantum ์งง๊ฒ ํ ๋นํ๊ณ , ์ฐ์ ์์๊ฐ ๋ฎ์ ํ์ผ์๋ก ๊ธด time quantum์ ํ ๋นํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ํ๋ FCFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
๋ง์ฝ ์ฐ์ ์์๊ฐ ๋์ ํ์ ํ ๋น ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ์คํ์ด ๋๋์ง ์์ ํ๋ก์ธ์ค๋ ์๋ ํ๋ก ๊ฐ๋ฑ๋๋ ๋ฐฉ์์ผ๋ก ์ด์๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CPU ์ด์ฉ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค๋ ์งง์ ์๊ฐ์์ ํ๋ฅผ ๋น ์ ธ๋๊ฐ ์ ์๊ฒ ๋๊ณ , CPU ์ด์ฉ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๋ ์๋ ํ๋ก ์ด๋ํ๋ฉด์ ์ ์ ๋ ๊ธด ํ ๋น์๊ฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ฆ, CPU ์ฌ์ฉ์๊ฐ์ด ์งง์ ํ๋ก์ธ์ค์๊ฒ ๋์ ์ฐ์ ์์๋ฅผ ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
๊ทธ๋ฌ๋, ์์ ํ๊ฐ ๋น์ด์์ ๋๋ง ์๋ ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๋ ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋์ง๋ง ์ดํ์ ๋ค์ด์จ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋์ ์์ ํ๊ฐ ๋น ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
'๐ฅ CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ๋๊ธฐํ (2/2) (0) | 2023.06.08 |
---|---|
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ๋๊ธฐํ (1/2) (0) | 2023.06.08 |
[์ด์์ฒด์ ] ์ค๋ ๋ (Thread) (0) | 2023.02.24 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ๊ด๋ฆฌ (0) | 2023.02.16 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ (0) | 2023.02.13 |