๊ฐ์
์ด์์ฒด์ ์์ ํ๋ก์ธ์ค์ ๊ฐ๋ ์ ๋งค์ฐ ์ค์ํ๋ค๊ณ ํ๋ค.
ํ๋ก์ธ์ค ๊ฐ๋ ์ ๋ฆฌ์ ์์, ์ฑ ์ ๋์์๋ ๊ฐ์๋ฅผ ๋ณด๋ฉด ์ค์ผ์ค๋ง ๊ฐ๋ ์ ๋จผ์ ์ธ๊ธํ๋ค.
"์ค์์ฒ๋ฆฌ์ฅ์น(cpu) ์ค์ผ์ค๋ง์ด๋ ์ฌ์ฉ์๋ก๋ถํฐ ์๋ขฐ๋ฐ์ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋ค์๊ฒ ์ค์์ฒ๋ฆฌ์ฅ์น ๋๋ ํ๋ก์ธ์๋ค์ ํ ๋นํ๊ธฐ ์ํ ์ ์ฑ ์ ์ค์ ํ๋ ๊ฒ์ด๋ค." - ์ด์์ฒด์ (์๋ฅ์ถํ์ฌ) 48p ์ค
ํ๋ก์ธ์ค? ํ๋ก์ธ์?
์ฒ์ฒํ ์์๋ณด๋๋กํ์
"๋ชจ๋ ์ปดํจํฐ ์์์ ์ฌ์ฉ๋๊ธฐ ์ ์ ์ ์คํ ์ ์ฑ ์ด ์ ์ ๋์ด์ผ ํ๋ฏ๋ก ์ค์ผ์ค๋ง์ ์ด์์ฒด์ ์ ์ค์ํ ๊ธฐ๋ฅ์ด๋ฉฐ ... (์ค๋ต)
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ ์ค๋น์๋ฃ(ready) ์ํ์ ์๋ ํ๋ก์ธ์ค๋ค ์ค ์ด๋ ๊ฒ์ CPU ์ ํ ๋น์ํฌ ๊ฒ์ธ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฌธ์ ๋ฅผ ์ทจ๊ธํ๋ ๊ฒ์ผ๋ก์, CPU์ ํจ์จ ๋ฐ ์ฒ๋ฆฌ์จ(throughput) ์ต๋ํ, ๋ฐํ์๊ฐ(turnaround time)์ต์ํ์ ๊ทธ ๋ชฉ์ ์ ๋๊ณ ์๋ค." - ์ด์์ฒด์ (์๋ฅ์ถํ์ฌ) 48p ์ค
์ฆ, ํ๋ก์ธ์ค๋ ์ด cpu ์ ํต์ฌ ๊ธฐ๋ฅ์ธ "์ค์ผ์ค๋ง"์ ๋์์ด ๋๋ ์์์ธ ๊ฒ์ด๋ค.
(๊ณต๋ถ ์ค์ผ์ค ์ง๋๋ฐ '๊ณต๋ถ'๊ฐ ๋ญ์ง๋ฅผ ์์์ผ ๊ฒ ๋ถ ์ค์ผ์ค์ ์ง์ง ์๊ฒ์ต๋๊น! )
ํ๋ก์ธ์ค์ ๋ํ์ฌ
ํ๋ก์ธ์ค ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
- ํ๋์ ํ๋ก์ธ์ค๋ CPU ๊ฐ ์ํํ๋ '์์ ์ ๋จ์' ๋ฅผ ์๋ฏธํ๋ค.
- ํ๋ก๊ทธ๋จ.
- ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์คํ ์์ผ์ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฅ๋ ํ๋ก๊ทธ๋จ.
ex) ๋ค์ํ๊ฒ ์ ์๋๊ณ ์๋ ํ๋ก์ธ์ค.
1) ์คํ (executing, running)์ค์ธ ํ๋ก๊ทธ๋จ
2) PCB(process control block) ๋ฅผ ์ง๋ ํ๋ก๊ทธ๋จ
3) ํ๋ก๊ทธ๋จ ์นด์ดํฐ(program counter)๋ฅผ ์ง๋ ํ๋ก๊ทธ๋จ
4) ๋ฅ๋์ ๊ฐ์ฒด(entity)๋ก, ์์ฐจ์ ์ผ๋ก ์ํํ๋ ํ๋ก๊ทธ๋จ
๐ก Q. ๊ทธ๋ ๋ค๋ฉด 'ํ๋ก๊ทธ๋จ' ์์ฒด๊ฐ ํ๋ก์ธ์ค์ธ๊ฐ? ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ฏธํ๋ ๊ฒ์ธ๊ฐ?
A. ์นด์นด์คํก์ ์คํ ์ค์ด๋ฉด ํ๋์ ํ๋ก์ธ์ค์ธ๊ฑด๊ฐ? Q. ๋น. ํ๋์ ํ๋ก์ธ์ค์ด๊ณ , ์ด์ํ์์ ์นดํก์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ณด๋ด๊ณ ์ง๋ ๋ฎค์ง์ ์คํํ๋ฉด ๋๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ ๊ฒ์ด ๋จ.
์ด์์ฒด์ ๋ ๋ฉํฐํ์คํน(Multitasking)์ ์ง์ํ๋ฏ๋ก ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ ์ ์์ !!
๋ฐ๋ผ์ ์ด์์ฒด์ ์ ์ค์ผ์ค๋ง์ ๋ฐ๋ผ CPU๋ฅผ ๋ฒ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์ ๋์์ ์คํ๋ ์ ์์.
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ ์ผ
1. ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ์์คํ ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ์ญ์
2. ํ๋ก์ธ์ค์ ์ผ์ ์ค์ง์ ์ฌ์ํ
3. ํ๋ก์ธ์ค ์ค์ผ์ค๋ง
4. ํ๋ก์ธ์ค์ ๋๊ธฐํ
5. ํ๋ก์ธ์ค ๊ฐ ํต์
6. ๊ต์ฐฉ ์ํ ์ฒ๋ฆฌ
ํ๋ก์ธ์ค ๊ตฌ์ฑ์์
์ฃผ๊ธฐ์ต ์ฅ์น (CPU) ์ ์ ์ฅ๋์ด ์๋ ํ๋์ ํ๋ก์ธ์ค(์คํ ์ค์ด๊ฑฐ๋ ํน์ ์คํ ๊ฐ๋ฅํ ์ํํธ์จ์ด)๋ ์ฝ๋ ์์ญ, ๋ฐ์ดํฐ ์์ญ, ์คํ ์์ญ, ํ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ผ ์์.
- ์ฝ๋ ์์ญ: ํ๋ก๊ทธ๋จ ์ฝ๋ ์์ฒด๋ฅผ ๋งํ์ง๋ง .java ๋ฑ์ ์๋ฐ ์์ค ํ์ผ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ค
-> .java ํ์ผ์ด ์ปดํ์ผ๋์ด cpu ๊ฐ ํด์ํ ์ ์๋, ์คํ ๊ฐ๋ฅํ ๋ฐ์ดํธ ์ฝ๋(.class ํ์ผ, ๊ธฐ๊ณ)๋ก ๋ณํ๋๊ณ ์ด๊ฒ๋ค์ด ์ฝ๋ ์์ญ์ ์ ์ฅ๋๋ค.
- ๋ฐ์ดํฐ ์์ญ: ํ๋ก๊ทธ๋จ์ ์ ์ญ ๋ณ์(global variable), ์ ์ ๋ณ์(static variable)
- ์คํ ์์ญ: ์ง์ญ ๋ณ์(local variable), ์ธ์argument
ํ๋ก์ธ์ค ์ํ
ํ๋ก์ธ์ค๋ ๊ณง ์คํ๊ฐ๋ฅํ PCB(Process Control Block) ๋ฅผ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ด๋ค.
์คํ, ์ ์ถ๋ ฅ ๋๊ธฐ ๋ฑ๊ณผ ๊ฐ์ ์ํ๊ฐ ๋น ๋ฅด๊ฒ ๋ฐ๋ณต๋๋ค. ์ฆ, ํ๋์ ์์ ์ ํ๋ฒ์ ๋๋์ง ์๋๋ค.
1. ์คํ ์ํ(running): ํ๋ก์ธ์ค๊ฐ ์ค์ ์ฒ๋ฆฌ ์ฅ์น๋ฅผ ์ฐจ์งํ๊ณ ์๋ ์ํ
2. ์ค๋น์๋ฃ ์ํ(ready): ์ค์ ์ฒ๋ฆฌ ์ฅ์น๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๋ ๋ ๊ทธ๊ฒ์ ํ ๋น๋ฐ์ ์ ์๋ ์ํ
3. ๋๊ธฐ ์ํ(block): ํ๋ก์ธ์ค ์ฒ๋ฆฌ ์ค, ์ ์ถ๋ ฅ ์ฒ๋ฆฌ ๋ฑ์ผ๋ก ๋ฐ๋ ค๋ฌ์ ๋ ๋ค๋ฅธ ์์ ์ด ์๋ฃ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ !
**ํธ๋ ํฝ ์ ์ด๊ธฐ(traffic controller) ๋ด๋น.
๐ก ํ ๊ฐ๋
cpu ๋ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ณ ์์ง๋ง ๊ทธ ๋ฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ค๋น ์๋ฃ ์ํ๋ ๋๊ธฐ ์ํ๋ก ์์ ์ ์๋ค.
์ด๋ฅผ ์๋ 1) ์ค๋น ์๋ฃ ๋ฆฌ์คํธ(ํ) 2) ๋๊ธฐ ๋ฆฌ์คํธ(ํ) ๋ฅผ ๋ง๋ค์ด 1)์ ์๋ ์ฐ์ ์์ ๋์ ํ๋ก์ธ์ค์๊ฒ CPU ๋ฅผ ๊ฐ์ฅ ๋จผ์ ํ ๋นํด์ค๋ค.
- ๊ต์ฌ 51p ๊ทธ๋ฆผ2-2 ํ๋ก์ธ์ค์ ์ํ ์ ์ด ๊ทธ๋ฆผ ์ฐธ๊ณ .
ํ์ ์ฌ๋ผ์ด์ค(time slice) or ํ ๋น ์๊ฐ(time quantum) ๊ฐ๋
OS ๋ ํ ํ๋ก์ธ์ค๊ฐ CPU ๋ฅผ ๋ ์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ง์ ๋ ์๊ฐ ๋์๋ง ํ๋ก์ธ์ค๊ฐ ์ค์ ์ฒ๋ฆฌ ์ฅ์น๋ฅผ ์ ์ ํ๋๋ก ํ๋ค.
์์1) ํ๋ก์ธ์ค๊ฐ ๋ง์ฝ ํ ๋น์๊ฐ ์ง๋๋๋ก ๊ณ์ CPU ๋ฅผ ์จ์ผ ํ ๊ฒฝ์ฐ ์ฐ์ CPU ๋๊ฒจ์ฃผ๊ณ ์ค๋น์๋ฃ ์ํ๋ก ๋ฐ๋
์์2) ํ๋ก์ธ์ค๊ฐ ์๊ฐ ์ด๊ณผ ์ io ๋ฐ์ํ๋ฉด, ์ผ๋จ CPU ๋ฅผ ์๋ํ๊ณ , io ๊ฐ ๋๋ ๋๊น์ง ๋๊ธฐ ์ํ๊ฐ ๋๋ค. ->์ดํ ์ค๋น์๋ฃ.
ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก (PCB - Process Control Block)
ํ๋ก์ธ์ค๋ ์๋ฃ๋ ๋๊น์ง ์ฌ๋ฌ ์ํ๋ก ๋ณํ๋ฉด์ ์ค์ผ์ค๋ฌ์ ์ํด CPU ํ ๋น ํน์ ํ์๊ฐ ์ด๋ฃจ์ด์ง.
PCB ๋ ํ๋ก์ธ์ค์ ๊ดํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฉฐ ํ๋ก์ธ์ค ์์ฑ ์์ ๋ง๋ค์ด์ง๋ค.
๋ํ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก์ด ์ ๊ฑฐ๋๋ค.
๐ก ํธ๋ํฝ ์ ์ด๊ธฐ๊ฐ ํ๋ก์ธ์ค์ ์ํ๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง๋ค PCB ๋ฅผ ๋ณ๊ฒฝํ๋ค.
PCB ๋ค์ ๋๋ถ๋ถ ์๋ก ๋งํฌ๋์ด ์๋ค.
PCB ์ ๊ตฌ์ฑ์ํ
- ํ๋ก์ธ์ค ํ์ฌ ์ํ(์คํ, ์ค๋น, ๋๊ธฐ)
- ํ๋ก์ธ์ค์ ์ฐ์ ์์
- ํ๋ก์ธ์ค๊ฐ ์ ์ฌ๋ ๊ธฐ์ต์ฅ์น์ ์ฃผ์๋ฅผ ๊ฐ์ง๋ ํฌ์ธํฐ
- ํ ๋น๋ ์์(์ฅ์น ๋ฑ)์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- ์ค์์ฒ๋ฆฌ์ฅ์น์ ๊ฐ์ข ๋ ์ง์คํฐ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ณต๊ฐ
ํ๋ก์ธ์ค ์์ฑ
fork() ๋ช ๋ น์ด๋?
- ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ์์คํ ํธ์ถ ๋ช ๋ น์ด.
- ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ํด ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค(parent process), ์์ ํ๋ก์ธ์ค(child process) ๋ก ๋๋จ.
ํ๋ก๊ทธ๋จ ์นด์ดํฐ (PC, Program Counter)
- ๋ค์ ์คํ๋ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ์ด ๋ค์ด์๋ ๋ ์ง์คํฐ.
- ํ๋ก์ธ์ค๊ฐ ์ด๋๊น์ง ์คํ๋์๋์ง ๊ธฐ์ตํ๊ณ ๋ค์ ์คํํ ๋ช ๋ น์ด๊ฐ ์ด๋์๋์ง ๊ฐ๋ฆฌํค๋ ์ญํ ์ํจ.
- CPU ๋ ์ด ํ๋ก๊ทธ๋จ ์นด์ดํฐ PC ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์์ ๋ช ๋ น์ด๋ฅผ ์ฝ๊ณ ์คํํ๋ค.
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง
์ค์ผ์ค๋ง์ ๋ชฉ์ ๊ณผ ๊ธฐ์ค
๊ฒฐ๋ก ์ ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ๋น ๋ฅด๊ฒ ์คํ๋๋๋ก ํ๋ฉด์, ๊ณตํํ๊ฒ CPU ๋ฅผ ๋ฐฐ๋ถํ๋ ๊ฒ์ด ์ค์ผ์ค๋ง ๋ชฉ์ ์ด๋ค.
- CPU ๋ฅผ ์ต๋ํ ๋๋ฆฌ์ง ์๊ณ ๊ณ์ ์ฌ์ฉํ๊ฒ ํ ๊ฒ.
- ์ฒ๋ฆฌ๋(Throughput) ์ต๋ํํ ๊ฒ. ์ฆ ์ฃผ์ด์ง ์๊ฐ ๋ด์ ์ต๋ํ ๋ง์ ํ๋ก์ธ์ค ์ฒ๋ฆฌ
- ๋๊ธฐ ์๊ฐ(Minimizing Waiting Time) ๋จ์ถ
- ์๋ต ์๊ฐ(Response Time) ์ต์ํ
- ๋ฐํ ์๊ฐ(Turnaround Time) ๋จ์ถ. ํ๋ก์ธ์ค ์์ ~ ์ข ๋ฃ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋จ์ถ.
- ๋ฌดํ ๋๊ธฐ (Starvation) ๋ฐฉ์ง. ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ๋ฌดํํ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ๋ฐฉ์ง. *์์ด์ง(Aging) ํด์ค.
- ๊ณตํํ ์์ ๋ถ๋ฐฐ
- ์ ์ (Preemption) ๊ด๋ฆฌ. ๊ธด๊ธํ ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋ ๋น ๋ฅด๊ฒ CPU ๋ฅผ ์๋ณดํ ์ ์๋๋กํจ.
๐ก ์์ด์ง(Aging) : ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์์ ์ค๋ซ๋์ ์คํ๋์ง ๋ชปํ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ ์ ๋์ฌ์ฃผ๋ ๊ธฐ๋ฒ.
์ค์ผ์ค๋ง ๊ธฐ์ค
๐ก ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค์ ์ฑ๊ฒฉ๊ณผ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ CPU๋ฅผ ํจ์จ์ ์ผ๋ก ๋ถ๋ฐฐํ๋ ๊ฒ ๋ชฉํ
๐ ์ค์ผ์ค๋ง ๊ธฐ์ค์ ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํ๋ฉด
- ํ๋ก์ธ์ค์ ํน์ฑ(CPU vs I/O, ์คํ ์๊ฐ), ์๋ต ์๋ ์๊ตฌ, ์ฐ์ ์์, ์ ์ ์ฌ๋ถ ๋ฑ์ ์ข
ํฉ์ ์ผ๋ก ๊ณ ๋ คํด ์ ์ ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ ์ ํํด์ผ ํ๋ค.
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง - ๋จ๊ณ๋ณ ๋ถ๋ฅ
1. ์์ ๋จ๊ณ ์ค์ผ์ค๋ง(Long-Term Scheduling), ์ฑ ์ ๋ฐ๋ผ High Level Scheduling ์ผ๋ก ํ๊ธฐ๋๊ธฐ๋ํจ.
- ์์ (job) ์ค์ผ์ค๋ก๋ ๋ถ๋ฆฌ๋ฉฐ, ์ด๋ค ์์ ์๊ฒ ์์คํ ์ ์์์ ์ฐจ์งํ๋๋ก ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ๋จ๊ณ.
- ์ฆ, ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ง ๊ฒฐ์ ํ๋ ๋จ๊ณ์ด๋ค. (๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆด์ง ๋ง์ง)
Q. ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด ์์ด์ฝ์ ๋๋ฅด๊ณ ๋์ ์ผ์ด๋๋ ์ผ๋ค? ์ฑ์ ์คํํ๊ฒ ํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ค๋๊ฑด๊ฐ?
A.
2. ์ค๊ฐ ๋จ๊ณ ์ค์ผ์ค๋ง(Medium-Term Scheduling), Intermediate Level Scheduling
- ์ํํ ์์คํ ์๋๊ณผ ์์คํ ์ ์ฒด์ ์ฑ๋ฅ ํฅ์์ ์ํด ์์คํ ๋ถํ(load) ๋ด์์ ์งง์ ์๊ฐ ํ๋ก์ธ์ค๋ค์ ๋ํ ์ผ์์ ํ๋ ์ค๋จ ๋ฐ ์ฌ๊ฐ๋ฅผ ์ํํ๋ค. ์์ ์น์ธ๊ณผ, CPU ํ ๋น ์ฌ์ด์์ Buffer ์ญํ ์ ํจ.
์ฆ, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑํ๋๊น ์ ๊น ๊บผ๋๊น? ํ๋ ๋จ๊ณ !!!
3. ๋จ๊ธฐ ์ค์ผ์ค๋ง (Short-Term Scheduling), Low Level Scheduling
- CPU ๊ฐ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ๋ง์ดํ ์ค๋น๊ฐ ๋์ ๋ ์ด๋ค ready ํ๋ก์ธ์ค์๊ฒ CPU ๋ฅผ ํ ๋นํ ๊ฒ์ธ๊ฐ ๊ฒฐ์ ํ๋ ๋จ๊ณ.
๊ฒฐ์ ๋ฟ๋ง ์๋๋ผ ์ง์ ํ ๋นํ๋ ๋จ๊ณ์ด๋ค !
- ์ด ๋จ๊ณ๋ ๋์คํจ์ฒ์ ์ํด ๋งค์ด ์ฌ๋ฌ๋ฒ ์๋ํ๋ค. CPU ๋ด์ *๋์คํจ์ฒ๊ฐ ํญ์ ์ ์ฌ๋ผ์์ด์ผํ๋ ์ด์ .
์ฆ, ์ง๊ธ CPU ๋ฅผ ๋๊ตฌ์๊ฒ ์ค๊น? ํ๋ ๋จ๊ณ
๐ก๋์คํจ์ฒ(dispatcher): CPU๋ฅผ ์ฌ์ฉํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฐ์ ํ ํ, ์ค์ ๋ก CPU๋ฅผ ํด๋น ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ฃผ๋ ์ญํ , CPU ์ค์ผ์ค๋ฌ๊ฐ ์ ํํ ํ๋ก์ธ์ค๋ฅผ ์คํ ์ํ(Running)๋ก ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ ๋ด๋น.
- ๋ฌธ๋งฅ ์ ํ(Context Switching), (์ฌ์ฉ์, ์ปค๋) ๋ชจ๋ ์ ํ(Mode Switching), ์คํ ์ํ(Running)๋ก ์ ํ
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง - ๋ฐฉ๋ฒ ๋ฐ ํ๊ฒฝ๋ณ ๋ถ๋ฅ
1. ์ ์ / ๋น์ ์ (preemptive / nonpreemtive) ์ค์ผ์ค๋ง
- ์ด์์ฒด์ ๋ ๋๋ถ๋ถ ์ ์ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ค.
- ์ ์ ์ค์ผ์ค๋ง์ผ ๊ฒฝ์ฐ, ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ค๋จํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์๋ค.
- ๋น์ ์ ์ค์ผ์ค๋ง์ผ ๊ฒฝ์ฐ, ํ๋์ ํ๋ก์ธ์ค์ CPU ํ ๋น๋๋ฉด ๊ทธ ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ CPU ๋ฅผ ์ ์ ํ ์ ์๋ค.
- ํจ๊ณผ์ ์ธ ์ ์ ์ค์ผ์ค๋ง์ ์ํด์๋ ๋ง์ ํ๋ก์ธ์ค๋ค์ด ์ฃผ๊ธฐ์ต์ฅ์น(RAM) ์ ์์ด์ผํ๋ค.
- ๋น์ ์ ์ผ ๊ฒฝ์ฐ, ์๋ฌด๋ฆฌ ์งง์ ํ๋ก์ธ์ค๋ผ ํ๋๋ผ๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ค. = ๊ณต์ ํ ๋์ฐ
2. ์ฐ์ ์์(priority) ์ค์ผ์ค๋ง
- ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด, ์ฐ์ ์์๊ฐ ๋์ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
- ๊ธด๊ธํ ์์ ์ ๋จผ์ ์คํํ ์ ์์
- ์ ์ ์ฐ์ ์์(static priority): ์๋์ ์ผ๋ก ์ค๋ฒํค๋ ์ ์ผ๋, ์ฃผ์ ์ฌ๊ฑด ๋ณํ์ ์ ์ X (์ ์ฐ์ฑ X)
- ๋์ ์ฐ์ ์์(dynamin priority): ์ฒ์์ ์ฐ์ ์์๊ฐ ๋ถ์ฌ๋๋๋ผ๋ ์กฐ์ ๊ฐ๋ฅํ๋ค
- ํ์ง๋ง ๋ฌดํ ๋๊ธฐ(Starvation) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ → ์์ด์ง(Aging) ๊ธฐ๋ฒ์ ์ฌ์ฉํด ํด๊ฒฐํ๋๋กํ๋ค.
3. ๊ธฐํ๋ถ(Deadline) ์ค์ผ์ค๋ง
- ์ค์๊ฐ ์์คํ (Real-Time System)์์ ์ค์!
- ์ผ๋ฐ์ ์ธ ์ด์์ฒด์ ๋ณด๋ค๋ ํน์ํ ํ๊ฒฝ(์๋ฒ ๋๋, ์ค์๊ฐ ์์คํ )์์ ์ฃผ๋ก ์ฌ์ฉ๋จ.
- ์์ ๋ค์ด ๋ช ์๋ ์๊ฐ์ด๋ ๊ธฐํ ๋ด์ ์๋ฃ๋๋๋ก ํ๋ ๊ฒ.
- ํ๋ ์ค์๊ฐ ์์คํ (Hard Real-Time): ๋ฐ๋์ ๊ธฐํ์ ๋ง์ถฐ์ผ ํจ (์: ํญ๊ณต๊ธฐ ์ ์ด ์์คํ
- ์ํํธ ์ค์๊ฐ ์์คํ (Soft Real-Time): ๊ธฐํ์ ๋๊ฒจ๋ ์์คํ ์ด ์๋ํ์ง๋ง ์ฑ๋ฅ ์ ํ (์: ๋์์ ์คํธ๋ฆฌ๋ฐ)
4. ๋ค์ค ํ๋ก์ธ์(Multiprocessor) ์ค์ผ์ค๋ง
- ๋ฉํฐ์ฝ์ด CPU ํ๊ฒฝ์์ ์ค์ํ ๊ฐ๋
- ๋จ์ผ CPU ํ๊ฒฝ์์๋ ์ค์ํ์ง ์์ง๋ง, ํ๋ ์ด์์ฒด์ ์์๋ ํ์์ ์ผ๋ก ๊ณ ๋ ค๋จ.
- ๋ฉํฐ์ฝ์ด CPU ๋๋ ์ฌ๋ฌ ๊ฐ์ CPU๊ฐ ์์ ๋, ์ด๋ป๊ฒ ํ๋ก์ธ์ค๋ฅผ ๋ฐฐ๋ถํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ง ๊ธฐ๋ฒ
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ 4๊ฐ์ง
1. FCFS (First-Come, First-Served)
- ๊ฐ์ฅ ๊ฐ๋จํ ์ค์ผ์ค๋ง ๊ธฐ๋ฒ์ผ๋ก ๋น์ ์ ์ค์ผ์ค๋ง ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
"๊ฐ์ฅ ์ฒ์์ ๋ค์ด์จ ๊ฒ ๋จผ์ ์คํ๋๋ค" ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ์ ๋ชปํ๋ ๊ฒ!!
- ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋๊ธฐ ํ์ ๋์ฐฉํ ์์๋๋ก CPU ๋ฅผ ํ ๋น ๋ฐ๋๋ค.
- ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋์ผํ๊ฒ ์ทจ๊ธ ๋ฐ๋๋ค.
- ๋ค๋ฅธ ๋ฐฉ์์ ๋นํด ์์ ์๋ฃ ์๊ฐ ์์ธก ์ฉ์ดํจ
- BUT ์ค๋๋ ์๋ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋์ง๋ ์์. (์ค๋๋ ์? ์ฐ์ ์์์ ๋ฐ๋ผ ์คํํ๋ฉฐ, ์ฐ์ ์์ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ ํํด FCFS ๋ฐฉ์๋๋ก ํจ. ์ฆ, ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉ)
ํ๋ก์ธ์ค ๋์ฐฉ์์๊ฐ ์์ ๊ฐ์ด p1, p2, p3 ์ผ๋ ๋ฒ์คํธ ์๊ฐ์ ์ฐจ๋ก๋๋ก 21, 3, 6
ํ๊ท ๋ฐํ ์๊ฐ = (21+24+30) / 3 = 25
ํ๊ท ๋๊ธฐ ์๊ฐ = (0+21+24) / 3 = 15
๋ฐ๋ฉด ํ๋ก์ธ์ค ๋์ฐฉ์์๊ฐ p2, p1, p3 ์ผ ๋์๋
ํ๊ท ๋ฐํ ์๊ฐ = (3+24+30) / 3 = 19
ํ๊ท ๋๊ธฐ ์๊ฐ = (0+3+24) / 3 = 9 ๊ฐ ๋๋ค !
2. SJF (Shortest Job First)
- ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค ์ค์์ ์คํ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ๊ฒ์ ๋จผ์ ์ํ
- ๋น์ ์ ํ(Non-Preemptive) (SRT์ ์ฐจ์ด์ !)
- ๋จ์ : ๊ธด ํ๋ก์ธ์ค๋ ๋ฌดํ ๋๊ธฐ(Starvation)ํ ์๋ ์์. (Aging์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ)
- ์ํ(์คํ)์๊ฐ์ ์์ธกํ๋ ๊ฒ์ ์์กดํจ. ์ ํํ๊ฒ ์ ์๋ ์์. ๊ทธ๋์ ์๋ฒฝํ๊ฒ ๊ตฌํํ๋ ๊ฒ์ ์ด๋ ต๋ค.
FCFS ๋ฐฉ์์ ํ๊ท ๋ฐํ ์๊ฐ : (7+5+18+24) / 4 = 16
SJF ๋ฐฉ์์ ํ๊ท ๋ฐํ ์๊ฐ : (3+9+16+24) / 4 = 13
* ๋์ ํด์ ๋ํ๊ณ ์์.
3. ์ฐ์ ์์ (Priority) ์ค์ผ์ค๋ง โญ โญ
- ๊ฐ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ์ฐ์ ์์๊ฐ ๋์ ์์๋๋ก ์คํํ๋ค.
- ์ ์ ํ / ๋น์ ์ ํ ๋ ๋ค ๊ฐ๋ฅํ๋ค (ready ํ์ ๋์ฐฉํ๋ฉด, ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋น๊ตํ์ฌ ์ ์ ํ๊ฑฐ๋ ๋จ์ํ ์์ ํ์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ฃ๊ณ CPU ํ ๋น์ ๊ธฐ๋ค๋ฆฐ๋ค.)
- ๋ฌธ์ ์ : ๋ฌดํ๋๊ธฐ ๋ฐ์ ๊ฐ๋ฅ (Aging์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ)
- ์ฐ์ ์์๊ฐ ๊ฐ์ ๋์๋ FCFS ์์๋ก ์ค์ผ์ค๋จ.
- ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ๋ฌธ์ ์ ์ ๋ฌดํ๋๊ธฐ(indefinite blocking), ๊ธฐ์ ํ์(starvation) : ์คํ ์ค๋น ๋์์ผ๋ cpu ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ํ๋ก์ธ์ค๋ cpu ๋ฅผ ๊ณ์ ๋๊ธฐํ๋ค. ์ด๋ ์ฐ์ ์์๊ฐ ๋ฎ์ผ๋ฉด ๋ฌดํํ ๋๊ธฐํ๋ ๊ฒฝ์ฐ๊ฐ ์๊น.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์์ด์ง(aging) ๊ธฐ๋ฒ: ์ค๋ซ๋์ ์์คํ ์์ ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ค์ ์ฐ์ ์์๋ฅผ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํค๋ ๋ฐฉ๋ฒ.
๐ก์ค์์ฒ๋ฆฌ์ฅ์น ๋ฒ์คํธ(CPU burst): CPU ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋์ ๋๊น์์ด ์ฐ์์ ์ผ๋ก CPU ๋ฅผ ์ฌ์ฉํ๋ ์๊ฐ
- ํ๋ก์ธ์ค๋ cpu ๋ง ๊ณ์ ์ฐ๋ ๊ฒ ์๋๋ผ <<cpu 3ms ์ฌ์ฉ->I/O ๋๊ธฐ-> cpu 5ms ์ฌ์ฉ>> ์ด๋ฐ์์ผ๋ก ๋ฐ๋ณต๋จ. ์ฌ๊ธฐ์ 3ms, 5ms๊ฐ CPU burst ์ !
4. ๋ผ์ด๋ ๋ก๋น (Round Robin)
- ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ์๊ฐ (Time Quantum) ์ ์ฃผ๊ณ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์คํ
- ์ ์ ํ (Preemptive).
- ์ผ์ ํ ์๊ฐ(๋ณดํต 10~100ms)์ด ๋๋ฉด ๋๊ธฐ ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค์ cpu ๋์ด๊ฐ. ์ฆ, ์ ์ ๋จ.
- ์คํ ์ค์ด๋ ํ๋ก์ธ์ค๋ ์ค๋น์๋ฃ ๋ฆฌ์คํธ (์์ ํ) ์์ ๊ฐ์ฅ ๋ค๋ก ๋ณด๋ด์ง๋ค.
- ์๋ถํ ๋ฐฉ์ ์์คํ ์์ ํจ๊ณผ์ ์ด๋ค (ex. ๋ํํ ์์คํ Interactive System)
- I/O ๋ฐ์ ์, ๋ค์ ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ค๋ค. ์ ํด ์๊ฐ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์. ๋ฌธ๋งฅ๊ตํ์ ๊ฐ์ํ๋ ํธ์ด ๋์. ์ ์ถ๋ ฅ ๋ฐ์ํ ๋๊น์ง ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ค.
๐ก์ค๋ฒํค๋(Overhead): ์ค์ ์์ ์ด์ธ์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ ๋น์ฉ
ex)
1)๋ฌธ๋งฅ ์ ํ(Context Switching) ์ค๋ฒํค๋ : CPU๊ฐ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํ์ด ๋๋ฌด ์ฆ์ผ๋ฉด CPU๊ฐ "์ค์ ์์ "์ ํ๋ ๋์ "๋ฌธ๋งฅ ์ ํ"์ ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋จ
2)์ค์ผ์ค๋ง ์ค๋ฒํค๋ : ์ด์์ฒด์ ๊ฐ ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์์ Ready Queue ๊ด๋ฆฌ, ์ฐ์ ์์ ๊ณ์ฐ, ์ค์ผ์ค๋ฌ ์คํ ์๊ฐ ๋ฑ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์
3) ๋๊ธฐํ ์ค๋ฒํค๋ (๋ฉํฐ์ค๋ ๋, ๋ฝ) : ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ ๋,๋ฐ์ดํฐ๊ฐ ๊ผฌ์ด์ง ์๋๋ก ๋ฝ(Lock)์ ๊ฑธ๊ฑฐ๋, ๋๊ธฐํ(Synchronization)๋ฅผ ํด์ผ ํจ but ๋ฝ์ ๊ฑธ๊ณ ํด์ ํ๋ ๊ณผ์ ์์ฒด๋ ์๊ฐ์ด ๊ฑธ๋ฆผ
์ด์ธ์๋ SRT (Shortest Remaining Time), ๋ค๋จ๊ณ ํ (Multilevel Queue), ๋ค๋จ๊ณ ํผ๋๋ฐฑ ํ (Multilevel Feedback Queue), HRN (Highest Response Ratio Next) ๋ฑ์ด ์๋ค !! ๊ธฐ๋ณธ์ ์ธ 4๊ฐ์ง๋ง ๋จผ์ ์ ๋ฆฌํด๋ณด์๋ค.
๋ !
์๋ฆผ: *๊ฐ์ธ ๊ณต๋ถ ๋ชฉ์ ์ผ๋ก ์ ๋ฆฌํ ๊ธ์ ๋๋ค*
์ฐธ๊ณ ํ ์ฑ : ์ด์์ฒด์ (๋ฐ๊ท์, ๊น์ฐฝ์, ๋ฐฐ์ธํ, ์ด์ค์ฐ, ๋ฐํ์ง ์ง์) - ์๋ฅ์ถํ