ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
1 ¼Ò°³
¸î¹ø¿¡ °ÉÃļ RTS¸¦ ´Ù·ç¾ú´Âµ¥ ³Ê¹« ÇÇ»óÀûÀÎ ³»¿ë¸¸ ´Ù·é°Í °°´Ù. ¾Æ¹«·¡µµ Á¦´ë·Î »ç¿ëÇϱâ À§Çؼ´Â ½ÇÁ¦·Î ¼ºñ½º °¡´ÉÇÑ °£´ÜÇÑ ÀÎÅÍ³Ý ¼ºñ½º ÇÁ·Î±×·¥ÀÌ¶óµµ °³¹ßÇØ¾ß ÇÒ°Í °°´Ù.
±×·¯±â À§Çؼ´Â ¸î°¡Áö ÇØ°áÇØ¾ßµÉ ¹®Á¦µéÀÌ ÀÖÀ¸¸ç, ´Ù¸¥ À̺¥Æ® Àü´Þ ¹æ¹ýÀÎ select(), /dev/pollµî°ú ºñ±³Çؼ ¾î¶² ÀÕÁ¡À» °¡Áö°í ÀÖ´ÂÁöµµ È®½ÇÈ÷ ¤°í ³Ñ¾î°¡¾ß ÇÑ´Ù.
ÀÌ¿Í °ü·ÃµÈ ¹®¼¸¦ ã´øÁß HP ¿¬±¸¼ÒÀÇ ÈǸ¢ÇÑ ¹®¼¸¦ ã°Ô µÇ¾ú°í ÀÌ ¹®¼¸¦ ÀÌ¿ëÇØ¼ ¿¬±¸¸¦ ÇÏ°í °á°ú¸¦ ÀÌ¿ëÇÑ ÀÀ¿ë ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇϱâ·Î °áÁ¤Çß´Ù. 2 °³¿ä
ÀÎÅ׳ׯ® ¼ºñ½ºµéÀÇ ¹®Á¦Á¡Àº ¹«¾ùÀϱî ?. ¾Æ¸¶µµ ¸¹Àº ¾çÀÇ µ¥ÀÌÅ͸¦ 󸮶§¹®¿¡ °ñÄ¡¾ÆÇà °Å¶ó°í »ý°¢µÉ ¼ö ÀÖ°ÔÁö¸¸, ½ÇÁ¦ °Þ´Â ÁøÁ¤ÇÑ °ñÄ¡°Å¸®´Â ´Ù¼öÀÇ ¿¬°áÀ» ó¸®ÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. º¸Åë ÀÌ·¯ÇÑ ¿¬°á¿¡ ÀÖ¾î¼ Åë½Å¿¡ »ç¿ëµÇ´Â µ¥ÀÌÅÍ ÀÚüÀÇ Å©±â´Â ±×¸® ¸¹Áö ¾ÊÀº ¹Ý¸é ¿äû°ú ÀÀ´äÀÌ ¸Å¿ì ºó¹øÇÏ°Ô ÀÌ·ç¾î Áö´Âµ¥, ¼¹öÃø¿¡¼ º¸ÀÚ¸é ÀÌ·¯ÇÑ ¿äûÀ» ºü¸¥½Ã°£¿¡ ¹ÞÀ» ¼ö ÀÖ¾î¾ß Çϸç, ¿äûÀ» ´©°¡Çß´ÂÁö ÃÖ´ëÇÑ È¿À²ÀûÀ¸·Î ÆÇ´ÜÇØ¼ ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» º¸³»ÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
ÀÌ ±Û¿¡¼ ¿ì¸®´Â ÀÎÅÍ³×Æ® ¼¹ö¿¡¼ ´Ù¼öÀÇ ¿äû¿¡ ÀÇÇÑ ³×Æ®¿öÅ© I/O À̺¥Æ®¸¦ È¿°úÀûÀ¸·Î ó¸®Çϱâ À§ÇÑ ¸î°¡Áö ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ¾Æ¸¶µµ ÀÌ »çÀÌÆ®¿¡¼ ¸î¹ø ´Ù·ç¾îº»ÀûÀÌ ÀÖ´Â (ºñ±³Àû ÃÖ±ÙÀÇ À̺¥Æ® 󸮱â¼úÀÎ)RTS¸¦ À§ÁÖ·Î ¼³¸íÇÒ °ÍÀ̸ç, RTS°¡ Á¤¸»·Î È¿À²ÀûÀ¸·Î À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖ´ÂÁö¸¦ È®ÀÎÇϱâ À§Çؼ °íÀüÀûÀÎ À̺¥Æ® ó¸® ¹æ½ÄÀÎ select()¿Í /dev/poll°úÀÇ ¼º´É Å×½ºÆ®µµ ÇÔ²² ÇÏ°Ô µÉ °ÍÀÌ´Ù.
¶ÇÇÑ RTS¿Í °°Àº ·¹º§¿¡¼ /dev/epollµµ ´Ù·ç°í ¼·Î ºñ±³ÇÒ °ÍÀÌ´Ù. /dev/epollÀº ÃÖ±Ù¿¡ ³ª¿Â À̺¥Æ® 󸮱â¼ú·Î ¸Å¿ì ÁÁÀº ¼º´ÉÀ» º¸¿©ÁØ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù. /dev/epoll¿¡ ´ëÇÑ ³»¿ëÀº gururang´ÔÀÇ epollÀ§Å°¸¦ ¸¹ÀÌ Âü°íÇÏ°Ô µÉ°ÍÀÌ´Ù.
RTS¸¦ ´Ù·ë¿¡ À־ Áߺ¹µÈ ³»¿ëÀº °¡±ÞÀû ÇÇÇϰí, ¸î¹ø ¾ð±ÞµÇ¾úÁö¸¸ ±íÀÌ ´Ù·çÁö ¾ÊÀº signal-per-fd¿¡ ´ëÇÑ ³»¿ëÀ» ²Ï ½Éµµ ÀÖ°Ô ´Ù·ç°í ½ÇÁ¦ Àû¿ëÈÄ ¿¹Á¦Äڵ带 ¸¸µé¾î º¸µµ·Ï ÇÒ°ÍÀÌ´Ù. signal-per-fd¸¦ »ç¿ëÇÒ°æ¿ì ½Ã±×³ÎÀ» Á¦¾îÇϱâ À§ÇÑ ¿©·¯°¡Áö º¹ÀâÇÑ ³»¿ëµé¿¡ ´ëÇØ ½Å°æ¾²Áö ¾Ê°Ô µÇ¹Ç·Î Á»´õ Äڵ忡 ÁýÁßÇÒ ¼ö ÀÖÀ¸¸ç, Á»´õ ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ°Ô µÈ´Ù. 3 ¼Ò°³
ÀÌ ¹®¼ÀÇ Á¦¸ñÀÌ ³×Æ®¿öÅ© I/OÀ̺¥Æ® 󸮿¡ °üÇÑ ¿¬±¸ÀÌ´Ù. ¿Ö ÀÌ·¯ÇÑ ÁÖÁ¦¸¦ ´Ù·ç°Ô µÇ¾ú´ÂÁö ÀÎÅÍ³×Æ®¿Í ÀÎÅÍ³×Æ®¿¡ °ü·ÃµÈ ±â¼úµ¿Çâµé¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
À¥°ú e-commerce°¡ ºü¸¥ ¼Óµµ·Î ¹ßÀüÇϰí ÀÖÀ¸¸ç, ÀÌ·ÎÀÎÇØ ÀÎÅÍ³×Æ®ÀÇ Æ®·¡ÇÈ ¿ª½Ã °¡ÆÄ¸£°Ô Áõ°¡Çϰí ÀÖ´Ù. À¥¼ºñ½º¿Í °ü·ÃµÈ ³×Æ®¿öÅ© ¾ÖÇø®ÄÉÀ̼ǰú ÇÁ·Ï½Ã(proxy)µéÀº Àü¼¼°è¿¡¼ µé¾î¿À´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ó¸®ÇÒ ¼ö ÀÖ¾î¾ß¸¸ ÇÑ´Ù. °Å±â¿¡´Ù °¡ ¼¹öµéÀº °ÅÀÇ µ¿½Ã¿¡ ¹ß»ýÇÏ´Â ¼ö¸¹Àº ¿¬°áÀ» °¡´ÉÇÑ ºü¸¥½Ã°£¿¡ ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à ¿¬°á󸮰¡ ´Ê¾îÁö°Ô µÈ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ¼ºñ½ºÀÇ ÀÌ¿ëÀ» À§Çؼ ¸¹Àº ½Ã°£À» ±â´Ù·Á¾ß ÇÒ °ÍÀÌ°í °í°´ÀÇ Àγ»½ÉÀ» ¹þ¾î³ª°Ô µÉ°æ¿ì ºÐ¸íÈ÷ °í°´À» ÀÒ¾î ¹ö¸®°Ô µÉ°ÍÀÌ´Ù. ƯÈ÷ ´Ù¸¥ °Íµé(´ÜÁö µ¥ÀÌÅ͸¦ Åë½ÅÇϴ°Í)¿¡ ºñÇØ ¿¬°áÀº ¸Å¿ì ¸¹Àº ½Ã°£À» ¼ÒºñÇÑ´Ù. °í·Î °¡´ÉÇÏ¸é ºü¸£°Ô Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» °¨ÁöÇϰí À̸¦ ó¸®ÇØ ³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
°¡Àå Àαâ ÀÖ´Â ÀÎÅÍ³×Æ® ¼ºñ½ºÀÎ À¥¼ºñ½º¸¦ ¿¹·Î µé¾îº¸ÀÚ. À¥¼ºñ½ºÀÇ °æ¿ì µ¿½Ã¿¡ ¿©·¯°³ÀÇ ³×Æ®¿öÅ© I/O¸¦ ó¸®Çϱâ À§Çؼ ¿î¿µÃ¼Á¦¿¡¼ Á¦°øÇÏ´Â À̺¥Æ® Àü´Þ(devent-dispatch) ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ¾ÆÁ÷±îÁö´Â ¸¹Àº ¼¹öµéÀÌ °íÀüÀûÀÎ À̺¥Æ® Àü´Þ ¹æ½ÄµéÀ» »ç¿ëÇϴµ¥ À̵é À̺¥Æ® Àü´Þ¹æ½ÄÀº ¿À·¡µÈ ¸¸Å ±×¸® È¿À²ÀûÀÌÁö ¸øÇÏ´Ù´Â ´ÜÁ¡À» °¡Áø´Ù. ¾ÆÆÄÄ¡ À¥¼¹öÀÇ °æ¿ì ÀϹÝÀûÀÎ ¼ºñ½º¸¦ ¿î¿µÇϴµ¥¿¡´Â ¹®Á¦°¡ ¾øÁö¸¸ Á¶±Ý´õ ±Ô¸ð°¡ Ä¿Áö¸é ¿¬°áÁõ°¡¿¡ µû¸¥ ¸¹Àº ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¿¬°áÀÌ ´À·ÁÁö°Å³ª ¾Æ¿¹ ¿¬°á½Ãµµ ÀÚü°¡ ½ÇÆÐÇÏ´Â °æ¿ì°¡ ´ëÇ¥ÀûÀÎ °æ¿ìÀε¥, ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ´Â À¥¼¹ö Æ©´×°ú Çϵå¿þ¾î Áõ¼³µî¿¡ ¸¹Àº ½Ã°£°í ºñ¿ëÀ» ÅõÀÚÇÏ°Ô µÈ´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ TUX¿Í °°ÀÌ ¾Æ¿¹ Ä¿³Î °ø°£À¸·Î ¼ºñ½º ±â´ÉÀ» ¿Ã·Á¼ ¼º´ÉÀ» ±ØÀûÀ¸·Î Çâ»ó½ÃÄÑ ¹ö¸®´Â Á¦Ç°µéµµ ÀÖ´Ù. ±×·¯³ª ¿©±â¿¡¼´Â ÀÌ·¯ÇÑ °ÍµéÀº ´Ù·çÁö ¾ÊÀ» °ÍÀÌ´Ù. À̺¥Æ® Àü´Þ¹æ½ÄÀ» »ç¿ëÇØ¼ ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϴµ¥ ÁýÁßÇϵµ·Ï ÇϰڴÙ.
¾ÕÀ¸·ÎÀÇ Àå¿¡¼ ¿ì¸®´Â select()½Ã½ºÅÛÄݰú /dev/poll ÀÎÅÍÆäÀ̽º ±×¸®°í POSIx.4 Real Time Signal(ÀÌÇÏ RTS)ÀÇ À̺¥Æ® Àü´Þ ±â¹ýµé¿¡ ´ëÇØ¼ ´Ù·ê °ÍÀÌ´Ù. 4 À̺¥Æ® Àü´Þ ¹æ½Ä
À̹øÀå¿¡¼ ¿ì¸®´Â ´ÙÁß¿¬°áÀ» ó¸®ÇÏ´Â ¼¹öµéÀÇ µÎ°¡Áö À¯Çü¿¡ ´ëÇØ¼ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ±×¸®°í ¸®´ª½º Ä¿³Î¿¡¼ Áö¿øÇÏ´Â ¿©·¯°¡Áö À̺¥Æ® Àü´Þ¹æ½ÄµéÀ» ¾Ë¾Æº¼ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ³»¿ëµéÀº ÀÌ¹Ì ÀÌ»çÀÌÆ®¿¡¼ ¿©·¯¹ø¿¡ °ÉÃļ ´Ù·ç¾î Á³À¸¹Ç·Î ÁÖ·Î °¢°¢ÀÇ ¹æ½ÄÀÇ È¿À²¼º°ú ´ÜÁ¡, ¾î¶² °ÍÀ» ¼±ÅÃÇØ¾ß ÇÏ´ÂÁö µî¿¡ ÃÐÁ¡À» ¸ÂÃâ °ÍÀÌ´Ù. 4.1 ´ÙÁß ¿¬°áÀÇ Ã³¸®
³×Æ®¿öÅ©»ó¿¡¼ ´ÙÁß ¿¬°áÀ» ó¸®ÇÏ´Â µ¥´Â Å©°Ô 2°¡Áö ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
À§ÀÇ ÀÌÀ¯·Î ¸¹Àº ¿î¿µÃ¼Á¦µéÀÌ À̺¥Æ® ±â¹Ýó¸® ¹æ½ÄÀ» Á¦°øÇϰí ÀÖ´Ù. ¹°·Ð À̺¥Æ® ±â¹Ý 󸮸¦ µµÀÔÇÏ·Á´Â ¼¹ö´Â ´ëºÎºÐ ¸Å¿ì ¹Ù»Ú°Ô ÀÛµ¿ÇÒ °ÍÀ̶ó°í ¿¹»óÇϰí ÀÛ¼ºµÇ¹Ç·Î À̺¥Æ® 󸮹æ½Ä°ú ÇÔ²² ´ÙÁß ¾²·¹µå ±â¹ý±îÁö ÇÔ²² »ç¿ëÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ¼¹öµé¿¡¼ ¾î¶°ÇÑ À̺¥Æ® 󸮹æ½ÄÀ» »ç¿ëÇÒ °ÍÀΰ¡ ÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÑ ¹®Á¦´Ù. ¿©·¯ Á¾·ùÀÇ À̺¥Æ® 󸮹æ½ÄÀÌ Á¸ÀçÇϴµ¥ °¢°¢ ¿ëµµ¿Í ¼º´É¿¡ ÀÖ¾î¼ Â÷À̰¡ Àֱ⠶§¹®ÀÌ´Ù. ´ÙÀ½Àå¿¡¼´Â ¿©±â¿¡ ´ëÇØ¼ ÁýÁßÀûÀ¸·Î ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 5 ¸®´ª½º Ä¿³Î ¸ÅÄ¿´ÏÁò
À§¿¡¼ À̺¥Æ® ±â¹Ý ¼¹ö´Â ³×Æ®¿öÅ©»óÀÇ ÀÔÃâ·Â(I/O)ÀÇ Ã³¸®¸¦ À§Çؼ À̺¥Æ® Àü´Þ±â¹ýÀ» »ç¿ëÇϰí ÀÖ´Ù. À̹ø Àå¿¡¼´Â ¸®´ª½º Ä¿³Î¿¡¼ ¾ÖÇø®ÄÉÀ̼ǿ¡ À̹øÆ®¸¦ ÅëÁöÇϱâ À§Çؼ »ç¿ëµÇ´Â ¸î°¡Áö ¹æ¹ýµé¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ´ÙÀ½Àº ¸®´ª½º Ä¿³Î¿¡¼ Áö¿øÇÏ´Â À̺¥Æ® Àü´Þ ¹æ¹ýµéÀÌ´Ù. 5.1 select() ½Ã½ºÅÛ ÄÝ
select()´Â ´ÜÀÏ ¾²·¹µå³ª ÇÁ·Î¼¼½º¿¡¼ ¿·ÁÀÖ´Â ¿©·¯°³ÀÇ ¿¬°áÀ» ´ÙÁßÈ ½ÃÄѼ ó¸®ÇÒ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù. select()´Â fdsetÀ» °¡Áø´Ù. ÀÌ fdsetÀº 1024Å©±âÀÇ bitÅ×À̺í·Î½á ¿©±â¿¡ °ü½ÉÀÖ¾îÇÏ´Â ÆÄÀÏÀÇ ¸ñ·ÏÀ» µî·Ï½ÃŲ´Ù. ¸¸¾à µî·Ï½ÃŲ ÆÄÀÏ¿¡¼ ÀÔÃâ·ÂÀÌ ¹ß»ýÇϸé select()´Â ¸®ÅÏÇϸç À̶§ fdsetÀÇ bitÅ×À̺íÀ» ¼³Á¤ÇÑ´Ù. ¸¸¾à 4¹ø ÆÄÀÏÁöÁ¤ÀÚ¿¡ Àбâ À̺¥Æ®°¡ ¹ß»ýÇß´Ù¸é fdset[3]ÀÇ °ªÀ» 1·Î ÇØ¼ ³Ñ°ÜÁÖ´Â ¹æ½ÄÀÌ´Ù.
´ÙÀ½Àº select()ÀÇ Æ¯Â¡ÀûÀÎ ÀÛµ¿ÀÌ´Ù.
5.2 poll() ½Ã½ºÅÛ ÄÝ
poll()Àº ³»ºÎÀûÀ¸·Î select()¸¦ »ç¿ëÇÑ´Ù. ¾îÂ¸é select()¿Í ÀüÇô µ¿ÀÏÇÏ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ±×·¸Áö¸¸ ÀÎÅÍÆäÀ̽º¿¡ ÀÖ¾î¼ ¾à°£ÀÇ Â÷ÀÌÁ¡À» º¸ÀδÙ. poll()Àº °ü½ÉÀÖ´Â ÆÄÀÏÁöÁ¤ÀÚ¸¦ À¯ÁöÇϱâ À§Çؼ fdsetÀ» ÀÌ¿ëÇÏ´Â ´ë½Å¿¡ pollfd ±¸Á¶Ã¼¸¦ »ç¿ëÇÑ´Ù. ¸¸¾à pollfd±¸Á¶Ã¼¿¡¼ À¯ÁöÇϰí ÀÖ´Â ÆÄÀÏ¿¡ µ¥ÀÌÅͰ¡ ÁغñµÇ¾î ÀÖ´Ù¸é ÀÌ ±¸Á¶Ã¼¸¦ ¸®ÅÏÇÏ°Ô µÈ´Ù.
poll()ÀÌ ³»ºÎÀûÀ¸·Î select()¸¦ »ç¿ëÇϰí ÀÖ´Ù´Â °Í ¶§¹®¿¡ ¾ð¶æ »ý°¢Çϱ⿡ ¾ðÁ¦³ª select()°¡ ´õ È¿À²ÀûÀÏ °Å¶ó°í »ý°¢ÇÏÁö¸¸ ±×·¸Áö¾Ê´Ù. select()´Â poll()¿¡ ºñÇØ¼ ¸Å¿ì ³ÐÀº fdset¹üÀ§¿¡¼ ÆÄÀÏÁöÁ¤ÀÚµéÀ» °Ë»öÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. 5.3 POSIX. 4 Real Time Signals
RTS´Â Unix¿¡¼ À̺¥Æ® ÅëÁö¸¦ À§ÇØ »ç¿ëÇÏ´Â ½Ã±×³ÎÀ» È®Àå½ÃŲ ÇüÅ·Π½Ã±×³ÎÀ» °´Ã¼·Î ´Ù·ç¸ç µ¿½Ã¿¡ ½Ã±×³ÎÀÇ ´ë±â¿(queue)¸¦ À¯ÁöÇÑ´Ù. ±âÁ¸ÀÇ ½Ã±×³ÎÀº ½Ã±×³ÎÀ» ºñÆ®¸¦ ¼¼ÆÃÇÏ´Â °ÍÀ¸·Î ½Å°íÇϰ¡ Àü´Þ µÇ¾ú´ÂÁöÀÇ À¯¹«¸¦ °ü¸®ÇÑ´Ù. ±×·¯¹Ç·Î µ¿ÀÏÇÑ ½Ã±×³ÎÀÌ ºü¸¥ ½Ã°£¿¡(Çڵ鷯°¡ Á¾·áÇϱâ Àü¿¡)¿©·¯¹ø ¹ß»ýÇÏ°Ô µÈ´Ù¸é Çϳª¸¦ Á¦¿ÜÇÏ°í ¸ðµç ½Ã±×³ÎÀ» ÀÒ¾î ¹ö¸®°Ô µÈ´Ù.
´õºÒ¾î ½Ã±×³Î¿¡ ´ëÇØ¼ ºñÆ® ¼³Á¤¸¸ÀÌ ¾Æ´Ñ sigino¸¦ Àü´ÞÇϴµ¥, À̸¦ ÅëÇØ¼ ¿©·¯°¡Áö Á¤º¸µé±îÁö ÇÔ²² Àü´Þ °¡´ÉÇÏ´Ù.
´ÙÀ½Àº RTS¸¦ ÀÌ¿ëÇØ¼ ÆÄÀÏ·Î ºÎÅÍ À̺¥Æ®¸¦ ÅëÁö ¹Þ±â À§ÇÑ ÀϹÝÀûÀÎ ÄÚµåÀÌ´Ù. RTSÀÀ¿ë¿¡ ´ëÇØ¼´Â ÀÌ¹Ì ¿©·¯¹ø ´Ù·éÀûÀÌ ÀÖÀ¸¹Ç·Î ¼³¸íÀº ÇÏÁö ¾Êµµ·Ï ÇϰڴÙ. // »õ·Î¿î ¿¬°áÀÌ µé¾î¿Ô´Ù¸é int sd = accept(...); // »õ·Î¿î ¿¬°á ¼ÒÄÏ¿¡ ´ëÇØ¼ RTS¼³Á¤À» ÇÑ´Ù. fcntl (sd, F_SETOWN, getpid()); fcntl (sd, F_SETSIG, SIGRTMIN); fcntl (sd, F_SETTL, O_NONBLOCK|O_ASYNC); 6 À̺¥Æ® ÅëÁö¿¡¼ÀÇ È¿À²¼º
À̹øÀå¿¡¼´Â °¢°¢ÀÇ À̺¥Æ® ÅëÁö¹æ¹ýÀÌ ¾î´ÀÁ¤µµÀÇ È¿À²¼ºÀ» °¡Áö°í ÀÖ´ÂÁö ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. Âü°í·Î ÀÌ Å×½ºÆ®ÀÇ °á°ú´Â ÇÊÀÚÀÇ Å×½ºÆ® °á°ú°¡ ¾Æ´Ñ HP ¿¬±¸¼Ò¿¡ÀÇ Scalability of Linux Event-Dispatch Mechanisms¹®¼ÀÇ ³»¿ëÀ» ¹ßÃéÇÑ °ÍÀÓÀ» ¹ÚÈù´Ù.
ÀÌ Å×½ºÆ®¸¦ À§Çؼ (HPL)Àº uservers¶ó´Â Á¶±×¸¶ÇÑ À¥¼¹ö¸¦ ¸¸µé¾î¼ Å×½ºÆ® Çß´Ù. ¹°·Ð Å×½ºÆ®¸¦ À§Çؼ °¢ À̺¥Æ® ÅëÁö¹æ½ÄÀ» Àû¿ëÇÑ ¿©·¯°³ÀÇ À¥¼¹ö°¡ ¸¸µé¾î Á³´Ù. Å×½ºÆ®´Â 2°³ÀÇ 400MHz ÆÒƼ¾öIII CPU¸¦ ÀåÂøÇÑ ½Ã½ºÅÛ¿¡¼ ÀÌ·ç¾îÁ³´Ù. Ä¿³ÎÀº 2.4.0-test7¹öÁ¯ÀÌ´Ù. ÇöÀç 2.4.23¾ÈÁ¤¹öÁ¯±îÁö ³ª¿À°í 2.6.0-13Å×½ºÆ® ¹öÁ¯±îÁö ³ª¿Â »óÅ¿¡¼ Çö½Ç¿¡ ¾à°£ µ¿¶³¾îÁø ±¸½ÄÀÇ Ä¿³ÎÀ» »ç¿ëÇϱä ÇßÁö¸¸ °¢ À̺¥Æ® ÅëÁö ¹æ½Ä°£ ¼º´É Â÷À̸¦ ºñ±³Çϴµ¥´Â º° ¹®Á¦°¡ ¾øÀ» °ÍÀÌ´Ù. - ½Ã°£ÀÌ µÈ´Ù¸é Á÷Á¢ ÃÖ½ÅÀÇ È¯°æÀ» ¸¸µé¾î¼ Å×½ºÆ®Çϵµ·Ï Çϰڴ٠-
Å×½ºÆ® ¼¹ö°¡ ÁغñµÇ¾úÀ¸´Ï Å×½ºÆ® Ŭ¶óÀÌ¾ðÆ®µµ ÁغñµÇ¾î¾ß ÇÒ°ÍÀÌ´Ù. ¿ª½Ã Àü¿ëÀÇ Å×½ºÆ®¿ë Ŭ¶óÀÌ¾ðÆ®°¡ ÁغñµÇ¾ú´Ù. Å×½ºÆ®¿ë Ŭ¶óÀÌ¾ðÆ®´Â HP-UX10.20À» žÁ¦ÇÑ B180 RA-RISC±â°è¿¡¼ ÀÛµ¿À» ÇÑ´Ù. ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®´Â 100Mbps ÆÐ½ºÆ® ÀÌ´õ³Ý ½ºÀ§Ä¡·Î ¿¬°áµÈ´Ù. Å×½ºÆ®´Â ¸¹Àº ¼öÀÇ ¿¬°áÀ» ¸¸µé¾úÀ» ¶§ °¢°¢ÀÇ ¼¹ö°¡ ¾ó¸¶³ª ºü¸£°Ô ¹ÝÀÀÇÏ´ÂÁö ¾î´ÀÁ¤µµÀÇ CPUÀÚ¿øÀ» »ç¿ëÇÏ´ÂÁö¸¦ È®ÀÎÇÏ´Â ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù.
´ÙÀ½Àº Å×½ºÆ® °á°ú´Ù.
¼º´ÉÀÇ Â÷À̸¦ Çѹø¿¡ ¾Ë¾Æ º¼¼ö ÀÖÀ» °ÍÀÌ´Ù. 7 RTSÀÇ ´ÜÁ¡/ÇØ°á¹æ¹ý
RTS°¡ ¸Å¿ì È¿À²ÀûÀ̱ä ÇÏÁö¸¸ ¸î °¡Áö ´ÜÁ¡µéÀ» °¡Áö°í ÀÖ´Ù. À̹ø Àå¿¡¼´Â ÀÌ·¯ÇÑ RTSÀÇ ´ÜÁ¡°ú ÀÌ¿¡ ´ëÇÑ ÇØ°á¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 7.1 Linux¿¡¼ÀÇ Signal Queue Å©±â
½Ã±×³Î Å¥ÀÇ Å©±â´Â ÇÁ·Î¼¼½º´ç Á¦ÇѵǾî ÀÖÀ¸¸ç, Å©±â´Â /proc/sys/kernel/rtsig-max¿¡ Á¤ÀǵǾî ÀÖ´Ù. ¾Æ¸¶ 1024·Î ¼³Á¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ¹°·Ð Çʿ信 µû¶ó¼ °£´ÜÇÏ°Ô º¯°æ °¡´ÉÇÏ´Ù. # echo 2048 > rtsig-max¼¹öÀÇ ¿ëµµ¿¡ µû¶ó¼ Àû´çÇÑ °ªÀ» ÀÌ¿ëÇϵµ·Ï ÇÏÀÚ. 7.2 Siganl queue Overflow ¹®Á¦
ÀÌ·¯ÇÑ ´ÜÁ¡Àº ½Ã±×³Î ´ë±â¿ÀÇ Å©±â°¡ Á¦ÇѵǾî Àֱ⠶§¹®¿¡ ¹ß»ýÇÏ´Â ¹®Á¦µéÀÌ´Ù. ¼ÒÄÏ¿¡¼ ¹ß»ýÇÑ À̺¥Æ®´Â ½Ã±×³ÎÀÇ ´ë±â¿¿¡ ½×ÀδÙ. ½×ÀÎ À̺¥Æ®µéÀº sigwaitinfo()¸¦ ÅëÇØ¼ °¡Á®¿ÅÀ¸·Î½á ´ë±â¿¿¡¼ Áö¿öÁö°Ô µÈ´Ù. ±×·±µ¥ ƯÁ¤ ½Ã°£´ë¿¡ ¼¹ö°¡ ¸Å¿ì ¹Ù»µÁ®¼ ½Ã±×³Î ´ë±â¿À» ºñ¿ì´Â ¼Óµµ¸¦ ÈξÀ ÃʰúÇØ¼ À̺¥Æ®°¡ ½×ÀÌ°í °á±¹ ½Ã±×³Î ´ë±â¿ÀÌ ¸ðµÎ Â÷¹ö¸®´Â ¹®Á¦°¡ ¹ß»ýÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
½Ã±×³Î Å¥ ¿À¹öÇ÷δ µ¥µå¶ô(deadlock -±³Âø»óÅÂ)»óŸ¦ ¸¸µé ¼ö ÀÖ´Ù. ¶ÇÇÑ ´ë±â¿ÀÌ ²ËÂ÷°Ô µÉ°æ¿ì ´ç¿¬È÷ ÀÌÈÄ¿¡ ¹ß»ýÇÏ´Â ¾î¶°ÇÑ ½Ã±×³Îµµ ´ë±â¿¿¡ ½×ÀÌÁö ¸øÇÏ°í ¹ö·ÁÁö°Ô µÈ´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇÇÇϱâ À§Çؼ ¸®´ª½º Ä¿³ÎÀº ½Ã±×³Î Å¥ ¿À¹öÇ÷ξ ¹ß»ýÇÏ¸é ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î SIGIO¸¦ ¹ß»ý½ÃŲ´Ù. ¸¸¾à RTS¸¦ »ç¿ëÁß SIGIO¸¦ ÅëÁö ¹Þ¾Ò´Ù¸é ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ½Ã±×³Î Å¥ ¿À¹öÇÃ·Î¾î ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù. ºÒÇàÇϰԵµ RTS¿¡¼ÀÇ ½Ã±×³ÎÅ¥ ¿À¹öÇ÷ξîÀÇ Ã³¸®´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ²Ï³ª º¹ÀâÇÏ°Ô ¸¸µç´Ù. 7.3 Signal-per-fdÀÇ »ç¿ë
À§¿¡¼ RTSÀÇ °¡Àå Å« ´ÜÁ¡ÀÎ ½Ã±×³Î Å¥ ¿À¹öÇ÷ξ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù. À̰ÍÀº ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼ºÀ» ¸Å¿ì º¹ÀâÇÏ°Ô ¸¸µç´Ù. ±×·¸´Ù¸é °¡Àå ¹Ù¶÷Á÷ÇÑ ¹æ¹ýÀº ½Ã±×³Î Å¥ ¿À¹öÇÃ·Î¾î »óȲÀÌ ¾Æ¿¹ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.
½Ã±×³Î Å¥ ¿À¹öÇ÷ξ ¹ß»ýÇÏ°Ô µÇ´Â ÀÌÀ¯´Â °¢°¢ÀÇ ¿¬°á´ç ¿©·¯°³ÀÇ À̺¥Æ®¸¦ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù´Â µ¥¿¡¼ ¹ß»ýÇÑ´Ù. Áö±Ý 4,5,6,7,...,100 ÀÇ ¿¬°áÀÌ ¸¸µé¾îÁ® ÀÖ´Ù°í °¡Á¤À» ÇØº¸ÀÚ. À̶§ °¢°¢ÀÇ ¼ÒÄÏÀº Á¦ÇÑ ¾øÀÌ À̺¥Æ®¸¦ ¹Þ¾ÆµéÀÌ°Ô µÇ°í ±×·¯´Ù º¸´Ï À̺¥Æ®ÀÇ ÃÑÇÕÀÌ ½Ã±×³Î ´ë±â¿ÀÇ Å©±â¸¦ ¹þ¾î³ª´Â ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ±×·¸´Ù¸é °¢°¢ÀÇ ¿¬°á¿¡ ´ëÇØ¼ ´ÜÁö ÇϳªÀÇ ½Ã±×³Î¸¸ À¯ÁöÇϵµ·Ï ¸¸µç´Ù¸é ½Ã±×³Î Å¥ ¿À¹öÇÃ·Î¾î ¹®Á¦¸¦ °£´ÜÇÏ°Ô È¸ÇÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é 1000°³ÀÇ ¿©°áÀÌ ÀÖ´Ù°í ÇÏ´õ¶óµµ ÃÖ´ë 1000°³ÀÇ À̺¥Æ®¸¸ÀÌ ½Ã±×³Î Å¥¿¡ ½×ÀÏ ¼ö Àֱ⠶§¹®¿¡ Àý´ë ½Ã±×³Î Å¥ ¿À¹öÇ÷ξ ¹ß»ýÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. - Âü°í·Î ½Ã±×³Î Å¥ÀÇ Å©±â´Â ¿¼ö ÀÖ´Â ÆÄÀÏÀÇ Å©±â¿Í °°´Ù. -
ÀÌ·¸°Ô ÆÄÀÏÁöÁ¤ÀÚ´ç ÇϳªÀÇ ½Ã±×³Î¸¸ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ¸é ½Ã±×³Î Å¥ ¿À¹öÇÃ·Î¾î ¹®Á¦¸¦ ÇØ°á°¡´ÉÇϱä Çϴµ¥, ÀÌ·¸°Ô µÉ°æ¿ì ¼º´É¿¡ ÀÖ¾î¼ Èñ»ýÀ» °¡Á®¿ÀÁö ¾Ê´Â°¡ ÇÏ´Â Àǹ®ÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇϳªÀÇ ¼ÒÄÏÀÌ µ¿½Ã¿¡ ¿©·¯°³ÀÇ À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ ¹®Á¦´Â ±×¸® °ÆÁ¤ÇÒ »óȲÀÌ µÇÁö´Â ¾Ê´Â´Ù. º¸Åë ÇϳªÀÇ ¼ÒÄÏÀº ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®¿ÍÀÇ ¿¬°áÀε¥, ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®¿¡¼ µ¿½Ã¿¡(¸Å¿ì ªÀº½Ã°£¿¡) ¿©·¯°³ÀÇ À̺¥Æ®°¡ ¹ß»ýÇÏ´Â °æ¿ì´Â ÇÊ¿äÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀϹÝÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö°£¿¡ ÀÏ´ëÀÏ ¿¬°áÀÌ ¸Î¾îÁ³´Ù¸é Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¿äûÀ» º¸³»°í ¼¹ö°¡ ÀÀ´äÀ» ÇÏ¸é ´Ù½Ã Å¬¶óÀÌ¾ðÆ®°¡ ¿äûÀ» ÇÏ´Â ¹æ½ÄÀ̱⠶§¹®ÀÌ´Ù. ¸Å¿ì ¹Ù»Û À¥¼¹ö¶ó°í ÇÒÁö¶óµµ ´ÜÀÏ Å¬¶óÀÌ¾ðÆ®¿Í ¼¹öÀÇ °üÁ¡(¼ÒÄϰüÁ¡)¿¡¼ º»´Ù¸é ÇϳªÀÇ ¼ÒÄÏ¿¡ ´ëÇØ¼´Â Çѹø¿¡ ´ÜÁö ÇϳªÀÇ À̺¥Æ®¸¸ ¹ß»ýÇÑ´Ù.
°á·ÐÀûÀ¸·Î Signal-per-fd¸¦ »ç¿ëÇÏ°Ô µÉ°æ¿ì ¼¹ö¼º´É¿¡ Å« Èñ»ý ¾øÀÌ ½Ã±×³Î Å¥ ¿À¹öÇ÷ξ ÇÇÇØ³ª°¥ ¼ö ÀÖ´Ù.
´ÙÀ½Àº signal-per-fd¸¦ »ç¿ëÇÒ ¶§ ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡µéÀÌ´Ù.
8 2.4.x¿¡¼ÀÇ signal-per-fd Ä¿³Î ÆÐÄ¡
ÀÌÁ¦ ½ÇÁ¦ 2.4.xÄ¿³Î¿¡ signal-per-fd ÆÐÄ¡¸¦ Çϰí, À̸¦ ÅëÇØ¼ °£´ÜÇÑ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé¾î¼ Å×½ºÆ® ÇØ º¸µµ·Ï ÇϰڴÙ. 8.1 kernel ´Ù¿î·Îµå ¹× ÆÐÄ¡ Çϱâ
signal-per-fd°¡ ºñ±³Àû ÃÖ±Ù¿¡ Á¦°øµÈ ±â¼úÀÎ °ü°è·Î ¸ðµç ¸®´ª½º Ä¿³Î¿¡ ´ëÇÑ ÆÐÄ¡°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¼³»ç Á¸ÀçÇÑ´Ù°í ÇÏ´õ¶óµµ ã±â ¾î·Á¿î °æ¿ì°¡ ¸¹´Ù. ±×·¡¼ °¡Àå ¾ò±â ½¬¿î ÆÐÄ¡¸¦ ±âÁØÀ¸·Î Ä¿³ÎÀ» ´Ù¿î·Îµå ¹Þ¾Æ¼ ÆÐÄ¡ÈÄ ÄÄÆÄÀÏ Çϱâ·Î Çß´Ù.
google¿¡¼ signal-per-fd patch·Î ãÀº °á°ú Ä¿³Î 2.4.13¿¡ ´ëÇÑ signal-per-fdÄ¿³Î ÆÐÄ¡¸¦ ½±°Ô ãÀ» ¼ö ÀÖ¾ú´Ù. Ä¿³Î 2.4.13´Â http://www.kernel.org¿¡¼ ¹ÞÀ¸¸éµÈ´Ù. signal-per-signalÆÐÄ¡´Â one-sig-perfd-2.4.13.pat¸¦ ´Ù¿î·Îµå ¹ÞÀ¸¸é µÈ´Ù.
´Ù¿î·Îµå ¹ÞÀº Ä¿³Î¼Ò½º´Â /usr/src/linux-2.4.13¿¡ Ǭ´Ù. ±×ÈÄ ÆÐÄ¡ÆÄÀÏÀ» linux-2.4.13µð·ºÅ丮·Î À̵¿ÇÑÈÄ ´ÙÀ½°ú °°ÀÌ ÆÐÄ¡¸¦ Çϵµ·ÏÇÑ´Ù. # patch -p 1 < one-sig-perfd-241.pat ...À§ÀÇ ÆÐÄ¡ÆÄÀÏÀ» º¸¸é ´ÙÀ½°ú °°Àº ³»¿ëÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
+ /* For one signal per fd discipline, indicate signal
+ * delivery so a new one can be queued
+ */
+ if (sig >= SIGRTMIN) {
+ struct file *filep = fcheck( q->info.si_fd );
+
+ if( filep && (filep->f_auxflags & O_ONESIGFD) &
+ ( q == (siginfo_t *) filep->f_infoptr ) )
+ filep->f_infoptr = NULL;
+ }
+
/* Copy the sigqueue information and free the queue entry */
copy_siginfo(info, &q->info);
kmem_cache_free(sigqueue_cachep,q);
À§ÀÇ Äڵ带 º¸¸é f_auxflagsÀÇ ¼³Á¤ ¿©ºÎ¿¡ µû¶ó¼ signal-pre-fdÀÇ Àû¿ë¿©ºÎ°¡ °áÁ¤µÊÀ» È®ÀÎ ÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ ÄÚµå »ó¿¡¼´Â ¾Æ·¡Ã³·³ fcntlÀ» ÀÌ¿ëÇØ¼ ÇØ¼ signal-per-fd¸¦ Àû¿ë½ÃŲ´Ù. fcntl(sockfd, F_SETAUXFL, O_ONESIGFD);
ÆÐÄ¡¸¦ ³¡³Â´Ù¸é ÀÌÁ¦ Ä¿³ÎÄÄÆÄÀÏÀ» Çϵµ·Ï ÇÑ´Ù. Ä¿³Î ÄÄÆÄÀÏ ¹æ¹ýÀº ¿©±â¿¡¼ ¾ð±ÞÇÏÁö ¾Êµµ·Ï ÇϰڴÙ. 8.2 2.6¿¡¼ÀÇ signal-per-fd
2.6.xÄ¿³Î¿¡¼ signal-pre-fdÀÇ Áö¿øÀ» È®ÀÎ Çϱâ À§Çؼ kernel/signal.cÆÄÀÏÀ» È®ÀÎÇØ º¸¾Ò´Ù. Á¤È®ÇÑ Ä¿³Î¹öÁ¯Àº 2.6.0-test11ÀÌ¿´À¸¸ç, ´ÙÀ½°ú °°Àº ³»¿ëÀ» È®ÀÎ ÇÒ ¼ö ÀÖ¾ú´Ù.
/* Real-time signals must be queued if sent by sigqueue, or
some other real-time mechanism. It is implementation
defined whether kill() does so. We attempt to do so, on
the principle of least surprise, but since kill is not
allowed to fail with EAGAIN when low on memory we just
make sure at least one signal gets delivered and don't
pass on the info struct. */
if (atomic_read(&nr_queued_signals) < max_queued_signals)
q = kmem_cache_alloc(sigqueue_cachep, GFP_ATOMIC);
if (q) {
atomic_inc(&nr_queued_signals);
q->flags = 0;
list_add_tail(&q->list, &signals->list);
switch ((unsigned long) info) {
case 0:
q->info.si_signo = sig;
q->info.si_errno = 0;
q->info.si_code = SI_USER;
q->info.si_pid = current->pid;
q->info.si_uid = current->uid;
break;
case 1:
q->info.si_signo = sig;
q->info.si_errno = 0;
q->info.si_code = SI_KERNEL;
q->info.si_pid = 0;
q->info.si_uid = 0;
break;
default:
copy_siginfo(&q->info, info);
break;
}
} else {
if (sig >= SIGRTMIN && info && (unsigned long)info != 1
&& info->si_code != SI_USER)
/*
* Queue overflow, abort. We may abort if the signal was rt
* and sent by user using something other than kill().
*/
return -EAGAIN;
if (((unsigned long)info > 1) && (info->si_code == SI_TIMER))
/*
* Set up a return to indicate that we dropped
* the signal.
*/
ret = info->si_sys_private;
}
|
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|