ํ๋ก์ธ์ค๋ ๋ถ๋ชจ - ์์ ๊ด๊ณ์ด๋ค.
์๋์ฐ์์๋ ํ๋ก์ธ์ค๋ ๋ชจ๋ ๋๋ฑํ ๊ด๊ณ์ด์ง๋ง, ๋ค๋ฅธ OS์์๋ ๋ค๋ฅด๋ค.
์ต์ด์ ์คํ๋๋ #0 ํ๋ก์ธ์ค๊ฐ ์กฐ์ ํ๋ก์ธ์ค๋ก ์ดํ๋ก ์์ ํ๋ก์ธ์ค๋ค์ด ๋ป์ด์ ธ ๋๊ฐ๋ ํํ์ด๋ค.
ํ๋์ ๋ถ๋ชจ๋ ์ฌ๋ฟ์ ์์์ ๊ฐ์ง ์ ์๋ ํํ์ด๋ค.
์ด ๋ง์, #0 ํ๋ก์ธ์ค๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค.
๋ฆฌ๋ ์ค์ ๊ฒฝ์ฐ #0 - Idle Process, #1 - Init Process, #2 - kthreadd Process ๋ก ์กฐ์ ํ๋ก์ธ์ค๊ฐ ๊ตฌ์ฑ๋์ด์๋ค.
๊ฐ ๊ฐ, CPU๊ฐ ๋์ง ์๊ธฐ ์ํ ์ฉ๋, ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ์กฐ์ ํ๋ก์ธ์ค, ์ปค๋ ํ๋ก์ธ์ค์ ์กฐ์ ํ๋ก์ธ์ค์ ์ญํ ์ ํ๋ค.
Linux ํ๊ฒฝ์์ ps -eal, pstree 0 ๋ช ๋ น์ผ๋ก ์ง์ ํ์ธํ ์ ์๋ค.
โป ๋ณดํต 0๋ฒ ํ๋ก์ธ์ค๋ CPU๊ฐ ์๋ฌด๊ฒ๋ ํ์ง ์๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์์ฑ๋๊ณ ์ ๋์ค ๊ณ์ด์ ๊ฒฝ์ฐ 1๋ฒ ํ๋ก์ธ์ค์ 2๋ฒ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ์ ๊ด๊ณ
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ fork() ํจ์๋ฅผ ํตํด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
- ๋ถ๋ชจ๋ ๋ถ๋ชจ๋๋ก, ์์์ ์์๋๋ก ๊ฐ์ ๋งก์ ์ญํ ์ ํ๊ฒ ๋๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ผ์ด ๋๋ฌ์ ๊ฒฝ์ฐ Wait() ํจ์๋ก ๋๊ธฐ
- ์์ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ผ์ด ๋๋ฌ์ ๊ฒฝ์ฐ return ๋๋ exit() ํจ์์ ์ข
๋ฃ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ข๋น ์ํ
์ด ๋, PCB status์ ์ข ๋ฃ์ฝ๋์ Terminate Status๊ฐ ๊ธฐ๋ก๋๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐํํ๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ํ ์ผ์ ๋ง์น๊ณ wait() ํจ์๋ก ์์์ ์ํ๋ฅผ ํ์ธํ๋ค.
- ์์์ด ์ข๋น์ํ์ธ ๊ฒฝ์ฐ, ์์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃ์ํจ๋ค.
- ์์์ด ์คํ ์ค์ธ ๊ฒฝ์ฐ ๊ณ์ ํด์ wait๋ฅผ ์ง์ํ๋ค.
- ๋ง์ฝ ๋ถ๋ชจ ํ๋ก์ธ์ค์์ wait() ์์ด ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๊ฒฝ์ฐ, ์ข๋น ํ๋ก์ธ์ค์ ์กฐ์ํ๋ก์ธ์ค๊ฐ ๋ถ๋ชจ๊ฐ ๋๋ค. ์กฐ์ ํ๋ก์ธ์ค์ wait()์ ํตํด ์ข ๋ฃ๋ ์ ์๋ค.
๊ณ ์ ํ๋ก์ธ์ค (Orphan Process)
์์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ๋ ๊ฒฝ์ฐ, ์กฐ์ ํ๋ก์ธ์ค์์ ์ข ๋ฃํ๊ฒ ๋๋๋ฐ ์ด ๋, ๋ถ๋ชจ๊ฐ ๋จผ์ ์ข ๋ฃ๋ ์ข๋น ํ๋ก์ธ์ค๋ ๊ณ ์ ํ๋ก์ธ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ง๋ง OS๋ ์์ ๋ฐ๋ผ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ ์์ ํ๋ก์ธ์ค๋ ๊ฐ์ด ์ข ๋ฃ์ํค๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค.
ํ๋ก์ธ์ค์ ์ ์ด
๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ด๊ณ์์ ์์ฑ๋๊ณ ์ข ๋ฃ๋๋ ์ ์ด๋ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๊น?
์ปดํจํฐ ์์คํ ์์ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ๋ฆฌํ๋ค.
- ์์คํ ๋ถํ ์
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ํ bash์ ๊ฐ์ ์ ํ๋ก์ธ์ค ์์ฑ
- ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋๋ก ํ๋ ์ฌ์ฉ์์ ๋ช ๋ น - ์คํํ์ผ ์คํ
- ๋ฐฐ์น ์์ ์คํ์, ์์ ์ค์ผ์ค
- ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์์คํ
ํธ์ถ๋ก ์ ํ๋ก์ธ์ค ์์ฑ - fork()
- ์ปค๋์ด ์์คํ ํธ์ถ๋ก ์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
ํ๋ก์ธ์ค ์์ฑ์, PID ๋ฒํธ๋ฅผ ํ ๋นํ๊ณ PCB ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ๋ค. ํ๋ก์ธ์ค ํ ์ด๋ธ์ PCB๊ฐ ์ฐ๊ฒฐ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๋ค. ์ด ๋, PCB์ ํ๋ก์ธ์ค ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ Status๋ฅผ Ready๋ก ํ์ํ ๋ค Ready Queue์ ์ฝ์ ํด ์ค์ผ์คํ๋ค.
ํ๋ก์ธ์ค ์ค๋ฒ๋ ์ด (Process Overlay)
๋ฆฌ๋ ์ค ํ๊ฒฝ์์ exec() ํจ์์ ๊ฐ์ ์์คํ ํธ์ถ๋ก fork()๋ฅผ ํตํด ์์ฑ๋ ์์ ํ๋ก์ธ์ค์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ฎ์ด์์ฐ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
ํ๋ก์ธ์ค ์ข ๋ฃ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง๊ฐ ์๋ค.
- exit(), return
- ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ ๊ฐ์ ์ข ๋ฃ(Kill)
๋ชจ๋ ์์์ ๋ฐํํ๊ณ ์์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ Init ํ๋ก์ธ์ค์ ์ ์ํ๋ค.
์์ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ๋ถ๋ชจ์๊ฒ SIGCHLD ์ ํธ๋ฅผ ์ ์กํ๋ค.
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
11. ์ค๋ ๋ ์ฃผ์ ๊ณต๊ฐ๊ณผ ์ปจํ ์คํธ (0) | 2024.04.22 |
---|---|
10. ์ค๋ ๋ (Thread) (0) | 2024.04.21 |
8. ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก (PCB, Process Control Block) (0) | 2024.04.21 |
7. ํ๋ก์ธ์ค (Process) (0) | 2024.04.21 |
6. ์ปค๋ (Kernal) (0) | 2024.04.21 |