๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์šด์˜์ฒด์ œ

9. ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ

by ๐Ÿณ Laboon 2024. 4. 21.
ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ - ์ž์‹ ๊ด€๊ณ„์ด๋‹ค.

 

์œˆ๋„์šฐ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ชจ๋‘ ๋™๋“ฑํ•œ ๊ด€๊ณ„์ด์ง€๋งŒ, ๋‹ค๋ฅธ 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()๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฎ์–ด์”Œ์šฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

Overlay, exec() ํ•จ์ˆ˜ ์‹คํ–‰


ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์˜ ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • exit(), return
  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•œ ๊ฐ•์ œ ์ข…๋ฃŒ(Kill)

๋ชจ๋“  ์ž์›์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ Init ํ”„๋กœ์„ธ์Šค์— ์ž…์–‘ํ•œ๋‹ค.

์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ๋ถ€๋ชจ์—๊ฒŒ SIGCHLD ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•œ๋‹ค.