ํ๋ก์ธ์ค(Process) 2
์ด์์ฒด์ ํ๋ก์ธ์ค ๊ฐ๋ ์ ๋ฆฌ
ํ๋ก์ธ์ค ์์ฑ
- ํ๋ก์ธ์ค๋ ์ธ์ ์์ฑ๋๋๊ฐ?
- ์์คํ ๋ถํ ๊ณผ์ ์์ ํ์ํ ํ๋ก์ธ์ค ์์ฑ
- ์ฌ์ฉ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์คํ ํธ์ถ๋ก ์ ํ๋ก์ธ์ค ์์ฑ
- ์ค์ํ๊ฑด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์๋ค๊ณ ๋จ์ํ ํ๋ก์ธ์ค๊ฐ ์๋!
- PCB๊ฐ ์กด์ฌํด์ OS๊ฐ ์ ์ด ๊ฐ๋ฅํ ์ํ๊ฐ ๋์ด์ผ ํจ == CPU๋ฅผ ํ ๋น๋ฐ์ ์คํ ๊ฐ๋ฅ
ํ๋ก์ธ์ค ์์ฑ ๊ณผ์
- ์์ฑํ๋ ค๋ ์คํํ์ผ์ ๊ฒฝ๋ก๋ฅผ OS์๊ฒ ์ ๋ฌ
- OS๋ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก๊ทธ๋จ์ ์ ์ฌ
- Code ์์ญ์ ํ๋ก๊ทธ๋จ ์ฝ๋ ์ ์ฌ, Data ์์ญ์ ์ ์ญ / ์ ์ ๋ณ์๋ค์ ํ ๋น
- ์คํ๊ณผ ํ์ ์๋ฌด๊ฒ๋ ์์ผ๋ฏ๋ก ์ด๊ธฐํ๋ง
- PCB ๊ณต๊ฐ์ ๋ถ์ฌ ๋ฐ๊ณ ํ์ํ ์ ๋ณด๋ฅผ ์ฑ์
- ํ๋ก์ธ์ค ์๋ณ์๋ฅผ ํ ๋น - ์๋ก์ด PID ๋ฒํธ๋ฅผ ๋ถ์ฌ
- ํ๋ก์ธ์ค ์ ๋ณด ๊ธฐ๋ก
- ํ๋ก์ธ์ค ํ ์ด๋ธ์์ ์ ํญ๋ชฉ ํ ๋น
- ์๋ก ํ ๋น๋ ํ๋ก์ธ์ค ํ ์ด๋ธ์ PCB ํ ๋น
- PCB์ ํ๋ก์ธ์ค ์ํ๋ฅผ ready ์ํ๋ก ํ์ํ๊ณ , ์ค๋นํ์ ์ฅ์ฐฉ
๋ณต์ฌ์ ์ํ ์์ฑ fork()
- ๊ธฐ์กด์ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์์ฑ
- ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ ์์คํ
์ฝ์ ์ํด ํ๋ก์ธ์ค ์์ฑ
- ๋ฆฌ๋ ์ค : fork() ์์คํ ์ฝ
- ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ ์์คํ
์ฝ์ ์ํด ํ๋ก์ธ์ค ์์ฑ
- Unix ๊ณ์ด์ OS๋ ์์คํ
์ด ๋ถํ
ํ ๋, 0๋ฒ ํ๋ก์ธ์ค(init)๋ง ์์ฒด ์์ฑ
- ๋๋จธ์ง ํ๋ก์ธ์ค๋ โ๋ณต์ โ๋ฅผ ํตํด ์์ฑ
- ์์ฃผ ์ฌ์ฉ๋๋ ํ๋ก์ธ์ค์ ๋งค๋ฒ ๋ฐ๋ณตํ ํ์๊ฐ ์์
- ๊ด๋ฆฌ์ ํธํด์ง(ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ)
- Process ๊ฐ ํต์
- ๋๋จธ์ง ํ๋ก์ธ์ค๋ โ๋ณต์ โ๋ฅผ ํตํด ์์ฑ
fork() ์์คํ ์ฝ
- ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ก๋ถํฐ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ ํจ์
- fork๋ฅผ ํธ์ถํ ํจ์: ๋ถ๋ชจ ํ๋ก์ธ์ค, fork๋ ํ๋ก์ธ์ค: ์์ ํ๋ก์ธ์ค
- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ชจ๋ ํ๊ฒฝ, ๋ฉ๋ชจ๋ฆฌ, PCB ๋ฑ์ ๋ณต์ฌ
- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ์์น
- ๋จ, PCB์์ ์๋ ๋ด์ฉ์ ๋ฌ๋ผ์ง
- PID๋ ๋ค๋ฆ! (๋ค๋ฅธ ํ๋ก์ธ์ค์ด๋๊น)
- PPID: ๋ถ๋ชจ PID๋ก
- CPID: ์์์ด ์์ผ๋ฉด -1
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ ๋ณด: ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ์์ ํ๋ฏ๋ก
fork() ์คํ ๊ณผ์
pid_t pid; // pid ๋ณ์ ์ ์ธ
pid = fork(); // ์์ ํ๋ก์ธ์ค ์์ฑ
if(pid > 0) {
/* ์ด๊ณณ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์คํํ ์ฝ๋ ์์ฑ */
}
else if(pid == 0) {
/* ์ด๊ณณ์ ์์ ํ๋ก์ธ์ค๊ฐ ์คํํ ์ฝ๋ ์์ฑ */
}
else {
/* fork() ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋ ์์ฑ */
}
- ์์์ ๋ถ๋ชจ์ Program Counter๋ ๋ณต์ฌํด์ fork() ๋ค์์ if(pid == 0) ๋ผ์ธ๋ถํฐ ์คํ๋จ
- pid = fork() ์ด์ ๋ผ์ธ ์คํํ์ง ๋ชปํจ
- fork() ํจ์์ ๋ฆฌํด๊ฐ
- ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ๋ ์์ ํ๋ก์ธ์ค์ PID ๋ฆฌํด
- ์์ ํ๋ก์ธ์ค์๊ฒ๋ 0 ๋ฆฌํด
fork()์ ์ฅ์ ๊ณผ ๋จ์
- ์ฅ์
- ํ๋ก์ธ์ค ์์ฑ ์๋๊ฐ ๋น ๋ฆ
- ์ถ๊ฐ ์์ ์์ด ์์์ ์์ ํ ์ ์์
- ์์คํ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ ์ ์์(ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ)
- ๋จ์
- ๋งค๋ฒ ๋ชจ๋ Context๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ ๋นํจ์จ์
- ํนํ ๋งจ ์ฒ์ ๋ง๋ ํ๋ก์ธ์ค ์ธ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค ์คํ ๋ถ๊ฐ๋ฅ
- ๊ณ์ ๊ฐ์ ํ๋ก์ธ์ค๋ง ๋ณต์ฌ๋๊ธฐ ๋๋ฌธ์
- ๊ทธ๋์ Unix OS๋ fork() ๋ค์ exec()๋ผ๋ ์์คํ ์ฝ์ ํธ์ถ
ํ๋ก์ธ์ค ์ค๋ฒ๋ ์ด(Process overlay) : exec()
- ๊ธฐ์กด์ ํ๋ก์ธ์ค๋ฅผ ์๋ก์ด ํ๋ก์ธ์ค๋ก ์ ํํด์ ์ฌ์ฉํ๋ ํจ์
- ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์๋ก์ด ์์ฉํ๋ก๊ทธ๋จ์ ์ ์ฌํ๊ณ ์คํ
- ํ๋ก์ธ์ค๋ ๊ทธ๋๋ก ๋๊ณ ๋ด์ฉ๋ง ๋ฐ๊พธ๋ ์์คํ ํธ์ถ
- ์ฃผ์! ํ๋ก์ธ์ค๋ฅผ ์๋ก ์์ฑํ๋๊ฒ ์๋
- ํ๋ก์ธ์ค PID ๋ณ๊ฒฝ X
- ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(Code, Data, ํ, ์คํ)์ ์๋ก์ด ํ๋ก๊ทธ๋จ ์ ์ฌ
- ๋ณดํต fork()๋ฅผ ํตํด ์์ฑ๋ ์์ ํ๋ก์ธ์ค๊ฐ exec() ์คํ
- loader๊ฐ exec๋ฅผ ํตํด ํธ์ถ๋จ
exec() ์คํ ๊ณผ์
- ๋ฉ๋ชจ๋ฆฌ
- Code ์์ญ์ ์๋ ๊ธฐ์กด์ ๋ด์ฉ์ ์ง์ฐ๊ณ ์๋ก์ด ๋ด์ฉ์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆผ
- Data ์์ญ์ ์๋ก์ด ๋ณ์๋ก ์ฑ์์ง๊ณ , ํ/์คํ ์์ญ์ ๋ฆฌ์
- PCB
- PID, PPID, CPID, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ์ ์ ์ง
- ์๋ก์ด ํ๋ก์ธ์ค๋ก ์ ํ๋๋๋ผ๋ ์ข ๋ฃ ํ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก ๋์์ฌ ์ ์์
- Program Counter ๋ฐ ๊ธฐํ register ํ์ผ ์ ๋ณด๋ฑ ๋ฆฌ์
- PID, PPID, CPID, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ์ ์ ์ง
wait() ์์คํ ์ฝ
- ์์ ํ๋ก์ธ์ค๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ, ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์ด์ด์ ์คํ์ ๊ณ์ํ๋ ์์คํ ์ฝ
exit() ์์คํ ์ฝ
- ์์
์ ์ข
๋ฃ๋ฅผ ์๋ฆฌ๋ ์์คํ
์ฝ
- ์ข ๋ฃ๋ฅผ ๋ช ์์ ์ผ๋ก ์๋ฆผ์ผ๋ก์ ๋ถ๋ชจ๋ ์์์ด ์ฌ์ฉํ๋ ์์์ ๋นจ๋ฆฌ ํ์
- ์ข
๋ฃ ์ฝ๋
- ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ ์ํ๋ ์ข ๋ฃ์ ์ด์ ๋ฅผ ์๋ ค์ฃผ๋ ๊ฐ
- ๋ณดํต ์ ์ ์ฝ๋๋ 0, ๋๋จธ์ง๋ 1-255 ๋ฒ์ ๋ด์์ ์์ ์ฌ์ฉ
- ์ด๊ฑธ ๋ถ๋ชจ๊ฐ ํ์ธํด์ผ ์ต์ข ์ ์ผ๋ก ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋จ
exit() ์์คํ ์ฝ์ ํตํ ํ๋ก์ธ์ค ์ข ๋ฃ ๊ณผ์
- ํ๋ก์ธ์ค์ ๋ชจ๋ ์์ ๋ฐํ
- ์ฝ๋, ๋ฐ์ดํฐ, ์คํ, ํ ๋ฑ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐํ
- ์ด์ด๋์ ํ์ผ์ด๋ ์์บฃ ๋ฑ ๋ซ์
- PCB์ ํ๋ก์ธ์ค ์ํ Terminated๋ก ๋ณ๊ฒฝ, PCB์ ์ข
๋ฃ ์ฝ๋ ์ ์ฅ
- ์์ง PCB๊ฐ ํ๋ก์ธ์ค ํ ์ด๋ธ์์ ์ ๊ฑฐ๋ ์ํ๋ ์๋, ํ์ ํ ๋ถ๋ชจ๊ฐ ์ข ๋ฃ๋ฅผ ํ์ธํด์ผ ํจ
- ์์ ํ๋ก์ธ์ค๋ค์ init ํ๋ก์ธ์ค์๊ฒ ์ ์
- ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ SIGCHLD ์ ํธ ์ ์ก(์ผ์ข
์ ์ข
๋ฃ ์๋ฆผ ์ ํธ)
- ๋ถ๋ชจ์ ์๋ฌด
- SIGCHLD๋ฅผ ์์ ํ๊ณ , wait() ํธ์ถ๋ก ์์ ์ข ๋ฃ ์ฝ๋ ์ฝ๊ธฐ ์คํ
- ์ฃฝ์ ์์์ด ๋จ๊ธด ์ ๋ณด๋ฅผ ํ์ธ ํ, ์์ ํ๋ก์ธ์ค์ PCB๊ฐ ์์ ํ ์ ๊ฑฐ๋จ
- ๋ง์ฝ์ ๋ถ๋ชจ๊ฐ ์์์ ์ข
๋ฃ ์ ํธ๋ฅผ ์ ๋ ํ์ธํ์ง ๋ชปํ๋ฉด?
- ์์์ ์ข๋น ํ๋ก์ธ์ค๊ฐ ๋จ!
- PCB๊ฐ ๋จ์์์ผ๋ฏ๋ก ps ๋ช
๋ น์ด ๋ฑ์ผ๋ก ์กด์ฌ๋ฅผ ํ์ธ ํ ์ ์๋ค.
- ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ๋ ๋ค ๋์ผ๋ฏ๋ก ์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ size = 0!
- ์ข๋น ํ๋ก์ธ์ค๋ ๋จ์ํ PCB ์ ๋ฆฌ๊ฐ ์๋๊ฒ ๋ฟ์!
- ๋ถ๋ชจ์ ์๋ฌด
UNIX OS์์์ ํ๋ก์ธ์ค ์์ฑ(๋ฐ ์ข ๋ฃ) ๊ณผ์
- fork() โ exec()์ ๊ตฌ์กฐ
- fork()๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ , exec()๋ฅผ ํตํด ํ์ํ ํ๋ก์ธ์ค๋ฅผ ์คํํจ
- ์ด๋ ์์ฑ์ ํ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค, ์์ฑ๋ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค
- ๋ถ๋ชจ๋ wait()์ ํตํด ๊ธฐ๋ค๋ฆฌ๊ณ , ์์์ exit()๋ฅผ ํตํด ์์ ์ ์ข ๋ฃ๋ฅผ ์๋ฆผ
- ๋ชจ๋ ํ๋ก์ธ์ค๋ ์ต์ด์ ์กฐ์์ด ์๋ค!
- 1๋ฒ ํ๋ก์ธ์ค, init!
์ ์ด๋ ๊ฒ ๋ณต์กํ๊ฒ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋๊ฑธ๊น?
- ํ๋ก์ธ์ค ์์ฑ์ด ๊ฐ์ํ๋จ
- ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ์ฌ์์ง
- ๋ถ๋ชจ๋ฅผ ํตํด ์์์ ๊ด๋ฆฌํ ์ ์์(ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ)
- abort() ํธ์ถ: ๋ถ๋ชจ๊ฐ ์ ํธ๋ฅผ ๋ณด๋ด์ ์์์ ์ฃฝ์ด๋ ์์คํ ์ฝ
- ๋ถ๋ชจ๋ฅผ ํตํด ์์์ ๊ด๋ฆฌํ ์ ์์(ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ)
- ํ๋ก์ธ์ค๊ฐ ํต์ ๊ฐ๋ฅ(IPC)
- ํ๋ก์ธ์ค๋ ๋ ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(๊ฐ์ ์ฃผ์ ๊ณต๊ฐ)์ ๊ฐ์ง ๊ฒ์ฒ๋ผ ์ด์
- ์๋ก ๊ฐ์ญ ๋ถ๊ฐ, ํต์ ๋ถ๊ฐ!
- ํ์ผ์ ํตํด์ ์๋ก ์์ฌ์ํต ์ฌ๊ธฐ์ fork()๊ฐ ์ฌ์ฉ!
๋ชจ๋ ํ๋ก์ธ์ค์ ์กฐ์ init()
- ์ ๋์ค์ ๋ชจ๋ ํ๋ก์ธ์ค๋ init ํ๋ก์ธ์ค์ ์์์ด ๋์ด ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃธ
๊ณ์ธต ๊ตฌ์กฐ
- ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ-์์ ๊ด๊ณ
- #0๋ฒ ํ๋ก์ธ์ค๋ ์์คํ ๋ถํ ์ ์คํ๋๋ ์ต์ด์ ํ๋ก์ธ์ค, ์กฐ์ ํ๋ก์ธ์ค
- ์์ ํ๋ก์ธ์ค์ ์์ฑ
- ๋ชจ๋ ํ๋ก์ธ์ค๋ ํ๋ก์ธ์ค(๋ถ๋ชจ)์ ์ํด ์์ฑ
- ํ๋ก์ธ์ค ์์ฑ์ ์์คํ ํธ์ถ์ ํตํด์๋ง ๊ฐ๋ฅ: fork()
- PID 0, 1, 2๋ฑ์ ๋ช๋ช ์กฐ์ ํ๋ก์ธ์ค๋ ์์คํ ์ฝ์ด ์๋ OS ์ฐจ์์์ ์์์ ์ผ๋ก ์์ฑ๋จ!
์ ๊ณ์ธต โfork-execโ ๊ตฌ์กฐ์ธ๊ฐ?
-
์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ์ ์ฉ์ด
-
ํ๋ก์ธ์ค์ ์ฌ์ฌ์ฉ์ด ์ฉ์ด
-
๊ด๋ฆฌ๊ฐ ์ฉ์ด
- ์์ ํ์ ๋ฑ์ด ์ฌ์
์ข๋น ํ๋ก์ธ์ค์ ์ ๊ฑฐ
- ์ข๋น ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ์ง๋ ์๋๋ค ํ์ง๋ง, PCB์ ๋ญ๋น ๋ฐ์!
- ์ปค๋์ ์ ์ฅ์์ ๋ดค์๋, PCB๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ผ๋ง๊ฐ์ ์์์๋ชจ
- ๋ฌด์๋ณด๋ค ์ปค๋์ด ์ ์งํ ์ ์๋ PCB ํ
์ด๋ธ์ ํฌ๊ธฐ์ ์ ํ์ด ์์
- ๋ง์ ์ข๋น ํ๋ก์ธ์ค๊ฐ ๋ฐ์ํ๋ฉด ์์คํ ์ฑ๋ฅ์ ์ํฅ
- ์ข๋น ํ๋ก์ธ์ค ์ ๊ฑฐ
- ๋ถ๋ชจ ํ๋ก์ธ์ค์๊ฒ SIGCHLD ์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ โ ๋ถ๋ชจ ํ๋ก์ธ์ค์์ wait() ํธ์ถํ์ฌ ์ฒ๋ฆฌ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข ๋ฃ โ ์ข๋น ํ๋ก์ธ์ค์ ๊ณ ์(Orphan)ํ โ ์ข๋น๋ init() ํ๋ก์ธ์ค์ ์์์ด ๋๊ณ โ init ํ๋ก์ธ์ค๊ฐ wait()์ ํธ์ถํ์ฌ ์ข๋น ํ๋ก์ธ์ค ์ ๊ฑฐ
๊ณ ์ ํ๋ก์ธ์ค(Orphan Process)
- ๋ถ๋ชจ๊ฐ ๋จผ์ ์ข ๋ฃํ ์์ ํ๋ก์ธ์ค
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃํ ๋ ์ผ๋ฐ์ ์ผ๋ก
- ์ปค๋(exit() ์์คํ ํธ์ถ ์ฝ๋)์ ์์ ํ๋ก์ธ์ค๊ฐ ์๋์ง ํ์ธ
- ์์์ด ์์ผ๋ฉด ์์ ํ๋ก์ธ์ค(๊ณ ์)๋ฅผ init ํ๋ก์ธ์ค์๊ฒ ์ ์ โ PPID๊ฐ 1๋ก ๋ณ๊ฒฝ
๋ค๋ฅธ ํ๋ก์ธ์ค ์ข ๋ฃ
- ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(Background process)
- ํฐ๋ฏธ๋์์ ์คํ๋์์ง๋ง ํฐ๋ฏธ๋ ์ฌ์ฉ์์ ๋ํ๊ฐ ์๋ ์ฑ ์คํ๋๋ ํ๋ก์ธ์ค
- ์ฌ์ฉ์์ ์ ๋ ฅ์ ํ์๋ก ํ์ง ์๋ ํ๋ก์ธ์ค
- ํฌ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(Foreground process)
- ์คํ๋๋ ๋์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ ์ ํ๋ ํ๋ก์ธ์ค
- CPU ์ง์ค ํ๋ก์ธ์ค
- ๋๋ถ๋ถ์ ์๊ฐ์ CPU ์์ ์ ํ๋๋ผ ์๊ฐ์ ๋ณด๋ด๋ ํ๋ก์ธ์ค
- CPU ์๋๊ฐ ์ฑ๋ฅ ์ข์ฐ
- I/O ์ง์ค ํ๋ก์ธ์ค
- ์ ์ถ๋ ฅ ์์ ์ ํ๋๋ผ ๋๋ถ๋ถ์ ์๊ฐ์ ๋ณด๋ด๋ ํ๋ก์ธ์ค
- ์ ์ถ๋ ฅ ์ฅ์น๋ ์ ์ถ๋ ฅ ์์คํ ์ ์๋๊ฐ ์ฑ๋ฅ ์ข์ฐ
- ์ด์์ฒด์ ์ ์ค์ผ์ค๋ง ์ฐ์ ์์: I/O ์ง์ค ํ๋ก์ธ์ค > CPU ์ง์ค ํ๋ก์ธ์ค
ํ๋ก์ธ์ค ์กฐ์
- ๋ชจ๋ ํ๋ก์ธ์ค์ ์กฐ์ init
- ๊ทธ ์, ์ ํ๋ก์ธ์ค๋??
- 0๋ฒ ํ๋ก์ธ์ค
- swapper(UNIX): ๋ถํ ๋ด๋น ๋ฐ #1 init์ ๋ด๋น
- idle(LINUX), system idle process(Windows)
- ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ํ๋ก์ธ์ค, ์๋ฌด๊ฒ๋ ์ํจ
- ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ 1๊ฐ๋ ์๋ ์ํ์ ๋น ์ง์ง ์๊ฒ ๋ง๋ ํ๋ก์ธ์ค
- 2๋ฒ ํ๋ก์ธ์ค
- ์ปค๋ ํ๋ก์ธ์ค๋ ์ปค๋ ๊ณต๊ฐ์์๋ง ์คํํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธ
- ๋๋ถ๋ถ ์ปค๋ ์ค๋ ๋ ํํ๋ก ๊ตฌ๋ โ kthreadd ๋ชจ๋ ์ปค๋ ํ๋ก์ธ์ค(thread)์ ์กฐ์