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

[์šด์˜์ฒด์ œ] 4. Process Management

by nitronium102 2022. 11. 27.

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

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ
    • ๋ณต์ œ ์ƒ์„ฑ : process context - code, data, stack / CPU context - PCB์„ ๋ชจ๋‘ ๋ณต์‚ฌ
  • ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋ฆฌ(๊ณ„์ธต ๊ตฌ์กฐ) ํ˜•์„ฑ
  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ํ•„์š”๋กœ ํ•จ : ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๊ฑฐ๋‚˜ ๋ถ€๋ชจ์™€ ๊ณต์œ 

 

์ž์›์˜ ๊ณต์œ 

  • ๋ถ€๋ชจ์™€ ์ž์‹์ด ๋ชจ๋“  ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ : Copy-on-write(COW)
    • copy ์ž์ฒด๋Š” ๋น„ํšจ์œจ์ ์ด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜๋Š” ํ–‰์œ„
    • ๋ฆฌ๋ˆ…์Šค ๋“ฑ ํšจ์œจ์ ์ธ OS์—์„œ๋Š” ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ณต์œ ํ•˜๊ณ  ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ๋งŒ ์ผ๋ถ€ copy(write)
  • ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
  • ์ „ํ˜€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ(์ผ๋ฐ˜์  : ๋ณ„๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ-์ž์‹ ๊ฒฝ์Ÿ)

 

์ˆ˜ํ–‰ Execution

  • ๋ถ€๋ชจ์™€ ์ž์‹์ด ๊ณต์กดํ•˜๋ฉฐ ์ˆ˜ํ–‰๋˜๋Š” ๋ชจ๋ธ
  • ์ž์‹์ด ์ข…๋ฃŒterminate๋  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š”wait ๋ชจ๋ธ

 

์ฃผ์†Œ ๊ณต๊ฐ„ Address Space

  • ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ณต๊ฐ„ ๋ฐ ์ž์›์„ ๋ณต์‚ฌํ•œ ํ›„(binary and OS data) ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฎ์–ด์”Œ์›€
  • ์œ ๋‹‰์Šค์˜ ์˜ˆ
    • 1) fork() ์‹œ์Šคํ…œ ์ฝœ : ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ(์šด์˜์ฒด์ œ์—๊ฒŒ ์š”์ฒญ)
      • ๋ถ€๋ชจ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ(OS data except PID + binary) ํ›„ ์ฃผ์†Œ ๊ณต๊ฐ„ ํ• ๋‹น
    • 2) exec() ์‹œ์Šคํ…œ ์ฝœ : ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ

 

ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ Process Termination

  • exit(์ž๋ฐœ์ ): ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ ค์คŒ
    • ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ wait์„ ํ†ตํ•ด output data๋ฅผ ๋ณด๋ƒ„
    • ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ์ข… ์ž์›๋“ค์ด ์šด์˜์ฒด์ œ์—๊ฒŒ ๋ฐ˜๋‚ฉ๋จ
  • abort(๋น„์ž๋ฐœ์ ) : ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹์˜ ์ˆ˜ํ–‰์„ ์ข…๋ฃŒ์‹œํ‚ด
    • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„  ๊ฒฝ์šฐ
    • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ task๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • ๋ถ€๋ชจ๊ฐ€ exitํ•˜๋Š” ๊ฒฝ์šฐ : ๋ถ€๋ชจ ์ข…๋ฃŒ -> ์ž์‹ ์ข…๋ฃŒ์ˆœ์œผ๋กœ ๋‹จ๊ณ„์  ์ข…๋ฃŒ

 

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

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ๋กœ, caller์™€ ๋™์ผํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ณต์ œํ•ด์„œ ํ• ๋‹นํ•œ๋‹ค.

1) ๋ถ€๋ชจ process : ์ฝ”๋“œ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘. fork ํ›„ ์•„๋ž˜ ์ฝ”๋“œ ์ด์–ด์„œ ์‹คํ–‰

2) ์ž์‹ process : fork() ์ด๋ฃจ์–ด์ง„ ๋‹ค์Œ ์‹œ์ ๋ถ€ํ„ฐ ์‹œ์ž‘(๋ถ€๋ชจ process์˜ PCB๋ฅผ ๋ณต์ œํ•˜๊ธฐ ๋•Œ๋ฌธ)

=> fork๊ฐ€ ๋ฌดํ•œํžˆ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹˜

 

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

ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ image๋ฅผ ๋ฎ์–ด์”Œ์›€ - ๋ณต๊ตฌ ๋ถˆ๊ฐ€

  • fork()๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ exec()๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • exec() ์ดํ›„์— ์žˆ๋Š” ์ฝ”๋“œ๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

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

ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด ์ปค๋„์€ child๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค A๋ฅผ sleep ์‹œํ‚ด(block ์ƒํƒœ)

child process๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค A๋ฅผ ๊นจ์šด๋‹ค(ready ์ƒํƒœ)

 

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

๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ณ , ๋ถ€๋ชจ์—๊ฒŒ ์•Œ๋ฆผ

  • 1) ์ž๋ฐœ์  ์ข…๋ฃŒ
    • ๋งˆ์ง€๋ง‰ statement ์ˆ˜ํ–‰ ํ›„ exit() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ข…๋ฃŒ
    • ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด๋„ฃ์ง€ ์•Š์•„๋„ main ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋˜๋Š” ์œ„์น˜์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์คŒ
  • 2) ๋น„์ž๋ฐœ์  ์ข…๋ฃŒ
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ด
      • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„œ๋Š” ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ
      • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ task๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • ํ‚ค๋ณด๋“œ๋กœ kill, break๋ฅผ ์นœ ๊ฒฝ์šฐ
    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ : ์ž์‹๋“ค์ด ๋จผ์ € ์ข…๋ฃŒ๋จ

 

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ

  • 1) ๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค independent process
    • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ์ž์˜ ์ฃผ์†Œ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰
    • ์›์น™์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•จ
  • 2) ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค Cooperating process
    • ํ”„๋กœ์„ธ์Šค ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Œ

 

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜( IPC : interprocess communication)

  • message passing : OS ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
  • shared memory : ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋„ ์ผ๋ถ€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ 
    • cf) thread : thread๋Š” ์‚ฌ์‹ค์ƒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค(ํ”„๋กœ์„ธ์Šค ์•ˆ์˜ ํ˜‘๋ ฅ ๋‹จ์œ„)์ด๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ์€ ์•„๋‹˜.
    • ๋™์ผํ•œ process๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” thread ๊ฐ„์—๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ˜‘๋ ฅ์ด ๊ฐ€๋Šฅ

 

Message Passing

ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— shared variable์„ ์ผ์ฒด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์šด์˜์ฒด์ œ ์ปค๋„๋กœ ํ†ต์‹ ํ•˜๋Š” ์‹œ์Šคํ…œ

1) Direct communication

2) Indirect communication

 

Shared Memory

์ปค๋„์—๊ฒŒ shared memory ์ƒ์„ฑ ์š”์ฒญ ํ•„์š”

๋Œ“๊ธ€