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

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค(Parent process)๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค(Child process) ์ƒ์„ฑ. ๋ณต์ œ ์ƒ์„ฑ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ(์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ ๋“ฑ)์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•œ๋‹ค.
  • ๋ณต์ œ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์œ„์น˜ํ•˜๊ณ  ๊ทธ ์ž์‹์ด ๋˜ ์ž์‹์„ ๋ณต์ œํ•˜๋ฉด ๋˜ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์œ„์น˜ํ•˜๊ณ โ€ฆ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋ฆฌ(๊ณ„์ธต ๊ตฌ์กฐ)๋ฅผ ํ˜•์„ฑํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค ํ˜ผ์ž์„œ ์ž์‹์„ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์—†๊ณ  ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ๋ฐ›์•„์•ผ๋งŒ ์ž์‹ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๊ฑฐ๋‚˜ ๋ถ€๋ชจ์™€ ๊ณต์œ ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์ž์‹์ด ๋ณต์ œ๋˜๋Š” ์ˆœ๊ฐ„ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋ถ€๋ชจ์™€ ์ž์›์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ฒฝ์Ÿํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ๋œ๋‹ค.

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

  • ๋ถ€๋ชจ์™€ ์ž์‹์ด ๋ชจ๋“  ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
  • ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
  • ์ „ํ˜€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ (์ผ๋ฐ˜์ )

์ˆ˜ํ–‰ (Execution)

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

์ฃผ์†Œ ๊ณต๊ฐ„ (Address space)

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

์œ ๋‹‰์Šค์˜ ์˜ˆ

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


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

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

System call์„ ํ†ตํ•ด ์ž๋ฐœ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ

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

๋น„์ž๋ฐœ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์„ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.(abort)
  • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„  ๊ฒฝ์šฐ
  • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ ํƒœ์Šคํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ(exit)ํ•˜๋Š” ๊ฒฝ์šฐ


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

int main()
{
    int pid; // ๋ถ€๋ชจ์™€ ์ž์‹์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’
    pid = fork(); // ์ƒˆ๋กœ์šด ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์—ฌ๊ธฐ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ์‹คํ–‰ํ•œ๋‹ค.(๋ถ€๋ชจ์˜ ๋ฌธ๋งฅ์„ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ)
    if (0 == pid)   // this is a child
        printf("\n Hello, I am a child!\n");
    else if (0 < pid)   // this is a parent
        printf("\n Hello, I am a parent!\n");
}
  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ ์ฝœ๋กœ ๋ถ€๋ชจ์™€ ์ž์‹์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ์˜ pid๋Š” 0๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ž์‹์˜ pid๋Š” 0์„ ๊ฐ€์ง„๋‹ค.


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

int main()
{
    int pid;
    pid = fork();
    if (0 == pid)   // this is a child
    {
        printf("\n Hello, I am a child! Now I'll run date \n");
        execlp("/bin/date", "/bin/date", (char *)0);
    }
    else if (0 < pid)   // this is a parent
        printf("\n Hello, I am a parent!\n");
}
  • ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ๋•Œ๋ฌธ์— execlp()๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ๊ฐ„ ์ดํ›„์˜ ์ฝ”๋“œ๋“ค์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.


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

int main()
{
    int childPID;
    S1;
    
    childPID = fork();
    
    if (0 == childPID)
        // child ํ”„๋กœ์„ธ์Šค ์ฝ”๋“œ ์‹คํ–‰
    else 
        wait();
        
    S2;
}
  • ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด ์ปค๋„์€ child๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค A๋ฅผ sleep์‹œํ‚จ๋‹ค.(block ์ƒํƒœ)
  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค A๋ฅผ ๊นจ์šด๋‹ค.(ready ์ƒํƒœ)


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

ํ”„๋กœ์„ธ์Šค์˜ ์ž๋ฐœ์  ์ข…๋ฃŒ

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

ํ”„๋กœ์„ธ์Šค์˜ ๋น„์ž๋ฐœ์  ์ข…๋ฃŒ

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


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

๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค (Independent process)

  • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ์ž์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์›์น™์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•œ๋‹ค.

ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค (Cooperating process)

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

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

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

  • message passing : ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ

๐Ÿ”ธ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • shared memory : ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋„ ์ผ๋ถ€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ฒŒ ํ•˜๋Š” shared memory ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Œ
  • ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•  ๋•Œ ์ผ๋ถ€ ์ฃผ์†Œ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋„๋ก ๋งคํ•‘ํ•œ๋‹ค.(์‚ฌ์ „์— ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ์—๊ฒŒ ๋ณด๊ณ ๋˜์–ด์•ผ ํ•œ๋‹ค)

๐Ÿ”ธ thread

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


Message Passing

  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ๋ผ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ ์ปค๋„์„ ํ†ตํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

Message system

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

Direct Communication

  • ํ†ต์‹ ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ

Indirect Communication

  • mailbox(๋˜๋Š” port)๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ„์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹


์ถœ์ฒ˜

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: