CPU ์ค์ผ์ค๋ง
๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ํ๋ก์ธ์ค๋ค ์ค ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ ์ง ์์๋ฅผ ์ ํ๋ ๊ฒ
Ready Queue์ ์๋ ํ๋ก์ธ์ค๋ค ์ค์ ๋๊ตฌ์๊ฒ CPU๋ฅผ ํ ๋นํด ์ค ๊ฒ์ธ์ง ์ ํ๋ ๊ฒ
์ ํ์ํ๊ฐ?
CPU๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง์ ์คํ์ํฌ ์ ์๋ค. --> ํน์ ํ๋ก์ธ์ค๊ฐ I/O ์์ฒญ์ผ๋ก ๋๊ธฐํ ๊ฒฝ์ฐ, CPU๋ ๋๊ฒ๋จ
์๊ฐ์ ์์ฐ์ ์ผ๋ก ํ์ฉํ๊ณ ์ CPU๋ฅผ ๊ทธ ํ๋ก์ธ์ค๋ก๋ถํฐ ํ์ํด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋นํ๋ค.
CPU ์ด์ฉ๋ฅ ๊ทน๋ํ
์ ์ ๋ฐ ๋น์ ์ ์ค์ผ์ค๋ง
CPU ์ค์ผ์ค๋ฌ๊ฐ ์๋๋๋ 4๊ฐ์ง ์ํฉ
์ํฉ 1 : ํ ํ๋ก์ธ์ค๊ฐ ์คํ์ํ์์ ๋๊ธฐ์ํ๋ก ์ ํ๋ ๋ ex. I/O ์์ฒญ์ ์ํ ๋๊ธฐ |
์ํฉ 2 : ํ๋ก์ธ์ค๊ฐ ์คํ์ํ์์ ์ค๋น์๋ฃ์ํ๋ก ์ ํ๋ ๋ ex. ํ ๋น๋ ์๊ฐ์ด ๋ค ๋๋ฌ์ ๋ ( timer interrupt๊ฐ ๋ฐ์ํ์ ๋) |
์ํฉ 3 : ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ์ํ์์ ์ค๋น์๋ฃ์ํ๋ก ์ ํ๋ ๋ ex. I/O ์ข ๋ฃ ์ |
์ํฉ 4 : ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋ |
๋น์ ์ nonpreemptive
: ์ํฉ 1,4์ ๊ฐ์ด ํ๋ก์ธ์ค๊ฐ ์๋ฐ์ ์ผ๋ก CPU๋ฅผ ๋ฐ๋ฉํ๋ ๊ฒฝ์ฐ
CPU๊ฐ ํ ํ๋ก์ธ์ค์ ํ ๋น๋๋ฉด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ์ง, ๋๋ ๋๊ธฐ์ํ๋ก ์ ํํด CPU๋ฅผ ๋ฐฉ์ถํ ๋๊น์ง ์ ์ ํ๋ค.
์ ์ preemptive
: ์ํฉ 2,3๊ณผ ๊ฐ์ด ๊ฐ์ ์ ์ผ๋ก CPU๋ฅผ ๋นผ์๊ธฐ๋ ๊ฒฝ์ฐ
Windows, macOS, Linux๋ฅผ ํฌํจํ ๊ฑฐ์ ๋ชจ๋ ์ต์ ์ด์์ฒด์ ๋ค์ ์ ์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ค์ผ์ค๋ง ๊ธฐ์ค
CPU ์ด์ฉ๋ฅ
์ ์ฒด ์์คํ ์ฌ์ฉ ์๊ฐ ์ค CPU๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ์๊ฐ์ ๋น์จ
์ฒ๋ฆฌ๋
๋จ์ ์๊ฐ๋น ์๋ฃ๋ ํ๋ก์ ์ ๊ฐ์
์ด ์ฒ๋ฆฌ ์๊ฐ
ํ๋ก์ธ์ค๊ฐ ์์ํด์ ๋๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ ( ์ค๋น ํ์์ ๋๊ธฐ ์๊ฐ + CPU ์คํ ์๊ฐ + I/O ์๊ฐ )
๋๊ธฐ ์๊ฐ
ํ๋ก์ธ์ค๊ฐ ์ค๋น ํ์์ ๋๊ธฐํ๋ฉฐ ๋ณด๋ธ ์๊ฐ์ ํฉ
์๋ต ์๊ฐ
ํ๋์ ์๊ตฌ๋ฅผ ์ ์ถํ ํ ์ฒซ๋ฒ์งธ ์๋ต์ด ๋์ฌ ๋๊น์ง์ ์๊ฐ ( ์๋ต์ด ์ถ๋ ฅ๋๋ ์๊ฐ์ ํฌํจํ์ง ์๋๋ค )
CPU ์ด์ฉ๋ฅ ๊ณผ ์ฒ๋ฆฌ๋์ ์ต๋ํํ๊ณ ์ด ์ฒ๋ฆฌ ์๊ฐ, ๋๊ธฐ ์๊ฐ, ์๋ต ์๊ฐ์ ์ต์ํ ํ๋ ๊ฒ์ผ๋ก~!
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ
์ ์ ์ ์ฒ๋ฆฌ FCFS (First Come First Served)
ํน์ง
- ๋จผ์ ์จ ๊ณ ๊ฐ์ ๋จผ์ ์๋น์คํด์ฃผ๋ ๋ฐฉ์, ์ฆ ๋จผ์ ์จ ์์๋๋ก ์ฒ๋ฆฌ.
- ๋น์ ์ ํ(Non-Preemptive) ์ค์ผ์ค๋ง
์ผ๋จ CPU ๋ฅผ ์ก์ผ๋ฉด CPU burst ๊ฐ ์๋ฃ๋ ๋๊น์ง CPU ๋ฅผ ๋ฐํํ์ง ์๋๋ค. ํ ๋น๋์๋ CPU ๊ฐ ๋ฐํ๋ ๋๋ง ์ค์ผ์ค๋ง์ด ์ด๋ฃจ์ด์ง๋ค.
๋ฌธ์ ์
- convoy effect
์์์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋๋ฌํ์ฌ ํจ์จ์ฑ์ ๋ฎ์ถ๋ ํ์์ด ๋ฐ์ํ๋ค.
SJF(Shortest - Job - First)
ํน์ง
- ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋์ฐฉํ์ด๋ CPU burst time ์ด ์งง์ ํ๋ก์ธ์ค์๊ฒ ์ ํ ๋น
- ๋น์ ์ ํ(Non-Preemptive) ์ค์ผ์ค๋ง
๋ฌธ์ ์
- starvation
ํจ์จ์ฑ์ ์ถ๊ตฌํ๋๊ฒ ๊ฐ์ฅ ์ค์ํ์ง๋ง ํน์ ํ๋ก์ธ์ค๊ฐ ์ง๋์น๊ฒ ์ฐจ๋ณ๋ฐ์ผ๋ฉด ์๋๋ ๊ฒ์ด๋ค. ์ด ์ค์ผ์ค๋ง์ ๊ทน๋จ์ ์ผ๋ก CPU ์ฌ์ฉ์ด ์งง์ job ์ ์ ํธํ๋ค. ๊ทธ๋์ ์ฌ์ฉ ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๋ ๊ฑฐ์ ์์ํ CPU ๋ฅผ ํ ๋น๋ฐ์ ์ ์๋ค.
SRTF(Shortest Remaining Time First)
ํน์ง
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ ๋๋ง๋ค ์๋ก์ด ์ค์ผ์ค๋ง์ด ์ด๋ฃจ์ด์ง๋ค.
- ์ ์ ํ (Preemptive) ์ค์ผ์ค๋ง
ํ์ฌ ์ํ์ค์ธ ํ๋ก์ธ์ค์ ๋จ์ burst time ๋ณด๋ค ๋ ์งง์ CPU burst time ์ ๊ฐ์ง๋ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด CPU ๋ฅผ ๋บ๊ธด๋ค.
๋ฌธ์ ์
- starvation
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋๋ฌํ ๋๋ง๋ค ์ค์ผ์ค๋ง์ ๋ค์ํ๊ธฐ ๋๋ฌธ์ CPU burst time(CPU ์ฌ์ฉ์๊ฐ)์ ์ธก์ ํ ์๊ฐ ์๋ค.
Priority Scheduling
ํน์ง
- ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค์๊ฒ CPU ๋ฅผ ํ ๋นํ๋ ์ค์ผ์ค๋ง์ด๋ค. ์ฐ์ ์์๋ ์ ์๋ก ํํํ๊ฒ ๋๊ณ ์์ ์ซ์๊ฐ ์ฐ์ ์์๊ฐ ๋๋ค.
- ์ ์ ํ ์ค์ผ์ค๋ง(Preemptive) ๋ฐฉ์
๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด ์คํ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ถ๊ณ CPU ๋ฅผ ์ ์ ํ๋ค. - ๋น์ ์ ํ ์ค์ผ์ค๋ง(Non-Preemptive) ๋ฐฉ์
๋ ๋์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ๋ฉด Ready Queue ์ Head ์ ๋ฃ๋๋ค.
๋ฌธ์ ์
- starvation
- ๋ฌด๊ธฐํ ๋ด์(Indefinite blocking)
์คํ ์ค๋น๋ ๋์ด์์ผ๋ CPU ๋ฅผ ์ฌ์ฉ๋ชปํ๋ ํ๋ก์ธ์ค๋ฅผ CPU ๊ฐ ๋ฌด๊ธฐํ ๋๊ธฐํ๋ ์ํ
ํด๊ฒฐ์ฑ
- aging
์๋ฌด๋ฆฌ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ผ๋ ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ฐ์ ์์๋ฅผ ๋์ฌ์ฃผ์.
Round Robin
ํน์ง
- ํ๋์ ์ธ CPU ์ค์ผ์ค๋ง
- ๊ฐ ํ๋ก์ธ์ค๋ ๋์ผํ ํฌ๊ธฐ์ ํ ๋น ์๊ฐ(time quantum)์ ๊ฐ๊ฒ ๋๋ค.
- ํ ๋น ์๊ฐ์ด ์ง๋๋ฉด ํ๋ก์ธ์ค๋ ์ ์ ๋นํ๊ณ ready queue ์ ์ ์ผ ๋ค์ ๊ฐ์ ๋ค์ ์ค์ ์ ๋ค.
- RR์ CPU ์ฌ์ฉ์๊ฐ์ด ๋๋คํ ํ๋ก์ธ์ค๋ค์ด ์์ฌ์์ ๊ฒฝ์ฐ์ ํจ์จ์
- RR์ด ๊ฐ๋ฅํ ์ด์ ๋ ํ๋ก์ธ์ค์ context ๋ฅผ save ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฅ์
- Response time์ด ๋นจ๋ผ์ง๋ค.
n ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ready queue ์ ์๊ณ ํ ๋น์๊ฐ์ด q(time quantum)์ธ ๊ฒฝ์ฐ ๊ฐ ํ๋ก์ธ์ค๋ q ๋จ์๋ก CPU ์๊ฐ์ 1/n ์ ์ป๋๋ค. ์ฆ, ์ด๋ค ํ๋ก์ธ์ค๋ (n-1)q time unit ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค. - ํ๋ก์ธ์ค๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด CPU ๋ฅผ ์ฌ์ฉํ ๋งํผ ์ฆ๊ฐํ๋ค.
๊ณต์ ํ ์ค์ผ์ค๋ง์ด๋ผ๊ณ ํ ์ ์๋ค.
์ฃผ์ํ ์
์ค์ ํ time quantum์ด ๋๋ฌด ์ปค์ง๋ฉด FCFS์ ๊ฐ์์ง๋ค. ๋ ๋๋ฌด ์์์ง๋ฉด ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ชฉ์ ์๋ ์ด์์ ์ด์ง๋ง ์ฆ์ context switch ๋ก overhead ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ๋นํ time quantum์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
< ์ฐธ๊ณ >
https://velog.io/@mu1616/CPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81
'๐ฅ > OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ์ธํฐ๋ฝํธ Interrupt (0) | 2021.08.25 |
---|---|
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ (0) | 2021.08.25 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด (0) | 2021.08.18 |
[์ด์์ฒด์ ] ์ค์ผ์ค๋ฌ์ ์ข ๋ฅ : ์ฅ๊ธฐ, ์ค๊ธฐ, ๋จ๊ธฐ (0) | 2021.08.04 |
[์ด์์ฒด์ ] PCB์ Context Switching (0) | 2021.08.04 |