ํ๋ก์ธ์ค์ ์์ ๊ณผ์ Outline
1. OS๋ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋
2. ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)์ ์์ฑ
3. ์์
์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ๋ณดํ ํ
4. ์ค๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ค๋น ํ์ ์ฝ์
5. ํ๋ก์ธ์ค ์์ฑ ๋ค CPU ์ค์ผ์ค๋ฌ๋ ํ๋ก์ธ์ค๊ฐ ํ ์ผ์ CPU์ ์ ๋ฌ
6. ์ค์ ์์
์ CPU๊ฐ ์ํ
ํ๋ก๊ทธ๋จ์ ๊ฐ๋
์ปดํจํฐ ์์คํ
์ด ๋์ํ ๋ ํ๋์จ์ด์์๋ ๋ค์ ์์๊ฐ ๋ฐ๋ณต๋๋ค
1. ์
๋ ฅ์ฅ์น ํน์ ๋คํธ์ํฌ ์ด๋ํฐ๋ฅผ ํตํด ์ปดํจํฐ์ ๋ฌด์ธ๊ฐ ์ฒ๋ฆฌ ์์ฒญ์ด ๋ค์ด์ด
2. ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ช
๋ น์ ์ฝ์ด CPU์์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ด๊ฐ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ์์ญ์ ๊ธฐ๋กํจ
3. ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ํ๋๋์คํฌ๋ SSD๋ฑ์ ์ ์ฅ ์ฅ์น์ ๊ธฐ๋ก ๋๋ ๋คํธ์ํฌ๋ฅผ ํตํด
๋ค๋ฅธ ์ปดํจํฐ์ ์ ์กํ๊ฑฐ๋ ๋์คํ๋ ์ด ๋ฑ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ํตํด ์ฌ๋์๊ฒ ๊ฒฐ๊ด๊ฐ์ ๋ณด์ฌ์ค
4. 1๋ฒ๋ถํฐ ๋ฐ๋ณตํด์ ์คํ
์ด๋ฌํ ์์๋ฅผ ๋ฐ๋ณตํด์ ์ฌ์ฉ์์๊ฒ ํ์ํ ํ๋์ ์ฒ๋ฆฌ(๊ธฐ๋ฅ)๋ก ์ ๋ฆฌํ ๊ฒ์ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ๋ค
ใด์ ํ๋ฆฌ์ผ์ด์
, ๋ฏธ๋ค์จ์ด(์น์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ), OS ๋ฑ
ํ๋ก์ธ์ค์ ๊ฐ๋
- ํ๋ก๊ทธ๋จ์ ์ ์ฅ์ฅ์น์ ์ ์ฅ๋์ด ์๋ ์คํ ์ฝ๋๋ฅผ ์๋ฏธ
- ๋๋ถ๋ถ์ OS๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ ์ ์์
- ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ์ฌ ํ๋ก๊ทธ๋จ ์์ฒด์ ํ๋ก๊ทธ๋จ์ ์ํ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ์คํ๋๋ ์์ ๋จ์
- ํ๋ก๊ทธ๋จ์ด ํ๋ก์ธ์ค๊ฐ ๋๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ค๋ ๊ฒ๊ณผ ๋์์ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)๊ฐ ์์ฑ๋์ด์ผ ํจ
PCB(Process Control Block)
โ ํ๋ก์ธ์ค = ํ๋ก๊ทธ๋จ + PCB (ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)
> ์ด๋ค ํ๋ก๊ทธ๋จ์ด ํ๋ก์ธ์ค๊ฐ ๋์๋ค๋ ๊ฒ์ OS๋ก๋ถํฐ PCB๋ฅผ ๋ฐ์๋ค๋ ์๋ฏธ
โ ํ๋ก๊ทธ๋จ = ํ๋ก์ธ์ค - PCB (ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)
> ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ค๋ ๊ฒ์ ํด๋น PCB๊ฐ ํ๊ธฐ๋๋ค๋ ์๋ฏธ
- ์ผ๋ฐ์ ์ผ๋ก OS ํ๋ก์ธ์ค์ PCB๋ฅผ ๋ ๋ ํ(ready queue)์ ์ฌ๋ ค ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง์ ๊ด๋ฆฌํ๋ค
- PCB(ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก)๋ ํ๋์ ํ๋ก์ธ์ค์ ๋ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์ ์ฅ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ก,
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ๊ณ , ์คํ ์ํ๋ฅผ ์ถ์ ํ๊ณ , ์ ์ดํ๋๋ฐ ์ฌ์ฉ๋๋ค.- ๊ฐ ๋ธ๋ก์ ํ๋ก์ธ์ค ์ํ, ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์คํ ํฌ์ธํฐ, ํ์ผ์ ์ํ, ์ค์ผ์ฅด๋ง ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด ๋ฑ์ ํฌํจ
- ์ด ๋ชจ๋ ์ ๋ณด๋ ํ๋ก์ธ์ค๊ฐ ํ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ ํ๋ ๋ ์ ์ฅ๋์ด์ผ ํจ
- ํ๋ก์ธ์ค๊ฐ ํ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ ํ๋ ๋ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ PCB์์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์
ํ๋ก์ธ์ค์ ์ํ
๋ฉํฐํ์คํน ์ปดํจํฐ ์์คํ ์์์ ํ๋ก์ธ์ค ์ํ๋ CPU๋ฅผ ์ป์ด ์คํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ค๊ฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ CPU๋ฅผ ๋๊ฒจ์ฃผ๋ ์ผ์ด ๋น๋ฒํ ๋ฐ์ํ๋ค. ํ๋ก์ธ์ค๋ ์ธ์ ๋ ์์ฑ, ์ค๋น, ์คํ, ๋๊ธฐ, ์ข ๋ฃ ์ค ํ ๊ฐ์ง ์ํ์ ๋์ด๋ฉฐ, ์์ฑ๋์ ์ข ๋ฃ๋ ๋ ๊น์ง์ ํ๋์ ๋ผ์ดํ์ฌ์ดํด์ ์ง๋๊ฒ ๋๋ค. ์ ๊ทธ๋ฆผ์ 5๊ฐ์ง ์ํ๋ก ํ๋ก์ธ์ค์ ๋ผ์ดํ์ฌ์ดํด์ ์ ์ํ๋ค.
ํ๋ก์ธ์ค์ ์ํ
โป blocked์ suspended์ ์ฐจ์ด
blocked: ๋๊ธฐ ์ํ๊ฐ ๋๋๋ฉด ๋ค์ ready ์ํ๋ก ๋์์ด
suspended: ์ ์ง(suspended a.k.a ์งํ์ ์) ์ํ๊ฐ ๋๋๋ฉด ๋๊ตฐ๊ฐ ์ฌ๊ฐ์์ผ์ค์ผ ๋ค์ ready ์ํ๋ก ๋์์ฌ ์ ์์
- Blocked Status์ ์ธ๋ถํ
- REPLY-Blocked
- RECEIVE-Blocked
- MUTEX-Blocked
- INTERRUPT-Blocked
- NANOSLEEP-Blocked
โป ์ธํฐ๋ฝํธ์ ํด๋ง(Difference Between Interrupt and Polling in OS) 3
์ธํฐ๋ฝํธ(Interrupt)์ ํด๋ง(Polling)์ CPU๊ฐ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋์ ๋ค๋ฅธ ์ฅ์น๋ค์ ์ํด ์์ฑ๋๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด๋ค. ์ธํฐ๋ฝํธ ๋ฐ ํด๋ง์ ํตํด CPU๋ ํ์ฌ ์ํ ์ค์ธ ์์ ์ ์ค์งํ๊ณ , ๋ ์ค์ํ ์์ ์ ์๋ตํ ์ ์๋ค.
์ธํฐ๋ฝํธ์ ํด๋ง์ ๋น๊ตํ ์ ์๋ ๋ค์ํ ๊ธฐ์ค์ด ์๋ค. ๊ธฐ๋ณธ์ ์ธ ๋น๊ต ํฌ์ธํธ๋, ์ธํฐ๋ฝํธ๋ ๋๋ฐ์ด์ค๊ฐ ์๋น์ค๊ฐ ํ์ํ ๋๋ง CPU์๊ฒ Notify๋ฅผ ๋ณด๋ด CPU๊ฐ ํ์ํ๋ค๊ณ ์๋ฆฌ์ง๋ง, ํด๋ง์ CPU๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ฐ์ด์ค๋ฅผ ํ์ธํด CPU๋ฅผ ํ์๋กํ๋์ง ์ฒดํฌํ๋ค. ์ด์ ๋ฐ๋ผ ์ธํฐ๋ฝํธ๋ ํ๋์จ์ด์ ๋งค์ปค๋์ฆ, ํด๋ง์ ํ๋กํ ์ฝ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
์ธํฐ๋ฝํธ๋ ๋๋ฐ์ด์ค์ ์์ฒญ์ด ์์ ๋๋ง ๋ฐ์ํ๋ฏ๋ก CPU ์ฌ์ดํด์ ์ ์ฝํ ์ ์๋ค. ํ์ง๋ง, ์ธํฐ๋ฝํธ๋ ์ธ์ ๋ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋๋ฐ์ด์ค๊ฐ ๋ฐ๋ณต์ ์ผ๋ก CPU๋ฅผ ์ธํฐ๋ฝํธ ํ๋ ์ํฉ์์๋ ํจ์จ์ด ๋จ์ด์ง๋ค.
ํด๋ง์ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋๋ฐ์ด์ค๋ฅผ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ์์ฒญํ๋ ๋๋ฐ์ด์ค๊ฐ ๋ง์ ์ํ์ผ ๋ ์ ๋ฆฌํ ์ ์๋ค. ํ์ง๋ง, ๋ฐ๋์ ๊ฒฝ์ฐ CPU ์ฌ์ดํด์ ๋ญ๋นํ๋ค.
โ ์ธํฐ๋ฝํธ: ์๋ฆผ์์ด ์ธ๋ฆฌ๋ฉด ์นดํก์ ํ์ธํจ
โ ํด๋ง: ์นดํก์ด ์ค๋์ง ์์ค๋์ง ์ผ์ ์ฃผ๊ธฐ๋ก ํธ๋ํฐ ๋ด
๋ฌธ๋งฅ ๊ตํ ( Context Switching )
๋ฌธ๋งฅ๊ตํ์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋ค์ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ์์์์ผ ๋ ๋ฐ์, ์ธํฐ๋ฝํธ๊ฐ ๊ฑธ๋ ธ์ ๋๋ ๋ฐ์, ์์คํ ์ฝ์์๋ ๋ฐ์ํ ์ ์๋ค.
๋ฌธ๋งฅ๊ตํ์ ๊ฐ๋
- CPU๋ฅผ ์ฐจ์งํ๋ ํ๋ก์ธ์ค๊ฐ ๋๊ฐ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ฐ์๋ค์ด๋ ์์ (๋ ํ๋ก์ธ์ค์ PCB๋ฅผ ๊ตํํ๋ ์์ )
- ์คํ์ํ์์ ๋๊ฐ๋ PCB๋ ์ง๊ธ๊น์ง์ ์์ ๋ด์ฉ์ ์ ์ฅ ( "๋ค์์ ์ฌ๊ธฐ์๋ถํฐ ์คํํ์ธ์!" )
- ์คํ์ํ๋ก ๋ค์ด์ค๋ PCB์ ๋ด์ฉ์ผ๋ก CPU๊ฐ ๋ค์ ์ธํ
์ค์์นญ ์ผ์ด์ค(Switching Cases)
- ๋ฉํฐํ์คํน(Multitasking)
- ์คํ์ํ์ ์๋ ํ๋ก์ธ์ค P1์ด ํ์์์๋๋ฉด P1-PCB์ ํ์ฌ๊น์ง์ ์์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋๊ณ , ready ์ํ๋ก ์ซ๊ฒจ๋จ. ๊ทธ๋ฆฌ๊ณ ready ์ํ์ ์๋ ํ๋ก์ธ์ค P2๊ฐ ์คํ์ํ๋ก ๊ฐ๋ฉด CPU ๋ ์ง์คํฐ๊ฐ P2-PCB ๊ฐ์ผ๋ก ์ฑ์์ ธ ๋ค์ ์์ ์ ํ๊ฒ ๋จ
- ์ธํฐ๋ฝํธ ํธ๋ค๋ง(Interrupt Handling)
- ํ๋์ ํ ์คํฌ๊ฐ I/O์ ์ํ ์ธํฐ๋ฝํธ ๋ฑ์ผ๋ก ์ธํด CPU๋ฅผ ๋ฐ๋ฉํ๋ ๊ฒ
- ์ ์ ๋ชจ๋-์ปค๋๋ชจ๋ ์ค์์นญ(User and Kernel mode switching)
- System Call ์์ฒญ ์ ์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ชจ๋์์ ์ปค๋๋ชจ๋๋ก ์ ์ ์ ํ๋์๋ค๊ฐ, ์ปค๋๋ชจ๋์์ ์์ฒญ ์์ ์ ์ฒ๋ฆฌํ ๋ค ์๋ต์ ์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐํํ๋ฉด์ ๋ค์ ์ ์ ๋ชจ๋๋ก ๋๋์๊ฐ๊ฒ ๋จ
ํ๋ก์ธ์ค์ ๊ตฌ์กฐ
โป ํ๋ก์ธ์ค์ ๊ตฌ์กฐ?
- ํ๋ก์ธ์ค๋ ์ฝ๋ ์์ญ, ๋ฐ์ดํฐ ์์ญ(์ผ๋ฐ ๋ฐ์ดํฐ์์ญ / ํ ์์ญ), ์คํ ์์ญ์ผ๋ก ๊ตฌ์ฑ
- ์๋ฅผ ๋ค์ด ํฌํ ์ต์ด๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด(ํ๋ก์ธ์ค)
- ํ๋ก๊ทธ๋จ์ ์ฝ๋์์ญ์ ํ์ฌ ๋๋ค = ํ๋ก๊ทธ๋จ์ ๋ณธ๋ฌธ์ด ๊ธฐ์ ๋ ๊ณณ(a.k.a text area) = ์ฝ๊ธฐ ์ ์ฉ
- ํธ์ง ์ค์ธ ์ด๋ฏธ์ง๋ ๋ฐ์ดํฐ ์์ญ์ ํ์ฌ๋๋ค = ์ฝ๋๊ฐ ์คํ๋๋ฉด์ ์ฌ์ฉ๋๋ ๋ณ์, ํ์ผ ๋ฑ์ ๊ฐ์ข ๋ฐ์ดํฐ = ์ฝ๊ธฐ ์ฐ๊ธฐ ๊ฐ๋ฅ
- ์ด์์ฒด์ ๊ฐ ํฌํ ์ต์ ์๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ข ๋ถ๊ฐ ๋ฐ์ดํฐ๋ ์คํ ์์ญ์์ ๊ด๋ฆฌ (* ๋์ค์ ๋ ์์๋ณด๊ธฐ ) = ์จ๊น
- ex. ํ๋ก์ธ์ค ๋ด์์ function call ์, function ์ํ ํ ์๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๋์์ฌ ์์น๋ฅผ ์ด ์์ญ์ ์ ์ฅ
- ์ด์์ฒด์ ๊ฐ ์ฌ์ฉ์์ ํ๋ก์ธ์ค๋ฅผ ์๋ํ๊ธฐ ์ํด ์ ์งํ๋ ์์ญ์ด๋ฏ๋ก ์ฌ์ฉ์์๊ฒ๋ ๋ณด์ด์ง ์์
โป ํ๋ก์ธ์ค์ ์์ฑ / ๋ณต์ฌ / ์ ํ?
- ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ์๋ก ์์ฑ๋จ
- ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด OS๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ฐ์ ธ์ ์ฝ๋ ์์ญ์ ๋ฃ๊ณ PCB ์์ฑ
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ์์ญ๊ณผ ์คํ ์์ญ์ ํ๋ณดํ ํ ํ๋ก์ธ์ค๋ฅผ ์คํ
- fork(): ๊ธฐ์กด ํ๋ก์ธ์ค(Parent)๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ํ๋ก์ธ์ค(Child)๋ก ์์ฑํ๋ ์์คํ
์ฝ
- ํ๋ก์ธ์ค ์์ฑ ์๋๊ฐ ๋น ๋ฅด๊ณ , ์ถ๊ฐ ์์ ์์ด ์์ ์์ ๊ฐ๋ฅ
- exec(): ํ๋ก์ธ์ค๋ ๊ทธ๋๋ก ๋ ์ฑ ๋ด์ฉ๋ง ๋ฐ๊พธ๋ ์์คํ
์ฝ. ํ์ฌ์ ํ๋ก์ธ์ค๊ฐ ์์ ํ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํ๋จ
- ํ๋ก์ธ์ค ๊ตฌ์กฐ์ฒด ์ฌํ์ฉ
+ fork()์ exec() ๋ ๋ฐ๋ก ์ ๋ฆฌ
์ค๋ ๋
โก Point: job > task(process) > thread(operation)
- ํ๋ก์ธ์ค ์์ฑ ๋ค CPU ์ค์ผ์ค๋ฌ๋ ํ๋ก์ธ์ค๊ฐ ํ ์ผ์ CPU์ ์ ๋ฌํ๋ค.
์ค๋ ๋๋, ํ๋ก์ธ์ค ์์ฑ ๋ค CPU ์ค์ผ์ค๋ฌ๊ฐ 'CPU์ ์ ๋ฌํ๋ ์ผ ํ๋'๋ฅผ ์๋ฏธํ๋ค.
์ฆ, ํ๋ก์ธ์ค์ ์ฝ๋์ ์ ์๋ ์ ์ฐจ์ ๋ฐ๋ผ CPU์ ์์ ์์ฒญ์ ํ๋ ์คํ ๋จ์๋ฅผ ์ค๋ ๋๋ผ๊ณ ํ ์ ์๋ค. - ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ์ค๋ ๋๋ผ๋ฆฌ๋ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค.
์ค์ผ์ค๋ง
์ค์ผ์ค๋ง์ ๊ฐ์
- CPU ์ค์ผ์ค๋ง์ด๋ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ์ํฉ์ ๊ณ ๋ คํ์ฌ
CPU์ ์์คํ ์์์ ์ด๋ป๊ฒ ๋ฐฐ์ ํ ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. - CPU ์ค์ผ์ค๋ฌ๋ CPU๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ์ํ์ผ ๋๋ฉด ์ธ์ ๋ ๋ ๋ ํ์์ ํ๋ก์ธ์ค๋ฅผ ์ ํํด
CPU๋ฅผ ํ ๋นํด์ผ ํ ์ฑ ์์ด ์์ผ๋ฉฐ, CPU ์ค์ผ์ค๋ฌ(ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ)๋ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ํ ์ข ๋ฃ๋ ๋๊น์ง
๋ชจ๋ ์ํ ๋ณํ๋ฅผ ์กฐ์ ํ๋ ์ผ์ ๋งก๊ฒ ๋๋ค. - CPU ์ค์ผ์ค๋ฌ๋ ๊ท๋ชจ์ ๋ฐ๋ฅธ ๊ด๋ฆฌ์ ๋ฒ์ฃผ๋ฅผ ๋๋์ด ์ค์ผ์ค๋ง์ ํ๋ค
๊ท๋ชจ์ ๋ฐ๋ฅธ ์ค์ผ์ค๋ง์ ๋ฒ์ฃผ | |
๊ณ ์์ค ์ค์ผ์ค๋ง(High Level Scheduling) : ์ฅ๊ธฐ ์ค์ผ์ค๋ง(Long Term Scheduling) |
|
์์คํ ๋ด์ ์ ์ฒด ์์ ( OS์์ ๋ค๋ฃจ๋ ์ผ์ ๊ฐ์ฅ ํฐ ๋จ์ ) ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ ์ด๋ค ์์ ์ด ์์คํ ์ ๋ฐ์๋ค์ผ์ง ๋๋ ๊ฑฐ๋ถํ ์ง๋ฅผ ๊ฒฐ์ ์คํ ๊ฐ๋ฅํ ํ๋ก์ธ์ค์ ์ด ๊ฐ์๊ฐ ์ ํด์ง |
|
์ค๊ฐ ์์ค ์ค์ผ์ค๋ง(Middle Level Scheduling) : ์ค๊ฐ ์ค์ผ์ค๋ง(Intermediate Scheduling) |
|
์ฅ๊ธฐ ์ค์ผ์ค๋ง, ๋จ๊ธฐ ์ค์ผ์ค๋ง ์ฌ์ด์ ์ผ์ด๋๋ ์ค์ผ์ค๋ง ์ค์ง(suspend)์ ํ์ฑํ(active)๋ก ์ ์ฒด ์์คํ ์ ํ์ฑํ๋ ํ๋ก์ธ์ค ์๋ฅผ ์กฐ์ ํ์ฌ ๊ณผ๋ถํ๋ฅผ ๋ง๋๋ค |
|
์ ์์ค ์ค์ผ์ค๋ง(Low Level Scheduling) : ๋จ๊ธฐ ์ค์ผ์ค๋ง(Short Term Scheduling) |
|
ํ๋ก์ธ์ค ์ํ์ ๊ดํ ๋ด์ฉ์ ๋๋ถ๋ถ ์ ์์ค ์ค์ผ์ค๋ง์ ํด๋น(๋๊ธฐ>์ค๋น, ์ค๋น>์คํ ๋ฑ) ์ ์์ค ์ค์ผ์ค๋ง์ ๋๋ถ๋ถ ์์ฃผ ์งง์ ์๊ฐ์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋จ๊ธฐ ์ค์ผ์ค๋ง์ด๋ผ ๋ถ๋ฆ |
์ค์ผ์ค๋ง์ ๋ชฉ์
- ํน์ ํ๋ก์ธ์ค์ ์์คํ ์์์ด ํธ์ค๋์ง ์๋๋ก ์ค์๋์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ๊ณตํํ๊ณ ํจ์จ์ ์ผ๋ก ๋ฐฐ์ ํ๊ธฐ ์ํจ
- CPU ์ค์ผ์ค๋ง์ ์๋ ๋ชฉ์ ์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๊ณตํํ๊ฒ ์์ ํ๋๋ก ํ๋ ๊ฒ์ด์ง๋ง, ์์คํ ์ ์์ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ณด๋ค ๋จผ์ ์ฒ๋ฆฌํด์ผ ํ๋ ํ๋ก์ธ์ค๊ฐ ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ CPU ์ค์ผ์ค๋ฌ๋ ์ผ์ ๋ถ๋ถ ๊ณตํ์ฑ์ ํฌ์ํ๋ค
โป ์์คํ ์๋ ๋ค์ํ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ๊ณต์กดํ๋ฉฐ, ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ ๋จผ์ , ๋ ์ค๋ ์ฐจ์งํ๊ฒ ๋๋ค
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ
์ ์ ํ ์ค์ผ์ค๋ง(preemptive scheduling)
- ๊ฐ์: ํ๋ก์ธ์ค๊ฐ ์ค์ผ์ฅด ๋ ์ ์์(can be scheduled)
- ํ์ฌ ํ๋ก์ธ์ค๊ฐ running state์์ ready state๋ก ์ ์ด๋๊ฑฐ๋, waiting(blocked) state ์์ ready state๋ก ์ ์ด๋ ๋
- ์ ํ๋ ์๊ฐ ๋์ ํ๋ก์ธ์ค์ ์์์ด ํ ๋น๋์๋ค๊ฐ ์์ด์ง๊ณ , CPU Burst Time(CPU ๋ช
๋ น ์คํ ์๊ฐ=์์
์๊ฐ)์ด ๋จ์ ์์ผ๋ฉด ๋ค์ ๋ ๋ ํ์ ๋ฐฐ์น๋์ด ๋ค์ ์คํ ๊ธฐํ๊ฐ ์์ ๋ ๊น์ง ready state๋ฅผ ์ ์งํจ
- ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ ๋ํ์ ๋ค์ด์ค๋ฉด, ํ์ฌ ํ๋ก์ธ์ค๊ฐ burst time์ ๋ชจ๋ ์ฌ์ฉํ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์ธํฐ๋ฝํธ๋ฅผ ํตํด ์์์ ํ ๋น๋ฐ์ ์ ์๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์ ํ ์ค์ผ์ค๋ง์ ์ ์ฐ์ฑ์ด ๋ณด์ฅ๋์ง๋ง, ํ๋ก์ธ์ค ๊ฐ ์ค์์นญ ๋ฐ ๋ ๋ํ ๊ด๋ฆฌ์ ์ํ ์ค๋ฒํค๋๊ฐ ์ฆ๊ฐ๋๋ค.
- ์ ๊ทธ๋ฆผ์ฒ๋ผ P0, P1, P2, P3 ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ ๋, ์ ์ ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ ์ํ ๋ฐฐ์น๋ ๋ค์๊ณผ ๊ฐ๋ค.
- P2๊ฐ ๋์ฐฉ์๊ฐ 0์ ๋์ฐฉ
- ๋ ๋ ํ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฏ๋ก P2์ CPU๊ฐ ํ ๋น๋๋ค
- P2๊ฐ ์คํ๋๋ ๋์, P3๊ฐ ๋์ฐฉ์๊ฐ 1์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P2์๊ฒ ๋จ์ burst time=5๋ฐ๋ฆฌ์ด ์ด๋ฉฐ, P3์ burst time(4๋ฐ๋ฆฌ์ด)์ P2๋ณด๋ค ์งง๊ธฐ ๋๋ฌธ์ CPU๋ P3์ CPU๋ฅผ ํ ๋นํ๋ค
- P3๊ฐ ์คํ๋๋ ๋์ P1์ด ๋์ฐฉ์๊ฐ 2์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P3์๊ฒ ๋จ์ burst time์ 3์ด๋ฉฐ P1์ burst time(4๋ฐ๋ฆฌ์ด)๋ณด๋ค ์งง๊ณ , ์ฌ์ ํ P2์ burst time(5๋ฐ๋ฆฌ์ด)๋ณด๋ค๋ ์งง๊ธฐ ๋๋ฌธ์ P3๊ฐ ๊ณ์ ์คํ๋๋ค
- P3๊ฐ ๊ณ์ ์คํ๋๋ ๋์ P0๊ฐ ๋์ฐฉ์๊ฐ 3์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P3 burst time=2๊ณผ P0 burst time=2๋ก ๋์ผํ๋ฐ, ์ด ๋์๋ P3๊ฐ ์์
์ ์ง์ํ๋ค.
- P3 terminate ์ดํ์ burst time์ด ๊ฐ์ฅ ์งง์ P0์ด ์์์ ํ ๋น ๋ฐ๊ณ , ์ดํ P1, P2์ ์์๋๋ก ํ ๋น๋ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
- P3๊ฐ ๊ณ์ ์คํ๋๋ ๋์ P0๊ฐ ๋์ฐฉ์๊ฐ 3์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P3 burst time=2๊ณผ P0 burst time=2๋ก ๋์ผํ๋ฐ, ์ด ๋์๋ P3๊ฐ ์์
์ ์ง์ํ๋ค.
- P3๊ฐ ์คํ๋๋ ๋์ P1์ด ๋์ฐฉ์๊ฐ 2์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P3์๊ฒ ๋จ์ burst time์ 3์ด๋ฉฐ P1์ burst time(4๋ฐ๋ฆฌ์ด)๋ณด๋ค ์งง๊ณ , ์ฌ์ ํ P2์ burst time(5๋ฐ๋ฆฌ์ด)๋ณด๋ค๋ ์งง๊ธฐ ๋๋ฌธ์ P3๊ฐ ๊ณ์ ์คํ๋๋ค
- P2๊ฐ ์คํ๋๋ ๋์, P3๊ฐ ๋์ฐฉ์๊ฐ 1์ ๋์ฐฉํ๋ค. ์ด ์์ ์์ P2์๊ฒ ๋จ์ burst time=5๋ฐ๋ฆฌ์ด ์ด๋ฉฐ, P3์ burst time(4๋ฐ๋ฆฌ์ด)์ P2๋ณด๋ค ์งง๊ธฐ ๋๋ฌธ์ CPU๋ P3์ CPU๋ฅผ ํ ๋นํ๋ค
- ๋ ๋ ํ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฏ๋ก P2์ CPU๊ฐ ํ ๋น๋๋ค
- P2๊ฐ ๋์ฐฉ์๊ฐ 0์ ๋์ฐฉ
๋น์ ์ ํ ์ค์ผ์ค๋ง(non-preemptive scheduling)
- ๊ฐ์: ํ๋ก์ธ์ค๊ฐ ์ค์ผ์ฅด ๋ ์ ์์(can not be scheduled)
โป์ง๊ธ์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค - ํ์ฌ ํ๋ก์ธ์ค๊ฐ terminate ๋๊ฑฐ๋ running state์์
waiting(blocked) state๋ก ์ ์ด๋ ๋ ์์์ ํ ๋น๋ฐ์ ์ ์์
- ๋น์ ์ ํ ์ค์ผ์ค๋ง์ ๊ฐ์ฅ ํฐ ํน์ง์ ์์ ํ๋ก์ธ์ค์ Burst Time์ด ๋ชจ๋ ์์ง๋์ด
terminate ๋๊ฑฐ๋ waiting(blocked) state๊ฐ ๋ ๋ ๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์ค์ผ์ค๋ง ๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
Comparision Chart | ||
Basis | Preemptive | Non-Preemptive |
๊ธฐ๋ณธ | ํ์ ๋ ์๊ฐ๋์ ํ๋ก์ธ์ค์ CPU ํ ๋น | ์ผ๋จ ์์์ด ํ ๋น๋๊ณ ๋๋ฉด ์์ ์ด ๋๋ ๋ ๊น์ง (๋๋ blocked ์ํ๊ฐ ๋ ๋๊น์ง) CPU ๋์ง ์์ |
์ธํฐ๋ฝํธ | ์คํ ์ํ์ ์๋ ํ๋ก์ธ์ค์ ์ธํฐ๋ฝํธ ๊ฐ๋ฅ | ์คํ ์ํ์ ์๋ ์์
์ด ์๋ฃ ๋๋ blocked ๋๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์์ ๋ถ๊ฐ |
Starvation | ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ ๋ํ์ ๋ค์ด์ค๋ ๋น๋๊ฐ ๋์์ง๋ฉด, ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ ๊ณ์ ์์์ ํ ๋น๋ฐ์ง ๋ชปํ ์ ์์( ๋ฐฐ๊ณ ํ! ) | burst time์ด ๊ธด ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉ์ค์ด๋ฉด, ์๋์ ์ผ๋ก busrt time ์ด ์งง์ ํ๋ก์ธ์ค๊ฐ ์์์ ํ ๋น๋ฐ์ง ๋ชปํ ์ ์์ ( ๋ฐฐ๊ณ ํ! ) |
์ค๋ฒํค๋ | ๋ฌธ๋งฅ ๊ตํ์ ์ค๋ฒํค๋๊ฐ ๋ง์ | X (๋จ, ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ๋ง์ ์ฒ๋ฆฌ์จ ๋จ์ด์ง) |
์ ์ฐ์ฑ | O | X |
์ค์๋ | ๋์ | ๋ฎ์ |
์ฌ์ฉ |
์๋ถํ ๋ฐฉ์ ์ค์ผ์ค๋ฌ์ ์ฌ์ฉ๋จ | ์ผ๊ด ์์ ๋ฐฉ์ ์ค์ผ์ค๋ฌ์ ์ฌ์ฉ๋จ |
๋ผ์ด๋ ๋ก๋น(Round Robin, RR)
- ๋ผ์ด๋ ๋ก๋น ์ค์ผ์ค๋ง์ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์๊ฐ(ํ์ ์ฌ๋ผ์ด์ค) ๋์ ์์ ์ ํ๋ค๊ฐ ์์ ์ ์๋ฃํ์ง ๋ชปํ๋ฉด ๋ ๋ ํ์ ๋งจ ๋ค๋ก ๊ฐ์ ์๊ธฐ ์ฐจ๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ด๋ค. ์ฐ์ ์์๊ฐ ์ ์ฉ๋์ง ์์ ๊ฐ์ฅ ๋จ์ํ ์ ์ ํ ์ค์ผ์ค๋ง ๋ฐฉ์์ด๋ค. ๊ฐ ํ๋ก์ธ์ค์ ์ด ๋๊ธฐ ์๊ฐ์ ํฉํด ํ๋ก์ธ์ค์ ์๋ก ๋๋๋ฉด ํ๊ท ๋๊ธฐ ์๊ฐ์ ๊ตฌํ ์ ์๋ค.
์ฐ์ ์์ ์ค์ผ์ค๋ง(Priority Scheduling)
- ์ฐ์ ์์ ์ค์ผ์ค๋ง์ ์ ์ ํ ๋ฐฉ์๊ณผ ๋น์ ์ ํ ๋ฐฉ์์ ๋ชจ๋ ์ ์ฉํ ์ ์๋ค. ๋ ๋ ํ์ ์๋ ํ๋ก์ธ์ค์ ์์๋ฅผ ๋ฌด์ํ๊ณ ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค์ ๋จผ์ CPU๋ฅผ ํ ๋นํ๋ค. ์ฐ์ ์์๋ฅผ ๋งค๋ฒ ๋ฐ๊พธ๋ ๊ณผ์ ์์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ์ฌ ์์คํ ์ ํจ์จ์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ ๋จ์ ์ด ์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ ์์คํ ์ ํจ์จ์ฑ์ด ์๋๋ผ ํ๋ก์ธ์ค์ ์ค์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ๋๋ค.
์ฝ์ด๋ณผ๋งํ ์๋ฃ
์์ ์ ํฌ๊ธฐ
โก job > task(process) > thread(operation)
์์ ์ ํฌ๊ธฐ๋ฅผ ์๋์ ์ธ ํฌ๊ธฐ ์์ผ๋ก ๋์ดํ๋ฉด job > task > operation์ด๊ณ ,
์ด๋ฅผ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ๊ด๊ณ์ ๋์ ํ๋ฉด job > task(process) > thread(operation)์ด ๋๋ค.
์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ๋ชจ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ด๋ฃจ๊ณ , ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ชจ์ฌ job์ด ๋๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ์์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ batch job(์ผ๊ด ์์ ) ์ด๋ผ๊ณ ํ๋ค.
- ํ์์ฌ๋ผ์ด์ค, ํ์ํํ : ํ๋ก์ธ์ค์ ๋ฐฐ๋น๋ ์์ ์๊ฐ.์๋ก์ด ํ๋ก์ธ์ค๊ฐ running state๋ก ๋ค์ด์ค๋ฉด, CPU๋ ์ผ์ ์๊ฐ(ํ์ ์ฌ๋ผ์ด์ค)์ด ํ๋ฅธ ๋ค ์๋ ค๋ฌ๋ผ๊ณ ํด๋ก์ ์์ฒญํ๋ค. ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๊ณ์ ๋ ์ ํด์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๊ธฐ ์ํด ์๋์ ๋ง์ถ์ด ๋๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฆฌ. ์ผ์ ์๊ฐ์ด ๋ค ๋๋ฉด ํด๋ก์ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํ์ฌ CPU์ ์๋ ค์ค๋ค. ์ ๊ทธ๋ฆผ์์ Running -> Ready๋ก์ ์ํ ๋ณํ์ "Timer Interrupt ( =ํ์์์, ์ธํฐ๋ฝํธ )" ๋ผ๊ณ ๋์ด์๋ ๋ถ๋ถ์ ์ ํํ ํํํ๋ฉด ํด๋ก์ผ๋ก๋ถํฐ์ ์ธํฐ๋ฝํธ๋ฅผ ์๋ฏธํ๋ค. [๋ณธ๋ฌธ์ผ๋ก]
- Wakeup(PID) [๋ณธ๋ฌธ์ผ๋ก]
- https://techdifferences.com/difference-between-interrupt-and-polling-in-os.html [๋ณธ๋ฌธ์ผ๋ก]
'Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
GNU GRUB Manual 2.06 (Command-line) (0) | 2022.02.02 |
---|---|
System V init vs Systemd (๋ฐ๋ ๋ฒจvsํ๊ฒ) (0) | 2022.02.02 |
ํค๋ณด๋ ํน์๊ธฐํธ ์ฝ๋ ๋ฒ (์์ด) (0) | 2021.12.20 |
์ปค๋(Kernel) (0) | 2021.12.20 |
Lpi LPIC Level ๋ณ ๋ฒ์ (0) | 2021.12.17 |