OS

Go back

OS Review
Device Driver
NS Tools

Home
Papers
Daily Link


To Main
8. ¼¼¸¶Æ÷¾î-µ¿±âÈ­¸¦ À§ÇÑ µµ±¸ (Semaphore - Synchronization Hardware)

ÀÚ! ÀÌÁ¦ ¿ì¸®ÀÇ ¿À¿¡½º¿¡ ´ëÇÑ ³íÀÇ´Â ¾î´Àµ¡ Ŭ¶óÀ̸ƽº¿¡ À̸£¸¥µí ½Í½À´Ï´Ù. ¼¼¸¶Æ÷¾î ¿ª½Ã ±³°ú¼­ÀÇ 6Àå¿¡ ³ª¿À´Â ³»¿ëÀ¸·Î½á 6ÀåÀÇ Çٽɿ¡ ÇØ´çµË´Ï´Ù. ÀüÀå¿¡¼­ Á¦½ÃµÇ¾ú´ø º£ÀÌÄ¿¸® ¾Ë°í¸®ÁòÀ¸·Î ¿ì¸®´Â ¿©·¯ ÇÁ·Î¼¼½º »çÀÌ¿¡¼­ ÀϾ´Â CS¹®Á¦¸¦ ³ª¸§´ë·Î ÇØ°áÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. Ç㳪, º£ÀÌÄ¿¸® ¾Ë°í¸®ÁòÀÇ ÇÑ°è°¡ ¹«¾ùÀÎÁö °õ°õÈ÷ »ý°¢Çغ¸¼Ì´ÂÁö¿ä?

¾Ë°í¸®Áò ÀÚü´Â ÈǸ¢Çß½À´Ï´Ù¸¸, ±×°ÍÀÌ °á±¹Àº ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ±¸ÇöÀÌ µÇ¾ú´Ù´Â ÇѰ踦 ÁöÀûÀ» ÇÒ¼ö ÀְνÀ´Ï´Ù. ±×·¸´Ù¸é, ÀÌ ¹®Á¦¸¦ Á»´õ È¿°úÀûÀÎ Çϵå¿þ¾î·Î ÇØ°áÇÏ´Â ¹æ¹ýÀº ¾øÀ»±îÇÏ´Â Àǹ®Á¡ÀÌ ÀÚ¿¬½º·´°Ô µîÀåÇÏ°í, ±×·¯¸é ´Ü¼øÇÏ°Ô µÎ ÇÁ·Î¼¼½º°¡ °øÀ¯ÇÏ°í ÀÖ´Â º¯¼ö¸¦ Á¶ÀÛÇÒ ½Ã¿¡´Â ÀÎÅÍ·´Æ® ÀÚü¸¦ ºÒ°¡´É ÇÏ°Ô ¸¸µé¸é ÇØ°áµÇÁö ¾ÊÀ»±î!? ¶ó´Â ȹ±âÀûÀÎ ¾ÆÀ̵ð¾î¸¦ ³»º¸Áö¸¸, ¸ÖƼÇÁ·Î¼¼¼­ ½Ã½ºÅÛ¿¡¼­´Â À̹æ¹ýÀÌ ÀüÇô ÅëÇÏÁö¸¦ ¾Ê°Ô µÈ´Ù´Â »ç½ÇÀ» ¾Ë¾Æ¾ß°ÚÁÒ. ¿Ö³ÄÇϸé ÇÁ·Î¼¼½º ÇÑ°³°¡ "³ª ÀÌÁ¦ CS¿¡ µ¹ÀÔÇÑ´ç²²~"¶ó°í ¸Þ½ÃÁö¸¦ ¸ðµç ¾¾ÇÇÀ¯¿¡ º¸³¿À¸·Î½á ´Ù¸¥ ÀÎÅÍ·´Æ®µéÀ» ¸ðÁ¶¸® ¸·¾î¹ö¸°´Ù´Â ¹ß»ó ÀÚü°¡ ÀÏ´Ü ¸Å¿ì ±¥¾ÂÇÏ¸ç ½Ã°£À» ³¶ºñÇÏ´Â ÁþÀ̱⠶§¹®ÀÔ´Ï´Ù. °á±¹ ½Ã½ºÅÛÀÇ È¿À²Àº ÀúÇÏµÇ¾î ¹ö¸®°í, ¸¸ÀÏ ½Ã½ºÅÛ Å¬·°ÀÌ ÀÎÅÍ·´Æ®·Î ¾÷µ¥ÀÌÆ® µÇ°í ÀÖ´Ù¸é, ÀÌ°ÍÁ¶Â÷ ¾û¸ÁÀÌ µÇ¾î¹ö¸®°í ¸»°ÎÁÒ.

µû¶ó¼­ Ư¼öÇÏ°Ô Á¦°øµÇ´Â Çϵå¿þ¾îÀû ¸í·É¾î°¡ ÀÖÀ¸´Ï, ÀÌ ¸í·É¾î´Â ¸ÕÀú Á¶°ÇÀ» ÆǺ°Çغ»µÚ ÇÑ ¿öµå(word-CPU°¡ ó¸®ÇÏ´Â ´ÜÀ§ µ¥ÀÌÅÍÀÇ ±æÀÌÀÔ´Ï´Ù)ÀÇ °ªÀ» ¹Ù²Ù°Å³ª µÎ ¿öµå »çÀÌÀÇ ³»¿ëÀ» ¹Ù²ãÄ¡±â(swap) ÇÏ´Â ÀÛ¾÷À» ÇÑÄ®¿¡!!!(atomically:1.ºÐÇÒÀÌ ºÒ°¡´ÉÇÑ; 2.¿ìÁÖ¼Ò³â¾ÆÅè°°Àº) ÇØÄ¡¿ö¹ö¸®´Â °ÍÀ» ¸ñÀûÀ¸·Î ÇÏ°Ô µÇ°Ú½À´Ï´Ù. Áï, µ¥ÀÌÅÍ ¾÷µ¥ÀÌÆ®½Ã ±×°ÍÀÌ ÇѹøÀÇ ¾¾ÇÇÀ¯ Ŭ·°¿¡ 󸮵ǹö¸°´Ù´Â »ç½Ç¿¡¼­ ÇÁ·Î¼¼½º°£¿¡ °øÀ¯ÇÏ´Â µ¥ÀÌÅÍ ¾÷µ¥ÀÌÆ® ¹®Á¦¸¦ ±Ùº»ÀûÀ¸·Î ÇØ°áÇÏ·Á´Â ÀǵµÀÌÁÒ. ¸ÕÀú Á¶°ÇÀ» ÆǺ°ÇÏ°í °ªÀ» ¼¼ÆÃÇÏ´Â °ÍÀ¸·Î½á Test-and-Set()À̶ó´Â ÇÔ¼ö°¡ ±³°ú¼­¿¡¼­ ¼Ò°³µÇ°í¿ä, ¹Ù²ãÄ¡±â ÇÏ´Â ÇÔ¼ö·Î½á Swap() À̶ó´Â ÇÔ¼ö°¡ ¼Ò°³µË´Ï´Ù.

ÀÌ µÑÀº ±×·¯³ª ¸·»ó Á¶±ÝÀÌ¶óµµ º¹ÀâÇÑ CS ¹®Á¦¸¦ ÇØ°áÇÏ·Á°í Àû¿ëÀ» Çϱ⿡´Â µµÀúÈ÷ ¿ë¼­°¡ ¾ÈµÇ´Â °ü°è·Î Á»´õ ½±°Ô CS ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÏ¿© ½ÌÅ©Àü¿ë µµ±¸ÀÎ ¿ì¸®ÀÇ ¼¼¸¶Æ÷¾Æ(Semaphore)°¡ È­·ÁÇÏ°Ô µîÀåÀ» ÇÏ°Ô µË´Ï´Ù. Â¥ÀÜ,,,

¼¼¸¶Æ÷¾î S´Â Á¤¼ö°ª º¯¼öÀÔ´Ï´Ù. ÃʱâÈ­ °úÁ¤À» Á¦¿ÜÇÏ°í ÀÌ Á¤¼ö°ªÀº ÀüÀå¿¡¼­ ¾ð±ÞµÈ ½ÃÇÇÀ¯ ³»¿¡¼­ 3´Ü°è¿¡ °ÉÄ£ ¾÷µ¥ÀÌÆ®°¡ ¾Æ´Ñ ÇÑÄ®¿¡! ¾÷µ¥ÀÌÆ®µÇ´Â Ưº°ÇÑ º¯¼öÀÌÁÒ. ¶ÇÇÑ ÀÌ Á¤¼ö°ªÀº ´Ü 2°³ÀÇ ÇÔ¼ö·Î ¸¸ÀÌ Á¶ÀÛÀÌ °¡´ÉÇѵ¥ ±×°ÍÀº °¢°¢ wait(S)¿Í signal(S)ÀÔ´Ï´Ù. ¿©·¯ºÐ, À§ÀÇ µÎ ÇÔ¼ö´Â °¢°¢ ´Ü ÇÑÄ®¿¡(¾ÆÅä¹ÍÇÏ°Ô) ½ÇÇà µÈ´Ù´Â »ç½ÇÀ» Àý´ë ¾ÕÀ¸·Î ÀØÀ¸½Ã¸é ¾ÈµÇ¿ä. ¸Å¿ì Áß¿äÇÑ »ç½ÇÀÔ´Ï´Ù.

¸ÕÀú wait(S)¹× sigal(S)¶ó´Â ÇÔ¼ö¸¦ »ìÆ캸µµ·Ï ÇÏÁö¿ä.

wait(S):     while S<0 do no-op; 
             S:=S-1; 

signal(S):   S:=S+1; 

´Ü ÇÑÄ®!¿¡ À§¿¡¼­ Á¦½ÃÇÑ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù´Â °Í¿¡ µ¡ºÙ¿©¼­ ¼¼¸¶Æ÷¾î S´Â ¹Ýµå½Ã Çѹø¿¡ ÇÑ°¡Áö ÇÔ¼ö¸¸À» ½ÇÇà½Ãų¼ö ÀÖ´Â »óÈ£¹èŸ¼º, Áï ¹ÂÅؽº°¡ º¸ÀåµÈ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¹«½¼¸»À̳Ä, wait(S)¸¦ ¾î¶² ÇÁ·Î¼¼½º°¡ ½ÇÇàÇÏ°í ÀÖ´Â ¼ø°£¿¡ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ wait(S)´Â ¹°·ÐÀÌ¿ä, signal(S)¶ÇÇÑ Àý´ë·Î ½ÇÇàÀ» ÇÒ ¼ö °¡ ¾ø´Ù´Â °ÍÀÔ´Ï´Ù.

±×·¸´Ù¸é, À§ÀÇ ¼¼¸¶Æ÷¾î¸¦ CS¹®Á¦¿¡ µµµ¥Ã¼ ¾î¶»°Ô ÀÌ¿ëÀ» ÇÏ´ÂÁö Çѹø »ìÆ캸µµ·Ï ÇսôÙ. ¾Æ·¡ÀÇ Äڵ带 ºÁÁֽñæ. Âü°í·Î °¢ ÇÁ·Î¼¼½º¸¶´Ù ¾Æ·¡ÀÇ Äڵ带 ½º½º·Î°¡ ½ÇÇàÇÏ°í ÀÖ´Ù´Â ÀüÁ¦ÀÔ´Ï´Ù.

repeat 
   wait(mutex); 
      CS 
   signal(mutex); 
      RS 
until false; 

À§ÀÇ ¿¹¿¡¼­´Â ¹ÂÅؽº(mutex-Mutual Exclusion(»óÈ£ ¹èŸ¼º)À» °£°áÇÏ°Ô Ç¥ÇöÇÑ°Í)¶ó´Â ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇؼ­ CS¹®Á¦¸¦ ²­À¸·Î ÇØ°áÇÏ´Â ¸ð½ÀÀ» º¸¿©ÁÝ´Ï´Ù. Çѹø °õ°õÈ÷ ¾î¶»°Ô Àú·¸°Ô ´Ü¼øÇÑ°ÍÀÌ ±× ¾öû³­ ¹®Á¦¸¦ ÇØ°áÇÏ´ÂÁö¸¦ ¾Ë¾Æº¼±î¿ä? Á¦ÀϸÕÀú mutex°ªÀ» 1·Î ÃʱâÈ­¸¦ ½ÃÄ×´Ù°í ÀüÁ¦ÇÏ°í(²Ï Áß¿äÇÑ ÀüÁ¦ÀÔ´Ï´Ù), ÀÓÀÇÀÇ ÇÁ·Î¼¼½º°¡ ÀÚ½ÅÀÇ CS¿¡ µ¹ÀÔÇϱâ À§ÇÏ¿© wait(mutex)¸¦ È£ÃâÇß´Ù°í Ĩ½Ã´Ù. ¸¸ÀÏ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀÌ¹Ì CS¿¡ µé¾î°¡ ÀÖ´Ù¸é, mutex°ªÀº ÀÌ¹Ì 0ÀÌ µÇ¾îÀִ¹Ù, while·çÇÁ¸¦ ¸Éµ¹¸ç mutex°¡ 1·Î µ¹¾Æ¿À±â¸¦ ¾ÖŸ°Ô ±â´Ù¸®´Â°Í ¿Ü¿¡´Â ¾Æ¹«°Íµµ ÃëÇÒ¼ö ÀÖ´Â ÇൿÀÌ ¾ø°Ô µÇÁö¿ä. ¹Ù·Î ¹®¾Õ¿¡¼­ ÅÎ~! ¸·È÷´Â °æ¿ìÀÔ´Ï´Ù. ÀÌ¹Ì CS¿¡ µé¾îÀÖ´ø ÇÁ·Î¼¼½º´Â ³ª¿À¸é¼­ ¹Ýµå½Ã signal(mutex)¸¦ È£ÃâÇÒÅ×°í, À̼ø°£ mutex°ªÀº ´Ù½Ã 1·Î ȯ¿øÀÌ µÇÁö¿ä? °í·Î while·çÇÁ ¾È¿¡¼­ »±À̵¹´ø ÇÁ·Î¼¼½º°¡ À̹ø¿¡´Â while¹®¿¡¼­ ¹þ¾î³ª ÀÚ½ÅÀÇ CS·Î µ¹ÀÔÇÏ°Ô µÈ´Â°ÍÀÌÁÒ. ¼¼¸¶Æ÷¾î¶ó´Â Ư¼ö¼ºÀ¸·Î ÀÎÇØ Àý´ë·Î µ¿½Ã¿¡ µÎ ÇÁ·Î¼¼½º°¡ wait(mutex)¸¦ È£ÃâÇϴ°ÍÀÌ ¿øõºÀ¼â µÇ´À´Ï ¸¸Å­, Àý´ë·Î µÎ ÇÁ·Î¼¼½º°¡ °¢ÀÚÀÇ CS¿¡¼­ Äá±ïÁö ±î´Â ÀÏ Àý´ë ¾ÈÀÏ¾î ³³´Ï´Ù. ÀÌ·¸µí, ´ÜÄ®¿¡ ¼öÇàµÇ´Â ÇÔ¼ö µÎ°³(wait°ú signal)¿Í Àý´ë·Î µ¿½Ã¿¡ ¿¢¼¼½º ÇÒ¼ö ¾ø´Â º¯¼ö(¼¼¸¶Æ÷¾î) ÇÑ°³·Î Á¤¸» ±ò²ûÇÏ°Ô CS¹®Á¦°¡ ÇØ°á µÇÁö¿ä?

ÀÚ, ÀÌÂëÇؼ­ ºÒÇöµí ¹º°¡ ²¬Â½Áö±Ù,,,ÇÑ°Ô ¸Ó¸®¸¦ ½ºÃÄ¾ß Çϴµ¥,,, ¾Æ´Ï! ÀÌ·²¼ö°¡!!!??? µÎ ÇÁ·Î¼¼½º°£¿¡´Â Àý´ë·Î º¯¼ö¸¦ °øÀ¯ÇÒ¼ö ¾ø´Ù°í Àü¿¡ ¸»Çسõ°í(Àü¿ªº¯¼öÁ¶Â÷ Áö¸¾´ë·Î °¢ÀÚ ³»ºÎ¿¡ º¹»çÇسõ°í ¾´µ¥¸Å,,,) ¼¼¸¶Æ÷¾î¶ó´Â °øÀ¯ÇÏ´Â º¯¼ö¸¦ ¾´´Ù´Â°Å °³¼Ò¸® ¾Æ´Õ¹Ì±î!? ¶ó°í Áú¹®ÇÏ´Â ³à¼®, ³» ÀÌ»µÇØÁÖ¸®¶ó,,,³Í ¶È¿Á¶Ç¿ÁÇÑ ³ðÀ̾ß,,,

±×·¸½À´Ï´Ù. ¼¼¸¶Æ÷¾îÀÇ Á¤Ã¼¸¦ ¿©±â¼­ ¹àÇô¾ß ÇÒ¶§°¡ ¿Â°ÍÀÔ´Ï´Ù. ¼¼¸¶Æ÷¾î´Â 3´ë IPC(Inter Process Communication) Æйи®Áß ¿ìµÎ¸Ó¸® ¿´´ø°ÍÀÔ´Ï´Ù. ±×·³ ¿©±â¼­ Àá±ñ IPC¸¦ °£·«ÇÏ°Ô »ìÆ캸°í ³Ñ¾î°¥±î¿ä?

IPC¶õ, ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµé »çÀÌÀÇ Åë½ÅÀ» ÀǹÌÇÕ´Ï´Ù. Àü¿¡ ÇÁ·Î¼¼½ºÀÇ °³³äÀ» ¼³¸íµå¸®¸é¼­ °¢ ÇÁ·Î¼¼½º´Â °¢°¢ÀÇ µ¥ÀÌÅͱ¸Á¶ ¹× µ¥ÀÌÅ͸¦ °¡Áö°í Àֱ⿡ Àü¿ªº¯¼ö³ª ·ÎÄú¯¼öµîÀº ÀüÇô ±×µé »çÀÌ¿¡¼­´Â Àǹ̰¡ ¾ø´Ù¶ó´Â »ç½ÇÀ» À̾߱âÇÑÀûÀÌ ÀÖÁÒ? ¿¹¸¦ µé¾î Æз±Æ® ÇÁ·Î¼¼½º°¡ Â÷Àϵå ÇÁ·Î¼¼½º¸¦ »ý¼ºÇҽÿ¡´Â ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´ø ¸ðµç µ¥ÀÌÅ͸¦ ±×´ë·Î º¹»ç! ½ÃÅ°±â¿¡ a¶ó´Â Àü¿ª º¯¼ö°¡ Æз±Æ® ÇÁ·Î¼¼½º ³»¿¡ ÀÖ¾úÀ» Áö¶óµµ Æз±Æ® ÇÁ·Î¼¼½º³»¿¡¼­¸¸ ÀÌ°ÍÀÌ Àü¿ªÀÌÁö, ±×·¸´Ù°í Â÷Àϵå±îÁö ¶È°°Àº a¸¦ ÂüÁ¶ÇÑ´Ù°í »ý°¢Çϸé Âø°¢ÀÔ´Ï´Ù. Â÷Àϵ忡°Ôµµ Àü¿ªº¯¼ö a°¡ ÀÖÀ¸³ª, ±×°ÍÀº ÀÌ¹Ì º¹»çº»ÀÇ ÀüÇô ´Ù¸¥ Àü¿ªº¯¼ö a¶ó´Â °ÍÀÌÁÒ.

°í·Î µÎ ÇÁ·Î¼¼½º°£¿¡ µ¿½Ã¿¡ °øÀ¯ÇÒ¼ö ÀÖ´Â µ¥ÀÌÅ͸¦ Çü¼ºÇÏ´Â ¹æ¹ýÀÌ ¿ä±¸µÉ¶§ µîÀåÇÏ´Â °ÍÀÌ ¹Ù·Î IPCÀ̸ç, ÀÌ°ÍÀº ÀÏÁ¾ÀÇ Åë½ÅÀÇ °³³äÀÌ µÇ¾î¹ö¸°´Ù´Â °ÍÀÌÁÒ. IPC´Â Å©°Ô 3°¡Áö Å×Å©´ÐÀÌ Á¸ÀçÇÕ´Ï´Ù. ¼¼¸¶Æ÷¾î(semaphore), °øÀ¯¸Þ¸ð¸®(shared memory-¾ÕÀ¸·Î ±×³É ½¦¾îµå ¸Þ¸ð¸®¶ó°í ÇÏÁÒ), ±×¸®°í ¸Þ½ÃÁö(message)¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýµîÀÌÁÒ. °¢°¢¿¡ ´ëÇÑ È°¿ë¿¹´Â ¾ÕÀ¸·Îµµ °£·«ÇÏ°Ô³ª¸¶ ³ª¿À´Ï¸¸Å­ Áö±ÝÀº IPC·Î µÎ ÇÁ·Î¼¼½º°£¿¡ °øÀ¯ÇÏ´Â µ¥ÀÌÅ͸¦ »ý¼º½ÃÄÑÁÙ¼ö ÀÖ´Ù´Â »ç½Ç¸¸À» ÁÖÁö ÇÏ½Ã¸é µË´Ï´Ù.

ÀÚ, ±×·¯¸é ³»Ä£±è¿¡ ´ÙÀ½ÀÇ ÄÚµå¶ÇÇÑ ºÁÁֽʼî.

   P0                           P1 

wait(S);                      wait(Q); 
wait(Q);                      wait(S); 
   ...                          ... 
signal(S);                    signal(S); 
signal(Q);                    signal(Q); 

¿ÞÆíÀº ÇÁ·Î¼¼½º0ÀÌ ÀÚ½ÅÀÇ ³»ºÎ¿¡¼­ ¼¼¸¶Æ÷¾î¸¦ ¾²°í ÀÖ´Â ¸ð½ÀÀÌ°í, ¿À¸¥ÆíÀº ÇÁ·Î¼¼½º1ÀÌ ÀÚ½ÅÀÇ ³»ºÎ¿¡¼­ ¼¼¸¶Æ÷¾î¸¦ ¾²°íÀÖ´Â ¸ð½ÀÀÔ´Ï´Ù. ¹º°¡ ´ëĪÀûÀÎ ¸ð½ÀÀ̱⵵ ÇÏ°í, Àú°Ô ¹¹´Ù³Ä,,,¶ó´Â ´À³¦µµ µé°ÚÁö¸¸, °¡¸¸ÀÌ µé¿©´Ùº¸¸é P0°ú P1Àº ´õÀÌ»ó ¼û½¬°í ÀÖÁö ¾Ê°í ÀÖÀ½À» ¾Ë°ÔµÉ°ÍÀÔ´Ï´Ù. ±×·¸½À´Ï´Ù. Á×Àº ÇÁ·Î¼¼½º°¡ µÇ¾î¹ö·È¾î¿ä. ÇÁ·Î¼¼½º0Àº ÇöÀç ÇÁ·Î¼¼½º1ÀÌ Q¶ó´Â ¼¼¸¶Æ÷¾î¸¦ signalÇØÁֱ⸦ ±â´Ù¸®°í ÀÖ°í, ÇÁ·Î¼¼½º1Àº ¹Ý´ë·Î ÇÁ·Î¼¼½º0ÀÌ S¶ó´Â ¼¼¸¶Æ÷¾î¸¦ signalÇØÁֱ⸦ ±â´Ù¸³´Ï´Ù. ¹Ù·Î µ¥µå¶ô!(dead-lock)ÀÌ ÀϾ ¼ø°£À̶ó°í ÇÕ´Ï´Ù. ¿µ¿øÈ÷ ¼­·Î¸¸À» ±â´Ù¸®¸é¼­ »ýÀ» ¸¶°¨ÇÒ ÇÁ·Î¼¼½ºµéÀÔ´Ï´Ù. ¼¼¸¶Æ÷¾î°¡ ÁÖ´Â ±â»Ýµµ Àá½Ã, ÀÌ·¸°Ô ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÒÁö¶óµµ ¶Ç´Ù¸¥ À§ÇèÀÌ ¶Ç¾Æ¸®¸¦ Ʋ°í ÀÖ´Ù´Â »ç½ÇÀ» ¾Ë°Ô µË´Ï´Ù. »ç½Ç µ¥µå¶ô(·¹µå¶ô!À» ¶°¿Ã¸°ÀÚ,,,ÇãÇã)À» ¿ÏÀüÈ÷ ÇØ°áÇϱâ´Â ºÒ°¡´ÉÇÕ´Ï´Ù. ÇÏÁö¸¸, ÀÌ°ÍÀ» ¹Ì¿¬¿¡ ¹æÁöÇϰųª ÀÏ´Ü µ¥µå¶ôÀÌ ¹ß»ýÇß´Ù´Â »ç½ÇÀ» ¹ß°ßÇÏ°í µÎ ÇÁ·Î¼¼½º¸¦ Á¶¿ëÀÌ ¼÷ûÇعö¸®´Â ¹æ¹ýÀÌ ¾ø´Â°ÍÀÌ ¾Æ´ÏÁÒ. °ð µ¥µå¶ô¿¡ ´ëÇÑ °³³äÀÇ Á¤ÀÇ¿Í ÀÌÀÇ ÇØ°á¹ýÀ» ´Ù·êÅ×´Ï À̶ÇÇÑ ±â´ëÇØ Áֽñ⠹ٶø´Ï´Ù.

¼¼¸¶Æ÷¾î°¡ ³»Æ÷ÇÏ°í ÀÖ´Â ¶ÇÇϳªÀÇ ¹®Á¦Á¡Àº ¹Ù·Î ¹Ù»Û ±â´Ù¸²(busy waiting)ÀÔ´Ï´Ù. ¼¼¸¶Æ÷¾î´Â °¢ ÇÁ·Î¼¼½º°¡ ÀÚ½ÅÀÇ CS¿¡ µé¾î°¡±âÀü¿¡ ¸ÕÀú ¼¼¸¶Æ÷¾î °ªÀ» È®ÀÎÇϸ鼭 ÀÌ°ÍÀÌ 0º¸´Ù ÀÛÀ»¶§¿¡´Â while ·çÇÁ ³»¿¡¼­ ºùºù µ¹°í ÀÖÁÒ? ¹¹ Çѵΰ³ÀÇ ÇÁ·Î¼¼½º°¡ ºùºù µ·´Ù¸é ±×³ª¸¶ ºÁÁÙ¸¸ ÇÏÁö¸¸, ¼öõ°³, ¼ö¸¸°³°¡ Áö ¾ÈÀÇ ·çÇÁ³»¿¡¼­ ºùºù µ¹°íÀÖ´Â °æ¿ì¸¦ »ó»óÇØ º¸½Ê¼î. À¯Àú´Â µ¹¾Æ¹ö¸³´Ï´Ù. ÀÌ·¸°Ô ¹Ù»Ú°Ô µ¹¸é¼­ ±ÍÁßÇÑ ¾¾ÇÇÀ¯ Ŭ·°À» ¼ÒºñÇÏ´Â ÇÁ·Î¼¼½º, Ç㳪 Á¤ÀÛ ¾Æ¹«Àϵµ ¸øÇÏ°í ¼¼¸¶Æ÷¾îÀÇ ½ÅÈ£°¡ ¶³¾îÁú¶§±îÁö ÇÏ¿°¾øÀÌ ±â´Ù¸®´Â ÇÁ·Î¼¼½ºÀÇ »óŸ¦ ¿ì¸®´Â ºñÁö¿þÀÌÆÃÀ̶ó°í ÇÕ´Ï´Ù.

ÀÌ ¹®Á¦¸¦ ¶ÇÇÑ ÇØ°áÇϱâ À§ÇÏ¿© ½ÇÁ¦ÀûÀ¸·Î signal()°ú wait()À» Á¤ÀǸ¦ ¾à°£ ¹Ù²Ù¾îÁÖÁÒ. Áï, wait()ÀÇ °æ¿ì ¸¸ÀÏ ¼¼¸¶Æ÷¾î °ªÀÌ À½¼öÀÏ°æ¿ì´Â ·¹µðÅ¥·Î ÇÁ·Î¼¼½º¸¦ ¼¼¸¶Æ÷¾î¿Í ÇÔ²² º¸³»°í, ÇÁ·Î¼¼½ºÀÇ »óŸ¦ ±â´Ù¸²(waiting)»óÅ·ΠÀüȯÀ» ½ÃÄÑÁÖ°Ô µË´Ï´Ù. À绡¸® ÄÁÆ®·ÑÀº ¾¾ÇÇÀ¯ ½ºÄÉÁÙ·¯¿¡°Ô ³Ñ¾î°¡°í ½ºÄÉÁÙ·¯´Â Àü¿¡ ¼³¸íÇßµíÀÌ ·¹µðÅ¥¿¡¼­ ´ë±âÁßÀÌ´ø ÇÁ·Î¼¼½º ÇÑ°³¸¦ °ñ¶ó¼­ ¾¾ÇÇÀ¯¿¡ ³Ñ°ÜÁÖÁö¿ä. signal()ÀÇ »õ·Î¿î Á¤ÀÇ´Â ¿ªÀ¸·Î ·¹µðÅ¥¿¡ ÀâÇôµé¾î°£ ÇÁ·Î¼¼½º¸¦ ´Ù½Ã ±ú¿öÁÖ´Â °úÁ¤À» Æ÷ÇÔÇÏ°Ô µÇ°ÚÁÒ?

¼¼¸¶Æ÷¾î´Â Å©°Ô 0°ú 1°ª»çÀ̸¸À» °¡Áú¼ö ÀÖ´Â ¹ÙÀ̳ʸ®(binary) ¼¼¸¶Æ÷¾î¿Í ÀÓÀÇÀÇ Á¤¼ö°ªÀ» °¡Áú¼ö ÀÖ´Â Ä«¿îÆÃ(counting) ¼¼¸¶Æ÷¾î·Î ±× Á¾·ù¸¦ ³ª´©°í ¹ÙÀ̳ʸ® ¼¼¸¶Æ÷¾î·Î Ä«¿îÆà ¼¼¸¶Æ÷¾î¸¦ ¸¸µå´Â ¾Ë°í¸®Áò ¶ÇÇÑ Ã¥¿¡ µîÀåÇÕ´Ï´Ù¸¸, ±³¼ö´ÔÀº ÀÌ ¾Ë°í¸®Áò ȲÀÌ´Ù¶ó°í ¸· ¿åÀ»,,,±×·¯¸é¼­ ÀÚ½ÅÀÇ ¾Ë°í¸®ÁòÀ» µû·Î ¼³¸íÇØÁÖ¾ú´Âµ¥, ´õ ¸ð¸£°Î´õ±¸¸ÕÀ¯.

±×¹Û¿¡ CS¹®Á¦ ¿Ü¿¡µµ Àü¿¡ ¾ð±ÞÇß´ø ÄÁ½´¸Ó-ÇÁ·Îµà¼­ »çÀÌ¿¡ ¹ß»ýÇÏ´Â ½ÌÅ©¹®Á¦¸¦ ¼¼¸¶Æ÷¾î·Î ÇØ°áÇÏ´Â ¹æ¹ý°ú ¸®´õ(reader)¿Í ¶óÀÌÅÍ(writer) ¹®Á¦µîÀÌ Ã¥¿¡¼­´Â ¼Ò°³°¡ µÇÁö¸¸, ¼¼¸¶Æ÷¾î°¡ ¹«¾ùÀÎÁö¿¡ ´ëÇÑ °³³äÀº ¾Õ¿¡¼­ ¼³¸íÇÑ ¿¹·Î ÃæºÐÈ÷ ³³µæÀÌ µÇ¼ÌÀ¸¸®¶ó´Â ÀÚ¸¸½É¾Æ·¡ À̹øÀåÀ» ¸¶Ä¥±î ÇÕ´Ï´Ù.

¼¼¸¶Æ÷¾î¸¦ À¯´Ð½º¿¡¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀº Á¶±Ý º¹ÀâÇÕ´Ï´Ù. ¸ÕÀú ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇϱâ À§ÇÑ Çì´õÆÄÀϵéÀÌ ÁغñµÇ¾î¾ß ÇÏ°í, °¢°¢ »ç¿ëµÉ ¼¼¸¶Æ÷¾î ¼Â(set:ÁýÇÕ)µîÀ» ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ Á¤ÀÇÇØÁÖ¾î¾ß ÇÏÁö¿ä. ¼¼¸¶Æ÷¾î´Â Å©°Ô ¼¼¸¶Æ÷¾îÀÇ Çü¼º, ¼¼¸¶Æ÷¾îÀÇ Á¦¾î, ±×¸®°í ¼¼¸¶Æ÷¾îÀÇ Àû¿ëµîÀÇ ´Ü°è¸¦ ÄÚµåÈ­Çؼ­ »ç¿ëÇÏ°Ô µÇ´Âµ¥, ¼¼¸¶Æ÷¾î¸¦ À߸ø »ç¿ëÇßÀ»°æ¿ì, ÀÌ°ÍÀº ÄÄÆÄÀÏ·¯Á¶Â÷ Âó¾î³»Áö ¸øÇÏ´Â ½É°¢ÇÑ ³í¸®¿¡·¯·Î ¿¬°áÀÌ µÇÁö¿ä. ÀÏ´Ü ±×·¯ÇÑ Á¡À» ÁÖÁöÇØ ÁÖ½Ã°í °ü½ÉÀÌ ÀÖÀ¸½Å ºÐÀº Á¦ ȨÆäÀÌÁö¿¡ ±âÀçµÇ¾îÀÖ´Â Assignment5ÀÇ ¼Ò½ºÄÚµå¿Í °á°ú¸¦ Âü°íÇÏ½Ã¸é µÉ°ÍÀÔ´Ï´Ù.

Assignment5´Â ¸ÕÀú searcher(s), inserter(i), deleter(d)¶ó´Â ¸µÅ©µå ¸®½ºÆ®¸¦ °ü¸®ÇØÁÖ´Â ¼¼°³ÀÇ ¹ÙÀ̳ʸ®(°¢°¢ main()ÇÔ¼ö°¡ ÀÖ´Â ÄÄÆÄÀÏµÈ ½ÇÇàÆÄÀÏÀÔ´Ï´Ù)¸¦ ¸¸µçµÚ, ÀÌ°ÍÀ» ¸ÞÀÎ(Assignment5ÀÇ main())¿¡¼­ °¢°¢ Â÷Àϵå ÇÁ·Î¼¼½º¿Í exec**()ÄÝ·Î ÇÕü½ÃÄѹö¸³´Ï´Ù. °¢°¢ 3°³¾¿ÀÇ s, i, ±×¸®°í d(ÃÑ 9°³ÀÇ Â÷Àϵå ÇÁ·Î¼¼½º°¡ ž¿ä)¸¦ ¸¸µç´ÙÀ½ °¢°¢Àº ÀÚ½ÅÀÇ °¹¼ö ¹× ¼­·ÎÀÇ ¹ÂÅؽº Á¶°ÇµîÀ» ¼¼¸¶Æ÷¾î¿Í ½¦¾îµå ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÏ¿© Æ®·¡Å·ÇØÁÖ°Ô µÇÁö¿ä. ¿¹¸¦µé¾î s´Â ´Ù¸¥ i³ª d¿Í µ¿½Ã¿¡ ½ÇÇàµÉ¼ö ÀÖÀ¸³ª d´Â ´Ù¸¥ s³ª i, ½ÉÁö¾î ´Ù¸¥ d¿Íµµ ÇÔ²² ½ÇÇàµÇ¼­´Â ¾ÈµÈ´Ù´Â Á¶°ÇµîÀÔ´Ï´Ù. À̶§ ÇöÀç È°¼ºÁßÀÎ s, i, ±×¸®°í dÀÇ °¹¼ö¸¦ Á¦´ë·Î Æ®·¡Å·ÇØÁÖ·Á¸é ¼¼¸¶Æ÷¾î°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ°Ô µÇ°ÚÁÒ?

´ÙÀ½Àå¿¡¼­´Â ±³°ú¼­ 6ÀåÀÇ ÈĹݺÎÀÎ ´ÙÀÌ´×ÇʷμÒÆÛ½º ¹®Á¦(The Dining-Philosophers Problem:¹äÃĸԴ ¸ù»ó°¡µé)¿¡ ´ëÇÑ Á¦½Ã¿Í ÇØ°á¹ý, ±×¸®°í ¼¼¸¶Æ÷¾î ¿ÜÀÇ CS¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ °í¾ÈµÈ Ư¼öÇÑ ±¸Á¶Ã¼µîÀ» »ìÆ캸¸é¼­ ¾Ç¸í³ôÀº ±³°ú¼­ 6ÀåÀ» ¸¶¹«¸® ÁöÀ» ¿¹Á¤ÀÔ´Ï´Ù. ¿©±â±îÁö ¾îÁÝÀÝÀº ÀúÀÇ ±Û ÀдÀ¶ó°í ¼ö°íÇϽŠ¿©·¯ºÐ, Á¤¸» ¼ö°í°¡ ¸¹À¸¼Ì½À´Ï´Ù.

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