[OS] Process 2

๋™๋™ยท2022๋…„ 4์›” 13์ผ

์šด์˜์ฒด์ œ(Operating System, OS)

๋ชฉ๋ก ๋ณด๊ธฐ
6/19
post-thumbnail

๐Ÿ“Œ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ(Process Creation)

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค(Parent Process)๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค(Children Process) ์ƒ์„ฑ(๋ณต์ œํ•ด์„œ ์ƒ์„ฑ)

  • ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋ฆฌ(๊ณ„์ธต ๊ตฌ์กฐ) ํ˜•์„ฑ

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ํ•„์š”๋กœ ํ•จ

    • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›์Œ
    • ๋ถ€๋ชจ์™€ ๊ณต์œ ํ•จ
  • ์ž์›์˜ ๊ณต์œ 

    • ๋ถ€๋ชจ์™€ ์ž์‹์ด ๋ชจ๋“  ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
    • ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
    • ์ „ํ˜€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ
    • ์›์น™์ ์œผ๋กœ๋Š” ์ž์›์„ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ. (์ž์‹์ด ์ƒ์„ฑ๋œ ์ดํ›„๋ถ€ํ„ฐ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ์ž์›์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ฒฝ์Ÿ)
    • ์‚ฌ์‹ค code, data, stack์„ ์™„์ „ ๋ณ„๋„๋กœ ๋ณต์ œํ•˜๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ copyํ•˜์ง€ ์•Š๊ณ  ์ž์‹์ด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•จ. ์ฆ‰, PC๋งŒ ํ•˜๋‚˜ copyํ•ด์„œ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋ถ€๋ชจ์™€ ์ž์‹์˜ ๋‚ด์šฉ์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ถ„๊ธฐ์ ์ด ์˜ค๋ฉด ๊ทธ ๋•Œ๊ฐ€ ๋˜์„œ์•ผ ๋ถ€๋ชจ์˜ ์ผ๋ถ€ ๊ณต๊ฐ„์„ copyํ•จ. Copy-on-Write(COW) ๊ธฐ๋ฒ•
  • ์ˆ˜ํ–‰(Execution)

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

    • ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ณต๊ฐ„์„ ๋ณต์‚ฌํ•จ(binary and OS data)
    • ์ž์‹์€ ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฆผ
  • ์œ ๋‹‰์Šค์˜ ์˜ˆ

    • fork() ์‹œ์Šคํ…œ ์ฝœ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ

      • ๋ถ€๋ชจ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ(OS data except PID + binary)
      • ์ฃผ์†Œ ๊ณต๊ฐ„ ํ• ๋‹น
    • fork() ๋‹ค์Œ์— ์ด์–ด์ง€๋Š” exec() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ

๐Ÿ“Œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ(Process Termination)

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ ค์คŒ(exit)

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

    • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ฌ

    • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ task๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ

    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ(exit)ํ•˜๋Š” ๊ฒฝ์šฐ

      • ์šด์˜์ฒด์ œ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ ์ž์‹์ด ๋” ์ด์ƒ ์ˆ˜ํ–‰๋˜๋„๋ก ๋‘์ง€ ์•Š์Œ
      • ๋‹จ๊ณ„์ ์ธ ์ข…๋ฃŒ

๐Ÿšง fork() ์‹œ์Šคํ…œ ์ฝœ

A process is created by the fork() system call.

  • creates a new address space that is a duplicate of the caller.

ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ ์ฆ‰ ๋ณต์ œ๋Š” fork()๋ผ๋Š” ์‹œ์Šคํ…œ ์ฝœ๋กœ ์‹คํ–‰๋จ. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์˜คํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์‹œ์Šคํ…œ์ฝœ๋กœ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๋ง์€ ์šด์˜์ฒด์ œ๊ฐ€ ๋ณต์ œํ•œ๋‹ค๋Š” ๋œป์ž„.

์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” fork() ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ƒ์„ฑ๋œ ํ›„ ๋ฉ”์ธํ•จ์ˆ˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ fork() ํ•จ์ˆ˜ ์ดํ›„๋ถ€ํ„ฐ ์‹คํ–‰ ๋จ.(๋ถ€๋ชจ์˜ PC๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์˜ PC๋Š” fork๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ž„)

๊ทธ๋Ÿผ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„์„ ํ•˜๋Š”๊ฐ€?
๋ถ€๋ชจ์™€ ์ž์‹์˜ fork return value๊ฐ€ ๋‹ค๋ฆ„
๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” fork์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์–‘์ˆ˜์ด๊ณ  ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” fork์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ 0์ด ๋ฐ˜ํ™˜๋จ

๐Ÿšง exec() ์‹œ์Šคํ…œ ์ฝœ

A process can execute a different program by the exec() system call.

  • replaces the memory image of the caller with a new program.

์ž์‹์„ ์ƒ์„ฑ ํ•œ ๋‹ค์Œ์— ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฎ์–ด์”€

๐Ÿšง wait() ์‹œ์Šคํ…œ ์ฝœ

ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด

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

๐Ÿšง exit() ์‹œ์Šคํ…œ ์ฝœ

์ž๋ฐœ์  ์ข…๋ฃŒ

  • ๋งˆ์ง€๋ง‰ statement ์ˆ˜ํ–‰ ํ›„ exit() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ข…๋ฃŒ
  • ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„ main ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋˜๋Š” ์œ„์น˜์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ๋„ฃ์–ด์คŒ

๋น„์ž๋ฐœ์  ์ข…๋ฃŒ

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ด
    • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„œ๋Š” ์ž์› ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ
    • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ ํƒœ์Šคํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ
  • ํ‚ค๋ณด๋“œ๋กœ kill, break ๋“ฑ์„ ์นœ ๊ฒฝ์šฐ
  • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ž์‹๋“ค์ด ๋จผ์ € ์ข…๋ฃŒ๋จ

๐Ÿ“Œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ

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

  • ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค(Cooperating process)
    ํ”„๋กœ์„ธ์Šค ํ˜‘๋ ฅ ๋งค์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Œ

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ ๋งค์ปค๋‹ˆ์ฆ˜(IPC :Interprocess Communication)

    • ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

      • message passing : ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
    • ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

      • shared memory : ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋„ ์ผ๋ถ€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ฒŒ ํ•˜๋Š” shared memory ๋งค์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Œ

* thread : thread๋Š” ์‚ฌ์‹ค์ƒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ์œผ๋กœ ๋ณด๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ๋™์ผํ•œ process๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” thread๋“ค ๊ฐ„์—๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ˜‘๋ ฅ์ด ๊ฐ€๋Šฅ

๐Ÿšง Message Passing


profile
๊ดด๋ฐœ๊ฐœ๋ฐœ

0๊ฐœ์˜ ๋Œ“๊ธ€