ํ๋ก์ธ์ค์ ๊ฐ์ / ํ๋ก์ธ์ค์ ์ํ
1. ํ๋ก์ธ์ค์ ๊ฐ๋
(1) ํ๋ก๊ทธ๋จ
- ์ ์ฅ์ฅ์น์ ์ ์ฅ๋์ด ์๋ ์ ์ ์ธ ์ํ
- ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ์์
์ ํ ์ง ์ ์ฐจ๋ฅผ ์ ์ด๋์ ๊ฒ
(2) ํ๋ก์ธ์ค
- ์คํ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋์ ์ธ ์ํ
- ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑ๋ ์์
์ ์ฐจ๋ฅผ ์ค์ ๋ก ์คํ์ ์ฎ๊ธฐ๋ ๊ฒ
- ํ๋ก์ธ์ค๋ ์ปดํจํฐ ์์คํ ์ ์์ ๋จ์๋ก ํ์คํฌ(task)๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
- ๋ค์ํ ์ ์๊ฐ ์กด์ฌ ํ์ง๋ง ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ์๋ "์คํ ์ค์ธ ํ๋ก๊ทธ๋จ"
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์ด์์ฒด์ ์ ์ ์ด๋ฅผ ๋ฐ๋ ์ํ
- ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(์์ ์ ์ฃผ์ ๊ณต๊ฐ)์ด ์กด์ฌํจ์ ์๋ฏธ
- ์ด์์ฒด์ ๋ก๋ถํฐ PCB(Process Control Block, ํ๋ก์ธ์ค ์ ์ด๋ธ๋ก)์ ์ป์๋ค๋ ๋ป
2. ํ๋ก๊ทธ๋จ์์ ํ๋ก์ธ์ค๋ก์ ์ ํ
- ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB; Process Control Block)
- ์ด์์ฒด์ ๊ฐ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ํด ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ปํ๋ค.
- ํ๋ก์ธ์ค ๊ตฌ๋ถ์ : ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ๋ ๊ตฌ๋ถ์
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ ๋ณด : ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์น ์ ๋ณด
- ๊ฐ์ข ์ค๊ฐ๊ฐ : ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ์ค๊ฐ ๊ฐ
- ํ๋ก๊ทธ๋จ ์ข ๋ฃ์ ํด๋นํ๋ PCB๋ ํ๊ธฐ๋๋ค.
3. ํ๋ก์ธ์ค์ ์ํ
3.1 ํ๋ก์ธ์ค ์ํ
โ ์ค๋น ์ํ - Ready
- ์คํ ๋๊ธฐ ์ค์ธ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์๊ธฐ ์์๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- PCB๋ ์ค๋น ํ(queue)์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ CPU ์ค์ผ์ค๋ฌ์ ์ํด ๊ด๋ฆฌ๋จ
- CPU ์ค์ผ์ค๋ฌ๊ฐ dispatch(PID)๋ฅผ ์คํํ๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ์ค๋น ์ํ์์ ์คํ ์ํ๋ก ๋ฐ๋์ด ์์ ์ด ์ด๋ฃจ์ด์ง
โ ๋๊ธฐ ์ํ - Block
- ์คํ ์ํ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ์ ์์ฒญํ๋ฉด ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ๋๊ธฐ ์ํ์ ํ๋ก์ธ์ค๋ ์ ์ถ๋ ฅ ์ฅ์น๋ณ๋ก ๋ง๋ จ๋ ํ์์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์๋ฃ๋๋ฉด ์ธํฐ๋ฝํธ(interrupt)๊ฐ ๋ฐ์
- wakeup(PID) : ๋๊ธฐ ์ํ์ ์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ์ค ํด๋น ์ธํฐ๋ฝํธ๋ก ๊นจ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋ ๊ฒ
ํด๋น ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก์ด ์ค๋น์ํ๋ก ์ด๋ํจ
โ ์คํ ์ํ - Running
- ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ๋๋ ์ํ
- ์คํ ์ํ์ ์๋ ํ๋ก์ธ์ค๋ ํ์ ์ฌ๋ผ์ด์ค(ํน์ ํํ ) ๋์๋ง ์์ ํ ์ ์์
- ํ ๋น๋ ์๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด timeout(PID)๊ฐ ์คํ๋์ด ์ค๋น ์ํ๋ก ์ฎ๊น
- ์์ ์ด ์๋ฃ๋๋ฉด exit(PID)๊ฐ ์คํ๋์ด ํ๋ก์ธ์ค๊ฐ ์ ์ ์ข ๋ฃ
- ์ฝ์ด ๋คํ(core dump) : ์ค๋ฅ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด(๊ฐ์ ์ข ๋ฃ๋๋ฉด) ๋๋ฒ๊น ํ๊ธฐ ์ํด ์ข ๋ฃ ์ง์ ์ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ์ ์ฅ์ฅ์น๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ์๋ฏธ
- ์คํ ์ํ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ์ ์์ฒญํ๋ฉด CPU๋ ์ ์ถ๋ ฅ ๊ด๋ฆฌ์์๊ฒ ์ ์ถ๋ ฅ์ ์์ฒญํ๊ณ block(PID)๋ฅผ ์คํ
- block(PID)๋ ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ๋๊น์ง ์์ ์ ์งํํ ์ ์์ด์ ํด๋น ํ๋ก์ธ์ค๋ฅผ ๋๊ธฐ ์ํ๋ก ์ฎ๊ธฐ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์คํ ์ํ๋ก ๊ฐ์ ธ์ด
3.2 ํ๋ก์ธ์ค์ ์ ์ด
- ์ด์ ์ฒด์ ๋ ์ค๋น ์ํ์ ๋๊ธฐ ์ํ์ ์๋ ํ๋ก์ธ์ค๋ค์ ๊ฐ๊ฐ ์ค๋น ๋ฆฌ์คํธ(ready list)์ ๋๊ธฐ ๋ฆฌ์คํธ(block list)๋ฅผ ์์ฑํ์ฌ ์ด๋ค์ ๊ด๋ฆฌํจ
โ ๋์คํจ์น(Dispatch) : ์ค๋น ์ํ → ์คํ ์ํ
- ์ค๋น ์ํ์ ํ๋ก์ธ์ค๋ค ์ค ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๋ฅผ ์ ์ ํ์ฌ CPU๋ฅผ ํ ๋นํจ
โ ํ ๋น ์๊ฐ ์ด๊ณผ(time out) : ์คํ ์ํ → ์ค๋น ์ํ
- CPU์ ์ง์ ๋ ํ ๋น ์๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ํด ์ค๋น ์ํ๋ก ๋๋์๊ฐ
โ ๋๊ธฐ(Block) : ์คํ ์ํ → ๋๊ธฐ ์ํ
- ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ ๋ช ๋ น์ ๋ง๋๋ฉด ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ์ ์ถ๋ ฅ ์ ์ฉ ํ๋ก์ธ์์๊ฒ CPU๋ฅผ ์๋ํ๊ณ ์์ ์ ๋๊ธฐ ์ํ๋ก ์ ํ
โ ๊นจ์(Wake up) : ๋๊ธฐ ์ํ → ์ค๋น ์ํ
- ์ ์ถ๋ ฅ ์๋ฃ์ ํธ๊ฐ ๋ค์ด์ค๋ฉด ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๋ ์ค๋น ์ํ๋ก ์ ํ๋จ
โ ์๋ฃ ์ํ
- ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ํ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฆฌ๋จ
- ์ ์ ์ข ๋ฃ์ธ exit์ ๋น์ ์ ์ข ๋ฃ์ธ abort๋ฅผ ๋ชจ๋ ํฌํจ
โ ๋ณด๋ฅ ์ํ (Suspended)
- ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ์ ์ซ๊ฒจ๋ ์ํ
[ ๋ณด๋ฅ ์ํ๊ฐ ๋๋ ๊ฒฝ์ฐ ]
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ ์ฐจ์ ์ผ๋ถ ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ผ๋ก ๋ด๋ณด๋ด๋ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๊ฐ ์์ด ์คํ์ ๋ฏธ๋ค์ผ ํ๋ ๊ฒฝ์ฐ
- ์ ์์ ์ธ ๊ณต๊ฒฉ(๋ฐ์ด๋ฌ์ค)์ ํ๋ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋จ๋๋ ๊ฒฝ์ฐ
- ๋งค์ฐ ๊ธด ์ฃผ๊ธฐ๋ก ๋ฐ๋ณต๋๋ ํ๋ก์ธ์ค์ฌ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ผ๋ก ์ซ์๋ด๋ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ
- ์ ์ถ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค์ ์ ์ถ๋ ฅ์ด ๊ณ์ ์ง์ฐ๋๋ ๊ฒฝ์ฐ