5Àå. ÇÁ·Î¼¼½º°£ Åë½Å ¸ÞÄ¿´ÏÁò
(Interprocess Communication Mechanism)

ÇÁ·Î¼¼½ºµéÀº »óÈ£°£ÀÇ È°µ¿À» Á¶Á¤Çϱâ À§Çؼ­ ÇÁ·Î¼¼½º°£, ±×¸®°í Ä¿³Î°ú Åë½ÅÀ» ÇÑ´Ù. ¸®´ª½º´Â ¿©·¯ Á¾·ùÀÇ ÇÁ·Î¼¼½º°£ Åë½Å ±â´É(Inter-Process Commuication, IPC)À» Á¦°øÇÑ´Ù. ¸®´ª½º´Â ½Ã±×³Î°ú ÆÄÀÌÇÁ ÀÌ¿Ü¿¡µµ ½Ã½ºÅÛ V IPC¸¦ Á¦°øÇϴµ¥ ½Ã½ºÅÛ V IPC´Â ÀÌ ±â´ÉÀÌ Ã³À½À¸·Î µîÀåÇÑ À¯´Ð½º ¹öÀüÀÇ À̸§À» µû¼­ Áö¾îÁø À̸§ÀÌ´Ù.


5.1 ½Ã±×³Î(Signal)

½Ã±×³ÎÀº À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ÇÁ·Î¼¼½º°£ Åë½ÅÀ» ÇÏ´Â °¡Àå ¿À·¡µÈ ¹æ¹ý ÁßÀÇ ÇϳªÀÌ´Ù. ÀÌ µéÀº Çϳª ÀÌ»óÀÇ ÇÁ·Î¼¼½ºµé¿¡°Ô ºñµ¿±âÀûÀÎ À̺¥Æ®¸¦ ¾Ë¸®±â À§ÇØ »ç¿ëµÈ´Ù. ½Ã±×³ÎÀº Å° º¸µå ÀÎÅÍ·´Æ®·ÎºÎÅÍ ¹ß»ýµÇ±âµµ ÇÏ°í, ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏÁö ¾Ê´Â °¡»ó ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ë ÇÏ·Á ÇÏ´Â °æ¿ì°°Àº ¿¡·¯ »óȲ¿¡¼­µµ ¹ß»ýÇÑ´Ù. ½Ã±×³ÎÀº ½©ÀÌ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô ÀÛ¾÷ °ü ¸® ¸í·ÉÀ» º¸³¾ ¶§¿¡µµ »ç¿ëµÈ´Ù.

Ä¿³ÎÀ̳ª ÇØ´çÇÏ´Â ±ÇÇÑÀ» °¡Áö°í ÀÖ´Â ½Ã½ºÅÛÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Â ÀÏ·ÃÀÇ Á¤ÀÇµÈ ½Ã±×³ÎµéÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀ» º¸·Á¸é kill ¸í·ÉÀ» »ç¿ëÇÏ¸é µÇ´Âµ¥(kill -l), ÇÊ ÀÚÀÇ ÀÎÅÚ ¸®´ª½º ±â°è¿¡´Â ´ÙÀ½°ú °°Àº ½Ã±×³ÎµéÀÌ ÀÖ´Ù.

 1) SIGHUP 	 2) SIGINT 	 3) SIGQUIT 	 4) SIGILL
 5) SIGTRAP 	 6) SIGIOT 	 7) SIGBUS 	 8) SIGFPE
 9) SIGKILL 	10) SIGUSR1 	11) SIGSEGV 	12) SIGFEP
13) SIGPIPE 	14) SIGALRM 	15) SIGTERM 	17) SIGCHLD
18) SIGCONT 	19) SIGSTOP 	20) SIGTSTP 	21) SIGTTIN
22) SIGTTOU 	23) SIGURG 	24) SIGXCPU 	25) SIGXFSZ
26) SIGVTALRM 	27) SIGPROF 	28) SIGWINCH 	29) SIGIO 
30) SIGPWR

½Ã±×³ÎÀÇ °³¼ö´Â ¾ËÆÄ AXP ¸®´ª½º ½Ã½ºÅÛ°ú ´Ù¸¦ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼½ºµéÀº ´ëºÎºÐÀÇ ½Ã±×³Î µéÀ» ¹«½ÃÇÏ·Á¸é ¹«½ÃÇÒ ¼ö ÀÖÁö¸¸, ¿©±â¿¡´Â µÎ °³ÀÇ Áß¿äÇÑ ¿¹¿Ü°¡ ÀÖ´Ù: ÇÁ·Î¼¼½ºÀÇ ½Ç ÇàÀ» ÁߴܽÃÅ°´Â SIGSTOP ½Ã±×³Î°ú ÇÁ·Î¼¼½º¸¦ ³¡³»°Ô ÇÏ´Â SIGKILL ½Ã±×³ÎÀº ¹«½ÃÇÒ ¼ö ¾ø´Ù. ±×·¸±ä ÇÏÁö¸¸, ÇÁ·Î¼¼½º´Â ¿©·¯°¡ÁöÀÇ ½Ã±×³ÎÀ» ¾î¶»°Ô ó¸®ÇÒ Áö °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼½º´Â ½Ã±×³ÎÀ» ºí·°ÇÒ ¼ö ÀÖ°í, ºí·°ÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â ½º½º·Î ó¸®Çϰųª Ä¿³ÎÀÌ Ã³¸®Çϵµ·Ï ÇÏ´Â °Í Áß¿¡ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¸¸¾à Ä¿³Î¿¡°Ô 󸮸¦ ¸Ã±â´Â °æ¿ì¿¡´Â ½Ã±×³Î¿¡ ÇØ´çÇÏ´Â ±âº» µ¿ÀÛÀÌ ÃëÇØÁö°Ô µÈ´Ù. ¿¹¸¦ µé¾î¼­, ÇÁ·Î¼¼½º°¡ SIGFPE(ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»ê ¿¹¿Ü) ½Ã±×³ÎÀ» ¹ÞÀº °æ¿ìÀÇ ±âº» µ¿ÀÛÀº ÄÚ¾î ´ýÇÁ(core dump)¸¦ ÇÏ°í ÇÁ·Î¼¼½º¸¦ ³¡³»´Â °ÍÀ¸·Î µÇ¾î ÀÖ´Ù. ½Ã±×³Î¿¡´Â º»·¡ ¿ì¼±¼øÀ§°¡ ¾ø´Ù. ÇÑ ÇÁ·Î¼¼½º¿¡°Ô µ¿½Ã¿¡ µÎ °³ÀÇ ½Ã±× ³ÎÀÌ ¹ß»ýÇÏ´Â °æ¿ì, ÀÌ ½Ã±×³ÎµéÀÌ ÇÁ·Î¼¼½º¿¡ Àü´ÞµÇ´Â ¼ø¼­³ª 󸮵Ǵ ¼ø¼­´Â Á¤ÇØÁ® ÀÖÁö ¾Ê´Ù. ¶ÇÇÑ µ¿½Ã¿¡ °°Àº ½Ã±×³ÎÀÌ ¿©·¯¹ø ¹ß»ýÇÏ´Â °ÍÀ» ó¸®ÇÒ ¼ö ÀÖ´Â ¸ÞÄ¿´ÏÁòµµ ¾ø´Ù. µû¶ó¼­, ÇÁ·Î¼¼½º°¡ SINGCONT ½Ã±×³ÎÀ» ÇѹøÀ» ¹Þµç 42¹øÀ» ¹Þµç À̸¦ ±¸º°ÇÒ ¹æ¹ý ÀÌ ¾ø´Ù.

¸®´ª½º´Â ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ÀúÀåµÈ Á¤º¸¸¦ »ç¿ëÇؼ­ ½Ã±×³Î ±â´ÉÀ» ±¸ÇöÇÑ´Ù. Áö ¿øÇÒ ¼ö ÀÖ´Â ½Ã±×³ÎÀÇ °¹¼ö´Â ÇÁ·Î¼¼¼­ÀÇ ¿öµå(word) Å©±â¿¡ Á¦ÇÑÀ» ¹Þ´Â´Ù. 32ºñÆ® ¿öµå¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­´Â ÃÖ´ëÇÑ 32°³ÀÇ ½Ã±×³ÎÀ» Áö¿øÇÒ ¼ö ÀÖ°í, ¾ËÆÄ AXP¿Í °°ÀÌ 64ºñÆ® ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â ÃÖ´ë 64°³ÀÇ ½Ã±×³ÎÀ» Áö¿øÇÒ ¼ö ÀÖ´Ù. ÇöÀç ó¸® ´ë±âÁßÀÎ ½Ã±×³ÎµéÀº signal Ç׸ñ¿¡ ÀúÀåµÇ¸ç, ºí·°µÈ ½Ã±×³ÎµéÀÇ ¸¶½ºÅ©´Â blocked Ç׸ñ¿¡ ´ã±â °Ô µÈ´Ù. SIGSTOP°ú SIGKILLÀ» Á¦¿ÜÇÑ ´Ù¸¥ ¸ðµç ½Ã±×³ÎµéÀº ºí·°Å· ÇÒ ¼ö ÀÖ´Ù. ºí·°µÈ ½Ã±×³ÎÀÌ ¹ß»ýÇÒ °æ¿ì ±× ½Ã±×³ÎÀº ºí·°Å·À» ÇØÁ¦ÇÒ ¶§±îÁö ´ë±â »óÅ·Π³²¾Æ ÀÖ°Ô µÈ´Ù. ¸®´ª½º´Â ¶ÇÇÑ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¸ðµç ½Ã±×³ÎµéÀ» ÇÁ·Î¼¼½º°¡ ¾î¶»°Ô ó¸®Çϴ°¡¿¡ ´ëÇÑ Á¤º¸ ¸¦ °¡Áö°í Àִµ¥, ÀÌ Á¤º¸´Â ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ÀÖ´Â sigaction ÀڷᱸÁ¶ÀÇ ¹è ¿­¿¡ ÀúÀåµÈ´Ù. sigaction¿¡´Â ¿©·¯°¡Áö ´Ù¸¥ Á¤º¸µé°ú ÇÔ²², ½Ã±×³Î Çڵ鷯ÀÇ ÁÖ¼Ò, ¶Ç´Â ÇÁ·Î¼¼½º°¡ ÇØ´ç ½Ã±×³ÎÀ» ¹«½ÃÇÒ °ÍÀÎÁö ȤÀº Ä¿³ÎÀÌ ±× ½Ã±×³ÎÀ» ´ë½Å ó¸®ÇÏ°Ô ÇÒ °ÍÀÎ Áö¸¦ ³ªÅ¸³»´Â Ç÷¡±×°¡ µé¾î ÀÖ´Ù. ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛ ÄÝÀ» ÅëÇؼ­ ±âº» ½Ã±×³Î Çڵ鷯¸¦ ¹Ù²Ü ¼ö ÀÖÀ¸¸ç, ÀÌ ½Ã½ºÅÛ ÄÝÀº ÇØ´ç ½Ã±×³ÎÀÇ sigaction°ú blocked ¸¶½ºÅ©¸¦ º¯°æÇÑ ´Ù.

½Ã½ºÅÛ ³»ÀÇ ÇÁ·Î¼¼½ºµéÀÌ ¸ðµÎ ´Ù¸¥ ÇÁ·Î¼¼½º·Î ½Ã±×³ÎÀ» º¸³¾ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Ä¿³Î °ú °ü¸®ÀÚ´Â ¸ðµç ÇÁ·Î¼¼½º¿¡°Ô º¸³¾ ¼ö ÀÖÁö¸¸, ÀÏ¹Ý ÇÁ·Î¼¼½º´Â °°Àº uid¿Í gid¸¦ °®´Â ÇÁ ·Î¼¼½º, ¶Ç´Â °°Àº ÇÁ·Î¼¼½º ±×·ì1 ³»ÀÇ ÇÁ·Î¼¼½º¿¡°Ô¸¸ ½Ã±×³ÎÀ» º¸³¾ ¼ö ÀÖ´Ù. ½Ã±×³ÎÀº task_struct³» signal Ç׸ñÀÇ ÇØ´çÇÏ´Â ºñÆ®¸¦ ¼³Á¤ÇÏ¿© ¹ß»ýµÈ´Ù. ÇÁ·Î¼¼½º°¡ ±× ½Ã±× ³ÎÀ» ºí·°ÇÏÁö ¾Ê¾Ò°í, ÀÎÅÍ·´Æ® °¡´ÉÇÑ »óÅ¿¡¼­(Áï INTERRUPTIBLE »óÅ¿¡¼­) ´ë±âÁß¿¡ ÀÖ´Ù¸é, ÇÁ·Î¼¼½º´Â ÇöÀç »óŸ¦ ½ÇÇàÁß(RUNNING)À¸·Î ¹Ù²Ù°í ÀÚ½ÅÀ» ½ÇÇàÅ¥¿¡ ³ÖÀ½À¸·Î ½á ±ú¾î³ª°Ô µÈ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ½Ã½ºÅÛÀÌ ´ÙÀ½¹ø ½ºÄÉÁ층À» ¼öÇàÇÒ¶§, ½ºÄÉÁì·¯°¡ ±× ÇÁ ·Î¼¼½º¸¦ ½ÇÇàÇÒ È帷Π»ý°¢ÇÏ°Ô µÈ´Ù. ±âº» µ¿ÀÛÀ¸·ÎÀÇ ½Ã±×³Î 󸮸¸ÀÌ ÇÊ¿äÇÏ´Ù¸é ¸®´ª ½º´Â ½Ã±×³Î ó¸®À» ÃÖÀûÈ­ ½Ãų ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î SIGWINCH(X À©µµ¿ì°¡ Æ÷Ä¿½º¸¦ º¯°æ) °¡ ¹ß»ýÇÏ¿´°í ±âº» Çڵ鷯¸¦ »ç¿ëÇÒ °ÍÀ̶ó¸é, ÇÁ·Î¼¼½º°¡ µû·Î ¼öÇàÇÒ ÀÏÀº ¾ø°Ô µÇ´Â °Í ÀÌ´Ù.

½Ã±×³ÎÀº ¹ß»ýÇÏ´Â ¼ø°£ ¹Ù·Î ÇÁ·Î¼¼½º·Î Àü´ÞµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ±× ÇÁ·Î¼¼½º°¡ ´Ù½Ã ¼öÇàµÉ ¶§±îÁö ±â´Ù·Á¾ß ÇÑ´Ù. Áï ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛ ÄÝÀ» ¸¶Ä¡°í µ¹¾Æ¿Ã ¶§¸¶´Ù signal°ú blocked°¡ ¸Å¹ø °Ë»çµÇ´Âµ¥, À̶§ ºí·°µÇÁö ¾ÊÀº ½Ã±×³ÎÀÌ Á¸ÀçÇÏ´Â °æ¿ì ºñ·Î¼­ ÇÁ·Î¼¼½º ·Î Àü´ÞµÇ´Â °ÍÀÌ´Ù. ÀÌ ¹æ½ÄÀº »ó´çÈ÷ ½Å·Ú¼ºÀÌ ³·Àº ¹æ¹ýó·³ º¸ÀÌÁö¸¸, ½Ã½ºÅÛ ³»ÀÇ ÇÁ·Î ¼¼½ºµéÀº ¹«½¼ ¸ñÀû¿¡¼­µç(¿¹¸¦ µé¸é Å͹̳ο¡ ¹®ÀÚ¸¦ Âï±â À§Çؼ­) ½ÇÇà ½Ã°£ ´ëºÎºÐ¿¡ °É ÃÄ ½Ã½ºÅÛ ÄÝÀ» °è¼Ó ¼öÇàÇϹǷΠ±×·¸Áö´Â ¾Ê´Ù. ¿øÇÑ´Ù¸é ÇÁ·Î¼¼½º´Â ½Ã±×³Î ¹ß»ýÀ» ±â´Ù ¸®´Â °ÍÀ» ¼±ÅÃÇÒ ¼ö Àִµ¥, ÀÌ °æ¿ì ÀÎÅÍ·´Æ® Çã¿ë »óÅ¿¡¼­ ½Ã±×³ÎÀÌ Àü´ÞµÇ¾î ¿Ã ¶§±î Áö ÇÁ·Î¼¼½º´Â ¸ØÃç ¼­ÀÖ°Ô µÈ´Ù. ¸®´ª½º ½Ã±×³Î ó¸® ÄÚµå´Â ÇöÀç ºí·°µÇÁö ¾ÊÀº ½Ã±×³Î¿¡ ´ëÇؼ­ sigaction ÀڷᱸÁ¶¸¦ ÂüÁ¶ÇÑ´Ù.

½Ã±×³Î Çڵ鷯°¡ ±âº» Çڵ鷯·Î µÇ¾î ÀÖÀ¸¸é Ä¿³ÎÀÌ ±× 󸮸¦ ´ë½Å ¼öÇàÇÏ°Ô µÈ´Ù. SIGSTOP ½Ã±×³Î¿¡ ´ëÇÑ ±âº» Çڵ鷯´Â ÇöÀç ÇÁ·Î¼¼½ºÀÇ »óŸ¦ ÁßÁöµÊ(STOPPED)À¸·Î ¹Ù ²Ù°í, »õ·Î ½ÇÇàÇÒ ÇÁ·Î¼¼½º¸¦ ¼±ÅÃÇϱâ À§ÇØ ½ºÄÉÁì·¯¸¦ ½ÇÇàÇÑ´Ù. SIGFPE ½Ã±×³ÎÀ» ¹ÞÀ¸ ¸é Ä¿³ÎÀº ÇöÀç ÇÁ·Î¼¼½º¸¦ ÄÚ¾î ´ýÇÁÇÏ°í ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ÀÌ¿Í ´Þ¸® ÇÁ·Î¼¼½º°¡ Á÷ Á¢ ÀÚ½ÅÀÇ ½Ã±×³Î Çڵ鷯¸¦ ÁöÁ¤ÇßÀ» ¼öµµ ÀÖ´Ù. ÀÌ°ÍÀº ½Ã±×³ÎÀÌ ¹ß»ýÇÒ ¶§¸¶´Ù È£ÃâµÇ´Â °ÍÀ¸·Î, sigaction ÀڷᱸÁ¶°¡ ÀÌ ·çƾÀÇ ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Ù. ÀÌÁ¦ Ä¿³ÎÀº ¹Ýµå½Ã ÇÁ·Î¼¼ ½ºÀÇ ½Ã±×³Î Çڵ鷯¸¦ È£ÃâÇØ¾ß Çϴµ¥, ÀÌ°ÍÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁö´Â°¡´Â ÇÁ·Î¼¼¼­¿¡ µû¶ó ´Ù ¸£Áö¸¸, ÇÑ°¡Áö »ç½Ç, Áï ÇöÀç ÇÁ·Î¼¼½º´Â Ä¿³Î ¸ðµå¿¡¼­ ½ÇÇàÁßÀÌ¸ç °ð »ç¿ëÀÚ ¸ðµå¿¡¼­ Ä¿ ³Î ȤÀº ½Ã½ºÅÛ ·çƾÀ» ºÎ¸¥ ÇÁ·Î¼¼½º·Î µ¹¾Æ°¡·Á°í ÇÑ´Ù´Â Á¡¸¸Àº ¸ðµç CPUµéÀÌ ¿°µÎ¿¡ µÎ°í ´ëóÇÏ¿©¾ß ÇÏ´Â ¹®Á¦ÀÌ´Ù2. ÀÌ ¹®Á¦´Â ÇÁ·Î¼¼½ºÀÇ ½ºÅðú ·¹Áö½ºÅ͸¦ Á¶ÀÛÇÔÀ¸·Î½á ÇØ°á°¡´ÉÇÏ´Ù. ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î±×·¥ Ä«¿îÅ͸¦ ±× ½Ã±×³Î ó¸® ·çƾÀ¸·Î ¼³Á¤ÇÏ°í, Çڵ鷯·Î Àü´ÞÇÒ ÀÎÀÚ¸¦ ½ºÅà ÇÁ·¹ÀÓ¿¡ Ãß°¡Çϰųª ·¹Áö½ºÅÍ¿¡ ´ã¾Æ º¸³»´Â °ÍÀÌ´Ù. ÀÌÈÄ ÇÁ·Î¼¼½º°¡ ½ÇÇàÀ» Àç°³ÇÏ¸é ½Ã±×³Î Ã³¸® ·çƾÀº ¸¶Ä¡ Á¤»óÀûÀÎ ¹æ¹ýÀ¸·Î È£ÃâµÇ¾ú´ø °Í°°ÀÌ º¸ÀÌ°Ô µÈ ´Ù.

¸®´ª½º´Â POSIX ȣȯÀ̹ǷÎ, ÇÁ·Î¼¼½º´Â ƯÁ¤ ½Ã±×³Î ó¸® ·çƾÀÌ È£ÃâµÇ¾úÀ» ¶§ ¾î¶² ½Ã ±×³ÎÀ» ºí·°ÇÒ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÒ ÀÖ´Ù. ÀÌ°ÍÀº ÇÁ·Î¼¼½º ½Ã±×³Î Çڵ鷯°¡ ºÒ¸®´Â µ¿¾È blocked ¸¶½ºÅ©ÀÇ °ªÀ» ¹Ù²Ù°Ô µÊÀ» ¶æÇÑ´Ù. blocked ¸¶½ºÅ©´Â ½Ã±×³Î ó¸® ·çƾÀÌ Á¾·á µÉ ¶§ ¿ø·¡ °ªÀ¸·Î µ¹·Á ³õ¾Æ¾ß ÇÑ´Ù. ±×·¡¼­ ¸®´ª½º´Â Á¤¸®¿ë ·çƾÀ» Çϳª ´õ ºÒ·¯¼­, ½Ã±× ³ÎÀ» ¹ÞÀº ÇÁ·Î¼¼½ºÀÇ ÄÝ ½ºÅÿ¡ ÀúÀåÇسõÀº ¿ø·¡ÀÇ blocked ¸¶½ºÅ© °ªÀ» ²¨³»¾î º¹±¸ÇÏ µµ·Ï ÇÑ´Ù. ¶ÇÇÑ ¿©·¯ ½Ã±×³Î ó¸® ·çƾÀÌ °è¼Ó È£ÃâµÇ¾î¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§´Â ÀÌ ·çƾµé À» ½ºÅÃó·³ ½×¾Æ¼­, ÇÑ Çڵ鷯¸¦ ºüÁ®³ª¿À¸é ´ÙÀ½ Çڵ鷯°¡ È£ÃâµÇ°í, ¸¶Áö¸·À¸·Î Á¤¸®¿ë ·çƾÀÌ È£ÃâµÇµµ·Ï ½Ã±×³Î 󸮸¦ ÃÖÀûÈ­ÇÑ´Ù.


±×¸² 5.1 : ÆÄÀÌÇÁ

5.2 ÆÄÀÌÇÁ(Pipe)

ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¸®´ª½º ½©µéÀº ¸ðµÎ ¸®´ÙÀÌ·º¼Ç(redirection)À» Áö¿øÇÑ´Ù. ¿¹¸¦ µé¾î

$ ls | pr | lpr

À̶ó´Â ¸í·ÉÀº ls ¸í·ÉÀÌ Ãâ·ÂÇÏ´Â ÆÄÀÏ À̸§µéÀ» pr ¸í·ÉÀÇ Ç¥ÁØ ÀÔ·ÂÀ¸·Î º¸³»°í, pr ¸í·É Àº ÀÔ·ÂµÈ ³»¿ëÀ» ÆäÀÌÁö ´ÜÀ§·Î ³ª´«´Ù. pr ¸í·ÉÀÇ Ç¥ÁØ Ãâ·ÂÀ¸·Î ³ª¿Â °á°ú´Â ´Ù½Ã lpr ¸í ·ÉÀÇ Ç¥ÁØ ÀÔ·ÂÀ¸·Î º¸³»Á®¼­ ±âº» ÇÁ¸°ÅÍ·Î Ãâ·ÂµÈ´Ù. ÆÄÀÌÇÁ´Â À§ÀÇ ¿¹¿¡¼­Ã³·³ ÇÑ ÇÁ·Î ¼¼½ºÀÇ Ç¥ÁØ Ãâ·ÂÀ» ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ Ç¥ÁØ ÀÔ·ÂÀ¸·Î º¸³»ÁÖ´Â ´Ü¹æÇâ ¹ÙÀÌÆ® ½ºÆ®¸²ÀÌ´Ù. ÆÄÀÌÇÁ·Î ¿¬°áµÇ´Â ÇÁ·Î¼¼½ºµéÀº ÀÌ·± ¸®´ÙÀÌ·º¼ÇÀÌ ÀϾ°í ÀÖ´Ù´Â °ÍÀº ¾ËÁö ¸øÇϸç, º¸ Åë ¶§¿Í ¸¶Âù°¡Áö·Î µ¿ÀÛÇÑ´Ù. ¿©±â¼­ ÇÁ·Î¼¼½º°£¿¡ Àӽà ÆÄÀÌÇÁ¸¦ ¸¸µé¾î ¿¬°á½ÃÄÑÁÖ´Â °Í Àº ½©ÀÌ´Ù.

¸®´ª½º¿¡¼­ ÆÄÀÌÇÁ´Â Àӽ÷Π¸¸µé¾îÁø VFS inode¸¦ ¶È°°ÀÌ °¡¸®Å°´Â µÎ °³ÀÇ file Àڷᱸ Á¶¸¦ »ç¿ëÇؼ­ ±¸ÇöµÇ¸ç, ¿©±â¼­ VFS inode´Â ¸Þ¸ð¸®»óÀÇ ¹°¸®Àû ÆäÀÌÁö¸¦ °¡¸®Å°°Ô µÈ´Ù3. ±×¸² 5.1Àº °¢ file ÀڷᱸÁ¶°¡ °¢±â ´Ù¸¥ ÆÄÀÏ ¿¬»ê ·çƾ º¤Å͸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ °¡Áö °í ÀÖ´Â ¸ð½ÀÀ» º¸¿©ÁØ´Ù. ¿©±â¼­ ÇÑ file ÀڷᱸÁ¶´Â ÆÄÀÌÇÁ¿¡ ¾²´Â ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ¸¦, ´Ù¸¥ ÀڷᱸÁ¶´Â ÆÄÀÌÇÁ¿¡¼­ ÀоîµéÀÌ´Â ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áø´Ù. ÀÌ°ÍÀº º¸ÅëÀÇ ÆÄÀÏ¿¡ ÀÐ°í ¾²´Â ½Ã½ºÅÛ ÄÝÀÌ ¾Æ·¡ °èÃþÀÇ Â÷ÀÌ¿¡ °ü°è¾øÀÌ µ¿ÀÛÇϵµ·Ï ÇÑ´Ù4. ¾²´Â ÇÁ·Î ¼¼½º°¡ ÆÄÀÌÇÁ¿¡ ¾´ µ¥ÀÌÅÍ´Â °øÀ¯ µ¥ÀÌÅÍ ÆäÀÌÁö¿¡ º¹»çµÇ°í, Àд ÇÁ·Î¼¼½º°¡ ±× ÆÄÀÌÇÁ ·ÎºÎÅÍ ÀÐ¾î µéÀ϶§´Â °øÀ¯ µ¥ÀÌÅÍ ÆäÀÌÁö·ÎºÎÅÍ µ¥ÀÌÅÍ°¡ º¹»çµÇ°Ô µÈ´Ù. ¸®´ª½º´Â ÆÄÀÌÇÁ ¿¡ ´ëÇÑ Á¢±ÙÀ» µ¿±âÈ­ÇØ¾ß ÇÑ´Ù. ÆÄÀÌÇÁÀÇ Àд ÇÁ·Î¼¼½º¿Í ¾²´Â ÇÁ·Î¼¼½º°¡ ¹Ýµå½Ã Â÷·Ê ¸¦ Áöų ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÏ°í, ±×·¸°Ô Çϱâ À§ÇØ ¶ô(lock)°ú ´ë±âÅ¥(waiting queue), ½Ã±×³Î µî À» »ç¿ëÇÑ´Ù.

ÇÁ·Î¼¼½º°¡ ÆÄÀÌÇÁ¿¡ ¾²±â¸¦ ÇÒ ¶§´Â ¾²±â¸¦ Çϴ ǥÁØ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. À̵é ÇÔ¼öµé¿¡´Â ÆÄÀÏ ±â¼úÀÚ(file descriptor)¸¦ ³Ñ±â´Âµ¥, ÀÌ´Â ÇÁ·Î¼¼½º°¡ °¡Áø ¿©·¯°³ÀÇ file ÀÚ ·á±¸Á¶(ÀÌµé °¢°¢Àº ÇÁ·Î¼¼½º°¡ ¿­¾î ³õÀº ÆÄÀÏÀ» ³ªÅ¸³»¸ç, ÀÌ °æ¿ì¿¡´Â ¿­¾î ³õÀº ÆÄÀÌÇÁ ¸¦ ³ªÅ¸³½´Ù)¿¡ ´ëÇÑ À妽ºÀÌ´Ù5. ¸®´ª½º ½Ã½ºÅÛ ÄÝÀº ÀÌ ÆÄÀÌÇÁ¸¦ ³ªÅ¸³»´Â file Àڷᱸ Á¶¿¡¼­ °¡¸®Å°°í ÀÖ´Â ¾²±â ·çƾÀ» »ç¿ëÇÑ´Ù. ÀÌ ¾²±â ·çƾÀº ¾²±â ¿äûÀ» ó¸®Çϱâ À§ÇØ ÆÄÀÌÇÁ¸¦ ³ªÅ¸³»´Â VFS inode¿¡ ÀÖ´Â Á¤º¸µéÀ» ÀÌ¿ëÇÑ´Ù. ÆÄÀÌÇÁ¿¡ ¿äûÇÑ ¹ÙÀÌÆ®µéÀ» ¸ðµÎ ¾µ °ø°£ÀÌ ÀÖ°í, ÆÄÀÌÇÁ¸¦ Àд ÇÁ·Î¼¼½º°¡ ¶ôÀ» °É¾îµÎÁö ¾Ê¾Ò´Ù¸é, ¸®´ª½º´Â ¸ÕÀú ÆÄÀÌÇÁ ¿¡ ¶ôÀ» °É°í, ¾µ µ¥ÀÌÅÍ ¹ÙÀÌÆ®µéÀ» ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò°ø°£¿¡¼­ °øÀ¯ µ¥ÀÌÅÍ ÆäÀÌÁö·Î º¹»ç ÇÑ´Ù. ¸¸¾à Àд ÇÁ·Î¼¼½º°¡ ÆÄÀÌÇÁ¿¡ ¶ôÀ» °É¾îµÎ¾ú°Å³ª µ¥ÀÌÅ͸¦ ´ãÀ» ÃæºÐÇÑ °ø°£ÀÌ ¾ø ´Ù¸é, ÇöÀç ÇÁ·Î¼¼½º´Â ÇØ´ç ÆÄÀÌÇÁ inode¿¡ ÀÖ´Â ´ë±âÅ¥¿¡ µé¾î°¡ Àáµé°í, ½ÇÇàÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ¼±ÅÃÇϱâ À§ÇØ ½ºÄÉÁì·¯¸¦ È£ÃâÇÑ´Ù. Àáµç ÇÁ·Î¼¼½º´Â ÀÎÅÍ·´Æ® Çã¿ë »óÅ À̹ǷÎ, ½Ã±×³ÎÀ» ¹ÞÀ» ¼ö ÀÖÀ¸¸ç, Àд ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¾µ µ¥ÀÌÅ͸¦ ´ã±â¿¡ ÃæºÐÇÑ °ø°£ÀÌ »ý±â°Å³ª ÆÄÀÌÇÁÀÇ ¶ôÀ» Ç®¸®¸é ±ú¾î³ª°Ô µÈ´Ù. µ¥ÀÌÅ͸¦ ¾²°í ³ª¸é ÆÄÀÌÇÁÀÇ VFS inodeÀÇ ¶ôÀ» Ç®°í, inodeÀÇ ´ë±âÅ¥¿¡¼­ ±â´Ù¸®¸ç Àáµé¾î ÀÖ´Â Àд ÇÁ·Î¼¼½º¸¦ ±ú¿ì°Ô µÈ´Ù.

ÆÄÀÌÇÁ¿¡¼­ µ¥ÀÌÅ͸¦ Àд °úÁ¤Àº ÆÄÀÌÇÁ¿¡ ¾²´Â °úÁ¤°ú ¸Å¿ì ºñ½ÁÇÏ´Ù. ÇÁ·Î¼¼½ºµéÀº ºí·° Å·À» ÇÏÁö ¾Ê°í ÀÐÀ» ¼ö Àִµ¥ (ÀÌ´Â ÆÄÀÏÀ̳ª ÆÄÀÌÇÁ¸¦ ¿­ ¶§ ¾î¶² ¸ðµå¸¦ »ç¿ëÇÏ¿´´À³Ä ¿¡ µû¶ó ´Ù¸£´Ù6), ÀÌ °æ¿ì ÀÐÀ» µ¥ÀÌÅÍ°¡ ¾ø°Å³ª ÆÄÀÌÇÁ¿¡ ¶ôÀÌ °É·ÁÀÖÀ¸¸é ¿¡·¯°¡ µ¹¾Æ¿Â ´Ù. ÀÌ´Â ÇÁ·Î¼¼½º°¡ ÀáµéÁö ¾Ê°í ½ÇÇàÀ» °è¼ÓÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ºí·°Å· ¸ðµå¶ó¸é ÆÄÀÌÇÁ inodeÀÇ ´ë±âÅ¥¿¡¼­ ¾²±â ÇÁ·Î¼¼½º°¡ ³¡³ª±â¸¦ ±â´Ù·Á¾ß ÇÑ´Ù. ¾çÂÊ ÇÁ·Î¼¼½º°¡ ÆÄÀÌÇÁ¸¦ Åë ÇÑ ÀÛ¾÷À» Á¾·áÇϸé, ÆÄÀÌÇÁ inode´Â °øÀ¯ µ¥ÀÌÅÍ ÆäÀÌÁö¿Í ÇÔ²² Æó±âµÈ´Ù.

¸®´ª½º´Â ÁöÁ¤ ÆÄÀÌÇÁ(named pipe)µµ Áö¿øÇÑ´Ù. ÁöÁ¤ ÆÄÀÌÇÁ´Â FIFO¶ó°íµµ ºÒ¸®´Âµ¥ ÀÌ´Â ÆÄ ÀÌÇÁ°¡ ¸ÕÀú µé¾î¿Â °ÍÀÌ ¸ÕÀú ³ª°¡´Â(First In First Out, FIFO) ¿øÄ¢¿¡ µû¶ó µ¿ÀÛÇϱ⠶§¹®ÀÌ ´Ù. ÆÄÀÌÇÁ¿¡ ¸ÕÀú ¾´ µ¥ÀÌÅÍ´Â ÆÄÀÌÇÁ¿¡¼­ ÀÐÀ» ¶§ ¸ÕÀú ³ª¿Â´Ù. ÆÄÀÌÇÁ¿Í ´Þ¸® FIFO´Â ÀÓ ½ÃÀûÀ¸·Î »ý¼ºµÈ °ÍÀÌ ¾Æ´Ï¶ó ÆÄÀÏ ½Ã½ºÅÛ¿¡ ½ÇÀç Á¸ÀçÇÏ´Â °ÍÀ̸ç, mkfifo ¸í·ÉÀ¸·Î »ý¼º ÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼½º´Â ÇØ´çÇÏ´Â Á¢±Ù ±ÇÇÑÀ» °¡Áö°í ÀÖ´Ù¸é FIFO¸¦ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. FIFO¸¦ ¿©´Â ¹æ¹ýÀº ÆÄÀÌÇÁ¿Í´Â Á¶±Ý ´Ù¸£´Ù. ÆÄÀÌÇÁ(µÎ°³ÀÇ file ÀڷᱸÁ¶¿Í À̵éÀÌ °¡Áø VFS inode, °øÀ¯ µ¥ÀÌÅÍ ÆäÀÌÁö)´Â Çѹø¿¡ ¸¸µé¾îÁö´Âµ¥ ¹ÝÇØ, FIFO´Â ÀÌ¹Ì Á¸ÀçÇÏ´Â °ÍÀ̸ç, »ç¿ëÀÚ¿¡ ÀÇÇØ ¿­°í ´ÝÇôÁö´Â °ÍÀÌ´Ù7. ¸®´ª½º´Â FIFO¿¡ ¾²´Â ÇÁ·Î¼¼½º°¡ ¾øÀ» ¶§ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ À̸¦ Àбâ À§ÇØ ¿­·Á°í ÇÏ´Â °ÍÀ̳ª, FIFO¿¡ ¾²´Â ÇÁ·Î¼¼½º°¡ FIFO¿¡ ¾²±â ¸¦ Çϱâ Àü¿¡ Àд ÇÁ·Î¼¼½º°¡ ÀÐÀ¸·Á°í ÇÏ´Â °Í ¸ðµÎ ó¸®ÇØ¾ß ÇÑ´Ù. À̸¦ Á¦¿ÜÇϸé, FIFO ´Â °ÅÀÇ ¿ÏÀüÈ÷ ÆÄÀÌÇÁ¿Í ¶È°°Àº ¹æ¹ýÀ¸·Î Ãë±ÞµÇ¸ç, °°Àº ÀڷᱸÁ¶¿Í ¿¬»êÀ» »ç¿ëÇÑ´Ù8.


5.3 ¼ÒÄÏ(Socket)9

REVIEW NOTE : ³×Æ®¿öÅ© ÀåÀ» ¾´ ´ÙÀ½¿¡ Ãß°¡ÇÑ´Ù.


5.3.1. ½Ã½ºÅÛ V IPC ¸ÞÄ¿´ÏÁò

¸®´ª½º´Â À¯´Ð½º System V (1983)¿¡¼­ óÀ½ µîÀåÇÑ ¼¼°¡Áö Á¾·ùÀÇ ÇÁ·Î¼¼½º°£ Åë½Å ¹æ¹ýÀ» Á¦°øÇÑ´Ù. À̵éÀº ¸Þ½ÃÁö Å¥(message queue)¿Í ¼¼¸¶Æ÷¾î(semaphore), ±×¸®°í °øÀ¯ ¸Þ¸ð¸® (shared memory)ÀÌ´Ù. ÀÌµé ½Ã½ºÅÛ V IPC ¹æ¹ýµéÀº ¸ðµÎ ¶È°°Àº ÀÎÁõ ¹æ¹ýÀ» °øÀ¯ÇÑ´Ù. ÇÁ·Î ¼¼½º´Â Ä¿³Î¿¡ ½Ã½ºÅÛ ÄÝ·Î À̵é ÀÚ¿øÀ» °¡¸®Å°´Â À¯ÀÏÇÑ ÂüÁ¶ ½Äº°ÀÚ(reference identifier)¸¦ Àü´ÞÇÔÀ¸·Î½á¸¸ À̵鿡 Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÌµé ½Ã½ºÅÛ V IPC °´Ã¼µé¿¡ ´ëÇÑ Á¢±ÙÀº Á¢±Ù ±Ç ÇÑ(access permission)À» °¡Áö°í °Ë»çÇϴµ¥, ÆÄÀÏ¿¡ ´ëÇÑ Á¢±ÙÀ» °Ë»çÇÏ´Â °Í°ú ¸¹ÀÌ ºñ½ÁÇÏ ´Ù. ½Ã½ºÅÛ V IPC °´Ã¼¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀº ½Ã½ºÅÛ ÄÝÀ» ÅëÇÏ¿© °´Ã¼ÀÇ »ý¼ºÀÚ¿¡ ÀÇÇØ ÁöÁ¤ µÈ´Ù. °¢ Åë½Å ¹æ¹ýµéÀº ÂüÁ¶ ½Äº°ÀÚ¸¦ ÀÚ¿ø Å×ÀÌºí¿¡ ´ëÇÑ À妽ºÃ³·³ »ç¿ëÇϴµ¥, ÂüÁ¶ ½Ä º°ÀÚ´Â ¸»±×´ë·Î À妽ºÀÎ °ÍÀº ¾Æ´Ï°í, À妽º¸¦ ¸¸µé±â À§Çؼ­´Â ¾à°£ÀÇ °è»êÀÌ ÇÊ¿äÇÏ´Ù.

½Ã½ºÅÛ¿¡ ÀÖ´Â ½Ã½ºÅÛ V IPC °´Ã¼¸¦ ³ªÅ¸³»´Â ¸®´ª½º ÀڷᱸÁ¶´Â ¸ðµÎ, ÇÁ·Î¼¼½ºÀÇ ¼ÒÀ¯ÀÚ ¿Í »ý¼ºÀÚÀÇ uid, gid¿Í ÀÌ °´Ã¼¿¡ ´ëÇÑ Á¢±Ù ¸ðµå(¼ÒÀ¯ÀÚ, ±×·ì, ±×¹Û¿¡ ´ëÇÑ)¿Í IPC °´Ã¼ÀÇ Å°¸¦ °¡Áø ipc_permÀ̶ó´Â ÀڷᱸÁ¶¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. Å°´Â ½Ã½ºÅÛ V IPC °´Ã¼ÀÇ ÂüÁ¶ ½Ä º°ÀÚ¸¦ ã´Â ÇÑ ¹æ¹ýÀ¸·Î ¾²ÀδÙ. ¸ðµÎ µÎ Á¾·ùÀÇ Å°¸¦ Áö¿øÇϴµ¥, °ø¿ë(public)¿Í °³Àοë (private)ÀÌ ±×°ÍÀÌ´Ù. ¸¸¾à Å°°¡ °ø¿ë¶ó¸é ½Ã½ºÅÛ¿¡ ÀÖ´Â ¾î¶² ÇÁ·Î¼¼½ºµçÁö ±ÇÇÑ °Ë»ç¸¦ Åë °úÇÑ´Ù¸é ½Ã½ºÅÛ V IPC °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶ ½Äº°ÀÚ¸¦ ãÀ» ¼ö ÀÖ´Ù10. ½Ã½ºÅÛ V IPC °´Ã¼´Â Å° ·Î ÂüÁ¶ÇÒ ¼ö ¾øÀ¸¸ç, À̵鿡 ´ëÇÑ ÂüÁ¶ ½Äº°Àڷθ¸ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.


±×¸² 5.2 : System V IPC ¸Þ½ÃÁö Å¥

5.3.2 ¸Þ½ÃÁö Å¥(Message Queue)

¸Þ½ÃÁö Å¥´Â Çϳª ÀÌ»óÀÇ ÇÁ·Î¼¼½º°¡ ¸Þ½ÃÁö¸¦ ¾µ ¼ö ÀÖ°í, À̸¦ Çϳª ÀÌ»óÀÇ ÇÁ·Î¼¼½º°¡ ÀÐÀ» ¼ö ÀÖÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¸®´ª½º´Â ¸Þ½ÃÁö Å¥ÀÇ ¸®½ºÆ®¸¦ msgque º¤ÅÍ·Î °ü¸®ÇÑ´Ù. msgqueÀÇ °¢ ¿ø¼Ò´Â ¸Þ½ÃÁö Å¥¿¡ ´ëÇÑ ¸ðµç °ÍÀ» ±â¼úÇÏ´Â msqid_ds ÀڷᱸÁ¶¸¦ °¡¸®Å² ´Ù. ¸Þ½ÃÁö Å¥¸¦ Çϳª »ý¼ºÇϸé msqid_ds ÀڷᱸÁ¶¸¦ ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡¼­ ÇÒ´ç¹Þ¾Æ ÀÌ º¤ ÅÍ¿¡ »ðÀÔÇÑ´Ù.

°¢ msqid_ds ÀڷᱸÁ¶´Â ipc_perm ÀڷᱸÁ¶¿Í, ÀÌ Å¥¿¡ µé¾î¿Â ¸Þ½ÃÁö¿¡ ´ëÇÑ Æ÷ÀÎÅ͵é À» °¡Áö°í ÀÖ´Ù. Ãß°¡·Î, ¸®´ª½º´Â Å¥¿¡ ¸¶Áö¸·À¸·Î ¾´ ½Ã°£°°Àº Å¥ ¼öÁ¤ ½Ã°£µµ À¯ÁöÇÑ´Ù. msqid_ds´Â µÎ °³ÀÇ ´ë±âÅ¥µµ °¡Áö°í ÀÖ´Ù : Çϳª´Â Å¥¿¡ ¾²·Á´Â ÇÁ·Î¼¼½º¸¦ À§ÇØ, Çϳª´Â Å¥¿¡¼­ ÀÐÀ»·Á´Â ÇÁ·Î¼¼½º¸¦ À§Çؼ­´Ù.

ÇÁ·Î¼¼½º°¡ Å¥¿¡ ¸Þ½ÃÁö¸¦ ¾²·Á°í ÇÒ ¶§¸¶´Ù, È¿·Â »ç¿ëÀÚ ½Äº°ÀÚ(effective user identifier)¿Í È¿·Â ±×·ì ½Äº°ÀÚ(effective group identifier)¸¦ Å¥ÀÇ ipc_perm ÀڷᱸÁ¶¿¡ ÀÖ´Â ¸ðµå¿Í ºñ±³ÇÑ ´Ù. ±×·¡¼­ ÇÁ·Î¼¼½º°¡ Å¥¿¡ ¾µ ¼ö ÀÖ´Ù¸é ¸Þ½ÃÁö´Â ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò°ø°£¿¡¼­ msg Àڷᱸ Á¶·Î º¹»çµÇ°í ¸Þ½ÃÁö Å¥ÀÇ ¸¶Áö¸·¿¡ ³õÀδÙ. °¢ ¸Þ½ÃÁö¿¡´Â °°ÀÌ Çùµ¿ÇÏ´Â ÇÁ·Î¼¼½º°£¿¡ ¼­·Î ¾à¼ÓÇÑ Å¸ÀÔÀÎ, ÀÀ¿ëÇÁ·Î±×·¥ ÁöÁ¤ ŸÀÔÀ» ²¿¸®Ç¥·Î ´Ü´Ù. ¸®´ª½º´Â ¾µ ¼ö ÀÖ´Â ¸Þ½ÃÁö ÀÇ °³¼ö¿Í ±æÀ̸¦ Á¦ÇÑÇÏ°í ÀÖÀ¸¹Ç·Î ¸Þ½ÃÁö¸¦ ¾µ °ø°£ÀÌ ¾øÀ» ¼öµµ ÀÖ´Ù. ÀÌ·± °æ¿ì ÇÁ·Î ¼¼½º´Â ¸Þ½ÃÁö Å¥ÀÇ ¾²±â ´ë±âÅ¥(msqid_dsÀÇ *wwait Ç׸ñ)¿¡ Ãß°¡µÇ°í ½ÇÇàÇÒ »õ·Î¿î ÇÁ ·Î¼¼½º¸¦ ¼±ÅÃÇϱâ À§ÇØ ½ºÄÉÁì·¯¸¦ È£ÃâÇÑ´Ù. ÇÁ·Î¼¼½º´Â ¸Þ½ÃÁö Å¥¿¡¼­ Çϳª ÀÌ»óÀÇ ¸Þ½Ã Áö°¡ ÀÐÇûÀ» ¶§ ±ú¾î³ª°Ô µÈ´Ù.

Å¥¿¡¼­ Àд °ÍÀº ºñ½ÁÇÑ °úÁ¤À» °ÅÄ£´Ù. ¸¶Âù°¡Áö·Î ÇÁ·Î¼¼½º°¡ °¡Áø Å¥¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑ À» °Ë»çÇÑ´Ù. Àд ÇÁ·Î¼¼½º´Â ŸÀÔ¿¡ °ü°è¾øÀÌ Å¥¿¡ Àִ ù¹ø° ¸Þ½ÃÁö¸¦ °¡Á®¿Ã Áö, ¶Ç´Â ƯÁ¤ÇÑ Å¸ÀÔÀ» °¡Áø ¸Þ½ÃÁö¸¦ ¼±ÅÃÇÒ Áö °í¸¦ ¼ö ÀÖ´Ù. ÀÌ ±âÁØ¿¡ ¸Â´Â ¸Þ½ÃÁö°¡ ¾ø´Ù¸é ÀÐ À¸·Á´Â ÇÁ·Î¼¼½º´Â ¸Þ½ÃÁö Å¥ÀÇ Àб⠴ë±âÅ¥(msgq_idÀÇ *rwait Ç׸ñ)¿¡ Ãß°¡µÇ°í, ½ºÄÉÁì ·¯°¡ ½ÇÇàµÈ´Ù. Å¥¿¡ »õ·Î¿î ¸Þ½ÃÁö¸¦ ¾²°Ô µÇ¸é ÀÌ ÇÁ·Î¼¼½º´Â ±ú¾î³ª ´Ù½Ã ½ÇÇàÇÒ ¼ö ÀÖ °Ô µÈ´Ù.


±×¸² 5.3 : System V IPC ¼¼¸¶Æ÷¾î

5.3.3 ¼¼¸¶Æ÷¾î(Semaphore)

¼¼¸¶Æ÷¾îÀÇ °¡Àå ´Ü¼øÇÑ ÇüÅ´ ¸Þ¸ð¸®ÀÇ ÇÑ À§Ä¡¿¡ ÀÖ´Â º¯¼ö·Î, ±× °ªÀ» Çϳª ÀÌ»óÀÇ ÇÁ ·Î¼¼½º°¡ °Ë»çÇÏ°í ¼³Á¤(test and set)ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ °Ë»ç ¹× ¼³Á¤(test and set) ¿¬»êÀº, °¢ ÇÁ·Î¼¼½º¿¡ À־, Áß´ÜµÉ ¼ö ¾ø´Â, Áï ¿øÀÚ¼ºÀ» °¡Áø °ÍÀÌ´Ù. Áï Çѹø ½ÃÀÛµÇ¸é ¾Æ¹«°Í µµ À̸¦ Áß´ÜÇÒ ¼ö ¾ø´Ù11. ÀÌ °Ë»ç ¹× ¼³Á¤ ¿¬»êÀÇ °á°ú´Â ¼¼¸¶Æ÷¾îÀÇ ÇöÀç°ª¿¡ ´õÇÏ¿© °ª À» ¼³Á¤ÇÏ´Â °ÍÀ̸ç, ÀÌ °ªÀº ¾ç¼öÀÏ ¼öµµ À½¼öÀÏ ¼öµµ ÀÖ´Ù. °Ë»ç ¹× ¼³Á¤ ¿¬»êÀÇ °á°ú¿¡ µû¶ó¼­ ÇÑ ÇÁ·Î¼¼½º´Â ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼¼¸¶Æ÷¾îÀÇ °ªÀ» ¹Ù²Ü ¶§±îÁö ±â´Ù¸®¸ç Àáµé¾î¾ß ÇÒ ¼öµµ ÀÖ´Ù. ¼¼¸¶Æ÷¾î´Â µ¿½Ã¿¡ ÇÑ ÇÁ·Î¼¼½º¸¸ÀÌ ½ÇÇàÇØ¾ß ÇÏ´Â Áß¿äÇÑ Äڵ尡 ÀÖ´Â, ÀÓ°èÁö ¿ª(critical region)À» ±¸ÇöÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¿©·¯°³ÀÇ Çùµ¿ÇÏ´Â ÇÁ·Î¼¼½º°¡ ÇϳªÀÇ µ¥ÀÌÅÍ ÆÄÀÏ¿¡¼­ ·¹Äڵ带 Àаųª ¾´´Ù°í ÇÏÀÚ. ÀÌ ¶§ ÆÄÀÏ¿¡ ´ëÇÑ Á¢±ÙÀÌ ¿ÏÀüÈ÷ Á¶È­·Ó°Ô ÀÌ·ç¾îÁö±æ ¹Ù¶ö °ÍÀÌ´Ù. ¿©±â¼­ ¼¼¸¶Æ÷¾î¸¦ »ç¿ë ÇÒ ¼ö Àִµ¥, ¸ÕÀú ¼¼¸¶Æ÷¾îÀÇ ÃʱⰪÀ» 1·Î ÇÏ°í, ÆÄÀÏ ¿¬»êÀ» ÇÏ´Â ÄÚµåÀÇ ÁÖÀ§¿¡ µÎ°³ÀÇ ¼¼¸¶Æ÷¾î ¿¬»êÀ» µÎ¾î¼­, ù¹ø° °ÍÀº ¼¼¸¶Æ÷¾îÀÇ °ªÀ» °Ë»çÇÏ°í °ªÀ» °¨¼Ò½ÃÅ°°í, ´ÙÀ½ °Í Àº °ªÀ» °Ë»çÇÏ°í Áõ°¡½ÃÅ°°Ô ÇÒ ¼ö ÀÖ´Ù. ÆÄÀÏ¿¡ Á¢±ÙÇÏ·Á´Â ù¹ø° ÇÁ·Î¼¼½º´Â ¼¼¸¶Æ÷¾î ÀÇ °ªÀ» °¨¼Ò½ÃÅ°·Á°í ÇÏ°í, ÀÌ°ÍÀÌ ¼º°øÇÏ¿© ¼¼¸¶Æ÷¾îÀÇ °ªÀº 0ÀÌ µÈ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ÀÌ Á¦ °è¼Ó ÁøÇàÇÏ¿© µ¥ÀÌÅÍ ÆÄÀÏÀ» »ç¿ëÇÏÁö¸¸, À̸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â ´Ù¸¥ ÇÁ·Î¼¼½º´Â ¼¼¸¶ Æ÷¾îÀÇ °ªÀ» °¨¼Ò½ÃÅ°·Á°í Çߴµ¥ °á°ú°¡ -1ÀÌ µÇ¹Ç·Î ½ÇÆÐÇÑ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ù¹ø° ÇÁ ·Î¼¼½º°¡ µ¥ÀÌÅÍ ÆÄÀÏ ÀÛ¾÷À» ³¡¸¶Ä¥ ¶§°¡Áö Áß´ÜµÉ °ÍÀÌ´Ù. ù¹ø° ÇÁ·Î¼¼½º°¡ µ¥ÀÌÅÍ ÆÄ ÀÏ ÀÛ¾÷À» ¸¶Ä¡¸é ¼¼ÆÄÆ÷¾îÀÇ °ªÀ» ´Ù½Ã Áõ°¡½ÃÄÑ 1·Î ¸¸µç´Ù. ÀÌÁ¦ ±â´Ù¸®´Â ÇÁ·Î¼¼½º´Â ±ú¾î³ª¼­ À̹ø¿¡´Â ¼¼¸¶Æ÷¾î¸¦ °¨¼Ò½ÃÅ°·Á´Â ½Ãµµ°¡ ¼º°øÇÏ°Ô µÈ´Ù12.

½Ã½ºÅÛ V IPC ¼¼¸¶Æ÷¾î °´Ã¼µéÀº °¢°¢ ¼¼¸¶Æ÷¾îÀÇ ¹è¿­À» ³ªÅ¸³»°í, ¸®´ª½º´Â À̸¦ ³ªÅ¸³» ±â À§ÇØ semid_ds ÀڷᱸÁ¶¸¦ »ç¿ëÇÑ´Ù. semary´Â ½Ã½ºÅÛ¿¡ ÀÖ´Â ¸ðµç semid_ds Àڷᱸ Á¶¸¦ °¡¸®Å°°í ÀÖ´Â, Æ÷ÀÎÅÍÀÇ º¤ÅÍÀÌ´Ù. semid_ds ÀڷᱸÁ¶¿¡´Â sem_nsems °¹¼ö¸¸Å­ÀÇ ¼¼¸¶Æ÷¾î ¹è¿­ÀÌ ÀÖÀ¸¸ç, °¢°¢Àº sem ÀڷᱸÁ¶·Î ±â¼úµÈ´Ù. ÀÌ ¼¼¸¶Æ÷¾î ¹è¿­Àº sem_base ÀÌ °¡¸®Å°°í ÀÖ´Ù13. ½Ã½ºÅÛ V IPC ¼¼¸¶Æ÷¾î °´Ã¼ÀÇ ¼¼¸¶Æ÷¾î ¹è¿­À» °ü¸®ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» °¡Áø ¸ðµç ÇÁ·Î¼¼½ºµéÀº À̵éÀ» ´Ù·ç´Â ½Ã½ºÅÛ ÄÝÀ» ºÎ¸¦ ¼ö ÀÖ´Ù. ½Ã½ºÅÛ ÄÝÀº Çѹø¿¡ ¿© ·¯°³ÀÇ ¿¬»êÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç, °¢ ¿¬»êÀº ¼¼°¡Áö ÀÔ·Â - ¼¼¸¶Æ÷¾î À妽º, ¿¬»ê °ª, Ç÷¡ ±×µéÀÇ ¼¼Æ® - À¸·Î ³ªÅ¸³»Áø´Ù14. ¼¼¸¶Æ÷¾î À妽º´Â ¼¼¸¶Æ÷¾î ¹è¿­¿¡¼­ÀÇ À妽ºÀ̸ç, ¿¬ »ê °ªÀº ¼¼¸¶Æ÷¾îÀÇ ÇöÀç °ª¿¡ Ãß°¡µÉ ¼ýÀÚ °ªÀÌ´Ù. ¸ÕÀú ¸®´ª½º´Â ¸ðµç ¿¬»êÀÌ ¼º°øÇÒ ¼ö ÀÖ´ÂÁö Å×½ºÆ®ÇÑ´Ù. ¿¬»ê °ªÀ» ¼¼¸¶Æ÷¾îÀÇ ÇöÀç °ª¿¡ ´õÇÑ °ªÀÌ 0 ÀÌ»óÀ̰ųª, ¿¬»ê °ª°ú ¼¼ ¸¶Æ÷¾îÀÇ ÇöÀç °ªÀÌ ¸ðµÎ 0ÀÏ ¶§, ÀÌ ¿¬»êÀº ¼º°øÇÏ°Ô µÈ´Ù. ¸¸¾à ¼¼¸¶Æ÷¾î ¿¬»êÀÇ Çϳª¶óµµ ½ÇÆÐÇÑ´Ù¸é ¸®´ª½º´Â ÇÁ·Î¼¼½º¸¦ Áß´ÜÇÒ ¼ö Àִµ¥, ÀÌ´Â ½Ã½ºÅÛ ÄÝÀ» ºÎ¸¦ ¶§ Ç÷¡±×¿¡ ºí ·°Å· ¸ðµå¸¦ »ç¿ëÇÏÁö ¾ÊÀ»°Å¶ó°í ÁöÁ¤ÇÏÁö ¾ÊÀº °æ¿ìÀÌ´Ù. ÇÁ·Î¼¼½º°¡ ÁߴܵǾî¾ß ÇÑ´Ù¸é ¸®´ª½º´Â ¼öÇàÇØ¾ß ÇÒ ¼¼¸¶Æ÷¾î ¿¬»êÀÇ »óŸ¦ ÀúÀåÇÏ°í, ÇöÀç ÇÁ·Î¼¼½º¸¦ ´ë±âÅ¥¿¡ ³Ö´Â´Ù. ÀÌ ÀÛ¾÷Àº sem_queue ÀڷᱸÁ¶¸¦ ½ºÅÿ¡ ¸¸µé¾î ÀÌ°ÍÀÇ ³»¿ëÀ» ä¿òÀ¸·Î½á ÀÌ·ç¾îÁø´Ù15. »õ sem_queue ÀڷᱸÁ¶´Â ¼¼¸¶Æ÷¾î °´Ã¼ÀÇ ´ë±â Å¥ÀÇ ³¡¿¡ ³õ¿©Áø´Ù (¿©±â¼­ sem_pending°ú sem_pending_last Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù). ÇöÀç ÇÁ·Î¼¼½º´Â sem_queue ÀڷᱸÁ¶¿¡ ÀÖ´Â ´ë±âÅ¥(sleeper Ç׸ñ)¿¡ ³õ¿©Áö°í, ½ÇÇàÇÒ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ °í¸£±â À§ÇØ ½ºÄÉÁì·¯°¡ È£ÃâµÈ´Ù.

¸¸¾à ¸ðµç ¼¼¸¶Æ÷¾î ¿¬»êÀÌ ¼º°øÇÏ¿© ÇÁ·Î¼¼½º°¡ Áß´ÜµÉ ÇÊ¿ä°¡ ¾ø´Ù¸é, ¸®´ª½º´Â °è¼Ó Áø ÇàÇÏ¿© ¼¼¸¶Æ÷¾î ¹è¿­ÀÇ ¿Ã¹Ù¸¥ ¸â¹ö¿¡°Ô ¿¬»êÀ» Àû¿ëÇÑ´Ù. ¸®´ª½º´Â ÀÌÁ¦ ´ë±âÅ¥¿¡¼­ ±â´Ù ¸®¸ç ÁߴܵǾî ÀÖ´Â ÇÁ·Î¼¼½ºµéÀÌ ÀÌ ¼¼¸¶Æ÷¾î ¿¬»ê¿¡ Àû¿ëµÉ ¼ö ÀÖ´ÂÁö °Ë»çÇØ¾ß ÇÑ´Ù. ¸® ´ª½º´Â ¿¬»ê ¹Ì°áÅ¥(sem_pending)ÀÇ °¢ ¸â¹ö¸¦ Â÷·Ê·Î »ìÆ캸°í, À̹ø¿£ ¼¼¸¶Æ÷¾î ¿¬»êÀÌ ¼º°øÇÒ ¼ö ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇÑ Å×½ºÆ®¸¦ ÇÑ´Ù. ¸¸¾à ¼º°øÇÑ´Ù¸é ¿¬»ê ¹Ì°á ¸®½ºÆ®¿¡¼­ sem_queue ÀڷᱸÁ¶¸¦ Á¦°ÅÇÏ°í ¼¼¸¶Æ÷¾î ¹è¿­¿¡ ±× ¼¼¸¶Æ÷¾î ¿¬»êÀ» Àû¿ëÇÑ´Ù. ¸®´ª½º´Â Àáµç ÇÁ·Î¼¼½º¸¦ ±ú¿ö ´ÙÀ½¹ø ½ºÄÉÁì·¯°¡ ½ÇÇàµÉ ¶§¿¡´Â ´Ù½Ã ½ÃÀÛÇÒ ¼ö ÀÖµµ·Ï ¸¸µç´Ù. ¸® ´ª½º´Â ¹Ì°á ¸®½ºÆ®¸¦ óÀ½ºÎÅÍ ½ÃÀÛÇÏ¿© ´õÀÌ»ó ¼¼¸¶Æ÷¾î ¿¬»êÀ» Àû¿ëÇÒ ¼ö ¾ø°í, ±ú¿ï ÇÁ ·Î¼¼½º°¡ ¾øÀ» ¶§±îÁö °è¼Ó »ìÆ캻´Ù.

¼¼¸¶Æ÷¾î¿¡´Â ÇÑ°¡Áö ¹®Á¦°¡ Àִµ¥ µ¥µå¶ô(deadlock)ÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. ÀÌ´Â ÇÑ ÇÁ·Î¼¼½º°¡ ÀÓ°èÁö¿ª¿¡ µé¾î°¡¸é¼­ ¼¼¸¶Æ÷¾îÀÇ °ªÀ» ¹Ù²Ù¾ú´Âµ¥ ÇÁ·Î¼¼½º°¡ À߸øµÇ°Å³ª °­Á¦·Î Á¾·áµÇ ¾î¼­ ÀÌ ÀÓ°èÁö¿ªÀ» ºüÁ®³ª°¡Áö ¸øÇÑ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù16. ¸®´ª½º´Â ÀÌ·± ¹®Á¦¸¦ ¼¼¸¶Æ÷¾î ¹è ¿­¿¡ ´ëÇÑ Á¶Á¤ ¸®½ºÆ®¸¦ °ü¸®ÇÔÀ¸·Î½á ¸·´Â´Ù. ÀÌ °³³äÀº ÀÌ·± Á¶Á¤À» Àû¿ëÇÏ¸é ¼¼¸¶Æ÷¾î °¡ ±× ÇÁ·Î¼¼½º°¡ ¼¼¸¶Æ÷¾î ¿¬»êÀ» ¼öÇàÇϱâ ÀÌÀüÀÇ »óÅ·ΠµÇµ¹¾Æ°¡°Ô ÇÏ´Â °ÍÀÌ´Ù. Á¶Á¤ ¿¡ ´ëÇÑ °ÍÀº sem_undo ÀڷᱸÁ¶¿¡ º¸°üµÇ°í, À̵éÀº semid_ds ÀڷᱸÁ¶¿Í ¼¼¸¶Æ÷¾î ¹è ¿­À» »ç¿ëÇÏ´Â ÇÁ·Î¼¼½ºÀÇ task_struct ¾çÂÊ¿¡ Å¥µÈ´Ù.

°¢ °³º°ÀûÀÎ ¼¼¸¶Æ÷¾î ¿¬»êÀº Á¶Á¤À» °ü¸®Çϵµ·Ï ¿ä±¸ÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ÇÁ·Î¼¼½º¸¶´Ù °¢ ¼¼¸¶Æ÷¾î ¹è¿­¿¡ ´ëÇØ ¸¹¾ÆºÁ¾ß ÇϳªÀÇ sem_undo ÀڷᱸÁ¶¸¦ °ü¸®ÇÑ´Ù. ¸¸¾à ¿¬»êÀ» ¿äûÇÑ ÇÁ·Î¼¼½º°¡ ÀÌ ÀڷᱸÁ¶¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù¸é ÇÊ¿äÇÒ ¶§ Çϳª »ý¼ºÇÒ °ÍÀÌ´Ù. »õ·Î ¸¸µé¾îÁø sem_undo ÀڷᱸÁ¶´Â ÀÌ ÇÁ·Î¼¼½ºÀÇ task_struct ÀڷᱸÁ¶¿Í ¼¼¸¶Æ÷¾î ¹è¿­ÀÇ semid_ds ÀڷᱸÁ¶ ¾çÂÊ¿¡ Å¥µÈ´Ù. ¼¼¸¶Æ÷¾î ¹è¿­¿¡ ÀÖ´Â ¼¼¸¶Æ÷¾î¿¡ ¿¬»êÀ» Àû¿ëÇÏ¸é ¿¬ »ê°ªÀ» ¹Ý´ë·Î ÇÑ °ªÀÌ ÀÌ ÇÁ·Î¼¼½ºÀÇ sem_undo ÀڷᱸÁ¶¿¡ ÀÖ´Â Á¶Á¤ ¹è¿­ÀÇ ¼¼¸¶Æ÷¾î ¿£Æ®¸®·Î Ãß°¡µÈ´Ù. Áï ¿¬»ê°ªÀÌ 2¸¦ ´õÇÏ´Â °ÍÀ̾ú´Ù¸é ÀÌ ¼¼¸¶Æ÷¾îÀÇ Á¶Á¤ ¿£Æ®¸®¿¡´Â -2 °¡ ´õÇØÁø´Ù.

ÇÁ·Î¼¼½º°¡ Á¾·áÇÏ¿© Áö¿öÁú ¶§, ¸®´ª½º´Â sem_undo ÀڷᱸÁ¶ ¼¼Æ®¸¦ °¡Áö°í ¼¼¸¶Æ÷¾î ¹è ¿­¿¡ Á¶Á¤À» Àû¿ëÇÑ´Ù. ¸¸¾à ÇÑ ¼¼¸¶Æ÷¾î ¼¼Æ®°¡ Áö¿öÁö¸é ÇÁ·Î¼¼½ºÀÇ task_structÀÇ Å¥ µÇ¾î ÀÖ´Â sem_undo ÀڷᱸÁ¶´Â ±×´ë·Î ³²¾ÆÀÖÁö¸¸, ¼¼¸¶Æ÷¾î ¹è¿­ ½Äº°ÀÚ´Â À߸øµÈ °ÍÀÏ °ÍÀÌ´Ù. ÀÌ °æ¿ì ¼¼¸¶Æ÷¾î Á¤¸® ÄÚµå´Â °£´ÜÇÏ°Ô sem_undo ÀڷᱸÁ¶¸¦ ¹«½ÃÇÑ´Ù.


±×¸² 5.4 : System V IPC °øÀ¯ ¸Þ¸ð¸®

5.3.4. °øÀ¯ ¸Þ¸ð¸®(Shared Memory)

°øÀ¯ ¸Þ¸ð¸®´Â Çϳª ÀÌ»óÀÇ ÇÁ·Î¼¼½ºµéÀÌ ÀڽŵéÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ °øÅëÀ¸·Î ³ªÅ¸³ª´Â ¸Þ ¸ð¸®¸¦ ÅëÇÏ¿© Åë½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. À̵é ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×ÀÌºí °¢°¢¿¡´Â ÀÌ °øÀ¯ °¡»ó ¸Þ¸ð¸® ÆäÀÌÁöµéÀ» °¡¸®Å°´Â ÆäÀÌÁö Å×ÀÌºí ¿£Æ®¸®°¡ ÀÖ°Ô µÈ´Ù. À̵éÀº ¸ðµç ÇÁ·Î¼¼ ½ºÀÇ °¡»ó ¸Þ¸ð¸®¿¡¼­ ¶È°°Àº ÁÖ¼Ò¿¡ ÀÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ´Ù¸¥ ½Ã½ºÅÛ V IPC °´Ã¼¿Í ¸¶Âù°¡ Áö·Î °øÀ¯ ¸Þ¸ð¸® ¿µ¿ª·ÎÀÇ Á¢±ÙÀº Å°¿¡ ÀÇÇØ Á¦¾îµÇ°í Á¢±Ù ±ÇÇÑÀ» °Ë»çÇÏ°Ô µÈ´Ù. ÇÏÁö¸¸ Çѹø ¸Þ¸ð¸®°¡ °øÀ¯µÇ°í ³ª¸é ÇÁ·Î¼¼½ºµéÀÌ À̸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇؼ­ ¾Æ¹«·± °Ë»ç µµ ÇÏÁö ¾Ê´Â´Ù. ÇÁ·Î¼¼½ºµéÀº ´Ù¸¥ ¹æ¹ý, ¿¹¸¦ µé¾î ½Ã½ºÅÛ V ¼¼¸¶Æ÷¾î°°Àº °ÍÀ» »ç¿ëÇÏ¿© ¸Þ¸ð¸®·ÎÀÇ Á¢±ÙÀ» µ¿±âÈ­ÇÏ¿©¾ß ÇÑ´Ù.

»õ·Î ¸¸µé¾îÁø °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀº shmid_ds ÀڷᱸÁ¶·Î ³ªÅ¸³½´Ù. À̵éÀº shm_segs º¤ ÅÍ¿¡ ÀúÀåµÈ´Ù. shmid_ds ÀڷᱸÁ¶´Â °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÌ ¾ó¸¶³ª Å«Áö, ¾ó¸¶³ª ¸¹Àº ÇÁ·Î ¼¼½º°¡ »ç¿ëÇÏ°í ÀÖÀ¸¸ç, °øÀ¯ ¸Þ¸ð¸®°¡ ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò°ø°£¿¡ ¾î¶»°Ô ¸ÅÇεǾî ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áø´Ù. °øÀ¯ ¸Þ¸ð¸®¸¦ ¸¸µç ÇÁ·Î¼¼½º°¡ ÀÌ ¸Þ¸ð¸®¿¡ ´ëÇÑ Á¢±Ù±ÇÇÑ°ú Å°°¡ °ø ¿ëÀÎÁö °³ÀοëÀÎÁö Á¦¾îÇϸç, ÃæºÐÇÑ ±ÇÇѸ¸ ÀÖ´Ù¸é °øÀ¯ ¸Þ¸ð¸®¸¦ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®·Î ¶ô17 ½Ãų¼öµµ ÀÖ´Ù.

¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ±æ ¹Ù¶ó´Â °¢ ÇÁ·Î¼¼½ºµéÀº ½Ã½ºÅÛ ÄÝÀ» ÅëÇÏ¿© ÀÌ °¡»ó ¸Þ¸ð¸®¿¡ ¿¬°áÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀº ÀÌ ÇÁ·Î¼¼½º¿¡¼­ÀÇ °øÀ¯ ¸Þ¸ð¸®¸¦ ±â¼úÇÏ´Â »õ·Î¿î vm_area_struct Àڷᱸ Á¶¸¦ ¸¸µé¾î³½´Ù18. ÇÁ·Î¼¼½º´Â °øÀ¯ ¸Þ¸ð¸®°¡ ÀÚ½ÅÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ À§Ä¡ÇÒ °÷À» ¼±ÅÃÇÒ ¼öµµ ÀÖ°í, ¾Æ´Ï¸é ¸®´ª½º°¡ ÃæºÐÈ÷ Å« ºó ¿µ¿ªÀ» ¼±ÅÃÇϵµ·Ï ÇÒ ¼öµµ ÀÖ´Ù. »õ·Î ¸¸µé¾îÁø vm_area_struct ÀڷᱸÁ¶´Â shmid_ds°¡ °¡¸®Å°°í ÀÖ´Â vm_area_struct ¸®½ºÆ®¿¡ Ãß °¡µÈ´Ù. vm_newxt_shared¿Í vm_prev_shared Æ÷ÀÎÅ͵éÀº À̵éÀ» ¼­·Î ¿¬°áÇϴµ¥ »ç¿ë ÇÑ´Ù. °¡»ó ¸Þ¸ð¸®´Â ÀÌ·¸°Ô ¿¬°áÇÏ´Â µ¿¾È¿¡ ½ÇÁ¦·Î ¸¸µé¾îÁöÁö ¾ÊÀ¸¸ç, óÀ½À¸·Î ÇÁ·Î¼¼½º °¡ ¿©±â¿¡ Á¢±ÙÇÏ·Á°í ÇÒ ¶§ ¸¸µé¾îÁø´Ù.

ÇÁ·Î¼¼½º°¡ °øÀ¯ÇÏ°í ÀÖ´Â °¡»ó ¸Þ¸ð¸®ÀÇ ÇÑ ÆäÀÌÁö¿¡ óÀ½À¸·Î Á¢±ÙÀ» ½ÃµµÇϸé ÆäÀÌÁö Æú Æ®°¡ ¹ß»ýÇÑ´Ù. ¸®´ª½º°¡ ÀÌ ÆäÀÌÁö ÆúÆ®¸¦ ó¸®ÇÒ ¶§ À̸¦ ±â¼úÇÏ´Â vm_area_struct ÀÚ ·á±¸Á¶¸¦ ¹ß°ßÇÏ°Ô µÈ´Ù. ¿©±â¿¡´Â ÀÌ Å¸ÀÔÀÇ °øÀ¯ °¡»ó ¸Þ¸ð¸®¿¡ ´ëÇÑ Ã³¸® ·çƾ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ°¡ ÀÖ´Ù19. °øÀ¯ ¸Þ¸ð¸®ÀÇ ÆäÀÌÁö ÆúÆ® ó¸® ÄÚµå´Â shmid_dsÀÇ ÆäÀÌÁö Å×ÀÌºí ¿£Æ® ¸®¸¦ µÚÁ®¼­, °øÀ¯ °¡»ó ¸Þ¸ð¸®ÀÇ ÇØ´ç ÆäÀÌÁö¿¡ ´ëÇÑ ÆäÀÌÁö Å×ÀÌºí ¿£Æ®¸®°¡ ÀÖ´ÂÁö 㠴´Ù. ¸¸¾à ¾ø´Ù¸é ¹°¸®Àû ¸Þ¸ð¸®¸¦ Çϳª ÇÒ´ç ¹Þ¾Æ À̸¦ ³ªÅ¸³»´Â ÆäÀÌÁö Å×ÀÌºí ¿£Æ®¸® ¸¦ ¸¸µé °ÍÀÌ´Ù. À̸¦ ÇöÀç ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×ÀÌºí¿¡ ³ÖÀ¸¸é¼­ shmid_ds¿¡µµ ÀúÀåÇÑ´Ù. ±×·¡¼­ ´ÙÀ½ ÇÁ·Î¼¼½º°¡ ÀÌ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ·Á°í ÇÏ´Ù°¡ ÆäÀÌÁö ÆúÆ®°¡ ¹ß»ýÇϸé, °øÀ¯ ¸Þ ¸ð¸® ÆäÀÌÁö ÆúÆ® ó¸® Äڵ尡 À̸¦ ã¾Æ¼­, »õ·Î ¸¸µé¾îÁø ¹°¸®ÀûÀÎ ÆäÀÌÁö¸¦ ±× ÇÁ·Î¼¼½º ¿¡°Ôµµ »ç¿ëÇÏ°Ô ÇÑ´Ù. µû¶ó¼­ °øÀ¯ ¸Þ¸ð¸®ÀÇ ¾î¶² ÆäÀÌÁö¿¡ Á¢±ÙÇϴ ù¹ø° ÇÁ·Î¼¼½º´Â À̸¦ »ý¼ºÇÏ°í, ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ¿©±â¿¡ Á¢±ÙÇÒ ¶§´Â À̸¦ ÀÚ½ÅÀÇ °¡»ó ¸Þ¸ð¸® °ø°£¿¡ Ãß °¡ÇÏ°Ô µÈ´Ù.

ÇÁ·Î¼¼½º°¡ ´õÀÌ»ó °¡»ó ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ±æ ¹Ù¶óÁö ¾ÊÀ» ¶§´Â ¿©±â·ÎÀÇ ¿¬°áÀ» ²÷´Â´Ù. ÀÌ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏ´Â ÇÑÀº ¿¬°áÀ» ²÷´Â °ÍÀº ´ÜÁö ÇØ´ç ÇÁ·Î¼¼½º¿¡ °Ô¸¸ ¿µÇâÀ» ¹ÌÄ£´Ù. ±× ¸Þ¸ð¸®ÀÇ vm_area_struct´Â shmid_ds ÀڷᱸÁ¶¿¡¼­ Á¦°ÅµÇ°í ÇØÁ¦µÉ °ÍÀ̸ç, ÇÁ·Î¼¼½º°¡ °øÀ¯Çϴµ¥ »ç¿ëÇß´ø °¡»ó ¸Þ¸ð¸® ¿µ¿ªÀ» ¹«È¿ÇÑ °ÍÀ¸·Î ³ªÅ¸³» ±â À§ÇØ ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺íÀÌ °»½ÅµÈ´Ù. ¸¶Áö¸·À¸·Î ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ°í ÀÖ´ø ÇÁ·Î¼¼ ½º°¡ ¿¬°áÀ» ²÷À¸¸é ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ°í ÀÖ´Â ¸ðµç °øÀ¯ ¸Þ¸ð¸® ÆäÀÌÁöµéÀº ÇØÁ¦µÇ °í, ÀÌ °øÀ¯ ¸Þ¸ð¸®¸¦ ³ªÅ¸³»´ø shmid_ds ÀڷᱸÁ¶µµ ÇØÁ¦µÈ´Ù.

°øÀ¯ °¡»ó ¸Þ¸ð¸®°¡ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®·Î ¶ôµÇ¾î ÀÖÁö ¾ÊÀ» ¶§ ¾à°£ º¹ÀâÇÑ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ÀÌ´Â ¸Þ¸ð¸®ÀÇ »ç¿ë·®ÀÌ ¸¹¾Æ¼­ °øÀ¯ ¸Þ¸ð¸®°¡ ½º¿Ò µð½ºÅ©·Î ½º¿ÒµÈ °ÍÀÎ °æ¿ìµµ ÀÖ´Ù. °ø À¯ ¸Þ¸ð¸®°¡ ¾î¶»°Ô ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¿¡¼­ ½º¿ÒµÇ¾î ³ª°¡°Å³ª µé¾î¿À´ÂÁö´Â 3Àå¿¡¼­ ¼³¸íÇÏ °í ÀÖ´Ù.


¹ø¿ª : À̽Â, ÀÌÈ£, ±èÁø¼®, ±è±â¿ë, ½É¸¶·Î
Á¤¸® : ÀÌÈ£


1) REVIEW NOTE : ÇÁ·Î¼¼½º ±×·ìÀ» ¼³¸íÇÒ °Í

¿ªÁÖ 2) ÀÌ·¯ÇÑ ¹®Á¦´Â ½Ã±×³ÎÀÌ ¹ß»ýÇß´ÂÁö È®ÀÎÇÏ´Â °ÍÀÌ Ä¿³Î ¸ðµå¿¡¼­ÀÌ°í, ½Ã±×³Î ÇÚ µé·¯´Â »ç¿ëÀÚ ¸ðµå¿¡¼­ ½ÇÇàµÇ¾î¾ß Çϱ⠶§¹®¿¡, Ä¿³Î ¸ðµå¿¡¼­ ¹Ù·Î ½Ã±×³Î Çڵ鷯´Â ºÎ¸¦ ¼ö ¾ø¾î¼­ ¹ß»ýÇÑ´Ù. ÀÌ¿¡ »ç¿ëÀÚ ¸ðµå·Î ¹Ù²Ù¾î ½Ã±×³Î Çڵ鷯¸¦ ºÎ¸£°í ÀÌ°ÍÀÌ ³¡³µÀ» ¶§ ¸¶Ä¡ ½Ã½ºÅÛ ÄÝÀ» ÇÑ °Íó·³ Ä¿³Î ¸ðµå·Î ´Ù½Ã µ¹¾Æ¿À°Ô ÇÏ´Â ¹æ¹ýÀ» ¾²´Â °Í ÀÌ´Ù. (flyduck)

¿ªÁÖ 3) Áï ÆÄÀÌÇÁ¸¦ À§ÇØ ÆÄÀÏ ½Ã½ºÅÛ¿¡ ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¸Þ¸ð¸® »ó¿¡ °øÀ¯ ¸Þ¸ð¸® ÆäÀÌÁö¸¦ ¸¸µé¾î¼­ VFS inode°¡ À̸¦ »ç¿ëÇÏ°Ô ÇÏ´Â °ÍÀ̸ç, ÀÌ´Â ÆÄÀÌÇÁÀÇ ¼Óµµ ¸¦ ºü¸£°Ô ÇÑ´Ù. (flyduck)

¿ªÁÖ 4) VFS inodeÀÇ f_op Ç׸ñÀº Àбâ, ¾²±â¸¦ Æ÷ÇÔÇÏ¿© ÇÔ¼ö¿¡ °ü·ÃµÈ ¿¬»êµéÀÇ Æ÷ÀÎÅÍ ¹è¿­À̸ç, ÆÄÀÏ ¿¬»êÀº ÀÌ Ç׸ñ¿¡ ÀÖ´Â ÇÔ¼ö Æ÷ÀÎÅ͸¦ ºÎ¸§À¸·Î½á ÀÌ·ç¾îÁø´Ù. ¿©±â¼­ ÆÄ ÀÌÇÁ¸¦ ÀоîµéÀÌ´Â ÆÄÀÏÀ» Ÿ³ª³»´Â file ÀڷᱸÁ¶´Â º¸Åë ÆÄÀÏ¿¡ Àд ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ ÀÎÅÍ°¡ ¾Æ´Ï¶ó ÆÄÀÌÇÁ¿¡¼­ ÀоîµéÀÌ´Â Æ÷ÀÎÅ͸¦ °¡¸®Å°°Ô ÇÏ´õ¶óµµ, ½Ã½ºÅÛ ÄÝ¿¡ À־ ´Â ¾îÂ¥ÇÇ f_op Ç׸ñÀÇ ÇÔ¼ö Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇϹǷΠ¾Æ¹«·± Â÷ÀÌ°¡ ¾ø´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ÆÄÀÌÇÁ¿¡ ¾²´Â file ÀڷᱸÁ¶¿¡ À־µµ ¸¶Âù°¡Áö¸ç, ÀÌ·¯ÇÑ ±â¹ýÀº ¸®´ª½º Ä¿³Î °÷°÷ ¿¡¼­ ¾²ÀÌ°í ÀÖ´Ù. (flyduck)

¿ªÁÖ 5) task_struct´Â ÆÄÀÏ¿¡ °ü·ÃµÈ ÀڷᱸÁ¶ÀÎ struct files_struct files Ç׸ñ À» °¡Áö°í ÀÖÀ¸¸ç, files_struct´Â struct file *fd[NR_OPEN] Ç׸ñÀ» °¡Áö°í ÀÖ´Ù. ÀÌ fd¿¡¼­ÀÇ À妽º°¡ ÆÄÀÏ ±â¼úÀÚÀ̸ç, fd Ç׸ñÀº ÇÁ·Î¼¼½º¿¡¼­ ¿­Àº ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸ ¸¦ °¡Áö°í ÀÖ´Ù. (flyduck)

¿ªÁÖ 6) file ÀڷᱸÁ¶ÀÇ f_flags Ç׸ñÀÌ ÆÄÀÏ¿¡ °ü·ÃµÈ Ç÷¡±×¸¦ °¡Áö°í Àִµ¥, ¿©±â¿¡ O_NONBLOCK °¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ºí·°Å·À» ÇÏÁö ¾Ê´Â »óÅÂÀÌ´Ù. ÀÌ´Â ÆÄÀÏÀ» ¿­¶§ ÁöÁ¤ ÇÒ ¼öµµ, ioctlÀ̳ª fcntl°°Àº ½Ã½ºÅÛ ÄÝÀ» ÅëÇؼ­ ¹Ù²Ü ¼öµµ ÀÖ´Ù. (flyduck)

¿ªÁÖ 7) ¾ÕÀÇ ls | prÀ» ÁöÁ¤ ÆÄÀÌÇÁ¸¦ »ç¿ëÇÑ´Ù¸é, ¿ì¼± mkfifo fifo (ÆÄÀÏÀ̸§Àº ´Ù¸£°Ô Áö Á¤Çصµ µÈ´Ù) ¸í·ÉÀ¸·Î ÁöÁ¤ ÆÄÀÌÇÁ¸¦ ¸¸µç ÈÄ, ls > fifo & pr < fifo·Î ÇÏ¸é µÈ´Ù. (flyduck)

¿ªÁÖ 8) FIFOµµ ÆÄÀÌÇÁ¿Í ¸¶Âù°¡Áö·Î ½ÇÁ¦·Î ÆÄÀÏÀ» ÅëÇÏ¿© Åë½ÅÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸Þ¸ð¸®¿¡ °øÀ¯ ÆäÀÌÁö¸¦ ¸¸µç´Ù. Áï ÀÐ°í ¾²´Â °ÍÀº ÆÄÀÌÇÁ¿Í ¶È°°Àº ¹æ¹ýÀ» »ç¿ëÇÏ°Ô µÈ´Ù. FIFO ¿Í ÆÄÀÌÇÁÀÇ Â÷ÀÌÁ¡Àº ÆÄÀÌÇÁ´Â Àӽ÷Π»ý¼ºµÇ´Â °ÍÀε¥ ¹ÝÇØ FIFO´Â ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ ´Â °ÍÀ̹ǷΠµÎ °³ÀÇ ÇÁ·Î¼¼½º°¡ open(), close() ÇÔ¼ö¸¦ ÅëÇÏ¿© ÆÄÀÏó·³ ¿­ ¼ö ÀÖÀ¸¹Ç ·Î ½©ÀÌ °ü¿©ÇÏÁö ¾Ê¾Æµµ Åë½ÅÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. (flyduck)

¿ªÁÖ 9) ¼ÒÄÏÀº ³×Æ®¿öÅ·¿¡¼­ À̾߱âÇÏ´Â ¼ÒÄÏÀÌ´Ù. ¼ÒÄÏÀº ÇÑ ÄÄÇ»ÅÍ ³»¿¡¼­ ÇÁ·Î¼¼½º »ç ÀÌ¿¡ Åë½ÅÀ» ÇÒ ¼ö ÀÖ°Ô ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ³×Æ®¿÷¿¡ ÀÖ´Â ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ÀÖ´Â ÇÁ·Î¼¼½º¿Í µµ Åë½ÅÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ¼ÒÄÏÀÇ »ç¿ëÀº À¯´Ð½º¿¡¼­ ÀüÅëÀûÀ¸·Î »ç¿ëÇÏ´Â ÆÄÀÏ ±â¼úÀÚ (file descriptor)¸¦ ÅëÇÏ¿© ÇÑ´Ù. Áï socket() ÇÔ¼ö¸¦ ºÎ¸£¸é ¼ÒÄÏÀ» ³ªÅ¸³»´Â ÆÄÀÏ ±â¼úÀÚ °¡ µ¹¾Æ¿À°í À̸¦ °¡Áö°í bind, listen, connect, accept µîÀÇ ¿¬»êÀ» ÇÒ ¼ö ÀÖÀ¸ ¸ç, ÆÄÀÏ°ú ¸¶Âù°¡Áö·Î read, write, close ¿¬»êÀ» ÇÒ ¼ö ÀÖ´Ù. (flyduck)

¿ªÁÖ 10) °ø¿ëÅ°°¡ ¾Æ´Ï¶ó °³ÀοëÅ°¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ipc_permÀÇ key Ç׸ñÀÌ IPC_PRIVATE·Î ÁöÁ¤µÇ´Âµ¥, À̸¦ °¡Áö°í ÂüÁ¶ ½Äº°ÀÚ¸¦ ãÀ» ¼ö ¾ø´Ù. °³ÀοëÅ°¸¦ »ç¿ë ÇÏ´Â IPC °³Ã¼´Â °³Ã¼ ¹øÈ£¸¦ ÅëÇؼ­¸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. (flyduck)

¿ªÁÖ 11) °Ë»ç¸¦ ÇÏ°í ¼³Á¤ÇÏ´Â »çÀÌ¿¡ Áß´ÜÀÌ µÇ¾î ´Ù¸¥ °ÍÀÌ ½ÇÇàµÇ¾ú´Âµ¥ ¿©±â¼­ ÀÌ °ª À» °Ë»çÇÏ°í ¼³Á¤ÇÑ´Ù¸é, ´Ù½Ã ÀÌÀüÀ¸·Î µ¹¾Æ¿Í¼­ ¼³Á¤ÇÏ·Á°í ÇÒ ¶§´Â ÀÌ¹Ì °ªÀÌ ¹Ù²ï ÀÌÈÄ°¡ µÇ¾î ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. µû¶ó¼­ ÀÌ °Ë»ç ¹× ¼³Á¤ ¿¬»êÀº ÁߴܵǾ´Â ¾ÈµÇ ¸ç, CPU¿¡¼­ Á¦°øÇϴ Ưº°ÇÑ ¸í·É¾î¸¦ ÀÌ¿ëÇϰųª ¿î¿µÃ¼Á¦ Äڵ带 ÅëÇÏ¿© ±¸ÇöµÈ´Ù. ¸®´ª½º¿¡¼­´Â Ä¿³Î¸ðµå¿¡¼­ ºñ¼±Á¡ÇüÀ̹ǷΠÀÌ ¿¬»êÀÌ ÁߴܵÇÁö ¾Ê´Â´Ù°í »ý°¢ÇÏ°í ÀÏ¹Ý ¿¬»êÀ¸·Î ó¸®ÇÑ´Ù. Ä¿³Î Äڵ忡¼­ ¼¼¸¶Æ÷¾î °ªÀ» °Ë»çÇÏ´Â ÇÔ¼ö´Â try_semop()À̸ç, ¼¼ ¸¶Æ÷¾î °ªÀ» ¹Ù²Ù´Â ÇÔ¼ö´Â do_semop()ÀÌ´Ù. À̵éÀº ipc/sem.c¿¡ ÀÖ´Ù. (flyduck)

¿ªÁÖ 12) ù¹ø° ÇÁ·Î¼¼½º°¡ ¼¼¸¶Æ÷¾îÀÇ °ªÀ» 0À¸·Î ¹Ù²Û ÈÄ¿¡´Â ´ÙÀ½ ÇÁ·Î¼¼½º°¡ °Ë»ç´Ü°è ¿¡¼­ ½ÇÆÐÇϹǷΠ¼¼¸¶Æ÷¾îÀÇ °ªÀº º¯ÇÏÁö ¾ÊÀ¸¸ç, ù¹ø° ÇÁ·Î¼¼½º°¡ ÀÌ °ªÀ» 1·Î ¹Ù²Û ÈÄ¿¡¾ß ±â´Ù¸®°í ÀÖ´ø ÇÁ·Î¼¼½º°¡ À̸¦ ¹Ù²Ü ¼ö ÀÖ°Ô µÈ´Ù. ±×·¡¼­ ¼¼¸¶Æ÷¾îÀÇ °ªÀº Ç× »ó 0º¸´Ù Å©°Å³ª °°°Ô µÈ´Ù. (flyduck)

¿ªÁÖ 13) ÇϳªÀÇ ¼¼¸¶Æ÷¾î °´Ã¼¿¡ ¿©·¯°³ÀÇ ¼¼¸¶Æ÷¾î ¹è¿­(semÀÇ ¹è¿­)ÀÌ ÀÖÀ¸¸ç, ½Ã½ºÅÛ ÄÝÀº ÀÌ ÁßÀÇ ÀϺθ¸À» °Ë»çÇÏ°í ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÓ°èÁö¿ª¿¡¼­ ¿©·¯°³ÀÇ ¼¼¸¶Æ÷¾î¸¦ ÇÊ ¿ä·ÎÇÏ´Â °æ¿ì ÀÌ Áß¿¡ ÇÊ¿ä·Î ÇÏ´Â °Íµé¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. (flyduck)

¿ªÁÖ 14) ¼¼¸¶Æ÷¾î ¿¬»êÀ» ÇÏ´Â ½Ã½ºÅÛ ÄÝÀº sys_semop(int semid, struct sembuf *sops, unsigned nsops)À̸ç, ¿©±â¼­ ÇϳªÀÇ ¿¬»êÀ» °¡¸®Å°´Â sembuf´Â sem_num, sem_op, sem_flg ¼¼°¡Áö ¿ø¼Ò·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÀÌ ¼¼¸¶Æ÷¾î ¿¬»êÀº ¼¼¸¶Æ÷¾î °ªÀ» °¨ ¼Ò½Ãų ¼öµµ, Áõ°¡½Ãų ¼öµµ ÀÖ´Ù. (flyduck)

¿ªÁÖ 15) ¸Þ½ÃÁö Å¥ÀÇ °æ¿ì´Â ´ë±âÅ¥°¡ task_struct¸¦ °¡Áö°í ÀÖ´Â ´Ü¼øÇÑ wait_queue ÀÇ ¿¬°á ¸®½ºÆ®·Î µÇ¾î ÀÖÁö¸¸, ¼¼¸¶Æ÷¾îÀÇ ´ë±âÅ¥´Â sem_queueÀÇ ¿¬°á ¸®½ºÆ®·Î µÇ¾î ÀÖ´Ù. ÀÌ´Â ¸Þ½ÃÁö Å¥ÀÇ °æ¿ì Àб⸦ ±â´Ù¸®´ÂÁö, ¾²±â¸¦ ±â´Ù¸®´ÂÁö¸¸ ±¸º°ÇÏ¸é µÇÁö¸¸, ¼¼¸¶Æ÷¾î¿¡¼­´Â ¼¼¸¶Æ÷¾î ¿¬»êÀ¸·Î ³Ñ°ÜÁØ ÀÎÀÚµéÀ» ¸ðµÎ ÀúÀåÇÏ°í ÀÖ¾î¾ß ÇÏ°í Á» ´õ º¹ÀâÇÑ ¿¬»êÀÌ ÇÊ¿äÇϱ⠶§¹®¿¡ ÀÌ Á¤º¸¸¦ ¸ðµÎ sem_queue¿¡ ÀúÀåÇÏ´Â °ÍÀÌ´Ù.(flyduck)

¿ªÁÖ 16) µ¥µå¶ôÀº ÀÌ °æ¿ì»Ó¸¸ ¾Æ´Ï¶ó ÇÑ ÇÁ·Î¼¼½º°¡ ÇÊ¿ä·Î ÇÏ´Â ÀÚ¿øÀ» ´Ù¸¥ ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ°í ÀÖ¾î ´ë±â »óÅ·Π°¬´Âµ¥, ³ªÁß¿¡ ±× ÇÁ·Î¼¼½º°¡ ¾ÕÀÇ ÇÁ·Î¼¼½º°¡ Á¡À¯ÇÏ°í ÀÖ ´Â ÀÚ¿øÀ» ÇÊ¿ä·Î ÇÏ°Ô µÇ¾î ÇÁ·Î¼¼½ºµéÀÌ ¼­·Î »ó´ë°¡ ÀÚ¿ø »ç¿ëÀ» Á¾·áÇϱ⸸À» ±â´Ù ¸®°Ô µÇ´Â »óŵµ Æ÷ÇÔÇÑ´Ù. ÀÌ°ÍÀº ´Ü¼øÈ÷ µÎ ÇÁ·Î¼¼½º°¡ ¾Æ´Ï¶ó ¿©·¯ ÇÁ·Î¼¼½º°¡ ²¿¸® ¿¡ ²¿¸®¸¦ ¹°°í ÀÖÀ» ¶§ º¹ÀâÇÏ°Ô ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù. ´Ü¼øÈ÷ ¼¼¸¶Æ÷¾î¿¡ ±¹ÇÑÇÏ¿© ÀÌ¾ß ±âÇÑ´Ù¸é, ÇÁ·Î¼¼½º°¡ ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇÏ¿© ÀÓ°èÁö¿ªÀ¸·Î µé¾î°£ ÈÄ ´Ù½Ã ¼¼¸¶Æ÷¾î¸¦ ¾ò À¸·Á°í ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ·± ¹®Á¦´Â ¹ß»ýÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. (flyduck)

¿ªÁÖ 17) °¡»ó ¸Þ¸ð¸®¸¦ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ°Ô ¸¸µå´Â °ÍÀ» ¸»ÇÑ´Ù. (flyduck)

¿ªÁÖ 18) ¾ÕÀÇ ÇÁ·Î¼¼½º Àå¿¡¼­ ¼³¸íÇÑ °Í°ú °°ÀÌ ÇÑ ÇÁ·Î¼¼½º°¡ ÇÒ´ç¹ÞÀº ¸Þ¸ð¸®µéÀº vm_area_structÀÇ ¸®½ºÆ®¿Í AVL Æ®¸®·Î °ü¸®µÇ´Âµ¥, ÀÌ´Â ÆäÀÌÁö ÆúÆ®°¡ ¹ß»ýÇßÀ» ¶§ ÇØ´ç ÆäÀÌÁö°¡ ½ÇÁ¦ ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ´Â ¸Þ¸ð¸®ÀÎÁö, ¾î¶»°Ô ¹°¸®ÀûÀÎ ÆäÀÌÁö¸¦ ¸¸µé°Í ÀÎÁö ¾Ë±â À§ÇØ »ç¿ëµÈ´Ù. (flyduck)

¿ªÁÖ 19) nopage ¿¬»ê (flyduck)