ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

  • ํ”„๋กœ์„ธ์Šค๋Š” ์–ธ์ œ ์ƒ์„ฑ๋˜๋Š”๊ฐ€?
    • ์‹œ์Šคํ…œ ๋ถ€ํŒ…๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ
    • ์‚ฌ์šฉ์ž ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋กœ ์ƒˆ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ
  • ์ค‘์š”ํ•œ๊ฑด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™”๋‹ค๊ณ  ๋‹จ์ˆœํžˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹˜!
    • PCB๊ฐ€ ์กด์žฌํ•ด์„œ OS๊ฐ€ ์ œ์–ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜์–ด์•ผ ํ•จ == CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅ

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๊ณผ์ •

  1. ์ƒ์„ฑํ•˜๋ ค๋Š” ์‹คํ–‰ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ OS์—๊ฒŒ ์ „๋‹ฌ
  2. OS๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ๊ทธ๋žจ์„ ์ ์žฌ
    • Code ์˜์—ญ์— ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์ ์žฌ, Data ์˜์—ญ์—” ์ „์—ญ / ์ •์  ๋ณ€์ˆ˜๋“ค์„ ํ• ๋‹น
    • ์Šคํƒ๊ณผ ํž™์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๋งŒ
  3. PCB ๊ณต๊ฐ„์„ ๋ถ€์—ฌ ๋ฐ›๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฑ„์›€
    • ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž๋ฅผ ํ• ๋‹น - ์ƒˆ๋กœ์šด PID ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ
    • ํ”„๋กœ์„ธ์Šค ์ •๋ณด ๊ธฐ๋ก
    • ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์—์„œ ์ƒˆ ํ•ญ๋ชฉ ํ• ๋‹น
    • ์ƒˆ๋กœ ํ• ๋‹น๋œ ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์— PCB ํ• ๋‹น
  4. 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 ํŒŒ์ผ ์ •๋ณด๋“ฑ ๋ฆฌ์…‹

wait() ์‹œ์Šคํ…œ ์ฝœ

  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€, ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ด์–ด์„œ ์‹คํ–‰์„ ๊ณ„์†ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ

exit() ์‹œ์Šคํ…œ ์ฝœ

  • ์ž‘์—…์˜ ์ข…๋ฃŒ๋ฅผ ์•Œ๋ฆฌ๋Š” ์‹œ์Šคํ…œ ์ฝœ
    • ์ข…๋ฃŒ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ๋ฆผ์œผ๋กœ์„œ ๋ถ€๋ชจ๋Š” ์ž์‹์ด ์‚ฌ์šฉํ•˜๋˜ ์ž์›์„ ๋นจ๋ฆฌ ํšŒ์ˆ˜
  • ์ข…๋ฃŒ ์ฝ”๋“œ
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ƒํƒœ๋‚˜ ์ข…๋ฃŒ์˜ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ’
    • ๋ณดํ†ต ์ •์ƒ ์ฝ”๋“œ๋Š” 0, ๋‚˜๋จธ์ง€๋Š” 1-255 ๋ฒ”์œ„ ๋‚ด์—์„œ ์ž„์˜ ์‚ฌ์šฉ
    • ์ด๊ฑธ ๋ถ€๋ชจ๊ฐ€ ํ™•์ธํ•ด์•ผ ์ตœ์ข…์ ์œผ๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋จ

exit() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ๊ณผ์ •

  1. ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ์ž์› ๋ฐ˜ํ™˜
    • ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ, ํž™ ๋“ฑ์˜ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ž์› ๋ฐ˜ํ™˜
    • ์—ด์–ด๋†“์€ ํŒŒ์ผ์ด๋‚˜ ์†Œ์บฃ ๋“ฑ ๋‹ซ์Œ
  2. PCB์— ํ”„๋กœ์„ธ์Šค ์ƒํƒœ Terminated๋กœ ๋ณ€๊ฒฝ, PCB์— ์ข…๋ฃŒ ์ฝ”๋“œ ์ €์žฅ
    • ์•„์ง PCB๊ฐ€ ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์—์„œ ์ œ๊ฑฐ๋œ ์ƒํƒœ๋Š” ์•„๋‹˜, ํ›„์ˆ ํ•  ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•จ
  3. ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์„ init ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž…์–‘
  4. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ 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)์˜ ์กฐ์ƒ