OS

Go back

OS Review
Device Driver
NS Tools

Home
Papers
Daily Link


To Main
5. ÇÁ·Î¼¼½ºÀÇ »ý¼º »ç¿ë ¹× ¼Ò¸ê (Creating, Using, and Destroying a Process)

ÇÁ·Î¼¼½º¸¦ ÄÚµå»ó¿¡¼­ »ý¼ºÇϴ°Ͱú ¼Ò¸ê ½ÃÅ°´Â°ÍÀº ±×·¸°Ô ¾î·Á¿î ÀÏÀÌ ¾Æ´Õ´Ï´Ù. ¸ÕÀú ÇÑ°³ÀÇ ¾îÇÃÀº ÇÑ°³ÀÇ Æз±Æ® ÇÁ·Î¼¼½º·Î ½ÃÀÛÀ» ÇÏ°ÔµÈ´Ù°í ¿©±â½Ã¸é µÇ¿ä. ¹Ù·Î main()ÀÚü°¡ Æз±Æ® ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃÅ°ÁÒ. ±×¸®°í ³ª¼­ main()³»ºÎ¿¡¼­ Â÷Àϵå ÇÁ·Î¼¼½º´Â ¹Ù¾ßÈå·Î ź»ýÇÏ°Ô µË´Ï´Ù. À̶§ Â÷Àϵå ÇÁ·Î¼¼½º´Â fork()¶ó´Â ´Ü ÇÑ°³ÀÇ ÄÝ·Î »ý¼ºÀÌ µÇ°í °¢ ÇÁ·Î¼¼½º(Æз±Æ®µµ Æ÷ÇÔ)¸¦ ¼Ò¸ê½ÃÅ°´Â ÄÝÀº ¹Ù·Î exit()ÀÔ´Ï´Ù. ¹«Áö ½ÉÇÃÇÏÁÒ? ±×·±µ¥ °¢ ÇÁ·Î¼¼½º¸¦ °ü¸®Çϸ鼭 ºÎÅÍ ÀÏÀÌ ²¿À̱⠽ÃÀÛÇÕ´Ï´Ù. ÀÏ´Ü Çѹø ´ÙÀ½ÀÇ Äڵ带 º¸½Ã°í °á°ú°¡ ¾î¶»°Ô ³ª¿ÃÁö ³ª¸§´ë·Î »ý°¢ÇØ º¸½Ã±æ.

main() 
{ 
   printf("hello world\n"); 
   fork(); 
   printf("goodbye world\n"); 
} 

ÀÍÈ÷º¸´ø Çï·Î¿ì¿ùµåÀÌÁÒ? ´ÜÁö À¯´Ð½º ¹öÀüÀ̶ó´Â »ç½Ç¸¸ ´Ù¸¦»Ó. °á°ú´Â ´ÙÀ½°ú °°½À´Ï´Ù.

hello world 
goodbye world 
goodbye world 

±×·¸½À´Ï´Ù. Â÷Àϵå ÇÁ·Î¼¼½º°¡ fork()´ÙÀ½ ºÎÅÍ Á¸ÀçÇϹǷΠÆз±Æ®¿Í Â÷Àϵ尡 °¢°¢ goodbye world¸¦ È­¸é¿¡ ÇÁ¸°Æ® ÇÏ°Ô µÇÁö¿ä.

´ÙÀ½ Äڵ带 ¶Ç ºÁÁֽñæ. À̹ø¿£ Á» º¹ÀâÇغ¸ÀÌ´Ï ²Ä²ÄÇÏ°Ô »ìÆ캸¼Å¿ä.

main() 
{ 
   pid_t   pid; 

   if((pid = fork()) == 0) 
      printf("I am a child process\n"); 
   else 
      printf("I am a parent process\n"); 
} 

°á°ú´Â ¿©·¯ºÐµµ ¿¹»óÇß´Ù½ÍÀÌ

I am a child process 
I am a parent process 

ÀÔ´Ï´Ù. ÀÚ, ¿©±â¼­ ¿ì¸®´Â fork()¶ó´Â ÇÔ¼ö°¡ ¹º°¡ ½ÅºñÇÑ ¸®ÅÏ°ªÀ» °¡Áö°í ÀÖ´Ù´Â »ç½ÇÀ» ¿¹°¨ÇÒ¼ö Àִµ¥, fork()ÀÇ Á¤Ã¼¸¦ ÈÇ·¯µ¢ ¹þ°Üº¾½Ã´Ù.

¸ÕÀú pid_t´Â process id typeÀÔ´Ï´Ù. ÀÌ Å¸ÀÔÀº integer¿Íµµ ¼­·Î ÄÁ¹öÀüÀÌ µÇ´Âµ¥, ¾î¶² Á¤¼ö °ªÀÌÁÒ. ±×·³ ÇÁ·Î¼¼½º ¾ÆÀ̵ð¶õ(¾ÕÀ¸·Î pid¶ó°í ĪÇÏÁö¿ä) ¹«¾ùÀΰ¡? ¹Ù·Î ÇÁ·Î¼¼½ºÀÇ À̸§Ç¥ÀÔ´Ï´Ù. ÇÑ ½Ã½ºÅÛ ³»ºÎ¿¡ Á¸ÀçÇÏ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀº °¢ÀÚ °íÀ¯ÇÑ ÇÁ·Î¼¼½º ¾ÆÀ̵𸦠°¡Áö°í ÀÖÁÒ. ¸î°¡Áö´Â ½Ã½ºÅÛÀÌ Ä¿³ÎÂ÷¿ø¿¡¼­ °íÁ¤°ªÀ¸·Î Áã°í ÀÖÁö¸¸ ´ëºÎºÐ ÀÏÁ¤ÇÑ ±ÔÄ¢(·£´ýÇѰ͵µ ÇϳªÀÇ ±ÔÄ¢ÀÌ µÉ¼ö ÀÖ°ÚÁö¿ä)À» °¡Áö°í ÇÁ·Î¼¼½º »ý¼º½Ã ºÎ¿©°¡ µË´Ï´Ù. ±×·¸´Ù¸é, fork()´Â Â÷Àϵå ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲµÚ °ú¿¬ ¹«¾ùÀ» ¸®ÅÏÇϴ°¡? Â÷Àϵå ÇÁ·Î¼¼½º¿¡°Ô´Â 0 À» ¸®ÅÏÇÏ°í, Æз±Æ® ÇÁ·Î¼¼½º¿¡°Ô´Â Â÷ÀϵåÀÇ pid¸¦ ¸®ÅÏÇØÁÖ´Â º¯Å ÀÌÁßÀΰÝÀÚ¿´½À´Ï´Ù. ´Ù½ÃÇѹø À§ÀÇ Äڵ带 º¸¼Å¿ä. Â÷Àϵ常ÀÌ if³»ºÎ¸¦ ½ÇÇàÇÏ°Ô µÇÀÖ°í, if¹®Àº ¶ÇÇÑ »óÈ£ ¹èŸÀû ±¸Á¶À̹ǷΠ°¢°¢ Çѹø¾¿¸¸ ½ºÅ©¸°¿¡ ÇÁ¸°Æ®ÇÏ°Ô µÇ°ÚÁÒ? ¾Æ, ±×¸®°í ¸¸ÀÏ ¾î¶² ÀÌÀ¯¿¡ ÀÇÇØ Â÷Àϵå ÇÁ·Î¼¼½º »ý¼º¿¡ ½ÇÆи¦ ÇϰԵǸé -1°ªÀ» ¸®ÅÏÇØÁÖ°Ô µË´Ï´Ù. ¸ÅŲÅä½Ã Åø¹Ú½ºµµ Àß º¸¸é ¼ö¸¹Àº Åø¹Ú½º ·çƾµéÀÇ ¸®ÅÏ°ªÀÌ err ŸÀÔÀ¸·Î µÇ¾îÀÖÁÒ? ¹Ù·Î ±×¶§±×¶§ ¾î¶°ÇÑ ¿¬À¯·Î ¿¡·¯°¡ ¹ß»ýÇß´ÂÁö¸¦ Âó¾î³»´Â °ÍÀº µð¹ö±ëÇÒ¶§ Á¤¸»·Î À¯¿ëÇÑ Å×Å©´ÐÀ̱⠶§¹®ÀÔ´Ï´Ù.

¶Ç Àç¹ÌÀÖ´Â »ç½ÇÀº ÀϹÝÀûÀ¸·Î ¿©·¯°³ÀÇ Â÷Àϵå ÇÁ·Î¼¼½º¸¦ »ý¼º½Ãų¶§´Â for·çÇÁ¸¦ ÀÌ¿ëÇؼ­ »ý¼º½ÃÄÑÁشٴ °ÍÀÌÁÒ. ±×¶§¸¶´Ù »ý¼ºµÇ´Â pid¸¦ º¸Åë pid[i]¿Í °°Àº ¹è¿­¿¡ ´ã¾Æ¼­ ³ªÁß¿¡ ÇÊ¿äÇÒ¶§¸¶´Ù Á¶°Ç¹®°ú pid[i]¸¦ ÀÌ¿ëÇÏ¿© Â÷Àϵ带 ÅëÁ¦ÇÏ´Â Å×Å©´ÐÀ» ¾²°Ô µÇ´Â °ÍÀÌÁÒ. ÄÚµåÀÇ ±ÍÅüÀÌ¿¡´Ù°¡ getpid()¶ó´Â ÇÔ¼ö¸¦ ºÙ¿©ÁÜÀ¸·Î½á ÇöÀç µµµ¥Ã¼ ¾î¶²³ðÀÇ pid°¡ ¾¾ÇÇÀ¯¸¦ Á¡ÇÏ°í ÀÖ´ÂÁö¸¦ ÆǺ°Çϱ⵵ ÇØ¿ä. ±×µ¿¾È ±×³É ½ÃÀÛ¿¡¼­ ³¡À¸·Î °¡´Â sequential programming À§ÁÖ·Î ÄÚµùÀ» ÇÏ´ø Á¦°Ô´Â ÀÌ·¸°Ô ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ °øÁ¸ÇÏ¸ç ¼ø°£¼ø°£ ¾¾ÇÇÀ¯¸¦ Á¡À¯ÇÏ´Â concurrent programming¿¡ ÀûÀÀÇϴµ¥ ²Ï ½Ã°£ÀÌ °É¸®´õ±º¿ä.

ÇǺ¸³ëÄ¡ ¼ö¿­ ´Ùµé ¾Æ½ÃÁÒ? 1, 1, 2, 3, 5, 8...ÀÌ·¸°Ô ÁøÇàµÇ´Â ¼ö¿­ÀÔ´Ï´Ù. n+1¹ø° °ªÀº n-1¹ø°¿Í n¹ø° °ªÀÇ ÇÕÀÌ µÇµµ·Ï ¸¸µå´Â ¼ö¿­ÀÌÁÒ. ÀÌ°ÍÀ» Ȧ¼ö¹øÀº Â÷Àϵå ÇÁ·Î¼¼½º°¡, ¦¼ö¹øÀº Æз±Æ® ÇÁ·Î¼¼½º°¡ »ý¼ºÇÏ´Â ÇÁ·Î±×·¡¹Ö ¼÷Á¦°¡ Á¦ À¥ÆäÀÌÁö¿¡ ÀÖ´Â Assignment#1ÀÔ´Ï´Ù. ¿©±â¼­ ÁÖÁöÇϽÇÁ¡Àº, ÀÏ´Ü ¾ÆÁ÷Àº ÇÁ·Î¼¼½ºµé °£ÀÇ Åë½ÅÀº ´Ù·ç°í ÀÖÁö ¾Ê±â¶§¹®¿¡ °¢°¢ ¶È°°Àº ÇǺ¸³ëÄ¡°ª »ý¼º ÇÔ¼ö¸¦ È£Ãâ Çϸ鼭 Çϳª´Â Ȧ¼ö°ª¸¸À», Çϳª´Â ¦¼ö°ª¸¸À» ÀÏÁ¤ÇÑ ½Ã°£°¡°ÝÀ¸·Î ÇÁ¸°Æ®ÇØÁÖ´Â ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù. ÀÏÁ¤ÇÑ ½Ã°£ÀÇ ¾Æ±Í°¡ ¸ÂÁö ¾ÊÀ¸¸é 2´ÙÀ½¿¡ 3´ë½Å 5³ª 1ÀÌ ³ª¿Ã¼öµµ Àִµ¥, ÀÌ·¯ÇÑ ¾Æ±Í¸¦ ¸ÂÃß±â À§ÇÏ¿© »ç¿ëµÇ´Â ÇÔ¼ö°¡ sleep()À̶ó´Â ÄÝÀÌ°í, ÀÌ·¸°Ô ¾Æ±Í¸¦ ¸ÂÃß´Â °úÁ¤À» ÀϹÝÀûÀ¸·Î µ¿±âÈ­ ³»Áö ½ÌÅ©(sychronization)À̶ó°í ÇÏÁö¿ä. ½ÌÅ©´Â ¸Å¿ì Áß¿äÇÑ ÁÖÁ¦·Î ¾ÕÀ¸·Î ´Ù½Ã µîÀåÇÒÅ×´Ï °ÆÁ¤¸¶¼Å¿ä.

ÀϹÝÀûÀ¸·Î ±×·³ Â÷Àϵå ÇÁ·Î¼¼½º´Â ¾î¶°ÇÑ ¿ëµµ·Î »ç¿ëÀÌ µÉ±î ¹«Ã´ ±Ã±ÝÇÏÁö ¾ÊÀ¸½Å°¡¿ä? ¹¹ ÀúµûÀ§ ÀÏÇϴµ¥ Â÷ÀÏµå ¹é°³ º¹ÀâÇÏ°Ô ½á¼­ ¾ò´Â À̵浵 ¾øÀݾֿä. ÇÏÁö¸¸ ¾ÆÁÖ °­·ÂÇÑ ÄÝÇÑ°³°¡ Â÷Àϵå ÇÁ·Î¼¼½º¿¡ ³¯°³¸¦ ´Þ¾ÆÁÖ°Ô µÇÁö¿ä. ¹Ù·Î exec**()ÄÝÀÔ´Ï´Ù. **¿¡´Â c, p, l, vÀÌ·¸°Ô ³×±ÛÀÚ°¡ ÇѽÎÀ¸·Î Á¶ÇÕÀÌ µÇ¼­ »ç¿ëÀÌ µÇ´Âµ¥ ÀÌ´Â ³Ñ°ÜÁÖ´Â ¸Å°³º¯¼öÀÇ ÇüÅ¿¡ µû¶ó ´Þ¶óÁý´Ï´Ù. ±×³É °£´ÜÇÏ°Ô execÄÝÀº ÁöÁ¤ÇÑ µð·ºÅ͸® ¾È¿¡ÀÖ´Â ¹ÙÀ̳ʸ®¸¦ Â÷Àϵå ÇÁ·Î¼¼½ºÀÇ ¸öÅë°ú ÇÕü¸¦ ½ÃÄѹö¸®´Â ¿±±âÀûÀÎ Çà°¢À» ¹úÀÌ°Ô µÇÁö¿ä. Áï, ÇϳªÀÇ ÇÁ·Î±×·¥³»ºÎ¿¡¼­ ´Ù¸¥ ÇÁ·Î±×·¥À» Â÷Àϵå ÇÁ·Î¼¼½ºÈ­ ½ÃÄѼ­ µ¹·Á¹ö¸®´Â °Ì´Ï´Ù. ¿ª½Ã À¯´Ð½ºÀÔ´Ï´Ù¿ä.

¶ÇÇϳªÀÇ Áß¿äÇÑ ¿ëµµ´Â ¼­¹ö¸¦ ±¸ÃàÇÒ¶§ ÀÌ °³³äÀÌ ±×·¸°Ô À¯¿ëÇÒ ¼ö °¡ ¾ø½À´Ï´Ù. ÇÑ ¼­¹ö¿¡´Â ¿©·¯°³ÀÇ Å¬¶óÀ̾ðÆ®µéÀÌ ¶¼°ÅÁö·Î ¸ô·Á¼­ ¹º°¡¸¦ µ¿½Ã¿¡ ¿ä±¸ÇÒ¶§¿¡ ¹Ù·Î °¢ Ŭ¶óÀ̾ðÆ®µé¸¶´Ù Â÷Àϵå ÇÁ·Î¼¼½ºÇÑ°³¾¿À» ¹°·ÁÁִ°ÍÀÌÁÒ. Â÷Àϵå ÇÁ·Î¼¼½ºµéÀº Æз±Æ® ÇÁ·Î¼¼½º ³»ºÎ¿¡ ¸î°³µçÁö µ¿½Ã¿¡ Á¸ÀçÇϱ⠶§¹®¿¡ µ¶¸³ÀûÀ¸·Î µ¿ÀÏÇÑ Â÷Àϵå ÇÁ·Î¼¼½ºµéÀÇ ¾÷¹«¸¦ ¼öÇàÇØÁÖ°Ô µË´Ï´Ù.

Æз±Æ® ÇÁ·Î¼¼½º¿Í Â÷Àϵå ÇÁ·Î¼¼½º´Â ÀÌ·¸µí ¸ÖƼÇÁ·Î±×·¡¹ÖÀ̶ó´Â ºÐ¾ß¿¡¼­´Â ÂüÀ¸·Î Áß¿äÇÑ ÄÁ¼ÁÀ» Áö´Ï°í ÀÖ´Â ³à¼®µéÀε¥, À¯´Ð½º´Â ÇÑ°¡Áö ¾ö°ÝÇÑ ·êÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¹Ì¾Æ´Â Àý´ë·Î ¹æÄ¡ ¾ÊÇÑ´Ù¶ó´Â Á¤Ã¥ÀÌÁÒ. ¹Ì¾Æ°¡ º¸ÀÌ´Â Áï½Ã ´Ù ¼÷ûÇØ ¹ö¸³´Ï´Ù. ´Ù½Ã¸»ÇØ ¾î¶°ÇÑ ÀÌÀ¯µç°£¿¡ Æз±Æ® ÇÁ·Î¼¼½º°¡ Á¾·áµÉ¶§¿¡´Â ÇØ´ç Æз±Æ® ÇÁ·Î¼¼½º°¡ »ý¼ºÇÑ Â÷Àϵå ÇÁ·Î¼¼½ºµé±îÁö »ïÁ·À» ¸êÇعö¸®°Å³ª, Æз±Æ® ÀÚü°¡ ºñÁ¤»óÀûÀ¸·Î Á¾·á°¡ µÇ¼­ ¶°µ¹¾Æ´Ù´Ï´Â Â÷Àϵå ÇÁ·Î¼¼½ºµéÀ» ¸¸³¯½Ã¿¡´Â °¡Â÷¾øÀÌ Á¾·á½ÃÄÑ ¹ö¸®´Â °ÍÀÌÁÒ. ÀÌ Á¶Ä¡´Â °á±¹ ¿À¿¡½º ³»ºÎ¿¡ Á¤Ã¼¸ð¸¦ ÇÁ·Î¼¼½ºµé·Î °¡µæ Â÷¹ö¸®´Â »çŸ¦ ¹Ì¿¬¿¡ ¹æÁöÇϱâ À§ÇÔÀÔ´Ï´Ù.

À¯´Ð½º,,,Âü ¹«¼­¿î ¿À¿¡½ºÀÌÁÒ? ¿ª½Ã ¸ÅŲÅä½Ã¸¦ ´Ù·ç´ø »ç¶÷µéÀÌ ´Ù°¡°¡±â¿¡´Â ¿©·¯¸ð·Î ²¬Â½Áö±ÙÇÑ ±¸¼®ÀÌ ¸¹Àº ¿À¿¡½ºÀÓÀº Ʋ¸²ÀÌ ¾ø½À´Ï´Ù. :) ÇÏÁö¸¸ ¾Ë°íº¸¸é ¸ÅŲÅä½Ãµµ ³»ºÎÀûÀ¸·Î´Â ¼ö¸¹Àº ÇÁ·Î¼¼½ºµéÀÌ ºñ½ÁÇÑ °úÁ¤À» °Ý°í ÀÖÀ»°Ì´Ï´Ù. ´ÜÁö ±×·¯ÇÑ ¸éÀ» ±×µ¿¾È ¿ì¸®°¡ Á¢ÇÒ ±âȸ°¡ ¾ø¾úÀ» »ÓÀÌÁö¿ä.

´ÙÀ½Àå¿¡¼­´Â ¾¾ÇÇÀ¯ ½ºÄÉÁÙ¸µ ¾Ë°í¸®ÁòÀ» ³íÇغ¼±î ÇÕ´Ï´Ù. ¹Ù·Î ¼ôÅÒ ½ºÄÉÁÙ¸µÀÌÁö¿ä. ±×·³ ±×¶§±îÁö ¸ðµÎ °Ç°­ÇÑ ÇÁ·Î¼¼½ºµé·Î »ýÁ¸ ÇϽñæ.

-duffer °æÁØ (http://vorlon.cwru.edu/~kxm73)