· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Parallel-Processing-HOWTO

Linux Parallel Processing HOWTO

Linux Parallel Processing HOWTO

Hank Dietz, pplinux@ecn.purdue.edu

v980105, 5 January 1998 1Àå-2Àå ÀÌÈ£, (i@flyduck.com), 3Àå ÀÌÈÄ ¼±Á¤ÇÊ, (simje@maninet.com) 1999³â 12¿ù 3ÀÏ, ÃÖÁ¾ ¾÷µ¥ÀÌÆ®: 2000³â 4¿ù 18ÀÏ
º´·Äó¸®(Parallel Processing)´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥ ¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù. ÇÁ·Î±×·¥À» N°³ÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼­ ½ÇÇàÇÏ´Â °Íº¸´Ù N¹è±îÁö »¡¶óÁú ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¸®´ª½º »ç¿ëÀÚµéÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ³×°¡Áö º´·Ä 󸮿¡ ´ëÇÑ Á¢±Ù¹ýÀ» ´Ù·é´Ù. SMP ¸®´ª½º ½Ã½ºÅÛ, ³×Æ®¿÷À¸·Î ¿¬°áµÈ ¸®´ª½º ½Ã½ºÅÛÀÇ Å¬·¯½ºÅÍ, ¸ÖƼ¹Ìµð¾î ¸í·É¾î(MMX°°Àº)¸¦ ÀÌ¿ëÇÑ º´·Ä ¼öÇà, ÇϳªÀÇ ¸®´ª½º ½Ã½ºÅÛÀÌ È£½ºÆ®ÇÏ´Â ºÎ¼Ó (º´·Ä) ÇÁ·Î¼¼¼­(attached processor)°¡ À̵éÀÌ´Ù.

1. ¼Ò°³

º´·Äó¸®(Parallel Processing)´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥ ¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù. ÇÁ·Î±×·¥À» N°³ÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼­ ½ÇÇàÇÏ´Â °Íº¸´Ù N¹è±îÁö »¡¶óÁú ¼ö ÀÖ´Ù.

¿À·§µ¿¾È Ưº°È÷ µðÀÚÀÎÇÑ "º´·Ä ÄÄÇ»ÅÍ(parellel computer)"¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ·± °æÇâ¿¡ µû¶ó ¸®´ª½º´Â ÇöÀç ÇϳªÀÇ ÄÄÇ»ÅÍ ³»¿¡¼­ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­°¡ °°Àº ¸Þ¸ð¸®¿Í ¹ö½º ÀÎÅÍÆäÀ̽º¸¦ °øÀ¯ÇÏ´Â SMP ½Ã½ºÅÛ(Á¾Á¾ "¼­¹ö"·Î Æȸ®´Â)À» Áö¿øÇÑ´Ù. ÀÌ ¿Ü¿¡µµ ¿©·¯´ëÀÇ ÄÄÇ»Å͸¦ ±×·ìÀ» Áö¾î (¿¹¸¦ µé¾î °¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â PCµéÀÇ ±×·ì) ³×Æ®¿÷À¸·Î ¼­·Î ¿¬°áÇÏ¿© º´·Äó¸® Ŭ·¯½ºÅÍ(parellel-processing cluster)¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä ÄÄÇ»ÆÃÀÇ ¼¼¹ø° ¹æ¹ýÀº ¸ÖƼ¹Ìµð¾î È®Àå ¸í·É¾î(multimedia instruction extensions, MMX)¸¦ »ç¿ëÇÏ¿© ¼ýÀÚ µ¥ÀÌÅÍ º¤Å͸¦ º´·Ä·Î ó¸®ÇÏ´Â °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ¸®´ª½º ½Ã½ºÅÛÀ» Àü¿ëÀ¸·Î ºÎ¼Ó º´·Äó¸® ¿£Áø(attached parellel processing compute engine)ÀÇ "È£½ºÆ®"·Î »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ÀÌ ¸ðµç Á¢±Ù¹æ¹ýµéÀ» ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇÏ°Ú´Ù.

1.1 º´·Ä󸮰¡ ³»°¡ ¹Ù¶ó´ø °ÍÀΰ¡?

¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸¹Àº ¿¬»êÀÇ Ã³¸®ÇÏ´Â ¼Óµµ¸¦ ºü¸£°Ô ÇÒ ¼ö ÀÖÁö¸¸, ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀº º´·Ä󸮶ó°í Çؼ­ ¾ÆÁ÷ ³ª¾ÆÁö´Â°Ô ¾ø´Ù. ±âº»ÀûÀ¸·Î º´·Ä󸮴 ´ÙÀ½ °æ¿ì¿¡ ÇØ´çÇÒ ¶§ Àû´çÇÏ´Ù :

  • ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º´Ç༺À» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¾î´ÀÁ¤µµ ÀÌ´Â ÇÁ·Î±×·¥ Áß¿¡¼­ °¢±â ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ µ¶¸³ÀûÀ¸·Î µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ºÎºÐµéÀ» ÆľÇÇÏ´Â ¹®Á¦ÀÌ´Ù. ƯÁ¤ ½Ã½ºÅÛÀ» »ç¿ëÇÏ¿© º´·Ä·Î ½ÇÇàÇÏ´Â °æ¿ì, ¾î¶² °ÍµéÀº º´·Ä·Î ½ÇÇàÇÏ´Â°Ô ½ÇÁ¦·Î ´õ ´À¸° °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡¼­ 4ÃÊ°¡ °É¸®´Â ÇÁ·Î±×·¥ÀÌ ³× ´ëÀÇ ÄÄÇ»ÅÍ¿¡¼­ °¢°¢ 1Ãʸ¸¿¡ ½ÇÇàÀ» ³¡³½´Ù ÇÏ´õ¶óµµ, À̵é ÄÄÇ»ÅÍ°¡ ¼­·ÎÀÇ µ¿ÀÛÀ» ÅëÇÕÇϴµ¥ 3Ãʳª ±× ÀÌ»óÀÇ ½Ã°£ÀÌ °É¸°´Ù¸é ¾Æ¹«·± ¼Óµµ°³¼±ÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù.
  • °ü½ÉÀ» °¡Áö°í Àִ ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÌ¹Ì º´·ÄÈ­(º´·Äó¸®ÀÇ ÀÌÁ¡À» È°¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºµÈ) µÇ¾ú°Å³ª, º´·Äó¸®ÀÇ ÀÌÁ¡À» È°¿ëÇÏ´Â ÃÖ¼ÒÇÑÀÇ »õ·Î¿î ÄÚµùÀ» ÇÏ·Á°í ÇØ¾ß ÇÑ´Ù.
  • ¿¬±¸ºÐ¾ß¿¡ °ü½ÉÀְųª ¾î´ÀÁ¤µµ Àͼ÷ÇÑ »ç¶÷ÀÌ º´·Ä󸮸¦ Æ÷ÇÔÇϵµ·Ï ³ª¼­¾ß ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ÀÌ¿ëÇÑ º´·Ä󸮰¡ ¹Ýµå½Ã ¾î·Á¿î °ÍÀº ¾ÊÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚ¿¡°Õ Ä£¼÷ÇÏÁö ¾Ê°í, "¾Æ¹«°Íµµ ¸ð¸£´Â »ç¶÷µéÀ» À§ÇÑ º´·Äó¸®"°°Àº Ã¥µµ ¾ÆÁ÷ ¾ø´Â »óȲÀÌ´Ù. ÀÌ HOWTO ¹®¼­°¡ ¾Ë¾Æ¾ß ÇÒ ¸ðµç°ÍÀº °¡Áö°í ÀÖÁø ¾Ê´õ¶óµµ ÁÁÀº Ãâ¹ßÁ¡ÀÌ µÉ °ÍÀÌ´Ù.

ÁÁÀº ¼Ò½ÄÀº À§ÀÇ ³»¿ëÀÌ ¸ðµÎ ÇØ´çÇÑ´Ù¸é, º¹ÀâÇÑ °è»êÀ» ¼öÇàÇϰųª ¹æ´ëÇÑ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì, ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮰¡ ½´ÆÛÄÄÇ»ÅͱÞÀÇ ¼º´ÉÀ» ¹ßÈÖÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ´õ±º´Ù³ª ±×°Íµµ ´ç½ÅÀÌ ÀÌ¹Ì °¡Áö°í ÀÖÀ» °ª½Ñ Çϵå¿þ¾î¸¦ »ç¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Ù. º¸³Ê½º·Î º´·Ä ¸®´ª½º ½Ã½ºÅÛÀÌ ¹Ù»Ú°Ô º´·Ä ÀÛ¾÷À» ¼öÇàÇÏ°í ÀÖÁö ¾ÊÀ» ¶§´Â ´Ù¸¥ ¿ëµµ·Î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

º´·Ä󸮰¡ ´ç½ÅÀÌ ¹Ù¶ó´ø °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¾î´ÀÁ¤µµ ¼Ò¼ÒÇÑ ¼º´ÉÇâ»óÀ» ¹Ù¶õ´Ù¸é, ¿©ÀüÈ÷ ÇÒ ¼ö ÀÖ´Â ÀÏÀÌ ¸î°¡Áö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¼øÂ÷󸮸¦ ÇÏ´Â ÇÁ·Î±×·¥µéÀº ºü¸¥ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ°í, ¸Þ¸ð¸®¸¦ Ãß°¡ÇÏ°í, IDE µð½ºÅ©¸¦ ºü¸¥ ¿ÍÀ̵å SCSI µð½ºÅ©·Î ¹Ù²Ù´Â µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ °ü½ÉÀ» °¡Áö´Â °ÍÀÌ À̰Ŷó¸é ¹Ù·Î <@@ref>sec_PerformanceIssues¼º´É ¹®Á¦ÀåÀ¸·Î ³Ñ¾î°¡°í, ±×·¸Áö ¾ÊÀ¸¸é °è¼Ó ÀоîÁֱ⠹ٶõ´Ù.

º´·Ä 󸮰¡ ¿©·¯ºÐÀÌ ¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¿©·¯ºÐÀÌ Àû¾îµµ °¡Àå ¿Â°ÇÇÑ ¼º´É °³¼±À» ÇÏ°íÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀÌ ÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ ¾ÆÁ÷ ³²¾Æ ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ¿©·¯ºÐÀº Á» ´õ ºü¸¥ ÇÁ·Î¼¼¼­, ¸Þ¸ð¸® Ãß°¡, IDE µð½ºÅ©¸¦ ºü¸¥ ¿ÍÀ̵å SCSI·Î ¹Ù²Ù´Â µîÀÇ ÀÏÀ» ÇÔÀ¸·Î½á ½ÃÄö¼È ÇÁ·Î±×·¥µéÀÇ ¼º´ÉÀ» °³¼±ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ ¿©·¯ºÐÀÌ °ü½ÉÀÌ ÀÖ´Â ¸ðµç °ÍÀ̶ó¸é ¼½¼Ç <@@ref>sec_PerformanceIssues¼º´É ¹®Á¦<@@ref>sec_PerformanceIssues¼º´É¿¡ ´ëÇÑ ³í¶õ·Î Á¡ÇÁÇ϶ó; ±×·¸Áö ¾Ê´Ù¸é °è¼Ó Àб⠹ٶõ´Ù.

1.2 ¿ë¾î

¿©·¯ ÇØ µ¿¾È ¸¹Àº ½Ã½ºÅÛ¿¡¼­ º´·Ä󸮸¦ »ç¿ëÇØ¿ÔÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚµéÀº ¿©ÀüÈ÷ Á» ³¸¼³ °ÍÀÌ´Ù. µû¶ó¼­ º´·Äó¸®ÀÇ ¿©·¯ ¹æ¹ýµéÀ» »ìÆ캸±â Àü¿¡, ¸î°¡Áö ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¿ë¾îµé¿¡ Àͼ÷ÇØÁö´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.

SIMD (Single Instruction stream, Multiple Data stream, ´ÜÀÏ ¸í·É¾î, ´ÙÁß µ¥ÀÌÅÍ ½ºÆ®¸²) :

SIMD´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ ¶È°°Àº ¿¬»êÀ» µ¿½Ã¿¡ ½ÇÇàÇÏÁö¸¸, °¢ ÇÁ·Î¼¼¼­°¡ ÀڽŸ¸ÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇØ ¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â º´·Ä ½ÇÇà ¸ðµ¨À» °¡¸®Å²´Ù. ÀÌ ¸ðµ¨Àº ¹è¿­ÀÇ ¸ðµç ¿ø¼Ò¿¡ ´ëÇؼ­ ¶È°°Àº ¿¬»êÀ» ¼öÇàÇÏ´Â °³³ä¿¡ ÀÚ¿¬È÷ µé¾î¸ÂÀ¸¸ç, µû¶ó¼­ Á¾Á¾ º¤Åͳª ¹è¿­ ó¸®¿Í °ü·ÃµÈ´Ù. ¸ðµç ¿¬»êÀÌ º»·¡ µ¿±âÈ­µÇ¾îÀÖÀ¸¹Ç·Î, SIMD ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀº ´ëü·Î ½±°í È¿°úÀûÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

MIMD (Multiple Instruction stream, Multiple Data stream, ´ÙÁß ¸í·É¾î, ´ÙÁß µ¥ÀÌÅÍ ½ºÆ®¸²) :

MIMD´Â °¢ ÇÁ·Î¼¼¼­°¡ ±Ùº»ÀûÀ¸·Î µ¶¸³ÀûÀ¸·Î µ¿ÀÛÇÏ´Â º´·Ä ½ÇÇà ¸ðµ¨À» °¡¸®Å²´Ù. ÀÌ ¸ðµ¨Àº ÇÁ·Î±×·¥À» ±â´ÉÀûÀÎ Åä´ë¿¡ ¹ÙÅÁÇÏ¿© º´·Ä ½ÇÇàÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î ÂÉ°³´Â °³³ä¿¡ ´ëºÎºÐ ÀÚ¿¬½º·´°Ô µé¾î¸Â´Â´Ù. ¿¹¸¦ µé¾î, ÇÑ ÇÁ·Î¼¼¼­´Â »õ·Î¿î ¿£Æ®¸®¸¦ ±×·¡ÇÈ È­¸éÀ¸·Î ¸¸µé°í ÀÖÀ» ¶§, ´Ù¸¥ ÇÁ·Î¼¼¼­´Â µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀ» °»½ÅÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â SIMD º¸´Ù´Â ´õ À¯¿¬ÇÑ ¸ðµ¨ÀÌÁö¸¸, ÇÑ ÇÁ·Î¼¼¼­ÀÇ ¿¬»ê°ú ´Ù¸¥ ÇÁ·Î¼¼¼­ÀÇ ¿¬»êÀÇ »ó´ë¼øÀ§°¡ ¹Ù²î´Â ½Ã°£ º¯È­·Î ÀÎÇÏ¿© ÇÁ·Î±×·¥ÀÌ ½ÇÆÐÇÒ ¼ö ÀÖ´Â °æÁÖ »óȲ(race conditions)¶ó´Â ¾Ç¸ùÀÇ µð¹ö±ëÀ» °¨¼öÇØ¾ß ÇÑ´Ù.

SPMD (Single Program, Multiple Data, ´ÜÀÏ ÇÁ·Î±×·¥, ´ÙÁß µ¥ÀÌÅÍ) :

SPMD´Â MIMDÀÇ Á¦ÇÑµÈ ¹öÀüÀ¸·Î ¸ðµç ÇÁ·Î¼¼¼­°¡ °°Àº ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. SIMD¿Í´Â ´Þ¸®, SPMD Äڵ带 ½ÇÇàÇÏ´Â °¢ ÇÁ·Î¼¼¼­´Â ÇÁ·Î±×·¥À» ½ÇÇà °úÁ¤¿¡¼­ ´Ù¸¥ Á¦¾î È帧 °úÁ¤À» µû¸¦ ¼ö ÀÖ´Ù.

Åë½Å ´ë¿ªÆø (Communication Bandwidth) :

Åë½Å ½Ã½ºÅÛÀÇ ´ë¿ªÆøÀº µ¥ÀÌÅÍ Àü¼ÛÀ» ½ÃÀÛÇÑ ¶§ºÎÅÍ ¾î¶² ´ÜÀ§ÀÇ ½Ã°£µ¿¾È Àü¼ÛÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ÃÖ´ëÅ©±âÀÌ´Ù. Á÷·Ä ¿¬°á¿¡¼­´Â ´ë¿ªÆøÀ» ´ë°³ baud ¶Ç´Â ºñÆ®/ÃÊ (b/s)·Î Ç¥½ÃÇϴµ¥, ÀϹÝÀûÀ¸·Î ÀÌ°ÍÀÇ 1/10¿¡¼­ 1/8ÀÌ ¹ÙÀÌÆ®/ÃÊ (B/s)¿¡ ÇØ´çÇÑ´Ù. ¿¹¸¦ µé¾î, 1200 baud ¸ðµ©Àº ¾à 120 B/sÀÇ ¼Óµµ·Î Àü¼ÛÀ» ÇÏ°í, ¹Ý¸é¿¡ 155 Mb/s ATM ³×Æ®¿÷ ¿¬°áÀº À̺¸´Ù 130000¹è °¡·® ºü¸¥, ¾à 17 MB/sÀÇ ¼Óµµ·Î Àü¼ÛÀ» ÇÑ´Ù. Å« ´ë¿ªÆøÀº ÇÁ·Î¼¼¼­ »çÀÌ¿¡ Å« µ¥ÀÌÅÍ ºí·°À» È¿À²ÀûÀ¸·Î Àü¼ÛÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.

Åë½Å Áöü (Communication Latency) :

Åë½Å ½Ã½ºÅÛÀÇ Áöü(latency)´Â º¸³»°í ¹Þ´Â ¼ÒÇÁÆ®¿þ¾îÀÇ ¿À¹öÇìµå¸¦ Æ÷ÇÔÇÏ¿©, ÇÑ °´Ã¼¸¦ Àü¼ÛÇϴµ¥ °É¸®´Â ÃÖ¼ÒÇÑÀÇ ½Ã°£À» ¸»ÇÑ´Ù. Áöü´Â º´·Ä󸮿¡¼­ ¸Å¿ì Áß¿äÇѵ¥, º´·Ä ½ÇÇàÀ¸·Î ¼Óµµ¸¦ Çâ»ó½Ãų ¼ö ÀÖ´Â ÄÚµå Á¶°¢ÀÇ ÃÖ¼Ò ½ÇÇà ½Ã°£ÀÎ, ÃÖ¼Ò À¯¿ë ¾Ë°»ÀÌ Å©±â(minimum useful grain size)¸¦ °áÁ¤Çϱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î ÄÚµå Á¶°¢À» ½ÇÇàÇÏ´Â ½Ã°£ÀÌ °á°ú°ªÀ» Àü¼ÛÇÏ´Â ½Ã°£(Áï, Áöü)º¸´Ù ªÀ» ¶§, ±× ÄÚµå Á¶°¢À» °á°ú°ªÀ» ÇÊ¿ä·Î ÇÏ´Â ÇÁ·Î¼¼¼­¿¡¼­ Á÷·Ä·Î ½ÇÇàÇÏ´Â °ÍÀÌ º´·Ä·Î ½ÇÇàÇÏ´Â °Íº¸´Ù ´õ ºü¸£´Ù. Á÷·Ä·Î ½ÇÇàÇÏ´Â °ÍÀº Åë½Å ¿À¹öÇìµå°¡ ¾ø±â ¶§¹®ÀÌ´Ù.

¸Þ½ÃÁö Àü´Þ (Message Passing) :

¸Þ½ÃÁö Àü´ÞÀº º´·Ä ½Ã½ºÅÛ ³»ºÎ¿¡¼­ ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¸ðµ¨ÀÌ´Ù. ÀϹÝÀûÀ¸·Î, ¸Þ½ÃÁö´Â ÇÑ ÇÁ·Î¼¼¼­¿¡ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¿¡¼­ ¸¸µé¾îÁö°í, »óÈ£¿¬°á ³×Æ®¿÷À» ÅëÇÏ¿© ´Ù¸¥ ÇÁ·Î¼¼¼­·Î Àü´ÞµÇ¾î, ¿©±â¼­ À̸¦ ¹Þ¾Æ ¸Þ½ÃÁö ³»¿ë¿¡ µû¶ó µ¿ÀÛÇÏ°Ô µÈ´Ù. °¢ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ¿À¹öÇìµå(Áöü)°¡ Ŭ ¼ö ÀÖÁö¸¸, ´ë°³ °¢ ¸Þ½ÃÁö°¡ ¾î´À Á¤µµ Å©±âÀÇ Á¤º¸¸¦ °¡Áú ¼ö ÀÖ´ÂÁö¿¡´Â °ÅÀÇ Á¦ÇÑÀ» µÎÁö ¾Ê´Â´Ù. ±×·¡¼­ ¸Þ½ÃÁö Àü´ÞÀº Å« ´ë¿ªÆøÀ» ÃÊ·¡Çϱ⵵ Çϸç, ÇÑ ÇÁ·Î¼¼¼­¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼¼­·Î Å« µ¥ÀÌÅÍ ºí·°À» Àü´ÞÇÏ´Â °ÍÀ» ¸Å¿ì È¿À²ÀûÀÎ ¹æ¹ýÀ¸·Î 󸮵µ·Ï µÇ¾î ÀÖ´Ù. ±×·¸Áö¸¸, °ªºñ½Ñ ¸Þ½ÃÁö Àü´Þ ¿¬»êÀÇ Çʿ並 ÃÖ¼ÒÈ­ÇÒ ¼ö ÀÖµµ·Ï, º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÀڷᱸÁ¶´Â ÇÁ·Î¼¼¼­ °£¿¡ ³Î¸® ÆÛÁ® À־ °¢ ÇÁ·Î¼¼¼­°¡ ÂüÁ¶ÇÏ´Â ´ëºÎºÐÀÇ µ¥ÀÌÅÍ´Â ÀÚ½ÅÀÇ Áö¿ª ¸Þ¸ð¸® »ó¿¡ ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» µ¥ÀÌÅÍ ¹èÄ¡(data layout)¶ó°í ÇÑ´Ù.

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

°øÀ¯ ¸Þ¸ð¸®´Â º´·Ä ½Ã½ºÅÛ ³»ºÎ¿¡¼­ ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¸ðµ¨ÀÌ´Ù. ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â ¸ÖƼÇÁ·Î¼¼¼­ ÆæƼ¾ö ÄÄÇ»ÅÍ°°Àº ½Ã½ºÅÛÀº ¹°¸®ÀûÀ¸·Î ÇÁ·Î¼¼¼­°£¿¡ ÇϳªÀÇ ´ÜÀÏ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÑ´Ù. µû¶ó¼­ ÇÑ ÇÁ·Î¼¼¼­°¡ °øÀ¯ ¸Þ¸ð¸®¿¡ °ªÀ» ±â·ÏÇϸé, ´Ù¸¥ ¾î¶² ÇÁ·Î¼¼¼­µçÁö ÀÌ °ªÀ» Á÷Á¢ ÀÐÀ» ¼ö ÀÖ´Ù. ÀÌ¿Í ´Þ¸® ³í¸®ÀûÀÎ °øÀ¯ ¸Þ¸ð¸®´Â °¢ ÇÁ·Î¼¼¼­°¡ ÀڽŸ¸ÀÇ ¸Þ¸ð¸®¸¦ °¡Áö¸ç, Áö¿ª ¸Þ¸ð¸®¿¡ ¾ø´Â ¸Þ¸ð¸®¸¦ ÂüÁ¶Çϸé À̸¦ ÇØ´çÇÏ´Â ÇÁ·Î¼¼¼­°£ Åë½ÅÀ¸·Î º¯È¯ÇØÁÜÀ¸·Î½á ±¸ÇöÇÑ´Ù. ÀÌµé °¢°¢ÀÇ °øÀ¯ ¸Þ¸ð¸® ±¸ÇöÀº ÀϹÝÀûÀ¸·Î ¸Þ½ÃÁö Àü´Þº¸´Ù »ç¿ëÇϱ⠽±°Ô µÇ¾î ÀÖ´Ù. ¹°¸®ÀûÀÎ ¸Þ¸ð¸® °øÀ¯´Â Å« ´ë¿ªÆøÀ» °¡Áö¸ç Áöü°¡ ÀûÁö¸¸, ÀÌ´Â ´ÜÁö ¿©·¯ ÇÁ·Î¼¼¼­°¡ µ¿½Ã¿¡ ¹ö½º¿¡ Á¢±ÙÇÏ·ÁÇÏÁö ¾ÊÀ» ¶§¸¸ÀÌ´Ù. µû¶ó¼­ µ¥ÀÌÅÍ ¹èÄ¡(data layout)´Â ¿©ÀüÈ÷ ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖÀ¸¸ç, ij½Ã È¿°ú µîÀº ¾î¶»°Ô ¹èÄ¡ÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº °ÍÀÎÁö °áÁ¤Çϱâ Èûµé°Ô ¸¸µç´Ù.

ÁýÇÕ ÇÔ¼ö (Aggregate Functions) :

¸Þ½ÃÁö Àü´Þ°ú °øÀ¯ ¸Þ¸ð¸® ¸ðµ¨¿¡¼­ Åë½ÅÀº ¸ðµÎ ÇϳªÀÇ ´ÜÀÏ ÇÁ·Î¼¼¼­¿¡¼­ ½ÃÀÛÇÑ´Ù. ÀÌ¿Í ¹Ý´ë·Î ÁýÇÕ ÇÔ¼ö Åë½ÅÀº º»·¡ ¸ðµç ÇÁ·Î¼¼¼­ ±×·ìÀÌ ¼­·Î ÀÛ¿ëÇÒ ¼ö ÀÖ´Â º´·Ä Åë½Å ¸ðµ¨ÀÌ´Ù. ÀÌ·± ÀÛ¿ëÀÇ °¡Àå °£´ÜÇÑ °ÍÀº À庮 µ¿±âÈ­(barrier synchronization)·Î, °³º° ÇÁ·Î¼¼¼­µéÀÌ ±×·ì¿¡ ÀÖ´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ À庮¿¡ µµ´ÞÇÏ±æ ±â´Ù¸®´Â °ÍÀÌ´Ù. °³º° ÇÁ·Î¼¼¼­°¡ À庮¿¡ µµÂøÇϸ鼭 ºÎ¼öÈ¿°ú(side effect)·Î µ¥ÀÌÅ͸¦ Ãâ·ÂÇϸé, Åë½Å Çϵå¿þ¾î´Â ¸ðµç ÇÁ·Î¼¼¼­¿¡¼­ ¼öÁýÇÑ °ªµé¿¡ ÀÓÀÇÀÇ ÇÔ¼ö¸¦ Àû¿ëÇÑ °á°ú°ªÀ» °¢ ÇÁ·Î¼¼¼­¿¡°Ô Àü´ÞÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ±× °á°ú°ªÀº "¾î¶² ÇÁ·Î¼¼¼­°¡ Çظ¦ ã¾Ò´À³Ä"´Â Áú¹®ÀÇ ´ë´äÀÏ ¼öµµ, °¢ ÇÁ·Î¼¼¼­¿¡¼­ ¿Â °ªµéÀÇ ÇÕÀÏ ¼öµµ ÀÖ´Ù. Áöü(latency)´Â ¸Å¿ì Àû°ÚÁö¸¸, ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ Â÷ÁöÇÏ´Â ´ë¿ªÆø ¿ª½Ã ÀûÀº °æÇâÀÌ ÀÖ´Ù. ÀüÅëÀûÀ¸·Î ÀÌ ¸ðµ¨Àº µ¥ÀÌÅÍ °ªÀ» ºÐ»êÇϱ⺸´Ù´Â º´·Ä ½ÇÇàÀ» Á¦¾îÇϴµ¥ ÁÖ·Î »ç¿ëµÈ´Ù.

ÃÑ°ý Åë½Å (Collective Communication) :

ÀÌ´Â ÁýÇÕ ÇÔ¼ö(aggregate function)ÀÇ ´Ù¸¥ À̸§À¸¸£, ´ëºÎºÐ ´ÙÁß ¸Þ½ÃÁö Àü´Þ ¿¬»êÀ» ÀÌ¿ëÇÏ¿© ±¸ÃàµÈ ÁýÇÕ ÇÔ¼ö¸¦ °¡¸®Å°´Âµ¥ »ç¿ëµÈ´Ù.

SMP (Symmetric Multi-Processor, ´ëĪÇü ¸ÖƼÇÁ·Î¼¼¼­)

SMP´Â ÀÏ·ÃÀÇ ÇÁ·Î¼¼¼­µéÀÌ ¼­·Î ´ëµîÇÏ°Ô ÇÔ²² µ¿ÀÛÇÏ¿©, ¾î¶² ÀÛ¾÷ Á¶°¢À̵çÁö ¾î¶² ÇÁ·Î¼¼¼­¿¡¼­µç ¶È°°ÀÌ ½ÇÇàµÉ ¼ö ÀÖ´Â ¿î¿µÃ¼Á¦ °³³äÀ» ¸»ÇÑ´Ù. ´ëü·Î SMP´Â MIMD¿Í °øÀ¯¸Þ¸ð¸®¸¦ °áÇÕÇÑ °ÍÀÌ´Ù. IA32 °è¿­¿¡¼­ SMP´Â ÀϹÝÀûÀ¸·Î MPS(Intel Multi-Processor Specification, ÀÎÅÚ ¸ÖƼÇÁ·Î¼¼¼­ ±Ô¾à)¿Í ȣȯµÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¾ÕÀ¸·Î´Â ÀÌ°ÍÀº "Slot 2"¸¦ ÀǹÌÇÏ°Ô µÉ °ÍÀÌ´Ù...

SWAR (SIMD Within A Register, ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD) :

SWAR´Â ÇϳªÀÇ ·¹Áö½ºÅ͸¦ ¿©·¯°³ÀÇ Á¤¼ö Ç׸ñÀ¸·Î ÂÉ°³°í ·¹Áö½ºÅÍ ³ÊºñÀÇ ¿¬»êÀ» »ç¿ëÇÏ¿© À̵é Ç׸ñµé¿¡ SIMD º´·Ä °è»êÀ» ¼öÇàÇÑ´Ù´Â °³³äÀ» °¡¸®Å°´Â ÀϹÝÀûÀÎ ¿ë¾îÀÌ´Ù. k-bit ·¹Áö½ºÅÍ¿Í µ¥ÀÌÅÍ Åë·Î, ÇÔ¼ö ´ÜÀ§¸¦ °®´Â ±â°è°¡ ÀÖÀ» ¶§, ¿À·¡ÀüºÎÅÍ º¸ÅëÀÇ ·¹Áö½ºÅÍ ¿¬»êÀ» »ç¿ëÇÏ¿© n°³ÀÇ k/n ºñÆ® Ç׸ñ °ª¿¡ SIMD º´·Ä ¿¬»êÀ» ÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁ®¿Ô´Ù. ÀÌ·± ¹æ½ÄÀÇ º´·Ä¼ºÀº º¸ÅëÀÇ Á¤¼ö ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖÁö¸¸, ¸¹Àº °í¼º´É ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µéÀº ¸ÖƼ¹Ìµð¾î À§ÁÖ ÀÛ¾÷¿¡ ÀÌ ±â¹ýÀÇ ¼º´ÉÀ» ³ôÀ̱â À§ÇØ Ãֱ٠Ưº° ¸í·É¾îµéÀ» Ãß°¡Çß´Ù. ÀÎÅÚ/AMD/CyrixÀÇ MMX(MultiMedia eXtension)¸¦ ºñ·ÔÇÏ¿©, µðÁöÅÐ(Digital) AlphaÀÇ MAX(MultimediA eXtensions), ÈÞ·¿- ÆÑÄ¿µå(Hewlett-Packard) PA-RISCÀÇ MAX(Multimedia Acceleration eXtensions), MIPSÀÇ MDMX(Digital Media eXtension, "Mad Max"¶ó°í ¹ßÀ½ÇÑ´Ù), ¼±(Sun) SPARCÀÇ V9 VIS(Visual Instruction Set) µîÀÌ ÀÖ´Ù. MMX¿¡ µ¿ÀÇÇÑ ¼¼ ȸ»ç¸¦ Á¦¿ÜÇÏ°í, À̵é È®Àå ¸í·É¾îµéÀº ´ëÃæÀº ºñ½ÁÇÏÁö¸¸, ¼­·Î ȣȯµÇÁö´Â ¾Ê´Â´Ù.

ºÎ¼Ó ÇÁ·Î¼¼¼­ (Attached Processors) :

ºÎ¼Ó ÇÁ·Î¼¼¼­´Â º»ÁúÀûÀ¸·Î Ưº°ÇÑ À¯ÇüÀÇ °è»ê ¼Óµµ¸¦ °¡¼ÓÇϱâ À§ÇÑ È£½ºÆ® ½Ã½ºÅÛ¿¡ ¿¬°áµÈ Ưº°ÇÑ ¸ñÀûÀ» °¡Áø ÄÄÇ»ÅÍÀÌ´Ù. ¿¹¸¦ µé¾î, PC¿¡ ÀÖ´Â ¸¹Àº ºñµð¿À¿Í ¿Àµð¿À Ä«µå´Â Á¦°¢±â ÀÏ¹Ý ±×·¡ÇÈ ¿¬»ê°ú ¿Àµð¿À DSP(Digital Signal Processing, µðÁöÅÐ ½ÅÈ£ ó¸®) ¼Óµµ¸¦ ³ôÀ̵µ·Ï µðÀÚÀÎµÈ ºÎ¼Ó ÇÁ·Î¼¼¼­¸¦ °¡Áö°í ÀÖ´Ù. ¶ÇÇÑ ¹è¿­¿¡ ´ëÇÑ »ê¼ú ¿¬»ê ¼Óµµ¸¦ ºü¸£°Ô Çϱâ À§ÇÑ, ³ÐÀº ¹üÀ§ÀÇ ºÎ¼Ó ¹è¿­ ÇÁ·Î¼¼¼­(attached array processor)µéÀÌ ÀÖ´Ù. ¸¹Àº »ó¾÷¿ë ½´ÆÛÄÄÇ»Å͵éÀº ½ÇÁ¦·Î ¿öµå½ºÅ×ÀÌ¼Ç È£½ºÆ®¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­·Î µÇ¾î ÀÖ´Ù.

RAID (Redundant Array of Inexpensive Disk, ¿©ºÐÀÇ °ª½Ñ µð½ºÅ© ¹è¿­) :

RAID´Â µð½ºÅ© I/OÀÇ ½Å·Ú¼º°ú ´ë¿ªÆøÀ» ´Ã¸®´Â °£´ÜÇÑ ±â¼úÀÌ´Ù. ¿©±â¿¡´Â ¿©·¯°¡Áö ¼­·Î ´Ù¸¥ º¯ÇüÀÌ ÀÖÁö¸¸, ¸ðµÎ µÎ°¡Áö ÇÙ½É °³³äÀ» °øÀ¯ÇÏ°í ÀÖ´Ù. ¸ÕÀú, °¢ µ¥ÀÌÅÍ ºí·°Àº n+k µð½ºÅ© µå¶óÀÌºê ±×·ìÀ¸·Î ÁÙÀ» Áö¾î, °¢ µå¶óÀ̺ê´Â ´ÜÁö µ¥ÀÌÅÍÀÇ 1/n ¸¸Å­ ÀÐ°í ¾²±â¸¸ ÇÏÁö¸¸, °¢ µå¶óÀÌºê ´ë¿ªÆøÀÇ n¹èÀÇ ´ë¿ªÆøÀ» °¡Áö°Ô µÈ´Ù. µÎ¹ø°·Î, ¿©ºÐÀ¸·Î µ¥ÀÌÅ͸¦ ±â·ÏÇÏ¿©, ÇÑ µð½ºÅ© µå¶óÀ̺갡 ½ÇÆÐÇÏ´õ¶óµµ µ¥ÀÌÅ͸¦ º¹±¸ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ°ÍÀº ¸Å¿ì Áß¿äÇѵ¥, ±×·¸Áö ÇÏÁö ¾ÊÀ¸¸é n+k µå¶óÀ̺ê Áß Çϳª°¡ ½ÇÆÐÇÑ °æ¿ì Àüü ÆÄÀÏ ½Ã½ºÅÛÀÌ ³¯¶ó°¥ ¼ö Àֱ⠶§¹®ÀÌ´Ù. http://www.dpt.com/uraiddoc.html¿¡ °¡¸é RAID Àü¹Ý¿¡ °üÇÑ ÁÁÀº °³¿ä°¡ ÀÖ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼­ÀÇ RAID ¿É¼Ç¿¡ ´ëÇÑ Á¤º¸´Â http://linas.org/linux/raid.html¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. Àü¹® RAID Çϵå¿þ¾î Áö¿ø°ú´Â º°µµ·Î, ¸®´ª½º´Â ÇϳªÀÇ ¸®´ª½º ½Ã½ºÅÛÀÌ ¿©·¯°³ÀÇ µð½ºÅ©¸¦ È£½ºÆ®ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î RAID 0, 1, 4, 5µµ Áö¿øÇÑ´Ù. ÀÚ¼¼ÇÑ °ÍÀº ¼ÒÇÁÆ®¿þ¾î RAID mini-HOWTO¿Í ´ÙÁß µð½ºÅ© Æ©´×(Multi-Disk Tuning) mini-HOWTO¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â ¿©·¯ ±â°è¿¡ ÀÖ´Â µð½ºÅ© µå¶óÀ̺êµéÀÇ RAID´Â Á÷Á¢ÀûÀ¸·Î Áö¿øµÇÁö ¾Ê´Â´Ù.

IA32 (Intel Architecture, 32-bit, ÀÎÅÚ 32ºñÆ® ¾ÆÅ°ÅØÃÄ) :

IA32´Â ½ÇÁ¦·Î º´·Äó¸®ÇÏ°í´Â °ü·ÃÀÌ ¾ø°í, ´ÜÁö ÀϹÝÀûÀ¸·Î ÀÎÅÚ 386 ÇÁ·Î¼¼¼­¿Í ȣȯµÈ´Â ¸í·É¾î ÁýÇÕÀ» °¡Áö´Â ÇÁ·Î¼¼¼­µéÀÇ ºÎ·ù¸¦ °¡¸®Å²´Ù. ±âº»ÀûÀ¸·Î, 286 ´ÙÀ½¿¡ ³ª¿Â ¸ðµç ÀÎÅÚ x86 ÇÁ·Î¼¼¼­´Â IA32ÀÇ Æ¯Â¡ÀÎ 32ºñÆ® Ç÷§ ¸Þ¸ð¸® ¸ðµ¨(flat memory model)°ú ȣȯµÈ´Ù. AMD¿Í Cyrix ¿ª½Ã ¼ö¸¹Àº IA32 ȣȯ ÇÁ·Î¼¼¼­¸¦ ¸¸µç´Ù. ¸®´ª½º°¡ ÁÖ·Î IA32 ÇÁ·Î¼¼¼­¿¡¼­ ¹ßÀüÇØ¿ÔÀ¸¸ç, IA32°¡ »óÇ°½ÃÀåÀÇ Á߽ɿ¡ Àֱ⠶§¹®¿¡, PowerPC³ª Alpha, PA-RISC, MIPS, SPARC µîÀÇ ´Ù¸¥ ÇÁ·Î¼¼¼­¿Í ±¸º°ÇÏ¿© IA32¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. °ð Ãâ½ÃµÉ IA64(EPIC, Explicitly Parallel Instruction Computing, ¸í½ÃµÈ º´·Ä ¸í·É °è»êÀ» Áö¿øÇÏ´Â 64ºñÆ® ÇÁ·Î¼¼¼­)´Â ¾Æ¸¶µµ º¹ÀâÇÑ ¹®Á¦°¡ µÇ°ÚÁö¸¸, óÀ½ ³ª¿À°Ô µÉ IA64 ÇÁ·Î¼¼¼­ÀÎ ¸Ó¼¼µå(Merced)´Â 1999³â±îÁö´Â Á¦Ç°ÀÌ ³ª¿ÀÁø ¾ÊÀ» ¿¹Á¤ÀÌ´Ù.

COTS (Commercial Off-The-Shelf, »ó¾÷¿ë ±â¼ºÇ°)

¸¹Àº º´·Ä ½´ÆÛÄÄÇ»ÅÍ È¸»çµéÀÌ »ç¶óÁö¸é¼­, COTS´Â º´·Ä °è»ê ½Ã½ºÅÛÀÇ ÇÊ¿äÁ¶°ÇÀ¸·Î ÀϹÝÀûÀ¸·Î ´Ù·ç¾îÁö°Ô µÇ¾ú´Ù. ¾ÆÁÖ ÀÌ·ÐÀûÀ¸·Î Çϸé, PC¸¦ »ç¿ëÇÏ´Â À¯ÀÏÇÑ COTS º´·Äó¸® ±â¹ýÀº SMP Windows NT ¼­¹ö¿Í ¿©·¯ MMX Windows ÀÀ¿ëÇÁ·Î±×·¥°°Àº °É·Î ¸¸µé¾îÁø °ÍÀÌ´Ù. COTS °³³äÀÇ ±â¹ÝÀº »ç½Ç»ó °³¹ß ½Ã°£°ú ºñ¿ëÀÇ ÃÖ¼ÒÈ­ÀÌ´Ù. µû¶ó¼­ ´õ À¯¿ëÇÏ°í, ´õ ÀϹÝÀûÀÎ, COTSÀÇ Àǹ̴ Àû¾îµµ ´ëºÎºÐÀÇ ¼­ºê½Ã½ºÅÛÀº ±â¼º Á¦Ç° ½ÃÀå¿¡¼­ À̵æÀ» ¾ò¾î¾ß ÇÏÁö¸¸, ´Ù¸¥ ±â¼úµéÀº È¿À²ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Â °÷¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì, COTS º´·Ä󸮴 ³ëµå´Â ±â¼º PCÀÌÁö¸¸ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¿Í ¼ÒÇÁÆ®¿þ¾î´Â ¾î´ÀÁ¤µµ ¸ÂÃãÀ¸·Î ¸¸µç Ŭ·¯½ºÅ͸¦ °¡¸®Å²´Ù. ´ë°³ ½ÇÇàÇÒ ¸®´ª½º¿Í ÀÀ¿ëÇÁ·Î±×·¥ ÄÚµå´Â ÀÚÀ¯·Ó°Ô ±¸ÇÒ ¼ö ÀÖÁö¸¸ (copyleftÀ̰ųª public domainÀÎ), ¹®ÀÚ ±×´ë·Î COTS´Â ¾Æ´Ï´Ù.

1.3 ¿¹Á¦ ¾Ë°í¸®Áò

ÀÌ HOWTO¿¡¼­ ¾ð±ÞÇÏ°í ÀÖ´Â ¿©·¯°¡Áö º´·Ä ÇÁ·Î±×·¡¹Ö Á¢±Ù ¹æ¹ýµéÀÇ »ç¿ë¹ýÀ» Á» ´õ Àß ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï, ¿¹Á¦ ¹®Á¦¸¦ Çϳª ´Ù·ç¾îº¸µµ·Ï ÇÏÀÚ. ºñ·Ï °£´ÜÇÑ º´·Ä ¾Ë°í¸®ÁòÀÌÁö¸¸, ¿©·¯ ´Ù¸¥ º´·Ä ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀ» ½Ã¿¬Çϴµ¥ »ç¿ëÇØ¿Ô´ø ¾Ë°í¸®ÁòÀ» ¼±ÅÃÇÔÀ¸·Î½á, °¢ Á¢±Ù¹æ¹ýÀ» ºñ±³ÇÏ°í ´ëÁ¶ÇÏ´Â °ÍÀÌ Á¶±Ý ´õ ½¬¿ï °ÍÀÌ´Ù. M.J.QuinnÀÇ Ã¥ (Parallel Computing Theory And Prictice (º´·Ä °è»ê À̷аú ½Ç½À)); 2ÆÇ, McGraw Hill, New York, 1994¿¡¼­´Â, ´Ù¾çÇÑ ¼­·Î ´Ù¸¥ º´·Ä ½´ÆÛÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ȯ°æ(¿¹¸¦ µé¾î, nCUBE ¸Þ½ÃÁö Àü´Þ, ¼øÂ÷ °øÀ¯ ¸Þ¸ð¸®(sequent shared memory))À» ½Ã¿¬Çϱâ À§ÇØ, Pi °ªÀ» °è»êÇÏ´Â º´·Ä ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ HOWTO¿¡¼­, ¿ì¸®µµ ¶È°°Àº ±âº» ¾Ë°í¸®ÁòÀ» »ç¿ëÇϵµ·Ï ÇÏÀÚ.

ÀÌ ¾Ë°í¸®ÁòÀº xÀÇ Á¤»ç°¢Çü ¾Æ·¡¿¡ ÀÖ´Â ¿µ¿ªÀ» ÇÕÇÏ¿© PiÀÇ ±Ù»ç°ªÀ» °è»êÇÑ´Ù. ¼ø¼öÇÑ ¼øÂ÷ C ÇÁ·Î±×·¥À¸·Î ¸¸µç´Ù¸é ¾Ë°í¸®ÁòÀº ´ÙÀ½°ú ºñ½ÁÇÒ °ÍÀÌ´Ù.


  #include <stdlib.h>;
  #include <stdio.h>;

  main(int argc, char **argv)
  {
    register double width, sum;
    register int intervals, i;

    /* get the number of intervals */
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;

    /* do the computation */
    sum = 0;
    for (i=0; i<intervals; ++i) {
      register double x = (i + 0.5) * width;
      sum += 4.0 / (1.0 + x * x);
    }
    sum *= width;

    printf("Estimation of pi is %f\n", sum);

    return(0);
  }

±×·¸Áö¸¸ ÀÌ ¼øÂ÷ ¾Ë°í¸®ÁòÀº ½±°Ô "°ï¶õÇÑ º´·Ä(embarrassingly parallel)" ±¸ÇöÀÌ µÈ´Ù. ÀÌ ¿µ¿ªµéÀº °£°Ý(intarval)º°·Î ÂÉ°³°í, ÇÁ·Î¼¼¼­°¡ ¸î°³¶óµµ ÇÁ·Î¼¼¼­°£¿¡ »óÈ£ÀÛ¿ëÇÒ ÇÊ¿ä ¾øÀÌ, Àڱ⿡°Ô ÇÒ´çµÈ °£°ÝÀ» µ¶¸³ÀûÀ¸·Î ÇÕÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü Áö¿ªº°·Î ÇÕÀÌ °è»êµÇ¾ú´Ù¸é, ÀüüÇÕÀ» ¸¸µé±â À§ÇØ ¼­·Î ´õÇØ¾ß ÇÑ´Ù. ÀÌ °úÁ¤Àº ÇÁ·Î¼¼¼­°£¿¡ ¾î´ÀÁ¤µµ ·¹º§ÀÇ Á¶Á¤°ú Åë½ÅÀ» ÇÊ¿ä·Î ÇÑ´Ù. ¸¶Áö¸·À¸·Î Àüü ÇÕÀº Pi°ªÀÇ ±Ù»çÄ¡°¡ µÇ¾î ÇÑ ÇÁ·Î¼¼¼­¿¡¼­ À̸¦ Ãâ·ÂÇÏ°Ô µÈ´Ù.

ÀÌ HOWTO¿¡¼­´Â, ÀÌ ¾Ë°í¸®ÁòÀÇ ¿©·¯°¡Áö º´·Ä ±¸ÇöÀÌ ³ª¿À¸ç, °¢°¢Àº ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

1.4 ÀÌ ¹®¼­ÀÇ ±¸¼º

ÀÌ ¹®¼­ÀÇ ³ª¸ÓÁö´Â ´Ù¼¸°³ ºÎºÐÀ¸·Î ³ª´µ¾îÁ® ÀÖ´Ù. 2, 3, 4, 5ÀåÀº ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮸¦ Áö¿øÇÏ´Â ¼¼°¡Áö ´Ù¸¥ À¯ÇüÀÇ Çϵå¿þ¾î ±¸¼ºÀ» ´Ù·ç°í ÀÖ´Ù.

  • 2ÀåÀº SMP ¸®´ª½º ½Ã½ºÅÛÀ» ´Ù·é´Ù. ÀÌ´Â °øÀ¯ ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÑ MIMD ½ÇÇàÀ» Á÷Á¢ÀûÀ¸·Î Áö¿øÇϸç, ¸Þ½ÃÁö Àü´Þ ¿ª½Ã ½±°Ô ±¸ÇöµÈ´Ù. ¸®´ª½º´Â 16°³ÀÇ ÇÁ·Î¼¼¼­¸¦ °®´Â SMP ±¸¼º±îÁö Áö¿øÇÏÁö¸¸, ´ëºÎºÐÀÇ SMP PC ½Ã½ºÅÛÀº µÎ°³³ª ³×°³ÀÇ ¶È°°Àº ÇÁ·Î¼¼¼­¸¦ °¡Áö°í ¸¸µé¾îÁø´Ù.
  • 3ÀåÀº °¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â ±â°èµéÀ» ³×Æ®¿÷À¸·Î ¿¬°áÇÑ Å¬·¯½ºÅ͸¦ ´Ù·é´Ù. Ŭ·¯½ºÅÍ´Â MIMD ½ÇÇà°ú ¸Þ½ÃÁö Àü´Þ, ±×¸®°í ´ë°³ ³í¸®Àû °øÀ¯ ¸Þ¸ð¸®¸¦ Á÷Á¢ Áö¿øÇÏ´Â º´·Äó¸® ½Ã½ºÅÛÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç¿ëÇÑ ³×Æ®¿÷ ¹æ¹ý¿¡ µû¶ó SMP ½ÇÇàÀ» Èä³»³»°í, ÁýÇÕ ÇÔ¼ö(aggregate function) Åë½Åµµ Áö¿øÇÒ ¼ö ÀÖ´Ù. Ŭ·¯½ºÅÍ·Î ¿¬°áµÈ ÇÁ·Î¼¼¼­ÀÇ ¼ýÀÚ´Â µÎ°³¿¡¼­ ¼öõ°³±îÁö µÉ ¼ö Àִµ¥, ÀÌ ¼ýÀÚ´Â ÁÖ·Î ³×Æ®¿÷À» ±¸¼ºÇÏ´Â ¹°¸®ÀûÀÎ ¹è¼±¿¡ ÀÇÇØ Á¦ÇÑÀ» ¹Þ´Â´Ù. ¾î¶² °æ¿ì, Ŭ·¯½ºÅÍ¿¡ ¼­·Î ´Ù¸¥ À¯ÇüÀÇ ±â°èµéÀ» È¥ÇÕÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, DEC Alpha¿Í ÆæƼ¾ö ¸®´ª½º ½Ã½ºÅÛÀ» °áÇÕÇÒ ¼ö Àִµ¥, ÀÌ·± °ÍÀ» °¡¸®ÄÑ ÀÌÁú Ŭ·¯½ºÅÍ(heterogeneous cluster)¶ó°í ÇÑ´Ù.
  • 4Àå¿¡¼­´Â SWAR, Áï ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD(SIMD Within A Register)¸¦ ´Ù·é´Ù. ÀÌ°ÍÀº ¸Å¿ì Á¦ÇÑÀûÀÎ À¯ÇüÀÇ º´·Ä ½ÇÇà ¸ðµ¨ÀÌÁö¸¸, ¹Ý¸é¿¡ ÀϹÝÀûÀÎ ÇÁ·Î¼¼¼­¿¡ ÀÌ¹Ì ±¸ÇöµÇ¾î ÀÖ´Â ±â´ÉÀ̱⵵ ÇÏ´Ù. ÃÖ±Ù¿¡ ±Ù·¡ÀÇ ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­¿¡ MMX (±×¸®°í ´Ù¸¥ °Íµéµµ) È®Àå ¸í·É¾îµéÀÌ Ãß°¡µÇ¸é¼­ ÀÌ·± Á¢±Ù¹æ¹ýÀÌ ´õ È¿À²ÀûÀÌ µÇ¾ú´Ù.
  • 5Àå¿¡¼­´Â ¸®´ª½º PC¸¦ °£´ÜÇÑ º´·Äó¸® ½Ã½ºÅÛÀÇ È£½ºÆ®·Î »ç¿ëÇÏ´Â °ÍÀ» ´Ù·é´Ù. ²Å´Â Ä«µå³ª ¿ÜºÎÀÇ ¹Ú½º ÇüÅ·Î, ºÎ¼Ó ÇÁ·Î¼¼¼­´Â ¸®´ª½º ½Ã½ºÅÛ¿¡°Ô ƯÁ¤ Á¾·ùÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾öû³­ ó¸® ´É·ÂÀ» ÁÙ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¿©·¯°³ÀÇ DSP ÇÁ·Î¼¼¼­¸¦ Á¦°øÇÏ´Â °ª½Ñ ISAÄ«µå¸¦ ÀÌ¿ëÇÏ¿©, °æ°è°è»ê ¹®Á¦(compute-bound problem)¸¦ À§ÇÑ ¼ö¹é MFLOPSÀÇ Ã³¸® ´É·ÂÀ» °¡Áú ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ À̵é Ãß°¡µÇ´Â º¸µåµéÀº ´ÜÁö ÇÁ·Î¼¼¼­ÀÏ »ÓÀÌ´Ù. À̵éÀº ÀϹÝÀûÀ¸·Î OS¸¦ ½ÇÇàÇϰųª µð½ºÅ©³ª ÄÜ¼Ö I/O ´É·Â µîÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. ÀÌ·± ½Ã½ºÅÛÀ» À¯¿ëÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ¸®´ª½º "È£½ºÆ®"°¡ ÀÌµé ±â´ÉµéÀ» Á¦°øÇØ¾ß ÇÑ´Ù.

ÀÌ ¹®¼­ÀÇ ¸¶Áö¸· ÀåÀº À§¿¡¼­ ´Ù·é Á¢±Ù ¹æ¹ýµé¿¡ ¼ÓÇÏÁö ¾Ê´Â, ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮿¡¼­ ÀϹÝÀûÀ¸·Î °¡Áö°í ÀÖ´Â °ü½ÉµéÀ» ´Ù·é´Ù.

ÀÌ ¹®¼­¸¦ ÀÐÀ» ¶§ ¾ÆÁ÷ ¿ì¸®°¡ ¸ðµç °ÍµéÀ» ´Ù Å×½ºÆ®Çغ¸Áø ¸øÇß´Ù´Â °Í°ú ¿©±â¼­ ´Ù·ç´Â ³»¿ëÀÇ ¸¹Àº ºÎºÐÀº "¾ÆÁ÷ ¿¬±¸ÁßÀΠƯ¼º"("»ý°¢Çß´ø °Íó·³ Àß µ¿ÀÛÇÏÁö ¾Ê´Â´Ù"´Â °ÍÀ» ´õ ÁÁ°Ô Ç¥ÇöÇÑ ¸»ÀÌ´Ù :-)À̶ó´Â °ÍÀ» ¸í½ÉÇϱ⠹ٶõ´Ù. ±×·¸Áö¸¸ ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä󸮴 ÇöÀç À¯¿ëÇϸç, Á¡Á¡ ´õ ¸¹Àº ±×·ìµéÀÌ À̸¦ ´õ Àß »ç¿ëÇϱâ À§ÇØ ÀÛ¾÷À» ÁøÇàÁßÀÌ´Ù.

ÀÌ HOWTO ¹®¼­¸¦ ÀÛ¼ºÇÑ »ç¶÷Àº Hank Dietz ¹Ú»ç·Î ÇöÀç´Â West Lafayette 47907-1285¿¡ ÀÖ´Â Purdue ´ëÇÐÀÇ Àü±â ¹× ÄÄÇ»ÅÍ °øÇÐ(Electrical and Computer Engineering)ÀÇ ºÎ±³¼ö(Associate Professor)ÀÌ´Ù. Dietz´Â ¸®´ª½º ¹®¼­È­ ÇÁ·ÎÁ§Æ®(Linux Documentation Project, LDP)ÀÇ Áöħ¿¡ µû¶ó ÀÌ ¹®¼­¿¡ ´ëÇÑ ±ÇÇÑÀ» °®´Â´Ù. ÀÌ ¹®¾ÈÀ» Á¤È®ÇÏ°í °øÁ¤ÇÏ°Ô ¸¸µé±â À§Çؼ­ ¸¹Àº ³ë·ÂÀ» ÇßÁö¸¸, Dietz³ª Purdue ´ëÇÐ ¸ðµÎ ¾î¶°ÇÑ ¹®Á¦³ª ¿¡·¯¿¡ ´ëÇÑ Ã¥ÀÓÀÌ ¾øÀ¸¸ç, Purdue ´ëÇÐÀº ¿©±â¼­ ´Ù·é ¾î¶°ÇÑ ÀÛ¾÷À̳ª °á°ú¹°µµ º¸ÁõÇÏÁö ¾Ê´Â´Ù.

2. SMP ¸®´ª½º

ÀÌ ¹®¼­´Â º´·Ä󸮸¦ À§ÇØ SMP ¸®´ª½º ½Ã½ºÅÛÀ» ¾î¶»°Ô »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ °üÇØ °£´ÜÇÏ°Ô °³¿ä¸¦ Á¦½ÃÇÑ´Ù. SMP ¸®´ª½º¿¡ ´ëÇÑ °¡Àå ÃÖ±Ù Á¤º¸´Â ¾Æ¸¶µµ SMP ¸®´ª½º ÇÁ·ÎÁ§Æ®ÀÇ ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¸®½ºÆ®¿¡ °¡ÀÔÇÏ·Á¸é ÆíÁö º»¹®¿¡ subscribe linux-smp ¶ó°í Àû¾î majordomo@vger.rutgers.edu·Î ÆíÁö¸¦ º¸³»¸é µÈ´Ù.

SMP ¸®´ª½º°¡ Á¤¸» Á¦´ë·Î µ¿ÀÛÇϴ°¡? 1996³â 6¿ù, ³ª´Â »õ·Î¿î »óÇ¥ÀÇ (»ç½ÇÀº Çѹ° °£ Ç°Á¾À̾úÁö¸¸ »õ »óÇ¥¿´´Ù ;-) µÎ°³ÀÇ 100MHz ÆæƼ¾ö ÇÁ·Î¼¼¼­¸¦ °¡Áö´Â ½Ã½ºÅÛÀ» ±¸ÀÔÇß´Ù. Á¶¸³À» ¸¶Ä£ ½Ã½ºÅÛÀº µÎ°³ÀÇ ÇÁ·Î¼¼¼­¿Í Asus ¸¶´õº¸´õ(motherboard), 256K ij½Ã, 32M RAM, 1.66G Çϵåµð½ºÅ©, 6¹è¼Ó CDROM, Stealth 64 ±×·¡ÇÈ Ä«µå¿Í 15ÀÎÄ¡ ¸ð´ÏÅÍ·Î, À̸¦ ¸¶·ÃÇϴµ¥ ¸ðµÎ 1800$°¡ µé¾ú´Ù. ÀÌ °¡°ÝÀº ÀÌ¿Í ºñ½ÁÇÑ »ç¾çÀÇ ÇÁ·Î¼¼¼­ ÇϳªÀÎ ½Ã½ºÅÛº¸´Ù ´ÜÁö ¸î¹é ´Þ·¯Á¤µµ ºñ½Ñ °Å¿´´Ù. Á¦´ë·Î µ¿ÀÛÇÏ´Â SMP ¸®´ª½º¸¦ ±¸ÇÒ·Á¸é, ±×Àú º¸ÅëÀÇ ´ÜÀÏ ÇÁ·Î¼¼¼­ ¸®´ª½º¸¦ ¼³Ä¡ÇÏ°í, makefile¿¡¼­ SMP=1À» ¸·°í ÀÖ´Â ÁÖ¼®À» ÇØÁ¦ÇÏ¿© (ºñ·Ï SMP¸¦ 1·Î ¼³Á¤ÇÏ´Â °ÍÀÌ Á¶±ÝÀº ¹Ý¾îÀûÀ̶ó´Â °ÍÀ» ¾ËÁö¸¸) Ä¿³ÎÀ» ´Ù½Ã ÄÄÆÄÀÏÇÏ°í, lilo¿¡°Ô »õ·Î¿î Ä¿³ÎÀ» ¾Ë·ÁÁֱ⸸ ÇÏ¸é µÈ´Ù. ÀÌ ½Ã½ºÅÛÀº ¸Å¿ì Àß µ¿ÀÛÇÏ¿´°í, ¾ÈÁ¤ÀûÀ̱⵵ ÇÏ¿©, Áö±Ý±îÁö »ç¿ëÇØ¿Â ³ªÀÇ ÁÖ ¿öÅ©½ºÅ×À̼ÇÀÇ ¿ªÇÒÀ» ¼öÇàÇϱ⿡ ÃæºÐÇß´Ù. ¿ä¾àÇϸé, SMP ¸®´ª½º´Â Á¤¸»·Î Á¦´ë·Î µ¿ÀÛÇÑ´Ù.

´ÙÀ½ Áú¹®Àº SMP ¸®´ª½º°¡ °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â º´·Ä ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ½ÇÇàÇÏ´Â µ¥ ÀÖ¾î ¾ó¸¸Å­À̳ª °í¼öÁØÀ¸·Î Áö¿øÀ» ÇØÁÖ´À³ÄÀÌ´Ù. 1996³â ÃÊ¿¡´Â ÀÌ·± °ÍÀº º°·Î ¸¹Áö ¾Ê¾Ò´Ù. ±×·¯³ª ÀÌÁ¦ ¸¹Àº °ÍÀÌ º¯Çß´Ù. ¿¹¸¦ µé¾î, ÀÌÁ¦´Â ¸Å¿ì ¿Ïº®ÇÑ POSIX ¾²·¹µå(thread) ¶óÀ̺귯¸®°¡ ÀÖ´Ù.

°øÀ¯ ¸Þ¸ð¸® ¹æ½ÄÀ» »ç¿ëÇÏ´Â °Íº¸´Ù´Â ¼º´ÉÀÌ ¶³¾îÁú ¼öµµ ÀÖÁö¸¸, SMP ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â ¿ø·¡ ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅÍ(cluster)¿¡¼­ µ¿ÀÛÇϵµ·Ï °³¹ßµÈ ´ëºÎºÐÀÇ º´·Ä ó¸® ¼ÒÇÁÆ®¿þ¾îµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼ÒÄÏ(3.3 ÀåÀ» º¸¶ó) ¹æ½ÄÀº SMP ¸®´ª½º ½Ã½ºÅÛ »Ó¸¸ ¾Æ´Ï¶ó, ¿©·¯°³ÀÇ SMP ½Ã½ºÅÛÀ» ³×Æ®¿÷À¸·Î ¿¬°áÇÑ Å¬·¯½ºÅÍ¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ ¼ÒÄÏÀº SMP¿¡¼­´Â »ó´çÇÑ ¾çÀÇ ºÒÇÊ¿äÇÑ ¿À¹öÇìµå(overhead)¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ·± ¿À¹öÇìµåÀÇ ´ëºÎºÐÀº Ä¿³Î Áï ÀÎÅÍ·´Æ® Çڵ鷯¿¡¼­ ÀϾ´Ù. SMP ¸®´ª½º¿¡¼­´Â º¸Åë µ¿½Ã¿¡ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ Ä¿³Î ¸ðµå¿¡ ÀÖÀ» ¼ö ÀÖ°í, ºÎÆ® ÇÁ·Î¼¼¼­¸¸ÀÌ ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÀÎÅÍ·´Æ® ÄÁÆ®·Ñ·¯°¡ ¼³Á¤µÇ¾î Àֱ⠶§¹®¿¡ ¹®Á¦´Â ´õ ½É°¢ÇØÁø´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í, ÀüÇüÀûÀÎ SMP Åë½Å Çϵå¿þ¾î°¡ Ŭ·¯½ºÅÍ ³×Æ®¿÷º¸´Ù´Â ÈξÀ ÁÁ±â ¶§¹®¿¡, ¿ø·¡ Ŭ·¯½ºÅÍ¿¡¼­ »ç¿ëÇÏ·Á°í ¸¸µç Ŭ·¯½ºÅÍ¿ë ¼ÒÇÁÆ®¿þ¾îµµ SMP¿¡¼­ ´õ ÁÁÀº ¼º´ÉÀ» º¸ÀδÙ.

ÀÌ ÀåÀÇ ³ª¸ÓÁö¿¡¼­´Â SMP Çϵå¿þ¾î¿¡ ´ëÇؼ­ À̾߱âÇÏ°í, º´·Ä ÇÁ·Î±×·¥ ÇÁ·Î¼¼½º »çÀÌ¿¡¼­ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ´Â ±âº»ÀûÀÎ ¸®´ª½º ¸ÞÄ¿´ÏÁòÀ» »ìÆ캸°í, ¿øÀÚ¼º(atomicity), Èֹ߼º(volatility), ¶ô(lock), ij½Ã ¶óÀÎ(cache line)¿¡ ´ëÇؼ­ ¾ÆÁÖ °£´ÜÇÏ°Ô ¾Ë¾Æº¸°í, ¸¶Áö¸·À¸·Î ¿©·¯°¡Áö °øÀ¯ ¸Þ¸ð¸® º´·Ä ó¸® ¶óÀ̺귯¸®µé¿¡ ´ëÇØ ¾à°£ÀÇ Á¶¾ðÀ» Çϵµ·Ï ÇÑ´Ù.

2.1 SMP Çϵå¿þ¾î(Hardware)

SMP ½Ã½ºÅÛµéÀº ¿©·¯ÇØ ÀüºÎÅÍ »ç¿ëµÇ¾î ¿ÔÁö¸¸, ¾ó¸¶Àü±îÁö¸¸Çصµ ±â°è¸¶´Ù ±âº»ÀûÀÎ ±â´ÉµéÀ» ¼­·Î ´Ù¸£°Ô ±¸ÇöÇÏ´Â °æÇâÀÌ À־, ¿î¿µÃ¼Á¦¿¡¼­ SMP¸¦ Áö¿øÇÏ´Â °ÍÀÌ È£È¯¼ºÀÌ ¾ø¾ú´Ù. ÀÌ·± ¹®Á¦¸¦ Á¾½Ä½ÃŲ °ÍÀº ÀÎÅÚ¿¡¼­ ¹ßÇ¥ÇÑ ´ÙÁßÇÁ·Î¼¼¼­ ±Ô¾à(Multiprocessor Specification, °£´ÜÈ÷ ÁÙ¿©¼­ MPS¶ó°í ÇÑ´Ù)ÀÌ´Ù. MPS 1.4 ±Ô¾àÀº http://www.intel.com/design/pro/datashts/242016.htm¿¡¼­ PDF ÆÄÀÏ Çü½ÄÀ¸·Î µÈ ¹®¼­·Î ±¸ÇÒ ¼ö ÀÖÀ¸¸ç, http://support.intel.com/oem_developer/ial/support/9300.HTM¿¡¼­ MPS 1.1 ±Ô¾à¿¡ ´ëÇÑ °³¿ä¸¦ º¼ ¼ö ÀÖÁö¸¸, ÀÎÅÚÀÌ ÀÚ½ÅÀÇ WWW »çÀÌÆ®¸¦ Á¾Á¾ °³ÆíÀ» Çϱ⠶§¹®¿¡ ÀÌ ÁÖ¼Ò´Â ¹Ù²î¾úÀ» ¼öµµ ÀÖ´Ù. ¸¹Àº Á¦ÀÛµéÀº 4°³ÀÇ ÇÁ·Î¼¼¼­±îÁö Áö¿øÇÏ´Â MPS ȣȯ ½Ã½ºÅÛµéÀ» ¸¸µé°í ÀÖÁö¸¸, ÀÌ·ÐÀûÀ¸·Î MPS´Â ´õ ¸¹Àº ÇÁ·Î¼¼¼­µéÀ» Áö¿øÇÒ ¼ö ÀÖ´Ù.

MPS°¡ ¾Æ´Ï¸é¼­ IA32(ÀÎÅÚ 32ºñÆ® CPU)°¡ ¾Æ´Ñ ½Ã½ºÅÛ Áß¿¡¼­ SMP ¸®´ª½º°¡ Áö¿øÇÏ´Â ½Ã½ºÅÛÀ¸·Î´Â Sun4m ´ÙÁßÇÁ·Î¼¼¼­ SPARC ½Ã½ºÅÛÀÌ À¯ÀÏÇÏ´Ù. SMP ¸®´ª½º´Â ÀÎÅÚ MPS 1.1°ú 1.4 ȣȯ ½Ã½ºÅÛÀ» ´ëºÎºÐ Áö¿øÇϸç, 16°³±îÁöÀÇ 486DX, Pentium, Pentium MMX, Pentium Pro, Pentium II ÇÁ·Î¼¼¼­¸¦ Áö¿øÇÑ´Ù. Áö¿øÇÏÁö ¾Ê´Â IA32 ÇÁ·Î¼¼¼­·Î´Â ÀÎÅÚ 386, 486SX/SLC ÇÁ·Î¼¼¼­¿Í (ºÎµ¿ ¼Ò¼ýÁ¡ ¿¬»ê Çϵå¿þ¾î°¡ ¾øÀ¸¸é SMP ±â°è¿¡ ¸ÂÁö ¾Ê´Â´Ù), AMD¿Í CyrixÀÇ ÇÁ·Î¼¼¼­µéÀÌ´Ù (À̵é ÇÁ·Î¼¼¼­´Â ´Ù¸¥ SMP Áö¿ø ĨµéÀ» ÇÊ¿ä·Î Çϴµ¥, ÀÌ ±ÛÀ» ¾²°í ÀÖÀ» ¶§ ¾ÆÁ÷ À̵é ĨµéÀº ³ª¿ÍÀÖÁö ¾Ê¾Ò´Ù).

MPS ȣȯ ½Ã½ºÅÛµéÀÇ ¼º´ÉÀº õÂ÷¸¸º°·Î ´Þ¶óÁú ¼ö ÀÖ´Ù´Â Á¡Àº ²À ÀÌÇØÇÏ°í ³Ñ¾î°¡¾ß ÇÑ´Ù. ÀϹÝÀûÀÎ ¿¹»ó´ë·Î ¼º´ÉÀÇ Â÷À̸¦ ³ªÅ¸³»´Â ¿äÀÎ ÁßÀÇ Çϳª´Â ÇÁ·Î¼¼¼­ ¼ÓµµÀÌ´Ù. ´ëü·Î Á» ´õ ºü¸¥ Ŭ·°ÀÇ ÇÁ·Î¼¼¼­À» »ç¿ëÇÏ¸é ´õ ºü¸¥ ½Ã½ºÅÛÀÌ µÇ¸ç, Pentium Pro ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÑ ½Ã½ºÅÛÀÌ Pentium ÇÁ·Î¼¼¼­¸¦ ÀÌ¿ëÇÏ´Â ½Ã½ºÅÛº¸´Ù ºü¸¥ °æÇâÀÌ ÀÖ´Ù. ±×·¸Áö¸¸ MPS¿¡¼­´Â °øÀ¯ ¸Þ¸ð¸®(shared memory)¸¦ Çϵå¿þ¾îÀûÀ¸·Î ¾î¶»°Ô ±¸ÇöÇØ¾ß ÇÏ´ÂÁö´Â ¸í½ÃÇÏÁö ¾Ê°í ÀÖ´Ù. ´ÜÁö ¼ÒÇÁÆ®¿þ¾îÀûÀÎ °üÁ¡¿¡¼­ °øÀ¯ ¸Þ¸ð¸®°¡ ¾î¶»°Ô µ¿ÀÛÇØ¾ß ÇÏ´ÂÁö¸¸ ¸í½ÃÇÏ°í ÀÖÀ» »ÓÀÌ´Ù. ±×·¡¼­ ±¸ÇöÇÏ°í ÀÖ´Â °øÀ¯ ¸Þ¸ð¸® ¹æ½ÄÀÌ SMP ¸®´ª½ºÀÇ Æ¯Â¡°ú ƯÁ¤ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡¿¡ ¾î¶»°Ô ¸Â¾Æµé¾î°¡´À³Ä¿¡ µû¶ó¼­ ¼º´ÉÀÌ ´Þ¶óÁú ¼ö ÀÖ´Ù.

MPS ȣȯ ½Ã½ºÅÛµéÀÇ Â÷ÀÌ´Â ¿ì¼± ¹°¸®ÀûÀ¸·Î °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °ÍÀ» ¾î¶»°Ô ±¸ÇöÇÏ´À³Ä¿¡¼­ ³ªÅ¸³­´Ù.

°¢ ÇÁ·Î¼¼¼­°¡ µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ °¡Áö´Â°¡?(Does each processor have its own L2 cache?)

ÀϺΠMPS Pentium ½Ã½ºÅÛ°ú, ¸ðµç MPS Pentium Pro¿Í Pentium II ½Ã½ºÅÛÀº µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ °¡Áö°í ÀÖ´Ù. (L2 ij½Ã´Â Pentium Pro³ª Pentium II ¸ðµâ¿¡ µé¾îÀÖ´Ù) ÀϹÝÀûÀ¸·Î µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ »ç¿ëÇϸé ó¸® ¼Óµµ¸¦ ÃÖ´ëÈ­ÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸, ¸®´ª½º¿¡¼­´Â ¸í¹éÇÏ°Ô ±×·± °ÍÀº ¾Æ´Ï´Ù. À̸¦ È¥¶õÇÏ°Ô ÇÏ´Â ÁÖµÈ ÀÌÀ¯´Â, ÇöÀçÀÇ ¸®´ª½º ½ºÄÉÁÙ·¯°¡ °¢ ÇÁ·Î¼¼½º¸¦ ¶È°°Àº ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ°Ô ÇÏ´Â ÇÁ·Î¼¼¼­ ģȭ·Â(processor infinity)ÀÇ °³³äÀ» µû¸£Áö´Â ¾Ê±â ¶§¹®ÀÌ´Ù. ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ´Â ÇÁ·Î¼¼¼­´Â ±Ý¹æ ¹Ù²ð¼ö ÀÖ´Ù. ÀÌ ¹®Á¦´Â ÃÖ±Ù¿¡ "ÇÁ·Î¼¼¼­ °áÇÕ(processor binding)"À̶ó´Â Á¦¸ñÀ¸·Î SMP ¸®´ª½º °³¹ß °øµ¿Ã¼¿¡¼­ Åä·ÐµÈ ÀûÀÌ ÀÖ´Ù. ÇÁ·Î¼¼¼­ ģȭ·Â ¾øÀÌ º°µµÀÇ L2 ij½Ã¸¦ °®°ÔµÇ¸é, ¾î¶² ÇÁ·Î¼¼½º°¡ ÀÌÀü¿¡ ½ÇÇàµÇ´ø ÇÁ·Î¼¼¼­°¡ ¾Æ´Ñ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ ½Ã°£À» ÇÒ´ç¹Þ¾Æ ½ÇÇàµÇ´Â °æ¿ì »ó´çÇÑ ¿À¹öÇìµå¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù.

»ó´ëÀûÀ¸·Î °ªÀÌ ½Ñ »ó´ç¼öÀÇ ½Ã½ºÅÛµéÀº µÎ°³ÀÇ Pentium ÇÁ·Î¼¼¼­°¡ ÇϳªÀÇ L2 ij½Ã¸¦ °øÀ¯Çϵµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù. ÀÌ ¹æ½ÄÀÇ ¾ÈÁÁÀº Á¡Àº µÎ°³ÀÇ ÇÁ·Î¼¼¼­°¡ ¼­·Î ij½Ã¸¦ »çÀÌ¿¡ µÎ°í °æÀïÀ» ÇؾßÇÑ´Ù´Â °ÍÀ¸·Î, ƯÈ÷ ¿©·¯°³ÀÇ ¼­·Î µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °æ¿ì ¼º´ÉÀÌ ÇöÀúÇÏ°Ô ¶³¾îÁø´Ù´Â °ÍÀÌ´Ù. ÁÁÀº Á¡Àº ¸¹Àº º´·Ä ÇÁ·Î±×·¥µé¿¡°Ô À־ µÎ °³ÀÇ ÇÁ·Î¼¼¼­°¡ °øÀ¯ ¸Þ¸ð¸®ÀÇ ¶È°°Àº ¶óÀο¡ Á¢±ÙÇÏ´Â °æ¿ì Çϳª¸¸ÀÌ À̸¦ ij½Ã¿¡ °¡Á®¿À¸é µÇ¾î, ¹ö½º¸¦ µÑ·¯½Ñ °æÀïÀ» ÇÇÇÒ ¼ö À־ ij½Ã¸¦ °øÀ¯ÇÏ´Â°Ô ½ÇÁúÀûÀ¸·Î µµ¿òÀÌ µÈ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ÇÁ·Î¼¼¼­ ģȭ·ÂÀ» Àû¿ëÇÏÁö ¾Ê´Â °æ¿ì L2 ij½Ã¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ ÇÇÇØ°¡ ´õ Àû´Ù. µû¶ó¼­ º´·Ä ÇÁ·Î±×·¥ÀÇ °æ¿ì L2 ij½Ã¸¦ °øÀ¯ÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î »ý°¢ÇÏ´Â °Í¸¸Å­ ³ª»ÚÁö´Â ¾Ê´Ù.

µÎ°³ÀÇ Pentium ÇÁ·Î¼¼¼­°¡ 256K ij½Ã¸¦ °øÀ¯ÇÏ´Â ½Ã½ºÅÛÀ» »ç¿ëÇغ» °æÇè¿¡ µû¸£¸é, ÇÊ¿äÇÑ Ä¿³Î ÀÛ¾÷ÀÇ Á¤µµ¿¡ µû¶ó¼­ ½Ã½ºÅÛÀÇ ¼º´ÉÀÌ »ó´çÈ÷ Å©°Ô ´Þ¶óÁ³´Ù. ÃÖ¾ÇÀÇ °æ¿ì ¼Óµµ°¡ 1.2¹è Á¤µµ¹Û¿¡ »¡¶óÁöÁö ¾Ê¾ÒÁö¸¸, "µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °ÍÀº °øÀ¯ÇÏ´Â(shared fetch)" È¿°ú¸¦ Á¦´ë·Î ÀÌ¿ëÇÏ´Â °è»ê Áß½ÉÀûÀÎ SPMD ½ºÅ¸ÀÏÀÇ Äڵ带 »ç¿ëÇÏ¿´À» ¶§ 2.1 ¹è±îÁö »¡¶óÁö´Â °ÍÀ» º¸±âµµ ÇÏ¿´´Ù.

¹ö½º ¼³Á¤(Bus configuration)?

¸ÕÀú À̾߱âÇÒ °ÍÀº ¿äÁò¿¡ ³ª¿À´Â ´ëºÎºÐÀÇ ½Ã½ºÅÛµéÀº, ÇÁ·Î¼¼¼­¿¡ Çϳª ÀÌ»óÀÇ PCI ¹ö½º°¡ ¿¬°áµÇ¾î ÀÖ°í, ÀÌ´Â ¶Ç´Ù½Ã ºê¸´Áö(bridge)¸¦ ÅëÇÏ¿© Çϳª ÀÌ»óÀÇ ISA/EISA ¹ö½º¿¡ ¿¬°áµÇ¾î ÀÖ´Ù´Â °ÍÀÌ´Ù. ºê¸´Áö¸¦ ÅëÇÏ´Â °æ¿ì ´ë±â½Ã°£(latency)ÀÌ ´Ã¾î³ª°Ô µÇ°í, EISA³ª ISA´Â ÀϹÝÀûÀ¸·Î PCI¿¡ ºñÇؼ­ ³·Àº ´ë¿ªÆøÀ» Á¦°øÇϱ⠶§¹®¿¡ (ISA°¡ Á¦ÀÏ ³·´Ù), µð½ºÅ© µå¶óÀ̺곪, ºñµð¿À Ä«µå, ´Ù¸¥ °í¼º´É ÀåÄ¡µéÀº PCI ¹ö½º ÀÎÅÍÆäÀ̽º¸¦ ÅëÇÏ¿© ¿¬°áµÇ¾î¾ß ÇÑ´Ù.

PCI ¹ö½º°¡ Çϳª¹Û¿¡ ¾ø´õ¶óµµ °è»ê Áß½ÉÀûÀÎ º´·Ä ÇÁ·Î±×·¥ÀÇ °æ¿ì MPS ½Ã½ºÅÛÀº ±¦ÂúÀº ¼º´É°³¼± È¿°ú¸¦ º¸¿©ÁØ´Ù. ÇÏÁö¸¸ I/O 󸮼ӵµ´Â ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÒ ¶§º¸´Ù ´õ ³ª¾ÆÁöÁö ¾ÊÀ¸¸ç, ÇÁ·Î¼¼¼­µéÀÌ ¹ö½º¸¦ »çÀÌ¿¡ µÎ°í °æÀïÀ» Çϱ⠶§¹®¿¡ ¾Æ¸¶µµ ¼º´ÉÀÌ Á¶±Ý ¶³¾îÁö°Ô µÉ °ÍÀÌ´Ù. µû¶ó¼­ I/O ¼Óµµ¸¦ ³ôÀÌ°í ½Í´Ù¸é ¿©·¯°³ÀÇ µ¶ÀÚÀûÀÎ PCI ¹ö½º¿Í I/O ÄÜÆ®·Ñ·¯(¿¹¸¦ µé¾î ¿©·¯°³ÀÇ SCSI üÀεé)¸¦ °¡Áö´Â MPS ½Ã½ºÅÛÀ» ±¸ÀÔÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ¶§ SMP ¸®´ª½º¿¡¼­ ÀÌµé ½Ã½ºÅÛÀ» Áö¿øÇÏ´ÂÁö Á¶½É½º·´°Ô »ìÆ캸¾Æ¾ß ÇÑ´Ù. ¶ÇÇÑ ÇöÀçÀÇ SMP ¸®´ª½º¿¡¼­´Â ¾î´À ¼ø°£À̵ç ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ Ä¿³Î¸ðµå¿¡ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡, I/O 󸮸¦ ÇÒ ¶§ Ä¿³Î¿¡¼­ ¼Ò¿äÇÏ´Â ½Ã°£ÀÌ ÀûÀº I/O ÄÜÆ®·Ñ·¯¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â Á¡À» ¸í½ÉÇØ¾ß ÇÑ´Ù. Á¤¸» °í¼º´ÉÀ» ¿øÇÑ´Ù¸é ½Ã½ºÅÛ ÄÝ(system call)À» ÅëÇÏÁö ¾Ê°í, »ç¿ëÀÚ ÇÁ·Î¼¼½º°¡ Á÷Á¢ ÀåÄ¡·Î I/O¸¦ ÇÏ´Â °Íµµ °í·ÁÇØ º¼ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ´Â »ý°¢¸¸Å­ ¾î·ÆÁöµµ ¾Ê°í, ¾ÈÁ¤¼ºÀ» ÇØÄ¡Áöµµ ¾Ê´Â´Ù (3.3 Àå¿¡¼­ ±âº» ±â¼ú¿¡ ´ëÇؼ­ ¼³¸íÇÏ°í ÀÖ´Ù).

¹ö½º ¼Óµµ¿Í ÇÁ·Î¼¼¼­ Ŭ·° ¼ÓµµÀÇ °ü°è¸¦ »ìÆ캸´Â °Íµµ ¸Å¿ì Áß¿äÇÏ´Ù. Áö³­ ¸îÇص¿¾È ÀÌµé »çÀÌÀÇ °ü°è´Â ºÒ¸íÈ®ÇÏ°Ô ÀÌÇØµÇ¾î ¿Ô´Ù. ´ëºÎºÐÀÇ ½Ã½ºÅÛÀÌ Áö±ÝÀº ¶È°°Àº PCI Ŭ·° ¼Óµµ¸¦ »ç¿ëÇÏ°í ÀÖÁö¸¸, ´õ ºü¸¥ Ŭ·° ¼ÓµµÀÇ ÇÁ·Î¼¼¼­°¡ ´õ ´À¸° ¹ö½º Ŭ·°°ú ½ÖÀ» ÀÌ·ç´Â °ÍÀº µå¹® ÀÏÀÌ ¾Æ´Ï´Ù. ÀÌÀÇ °íÀüÀûÀÎ ¿¹·Î, ÀϹÝÀûÀ¸·Î Pentium 133Àº Pentium 150º¸´Ù ´õ ºü¸¥ ¹ö½º¸¦ »ç¿ëÇÏ¿´°í, ´Ù¾çÇÑ º¥Ä¡¸¶Å©¿¡¼­ ƯÀÌÇÑ °á°ú¸¦ ³ªÅ¸³Â´Ù. ÀÌ·± È¿°ú´Â SMP ½Ã½ºÅÛ¿¡¼­ ´õ¿í ÁõÆøµÈ´Ù. ÀÌ´Â ¹ö½º Ŭ·° ¼Óµµ¸¦ ºü¸£°Ô ÇÏ´Â °Íº¸´Ùµµ ´õ Áß¿äÇÑ ¹®Á¦ÀÌ´Ù.

¸Þ¸ð¸® Áßø°ú DRAM ±â¼ú(Memory interleaving and DRAM technologies)?

¸Þ¸ð¸® ÁßøÀº ½ÇÁ¦·Î MPS¿Í´Â ¾Æ¹«·± Àϵµ °°ÀÌ ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª MPS ½Ã½ºÅÛ¿¡¼­ ÀÌ°ÍÀÌ Á¾Á¾ ¾ð±ÞµÇ´Â °ÍÀ» º¼ ¼ö Àִµ¥, ÀÌ´Â ÀÌµé ½Ã½ºÅÛÀÌ ´ëü·Î ¸Þ¸ð¸® ´ë¿ªÆøÀ» ´õ ¸¹ÀÌ ÇÊ¿ä·Î Çϱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î 2-way³ª 4-way ÁßøÀº RAM¿¡ ºí·° Á¢±ÙÀ» ÇÒ ¶§, ÀÌ°ÍÀÌ Çϳª°¡ ¾Æ´Ï¶ó ¿©·¯°³ÀÇ RAM ¹ðÅ©(bank)¸¦ »ç¿ëÇÏ¿© ÀÌ·ç¾îÁöµµ·Ï RAMÀ» Á¶Á÷È­ÇÑ´Ù. ÀÌ´Â ´õ ³ôÀº ¸Þ¸ð¸® Á¢±Ù ´ë¿ªÆøÀ» Á¦°øÇÏ°Ô µÇ´Âµ¥, ƯÈ÷ ij½Ã ¶óÀÎ(cache line) Àб⳪ ¾²±â¿¡ À־ ´õ¿í ±×·¯ÇÏ´Ù.

ÀÌ°ÍÀÇ È¿°ú¿¡ ´ëÇؼ­´Â ±×´ÙÁö ¸íÄèÇÏÁö ¾ÊÀºµ¥, EDO DRAMÀ̳ª ¿©·¯°¡Áö ´Ù¸¥ ¸Þ¸ð¸® ±â¼úµéÀº ÀÌ¿Í ºñ½ÁÇÑ Á¾·ùÀÇ ¿¬»ê ¼Óµµ¸¦ Çâ»ó½ÃÅ°±â ¶§¹®ÀÌ´Ù. http://www.pcguide.com/ref/ram/tech.htm¿¡¼­ DRAM ±â¼ú¿¡ ´ëÇØ ¹«Ã´ Àß Á¤¸®µÇ¾îÀÖ´Â °³¿ä¸¦ º¼ ¼ö ÀÖ´Ù.

±×·¸´Ù¸é, ¿¹¸¦ µé¾î 2-wayÀÇ ÁßøµÇ´Â EDO DRAMÀ» ¾²´Â °ÍÀÌ ÁßøÀ» »ç¿ëÇÏÁö ¾Ê´Â SDRAMÀ» ¾²´Â °Íº¸´Ù ´õ ÁÁÀº°¡? ÀÌ°ÍÀº ¸Å¿ì ÈǸ¢ÇÑ Áú¹®À̸ç, ±× ´ë´äÀº °£´ÜÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Áßø±â¼úÀ̳ª ´Ù¸¥ Èï¹ÌÀÖ´Â ±â¼úµéÀº ´ëü·Î ºñ½Î±â ¶§¹®ÀÌ´Ù. ¿©±â¿¡ µé¾î°¡´Â ¶È°°Àº µ·À» º¸Åë ¸Þ¸ð¸®¿¡ ÅõÀÚÇÑ´Ù¸é ÈξÀ ¸¹Àº ¾çÀÇ ¸ÞÀÎ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °¡Àå ´À¸° DRAMÀ» »ç¿ëÇÑ´Ù ÇÏ´õ¶óµµ µð½ºÅ©¸¦ ÀÌ¿ëÇÑ °¡»ó ¸Þ¸ð¸®º¸´Ù´Â ÈξÀ ºü¸£´Ù.

2.2 °øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³

SMP¿¡¼­ º´·Ä󸮸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÃæºÐÈ÷ ÇÒ¸¸ÇÑ °ÍÀ̶ó°í °áÁ¤À» ³»·È´Ù¸é, ÀÌÁ¦ ¾îµð¼­ºÎÅÍ ½ÃÀÛÇÏ´Â°Ô ÁÁÀ»±î? ±×·³, °øÀ¯ ¸Þ¸ð¸® Åë½ÅÀÌ ½ÇÁ¦·Î µ¿ÀÛÇÏ´Â ¹æ½Ä¿¡ ´ëÇؼ­ Á¶±Ý ´õ ¹è¿ì´Â °ÍÀ¸·Î ±× ù¹ßÀ» ³»µó¾îº¸µµ·Ï ÇÏÀÚ.

¾óÇÍ »ý°¢ÇÏ¸é °øÀ¯ ¸Þ¸ð¸® Åë½ÅÀ̶õ ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ¸Þ¸ð¸®¿¡ °ªÀ» ÀúÀåÇϸé, ´Ù¸¥ ÇÁ·Î¼¼¼­°¡ À̸¦ ÀоîµéÀÌ´Â °ÍÀ̶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ºÒÇàÈ÷µµ ±×·¸°Ô °£´ÜÇÏÁö¸¸Àº ¾Ê´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î¼¼½º¿Í ÇÁ·Î¼¼¼­ »çÀÌÀÇ °ü°è°¡ ¹«Ã´ º¹ÀâÇÏ°Ô ¾ôÇô µÇ¾îÀÖ´Ù°í ÇÏÀÚ. ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù ÇöÀç µ¿ÀÛÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ¼ö°¡ Àû´Ù°í ÇÏ´õ¶óµµ ±×·¸°í, ±× ¹Ý´ëÀÇ °æ¿ìµµ ¸¶Âù°¡Áö´Ù. ÀÌ ÀåÀÇ ³²Àº ºÎºÐ¿¡¼­´Â Ưº°È÷ ½Å°æ¾²Áö ¾ÊÀ¸¸é ½É°¢ÇÑ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â Áß¿äÇÑ ³íÁ¡µé - ¹«¾ùÀ» °øÀ¯ÇÒ °ÍÀÎÁö ÆÇ´ÜÇϴµ¥ »ç¿ëÇÏ´Â µÎ°¡Áö ¼­·Î ´Ù¸¥ ¸ðµ¨°ú, ¿øÀÚ¼º(atomicity) ³íÁ¡, Èֹ߼º(volatility) °³³ä°ú Çϵå¿þ¾î ¶ô(lock) ¸í·É, ij½Ã ¶óÀÎ(cache line) È¿°ú, ±×¸®°í ¸®´ª½º ½ºÄÉÁÙ·¯ ³íÁ¡ - À» °£´ÜÈ÷ ¿ä¾àÇϵµ·Ï ÇÏ°Ú´Ù.

¸ðµÎ °øÀ¯Çϱ⠴ë ÀϺθ¦ °øÀ¯Çϱâ(Shared Everything Vs. Shared Something)

°øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ÀϹÝÀûÀ¸·Î ¸ðµÎ °øÀ¯Çϱâ¿Í ÀϺθ¦ °øÀ¯Çϱâ¶ó´Â µÎ°¡ÁöÀÇ ±Ùº»ÀûÀ¸·Î ¼­·Î ´Ù¸¥ ¸ðµ¨À» »ç¿ëÇÑ´Ù . ÀÌ µÎ°¡Áö ¸ðµ¨Àº ¸ðµÎ ÇÁ·Î¼¼¼­µéÀÌ °øÀ¯¸Þ¸ð¸®·Î µ¥ÀÌÅ͸¦ ¾²°í, °øÀ¯¸Þ¸ð¸®¿¡¼­ µ¥ÀÌÅ͸¦ ÀоîµéÀÓÀ¸·Î½á Åë½ÅÀ» ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. µÎ ¸ðµ¨ÀÇ ´Ù¸¥Á¡Àº, ¸ðµÎ °øÀ¯ÇÏ´Â ¸ðµ¨¿¡¼­´Â ¸ðµç ÀڷᱸÁ¶¸¦ °øÀ¯¸Þ¸ð¸®¿¡ µÎ´Â ¹Ý¸é¿¡, ÀϺθ¦ °øÀ¯ÇÏ´Â ¸ðµ¨¿¡¼­´Â »ç¿ëÀÚ°¡ °øÀ¯ÇÒ ÀڷᱸÁ¶¿Í ÇϳªÀÇ ÇÁ·Î¼¼¼­¿¡ ±¹ÇѵǴ ÀڷᱸÁ¶¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÑ´Ù´Â °ÍÀÌ´Ù.

¾î¶² °øÀ¯¸Þ¸ð¸® ¸ðµ¨À» »ç¿ëÇÒ °ÍÀΰ¡? ÀÌ´Â Á¾±³¿¡ ´ëÇÑ Áú¹®°ú ºñ½ÁÇÏ´Ù. ¸¹Àº »ç¶÷µéÀº ÀڷᱸÁ¶¸¦ ¼±¾ðÇÒ ¶§ ÀÌ°ÍÀ» °øÀ¯ÇÒ °ÍÀÎÁö µû·Î ±¸º°ÇÒ ÇÊ¿ä°¡ ¾ø±â ¶§¹®¿¡, ¸ðµÎ °øÀ¯ÇÏ´Â ¸ðµ¨À» ÁÁ¾ÆÇÑ´Ù. ÀÌ ¶§´Â µ¿½Ã¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º(ÇÁ·Î¼¼¼­)¸¸ÀÌ ÀÚ·á¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï, Ãæµ¹À» ÀÏÀ¸Å³ ¼ö ÀÖ´Â °øÀ¯ÇÏ´Â ÀÚ·á¿¡ Á¢±ÙÇÏ´Â ÄÚµå ÁÖÀ§¿¡ ¶ô(lock)À» °É±â¸¸ ÇÏ¸é µÈ´Ù. ±×·¸Áö¸¸ ÀÌ°Í ¿ª½Ã ¸»Ã³·³ °£´ÜÇÏÁø ¾Ê´Ù. ±×·¡¼­ ¸¹Àº »ç¶÷µéÀº ÀϺθ¸À» °øÀ¯ÇÏ´Â ¸ðµ¨ÀÌ °¡Á®´ÙÁÖ´Â »ó´ëÀûÀÎ ¾ÈÀü¼ºÀ» ´õ ¼±È£Çϱ⵵ ÇÑ´Ù.

¸ðµÎ °øÀ¯Çϱâ(Shared Everything)

¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀÇ ÀåÁ¡Àº ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Â ¼øÂ÷ÀûÀÎ ÇÁ·Î±×·¥À» ¼±ÅÃÇÏ¿© ½±°Ô ¸ðµÎ °øÀ¯ÇÏ´Â º´·Ä ÇÁ·Î±×·¥À¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿©±â¼­´Â ¾î¶² ÀÚ·á°¡ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Â °ÍÀÎÁö ¸ÕÀú ÆÇ´ÜÇØ¾ß ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

°£´ÜÇÏ°Ô »ìÆ캸¸é, ¸ðµç°É °øÀ¯ÇÏ´Â ¹æ½ÄÀÇ °¡Àå Å« ¹®Á¦Á¡Àº ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ÃëÇÑ ÇൿÀÌ ´Ù¸¥ ÇÁ·Î¼¼¼­µé¿¡°Ô ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹®Á¦´Â µÎ°¡Áö ¹æÇâÀ¸·Î ³ªÅ¸³­´Ù :

  • ¸¹Àº ¶óÀ̺귯¸®µéÀº °øÀ¯ÇÒ ¼ö ¾ø´Â ÀڷᱸÁ¶µéÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, UNIX¿¡¼­ ´ëºÎºÐÀÇ ÇÔ¼öµéÀº errno¶ó´Â º¯¼ö¿¡´Ù°¡ ¿¡·¯Äڵ带 ´ã¾Æ µ¹·ÁÁØ´Ù. ¸¸¾à ¸ðµÎ °øÀ¯ÇÏ´Â µÎ °³ÀÇ ÇÁ·Î¼¼½º°¡ ¿©·¯°¡Áö ÇÔ¼ö¸¦ ºÎ¸¥´Ù¸é, À̵éÀº ¶È°°Àº errno º¯¼ö¸¦ °øÀ¯Çϱ⠶§¹®¿¡ ¼­·Î °£¼·À» ÀÏÀ¸Å°°Ô µÉ °ÍÀÌ´Ù. ºñ·Ï Áö±ÝÀº errno ¹®Á¦¸¦ ÇØ°áÇÑ ¶óÀ̺귯¸®°¡ ÀÖ±ä ÇÏÁö¸¸, ÀÌ¿Í ºñ½ÁÇÑ ¹®Á¦´Â ´ëºÎºÐÀÇ ¶óÀ̺귯¸®¿¡ ¿©ÀüÈ÷ ³²¾Æ ÀÖ´Ù. ¿¹¸¦ µé¾î, ¹Ì¸® Ưº°ÇÑ ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾Ê°í, ¸ðµÎ °øÀ¯ÇÏ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ X ¶óÀ̺귯¸®ÀÇ ÇÔ¼öµéÀ» È£ÃâÇÑ´Ù¸é, X ¶óÀ̺귯¸®´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
  • ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅ͸¦ À߸ø »ç¿ëÇϰųª, ¹è¿­¿¡¼­ À妽º¸¦ À߸ø ÁöÁ¤ÇÑ °æ¿ì, ÃÖ¾ÇÀÇ °á°ú·Î ÀÌ Äڵ带 ¼öÇàÇÏ´ø ÇÁ·Î¼¼½º°¡ Áױ⵵ ÇÑ´Ù. À̶§ core ÆÄÀÏÀ» ¸¸µé¾î ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ´Ü¼­¸¦ Á¦°øÇØÁֱ⵵ ÇÑ´Ù. ¸ðµÎ °øÀ¯ÇÏ´Â º´·Ä󸮿¡¼­´Â ÀÌ·± À߸øµÈ Á¢±ÙÀÌ ¹ß»ýÇÏ¸é ´Ù¸¥ ÇÁ·Î¼¼½º±îÁöµµ Á×°Ô ÇÒ °¡´É¼ºÀÌ Ä¿¼­, Áö¿ªÈ­(localize)¸¦ Çϰųª ¿¡·¯¸¦ °íÄ¡´Â °ÍÀ» °ÅÀÇ ºÒ°¡´ÉÇÏ°Ô ¸¸µç´Ù.

ÀÌ·± Á¾·ùÀÇ ¹®Á¦´Â ÀϺθ¦ °øÀ¯ÇÏ´Â ¹æ½Ä¿¡¼­´Â ÈçÈ÷ ÀϾÁø ¾Ê´Â´Ù. ¿Ö³ÄÇÏ¸é ¸í¹éÇÏ°Ô ÁöÁ¤ÇÑ ÀڷᱸÁ¶¸¸ÀÌ °øÀ¯µÇ±â ¶§¹®ÀÌ´Ù. ±×¸®°í, ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀº ¸ðµç ÇÁ·Î¼¼¼­°¡ ¿ÏÀüÈ÷ ¶È°°Àº ¸Þ¸ð¸® À̹ÌÁö¸¦ ½ÇÇàÇÏ´Â °æ¿ì¿¡¸¸ µ¿ÀÛÇÑ´Ù´Â °ÍÀº ´ç¿¬ÇÑ ÀÏÀÌ´Ù. Áï, ¿©·¯°³ÀÇ ¼­·Î ´Ù¸¥ ÄÚµå À̹ÌÁöµé »çÀÌ¿¡¼­´Â ¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù (´Ù¸£°Ô ¸»Çϸé, SPMD¸¸À» »ç¿ëÇÒ ¼ö ÀÖÁö, ÀϹÝÀûÀÎ MIMD´Â »ç¿ëÇÒ ¼ö ¾ø´Ù).

¸ðµÎ °øÀ¯ÇÏ´Â ¹æ½ÄÀ» Áö¿øÇÏ´Â °¡Àå ÀϹÝÀûÀÎ À¯ÇüÀº ¾²·¹µå ¶óÀ̺귯¸®(threads library)ÀÌ´Ù. ¾²·¹µå´Â º»·¡, ´ëü·Î ÀϹÝÀûÀÎ UNIX ÇÁ·Î¼¼½º¿Í´Â ´Ù¸£°Ô ½ºÄÉÁÙÀÌ ÀÌ·ç¾îÁö°í, °¡Àå Áß¿äÇÑ Á¡À¸·Î µ¿ÀÏÇÑ ¸Þ¸ð¸® ¸Ê¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â "°¡º­¿î" ÇÁ·Î¼¼½ºÀÌ´Ù. POSIX PthreadsÆÐÅ°Áö´Â ¿©·¯ Æ÷Æà ÇÁ·ÎÁ§Æ®¿¡¼­ ÃÐÁ¡À» ¹Þ¾Æ ¿Ô¾ú´Ù. ¿©±â¼­ Áß¿äÇÑ Áú¹®Àº, À̵é Æ÷ÆÃÁßÀÇ ¾î¶² °ÍµéÀÌ ½ÇÁ¦·Î ÇÁ·Î±×·¥¿¡ ÀÖ´Â ¾²·¹µåµéÀ» SMP ¸®´ª½º¿¡¼­ º´·Ä·Î ½ÇÇàÇÒ ¼ö ÀÖ´À³ÄÀÌ´Ù (ÀÌ»óÀûÀ¸·Î, °¢ ¾²·¹µå¸¶´Ù ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦). POSIX API´Â À̸¦ ¿ä±¸ÇÏÁö ¾ÊÀ¸¸ç, http://www.aa.net/~mtp/PCthreads.html°°Àº ¹öÀü¿¡¼­´Â ºÐ¸íÇÏ°Ô º´·Ä ¾²·¹½º ½ÇÇàÀ» ±¸ÇöÇÏÁö ¾Ê°í ÀÖ´Ù - ÇÁ·Î±×·¥ÀÇ ¸ðµç ¾²·¹µåµéÀº ÇϳªÀÇ ¸®´ª½º ÇÁ·Î¼¼½º ¾È¿¡ µé¾îÀÖ´Ù.

SMP ¸®´ª½º¿¡¼­ÀÇ º´·Ä󸮸¦ Áö¿øÇÑ Ã¹¹ø° ¾²·¹µå ¶óÀ̺귯¸®´Â Áö±ÝÀº Çѹ°°£ bb_threads ¶óÀ̺귯¸®·Î, ftp://caliban.physics.utoronto.ca/pub/linux/¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ¸®´ª½ºÀÇ clone()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿©, µ¶ÀÚÀûÀ¸·Î ½ºÄÉÁٵǸç, ÇϳªÀÇ ÁÖ¼Ò°ø°£À» °øÀ¯ÇÏ´Â, »õ·Î¿î ¸®´ª½º ÇÁ·Î¼¼½º¸¦ »ý¼º(fork)ÇÏ´Â ¸Å¿ì ÀÛÀº ¶óÀ̺귯ÀÌ´Ù. SMP ¸®´ª½º ±â°è´Â °¢ "¾²·¹µåµé"ÀÌ ¿ÏÀüÇÑ ¸®´ª½º ÇÁ·Î¼¼½ºÀ̱⠶§¹®¿¡ ¿©·¯°³ÀÇ À̵é "¾²·¹µåµé"À» º´·Ä·Î ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ´ë½Å ÀÌÀÇ ´ñ°¡·Î ´Ù¸¥ ¿î¿µÃ¼Á¦ÀÇ ÀϺΠ¾²·¹µå ¶óÀ̺귯¸®µéÀÌ Á¦°øÇÏ´Â °Í°ú °°Àº "°¡º­¿î" ½ºÄÉÁÙ¸µ Á¦¾î¸¦ ÇÒ ¼ö ¾ø´Ù. ÀÌ ¶óÀ̺귯¸®´Â »õ·Î¿î ¸Þ¸ð¸® Á¶°¢À» °¢ ¾²·¹µåÀÇ ½ºÅÃÀ¸·Î ÇÒ´çÇÏ°í, ¶ô(lock)ÀÇ ¹è¿­(mutex °³Ã¼µé)µéÀ» ¿øÀÚÀûÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦, C·Î Æ÷ÀåµÈ ¾î¼Àºí¸® Äڵ带 Á¶±Ý »ç¿ëÇÏ¿© Á¦°øÇÏ°í ÀÖ´Ù. ¹®¼­´Â README¿Í °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

Á»´õ ÃÖ±Ù¿¡ clone()À» »ç¿ëÇÏ´Â POSIX ¾²·¹µå ¹öÀüÀÌ °³¹ßµÇ¾ú´Ù. ÀÌ ¶óÀ̺귯¸®´Â LinuxThreads·Î, SMP ¸®´ª½º¿¡¼­ »ç¶÷µéÀÌ °¡Àå ¼±È£ÇÏ´Â ¸ðµÎ °øÀ¯ÇÏ´Â ¶óÀ̺귯¸®ÀÌ´Ù. POSIX ¾²·¹µåµéµµ ¹®¼­È­°¡ ÀߵǾîÀÖ°í, LinuxThreads README¿Í LinuxThreads FAQ ¿ª½Ã ¸Å¿ì ÀߵǾî ÀÖ´Ù. Áö±ÝÀÇ ÁÖ¿äÇÑ ¹®Á¦´Â POSIX ¾²·¹µå¸¦ Á¦´ë·Î ÇÏ·Á¸é À̸¦ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ¾ßÇÑ´Ù´Â °ÍÀÌ°í, LinuxThreads´Â ¾ÆÁ÷Àº °è¼ÓÇؼ­ ÀÛ¾÷ÁßÀ̶ó´Â °ÍÀÌ´Ù. ¶ÇÇÑ POSIX ¾²·¹µå Ç¥ÁØÀÌ Ç¥ÁØÈ­ °úÁ¤¿¡¼­ °è¼Ó ¹ßÀüµÇ°í ÀÖ¾î, ÀÌ¹Ì ¹Ù²ï ¿¹Àü ¹öÀüÀÇ Ç¥ÁØ¿¡ ¸ÂÃç ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö ¾Êµµ·Ï ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù´Â °Í ¿ª½Ã ¹®Á¦ÀÌ´Ù.

ÀϺθ¦ °øÀ¯Çϱâ(Shared Something)

ÀϺθ¦ °øÀ¯ÇÏ´Â °ÍÀº Á¤¸»·Î "°øÀ¯ÇÒ ÇÊ¿ä°¡ ÀÖ´Â °Í¸¸À» °øÀ¯ÇÏ´Â" °ÍÀÌ´Ù. ÀÌ Á¢±Ù¹ýÀº °¢ ÇÁ·Î¼¼¼­ÀÇ ¸Þ¸ð¸® ¸ÊÀÇ ¶È°°Àº À§Ä¡¿¡ °øÀ¯µ¥ÀÌÅÍ°¡ ÇÒ´çµÇ°Ô ÇÏ´Â °Í¿¡ À¯ÀÇÇÑ´Ù¸é ÀϹÝÀûÀÎ MIMD(SPMD°¡ ¾Æ´Ï¶ó) ¿ëÀ¸·Î µ¿ÀÛÇÏ°Ô µÈ´Ù. ´õ Áß¿äÇÑ Æ¯Â¡Àº, ÀϺθ¦ °øÀ¯ÇÏ´Â ¹æ½ÄÀº ¼º´ÉÀ» ¿¹ÃøÇÏ°í Á¶À²Çϸç, Äڵ带 µð¹ö±ëÇÏ´Â °Í µîÀ» ½±°Ô ¸¸µé¾îÁشٴ °ÍÀÌ´Ù. À¯ÀÏÇÑ ¹®Á¦·Î´Â :

  • »çÀü¿¡ ¹«¾ùÀÌ Á¤¸»·Î °øÀ¯ÇÒ ÇÊ¿ä°¡ ÀÖ´ÂÁö ¾Æ´Â°Ô Èûµé´Ù.
  • °øÀ¯ ¸Þ¸ð¸®¿¡ °´Ã¼¸¦ ½ÇÁ¦·Î ÇÒ´çÇÏ´Â °ÍÀº °ñÄ¡¾ÆÇ ÀÛ¾÷ÀÌ´Ù. ƯÈ÷ ½ºÅÿ¡ ÇÒ´çµÇ´ø °´Ã¼ÀÎ °æ¿ì ´õ¿í ±×·¸´Ù. ¿¹¸¦ µé¾î, °øÀ¯ µ¥ÀÌÅ͸¦ º°µµÀÇ ¸Þ¸ð¸® ¿µ¿ª¿¡ ÇÒ´çÀ» ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì°¡ Àִµ¥, ÀÌ ¶§´Â º°µµÀÇ ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö¸¦ »ç¿ëÇÏ°í, °¢ ÇÁ·Î¼¼½º°¡ À̸¦ ÂüÁ¶ÇÒ ¶§ ¶Ç´Ù¸¥ Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

ÇöÀç ¸®´ª½º ÇÁ·Î¼¼½º ±×·ìµéÀÌ µ¶ÀÚÀûÀÎ ¸Þ¸ð¸® °ø°£À» °¡Áö¸é¼­, »ó´ëÀûÀ¸·Î ÀÛÀº ¸Þ¸ð¸® ¿µ¿ª¸¸À» ÇÔ²² °øÀ¯ÇÏ°Ô Çϴµ¥¿¡´Â µÎ°³ÀÇ À¯»çÇÑ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ¼³Á¤ÇÒ ¶§ ¹Ùº¸°°ÀÌ "System V IPC"¸¦ »©¹ö¸®Áö ¾Ê¾Ò´Ù¸é, ¸®´ª½º´Â "System V °øÀ¯ ¸Þ¸ð¸®"¶ó´Â ´Ù¸¥ ½Ã½ºÅÛ »çÀÌ¿¡¼­µµ ȣȯ¼ºÀÌ ÀÖ´Â ¹æ½ÄÀ» Á¦°øÇÑ´Ù. ´Ù¸¥ ¹æ½ÄÀº mmap() ½Ã½ºÅÛ ÄÝÀ» ÅëÇÏ¿© ¸Þ¸ð¸® ¸ÅÇÎ(memory mapping) ±â´ÉÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ±¸Çö¹æ½ÄÀÌ UNIX ½Ã½ºÅÛ¸¶´Ù Å©°Ô Â÷ÀÌ°¡ ³­´Ù. À̵é È£Ãâ¿¡ ´ëÇؼ­´Â ¸Å´º¾ó ÆäÀÌÁöµé¿¡¼­ ¹è¿ï ¼ö ÀÖ´Ù. ±×¸®°í 2.5Àå°ú 2.6Àå¿¡ ³ª¿À´Â °³°ýÀº À̸¦ óÀ½ ½ÃÀÛÇÒ ¶§ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.

¿øÀÚ¼º°ú ¼ø¼­(Atomicity And Ordering)

À§ÀÇ µÎ°¡Áö ¸ðµ¨ Áß ¾î¶² °ÍÀ» »ç¿ëÇÏ´õ¶óµµ °á°ú´Â ¸Å¿ì ºñ½ÁÇÏ´Ù. ¿©·¯ºÐÀº ÀÚ½ÅÀÌ ¸¸µç º´·Ä ÇÁ·Î±×·¥¿¡ µé¾î ÀÖ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀÌ Á¢±ÙÇÏ¿© ÀÐ°í ¾µ¼ö ÀÖ´Â ¸Þ¸ð¸® Á¶°¢¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¾ò°Ô µÈ´Ù. ÀÌ ¸»Àº ³»°¡ ¸¸µç º´·Ä ÇÁ·Î±×·¥ÀÌ °øÀ¯ ¸Þ¸ð¸® °´Ã¼µéÀ» ¸¶Ä¡ º¸ÅëÀÇ Áö¿ª ¸Þ¸ð¸®¿¡ ÀÖ´Â °Íó·³ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê´Â´Ù.

¿øÀÚ¼ºÀ̶õ ÇÑ °´Ã¼¿¡ ´ëÇÑ ÀÛ¾÷ÀÌ ÂÉ°³ÁöÁö ¾Ê°í, Áß´ÜµÉ ¼ö ¾ø´Â ÀÏ·ÃÀÇ °úÁ¤À¸·Î ÀÌ·ç¾îÁö´Â °ÍÀ» °¡¸®Å°´Â °³³äÀÌ´Ù. ºÒÇàÈ÷µµ, °øÀ¯ ¸Þ¸ð¸®¿¡ ´ëÇÑ Á¢±ÙÀº °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â ÀÚ·á¿¡ ´ëÇÑ ¸ðµç ÀÛ¾÷ÀÌ ¿øÀÚÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù´Â °ÍÀ» ³»Æ÷ÇÏÁø ¾Ê´Â´Ù. ¹Ì¸® Ưº°ÇÑ ÁÖÀǸ¦ ±â¿ïÁöÁö ¾Ê´Â´Ù¸é, ¹ö½º(bus)¿¡¼­ ´Ü Çѹø¸¸¿¡ 󸮰¡ ÀÌ·ç¾îÁö´Â °£´ÜÇÑ Àбâ/¾²±â ¿¬»ê¸¸ÀÌ (Áï, Á¤·ÄÀÌ µÈ 8, 16, 32 ºñÆ® ¿¬»êÀÌÁö, Á¤·ÄÀÌ ¾ÈµÇ¾î Àְųª 64 ºñÆ® ¿¬»êÀº ¾Æ´Ï´Ù) ¿øÀÚ¼ºÀ» °¡Áø´Ù. ´õ¿í ³ª»Û °ÍÀº, GCC°°ÀÌ "¶È¶ÈÇÑ" ÄÄÆÄÀÏ·¯´Â ÃÖÀûÈ­¸¦ ÅëÇØ ¸Þ¸ð¸® ÀÛ¾÷À» Á¦°ÅÇÏ¿©, ÇÑ ÇÁ·Î¼¼¼­°¡ ÇÑ ÀÏÀ» ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ º¼ ¼ö ¾ø°Ô ¸¸µé¾î¹ö¸®±âµµ ÇÑ´Ù. ´ÙÇàÈ÷µµ, ÀÌµé ¹®Á¦µéÀº ¸ðµÎ °íÄ¥ ¼ö ÀÖ´Ù... Á¢±Ù È¿À²¼º(access efficiency)°ú ij½Ã¶óÀÎ Å©±â(cache line size) »çÀÌÀÇ °ü°è¸¸ °ÆÁ¤°Å¸®·Î ³²°ÜµÎ°í¼­ ¸»ÀÌ´Ù.

±×·¸Áö¸¸ ÀÌµé ³íÁ¡¿¡ ´ëÇؼ­ Åä·ÐÇϱâ Àü¿¡, À̵éÀº ¸ðµÎ °¢ ÇÁ·Î¼¼¼­¿¡¼­ÀÇ ¸Þ¸ð¸® ÂüÁ¶°¡ ÄÚµùÇÑ ¼ø¼­´ë·Î ÀÌ·ç¾îÁö°í ÀÖ´Ù°í °¡Á¤ÇÏ°í ÀÖ´Ù´Â °ÍÀ» ÁöÀûÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. PentiumÀº ±×·¸°Ô ÇÏ°í ÀÖÁö¸¸, ¾ÕÀ¸·Î ³ª¿Ã ÀÎÅÚÀÇ ÇÁ·Î¼¼¼­µéÀº ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù´Â °Íµµ ±â¾ïÇϱ⠹ٶõ´Ù. µû¶ó¼­, ¾ÕÀ¸·Î ³ª¿Ã ÇÁ·Î¼¼¼­¿¡ ´ëºñÇÏ¿©, °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â ÄÚµå ÁÖÀ§¸¦, ¸ðµç ¹Ì°áµÈ ¸Þ¸ð¸® Á¢±ÙÀ» ¿Ï·áÇÏ¿© ¸Þ¸ð¸® Á¢±ÙÀÌ Â÷·Ê´ë·Î ÀÌ·ç¾îÁöµµ·Ï ÇÏ´Â ¸í·É¾î·Î µÑ·¯½Î¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù´Â °ÍÀ» ±íÀÌ »õ±â±æ ¹Ù¶õ´Ù. CPUID ¸í·É¾î´Â ÀÌ·± ºÎ¼öÈ¿°ú(side-effect)¸¦ À§ÇØ ¿¹¾àµÇ¾î ÀÖ´Â °ÍÀÌ´Ù.

Èֹ߼º(Volatility)

GCC ¿ÉƼ¸¶ÀÌÀú(optimizer)°¡ °øÀ¯ ¸Þ¸ð¸® °´Ã¼ÀÇ °ªÀ» ·¹Áö½ºÅÍ¿¡ ¹öÆÛ¸µÇÏ´Â °ÍÀ» ¸·À¸·Á¸é, °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â ¸ðµç °´Ã¼µéÀ» volatile ¼Ó¼ºÀ» °¡Áöµµ·Ï ¼±¾ðÇØ¾ß ÇÑ´Ù. ÀÌ·¸°Ô Çϸé, ÇѹøÀÇ Á¢±Ù¸¸À¸·Î ÀÌ·ç¾îÁö´Â ¸ðµç °øÀ¯ °´Ã¼ÀÇ Àбâ/¾²±â´Â ¿øÀÚÀûÀ¸·Î ÀϾ°Ô µÈ´Ù. ¿¹¸¦ µé¾î, p°¡ Á¤¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ°í, ÀÌ°ÍÀÌ °¡¸®Å°°í ÀÖ´Â Á¤¼ö°¡ °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Ù°í ÇÏÀÚ. ANSI C¿¡¼­´Â À̸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.


volatile int * volatile p;

ÀÌ Äڵ忡¼­, ù¹ø° volatile´Â p°¡ °¡¸®Å°´Â int °ªÀ» ¸»Çϸç, µÎ¹ø° volatile´Â Æ÷ÀÎÅÍ ±× ÀÚü¸¦ ¸»ÇÑ´Ù. ¹°·Ð ÀÌ´Â ±ÍÂúÀº ÀÛ¾÷ÀÌÁö¸¸, GCC°¡ ¸Å¿ì °­·ÂÇÑ ÃÖÀûÈ­¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ Ä¡·¯¾ß ÇÏ´Â °ÍÀÌ´Ù. Àû¾îµµ ÀÌ·ÐÀûÀ¸·Î´Â, GCC¿¡ -traditional ¿É¼ÇÀ» ÁÖ´Â °ÍÀ¸·Îµµ, ¸î°¡Áö ÃÖÀûÈ­¸¦ Èñ»ýÇÏ´Â ´ë½Å ¿Ã¹Ù¸¥ Äڵ带 ¸¸µé¾î³»´Âµ¥¿¡´Â ÃæºÐÇÏ´Ù. ¿Ö³ÄÇϸé ANSI K&R C ÀÌÀü¿¡´Â ¸ðµç º¯¼ö´Â µû·Î register¶ó°í ÁöÁ¤ÇÏÁö ¾ÊÀº ÀÌ»ó ¸ðµÎ volatileÀ̾ú±â ¶§¹®ÀÌ´Ù. ¿©ÀüÈ÷ GCC·Î cc -O6¿Í °°ÀÌ ÄÄÆÄÀÏÀ» ÇÏ°í, ÇÊ¿äÇÑ °Í¿¡¸¸ volatileÀ̶ó°í ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.

¸ðµç ÇÁ·Î¼¼¼­ÀÇ ·¹Áö½ºÅ͸¦ ¼öÁ¤ÇÏ´Â °ÍÀ¸·Î Ç¥½ÃµÇ¾î ÀÖ´Â ¾î¼Àºí¸®¾î ¶ô(lock)À» »ç¿ëÇϸé, GCC°¡ ¸ðµç º¯¼öµéÀ» ´Ù ³»º¸³»¼­(flush), volatileÀ̶ó°í ¼±¾ðÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â "ºñÈ¿À²ÀûÀÎ" ÄÚµåµéÀ» ÇÇÇÒ ¼ö ÀÖ°Ô ÇÏ´Â È¿°ú°¡ ÀÖ´Ù´Â ¼Ò¹®ÀÌ ÀÖ¾î¿Ô´Ù. ÀÌ·± ¹æ¹ýÀº GCC 2.7.0À» »ç¿ëÇÏ´Â °æ¿ì, Á¤ÀûÀ¸·Î ÇÒ´çµÇ´Â Àü¿ªº¯¼ö¿¡ ´ëÇؼ­´Â Á¦´ë·Î µ¿ÀÛÇÏ´Â °Íó·³ º¸ÀδÙ... ±×·¸Áö¸¸, ÀÌ·± ÇൿÀº ANSI C Ç¥ÁØ¿¡¼­´Â ÇÊ¿äÇÏÁö ¾Ê´Ù. ´õ ³ª»Û °ÍÀº Àбâ Á¢±Ù¸¸À» ÇÏ´Â ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº º¯¼ö °ªÀ» ¿µ¿øÈ÷ ·¹Áö½ºÅÍ¿¡ ¹öÆÛ¸µÀ» ÇÒ ¼ö À־, °øÀ¯ ¸Þ¸ð¸®ÀÇ °ªÀÌ ½ÇÁ¦·Î º¯ÇÏ´Â °ÍÀ» Àý´ë·Î ¾Ë¾ÆÂ÷¸®Áö ¸øÇÒ ¼öµµ ÀÖ´Ù. ¿ä¾àÇϸé, ÇÏ°í ½ÍÀº´ë·Î Çصµ ÁÁÁö¸¸, volatile¶ó°í ÁöÁ¤ÇÑ º¯¼ö¸¸ÀÌ Á¦´ë·Î µ¿ÀÛÇÑ´Ù´Â °ÍÀ» º¸ÀåÇÒ ¼ö ÀÖ´Ù.

ÀÏ¹Ý º¯¼ö¿¡µµ volatile ¼Ó¼ºÀ» ¾Ï½ÃÇÏ´Â Çüº¯È¯(type cast)À» »ç¿ëÇÏ¿© volatile Á¢±ÙÀ» ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, º¸ÅëÀÇ int i;´Â *((volatile int *) &i);°°ÀÌ ¼±¾ðÇÏ¿© volatile·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϸé Èֹ߼º(volatility)ÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡¸¸, ÀÌ·± ¿À¹öÇìµå¸¦ »ç¿ëÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù.

¶ô(Locks)

++i;´Â Ç×»ó °øÀ¯ ¸Þ¸ð¸®¿¡ ÀÖ´Â º¯¼ö i¿¡ 1À» ´õÇÑ´Ù°í »ý°¢ÇØ¿Ô´Ù¸é, ´ÙÀ½ À̾߱â´Â Á¶±ÝÀº ³î¶ø°í ´çȲ½º·¯¿ïÁöµµ ¸ð¸£°Ú´Ù. ÇϳªÀÇ ¸í·ÉÀ¸·Î ÄÚµùÀ» Çß´Ù°í ÇÏ´õ¶óµµ, °ªÀ» ÀÐ°í °á°ú¸¦ ¾²´Â °ÍÀº º°µµÀÇ ¸Þ¸ð¸® ó¸®(transaction)À» ÅëÇؼ­ ÀÌ·ç¾îÁö¸ç, ÀÌ µÎ ó¸® »çÀÌ¿¡ ´Ù¸¥ ÇÁ·Î¼¼¼­°¡ i¿¡ Á¢±ÙÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, µÎ°³ÀÇ ÇÁ·Î¼¼¼­°¡ ¸ðµÎ ++i; ¸í·ÉÀ» ¼öÇàÇÏ¿´´Âµ¥, 2°¡ Áõ°¡ÇÏ´Â°Ô ¾Æ´Ï¶ó 1ÀÌ Áõ°¡ÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÎÅÚ PentiumÀÇ "±¸Á¶(Architecture)¿Í ÇÁ·Î±×·¡¹Ö ¸Å´º¾ó"¿¡ µû¸£¸é, LOCK Á¢µÎ¾î´Â ´ÙÀ½¿¡ ³ª¿À´Â ¸í·É¾î°¡ ±×°ÍÀÌ Á¢±ÙÇÏ´Â ¸Þ¸ð¸® À§Ä¡¿¡ ´ëÇØ ¿øÀÚÀûÀ¸·Î ÀÌ·ç¾îÁö´Â °ÍÀ» º¸ÀåÇϱâ À§ÇØ »ç¿ëµÈ´Ù.


BTS, BTR, BTC                     mem, reg/imm
XCHG                              reg, mem
XCHG                              mem, reg
ADD, OR, ADC, SBB, AND, SUB, XOR  mem, reg/imm
NOT, NEG, INC, DEC                mem
CMPXCHG, XADD

±×·¸Áö¸¸, ÀÌµé ¿¬»êÀ» ¸ðµÎ »ç¿ëÇÏ´Â °ÍÀº ±×´ÙÁö ÁÁÀº »ý°¢Àº ¾Æ´Ñ °Í °°´Ù. ¿¹¸¦ µé¾î, XADD´Â 386¿¡¼­´Â Á¸ÀçÇÏÁöµµ ¾Ê°í, µû¶ó¼­ À̸¦ »ç¿ëÇÏ´Â °ÍÀº ȣȯ¼ºÀÇ ¹®Á¦¸¦ ¹ß»ý½Ãų ¼ö ÀÖ´Ù.

XCHG ¸í·É¾î´Â LOCK Á¢µÎ¾î°¡ ¾ø´õ¶óµµ Ç×»ó ¶ôÀ» »ç¿ëÇÑ´Ù. µû¶ó¼­ ÀÌ ¸í·É¾î´Â ¼¼¸¶Æ÷¾î(semaphore)³ª °øÀ¯ Å¥(shared queue)°°Àº °í¼öÁØÀÇ ¿øÀÚÀûÀÎ ±¸¼ºÃ¼¸¦ ¸¸µå´Â °æ¿ì¿¡ ÁÁÀº ¿øÀÚÀûÀÎ ¿¬»êÀÌ´Ù. ´ç¿¬È÷ C ÄÚµå·Î GCC°¡ ÀÌ ¸í·É¾î¸¦ ¸¸µé¾î³»µµ·Ï ÇÒ ¼ö´Â ¾ø´Ù. ´ë½Å ÀζóÀÎ(in-line) ¾î¼Àºí¸® Äڵ带 Á¶±Ý »ç¿ëÇØ¾ß ÇÑ´Ù. ¿öµå(word) Å©±âÀÇ volatile °´Ã¼ÀÎ obj¿Í ¿öµå Å©±âÀÇ ·¹Áö½ºÅÍ °ªÀÎ reg°¡ ÀÖ´Ù¸é, GCC ÀζóÀÎ ¾î¼Àºí¸® ÄÚµå´Â ´ÙÀ½°ú °°´Ù :


__asm__ __volatile__ ("xchgl %1,%0"
                      :"=r" (reg), "=m" (obj)
                      :"r" (reg), "m" (obj));

¶ô(lock)À» Çϴµ¥ ºñÆ®(bit) ¿¬»êÀ» »ç¿ëÇÏ´Â GCC ÀζóÀÎ ¾î¼Àºí¸® ÄÚµåÀÇ ¿¹Á¦°¡ bb_threads library¶óÀ̺귯¸®ÀÇ ¼Ò½º Äڵ忡 ÀÖ´Ù.

¸Þ¸ð¸® ó¸®(transaction)¸¦ ¿øÀÚÀûÀ¸·Î ¸¸µå´Â °Í¿¡µµ ÀÌ¿¡ µû¸£´Â ºñ¿ëÀÌ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. º¸ÅëÀÇ ÂüÁ¶´Â Áö¿ª ij½Ã¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â »ç½Ç¿¡ ºñÃ߾¸é, ¶ô(lock)À» ÇÏ´Â ¿¬»êÀº ¾à°£ÀÇ ¿À¹öÇìµå¸¦ ¼ö¹ÝÇÏ°í, ´Ù¸¥ ÇÁ·Î¼¼¼­ÀÇ ¸Þ¸ð¸® È°µ¿À» Áö¿¬½Ãų ¼ö ÀÖ´Ù. ¶ô(lock) ¿¬»êÀ» »ç¿ëÇÏ´Â °æ¿ì °¡Àå ÁÁÀº ¼º´ÉÀ» ³»°í ½Í´Ù¸é °¡´ÉÇÑ À̸¦ Àû°Ô »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´õ ³ª¾Æ°¡ À̵é IA32 ¿øÀÚÀûÀÎ ¸í·É¾îµéÀº ´Ù¸¥ ½Ã½ºÅÛ°úÀÇ È£È¯¼ºÀÌ ¾ø´Ù.

¾î¶² ¼ø°£ÀÌµç ¸¹¾Æµµ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¸ÀÌ ÁÖ¾îÁø °øÀ¯ °´Ã¼¸¦ °»½ÅÇÏ´Â °ÍÀ» º¸ÀåÇÏ´Â ¿©·¯°¡Áö µ¿±âÈ­(synchronization) - »óÈ£ ¹èÁ¦(mutual exclusion)¸¦ Æ÷ÇÔÇÏ¿© - ¸¦ ±¸ÇöÇϴµ¥ º¸ÅëÀÇ ¸í·É¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¿©·¯°¡Áö ´Ù¸¥ Á¢±Ù¹æ¹ýÀÌ ÀÖ´Ù. ´ëºÎºÐÀÇ OS ±³Àç¿¡¼­´Â ÀÌµé ±â¹ýÀ» Àû¾îµµ Çϳª ÀÌ»ó¾¿Àº ´Ù·ç°í ÀÖ´Ù. Abraham Silberschatz¿Í Peter B GalvinÀÌ ÁöÀº ¿î¿µÃ¼Á¦ °³³ä(Operating System Concepts) 4ÆÇ(ISBN 0-201-50480-4)¿¡¼­ À̸¦ ¾ÆÁÖ Àß ´Ù·ç°í ÀÖ´Ù.

ij½Ã¶óÀÎ Å©±â(Cache Line Size)

¿øÀÚ¼º¿¡ °ü·ÃµÈ ±âº»ÀûÀÎ °ÍÀ¸·Î¼­ SMP ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Â °ÍÀ¸·Î ij½Ã¶óÀÎ Å©±â°¡ ÀÖ´Ù. MPS Ç¥ÁØ¿¡´Â ¾î¶² ij½Ã°¡ »ç¿ëµÇµçÁö °£¿¡ ÂüÁ¶´Â ÀÏ°üÀûÀ̾î¾ß ÇÑ´Ù°í ÇÏ°í ÀÖÁö¸¸, »ç½ÇÀº ÇϳªÀÇ ÇÁ·Î¼¼¼­°¡ ¸Þ¸ð¸®ÀÇ Æ¯Á¤ ¶óÀο¡ ±â·ÏÀ» ÇÒ ¶§, ÀÌÀü ¶óÀÎÀÇ Ä³½ÃµÈ º¹»çº»ÀÌ ¸ðµÎ ¹«È¿È­(invalidate)µÇ°Å³ª °»½Å(update)µÇ¾î¾ß ÇÑ´Ù. ÀÌ ¸»Àº µÎ °³³ª ±× ÀÌ»óÀÇ ÇÁ·Î¼¼¼­°¡ µ¿½Ã¿¡ °°Àº ¶óÀÎÀÇ ´Ù¸¥ ºÎºÐ¿¡ µ¥ÀÌÅ͸¦ ±â·ÏÇÏ·Á°í Çϸé, »ó´ç·®ÀÇ Ä³½Ã¿Í ¹ö½º ÅëÇà(traffic)ÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, ½ÇÁúÀûÀ¸·Î ij½Ã¿¡¼­ ij½Ã·Î ¶óÀÎÀ» Àü´ÞÇÏ°Ô µÈ´Ù. ÀÌ ¹®Á¦´Â À߸øµÈ °øÀ¯(false sharing)¶ó°í ÇÑ´Ù. ±× ÇØ°áÃ¥Àº º´·Ä·Î Á¢±ÙµÇ´Â µ¥ÀÌÅÍ°¡ µÇµµ·ÏÀÌ¸é °¢ ÇÁ·Î¼¼¼­¸¶´Ù ´Ù¸¥ ij½Ã ¶óÀο¡¼­ ¿Ã ¼ö ÀÖµµ·Ï µ¥ÀÌÅ͸¦ Á¶Á÷È­Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

À߸øµÈ °øÀ¯´Â L2 ij½Ã¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­´Â ¹®Á¦°¡ ¾ÈµÉ°Å¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸, ¿©ÀüÈ÷ º°µµÀÇ L1 ij½Ã°¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ij½ÃÀÇ Á¶Á÷°ú ±¸º°µÈ º°µµÀÇ ·¹º§ÀÇ °¹¼ö´Â ¸ðµÎ º¯ÇÒ ¼ö ÀÖÁö¸¸, Pentium L1 ij½Ã¶óÀÎ Å©±â´Â 32 ¹ÙÀÌÆ®ÀÌ°í, ÀüÇüÀûÀÎ ¿ÜÀåÇü ij½Ã¶óÀÎ Å©±â´Â 256 ¹ÙÀÌÆ® °¡·®ÀÌ´Ù. µÎ Ç׸ñÀÇ ÁÖ¼Ò°¡ (¹°¸®Àû ÁÖ¼ÒÀ̵ç, °¡»ó ÁÖ¼ÒÀ̵ç) a¿Í bÀÌ°í, °¡Àå Å« ÇÁ·Î¼¼¼­´ç ij½Ã¶óÀÎ Å©±â°¡ cÀÌ°í, À̵éÀº ¸ðµÎ 2ÀÇ ¸î Á¦°ö½ÂÀ̶ó°í ÇÏÀÚ. ¸Å¿ì ¾ö¹ÐÇÏ°Ô Çϸé, ((int) a) & ~(c - 1)¿Í ((int) b) & ~(c - 1)ÀÌ °°À» ¶§, µÎ°³ÀÇ ÂüÁ¶°¡ ¶È°°Àº ij½Ã¶óÀο¡ Á¸ÀçÇÏ°Ô µÈ´Ù. ´õ ±ÔÄ¢À» °£´ÜÈ­ÇÏ¸é º´·Ä·Î ÂüÁ¶µÇ´Â °øÀ¯ °´Ã¼°¡ Àû¾îµµ c ¹ÙÀÌÆ®°¡ ¶³¾îÁ® ÀÖ´Ù¸é, À̵éÀº ´Ù¸¥ ij½Ã ¶óÀÎÀ¸·Î ¸ÅÇÎÀÌ µÈ´Ù´Â °ÍÀÌ´Ù.

¸®´ª½º ½ºÄÉÁÙ·¯ ³íÁ¡(Linux Scheduler Issues)

º´·Ä󸮿¡¼­ °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ÀüÀûÀÎ ÀÌÀ¯´Â OSÀÇ ¿À¹öÇìµå¸¦ ÇÇÇÏÀÚ´Â °ÍÀÌÁö¸¸, OS ¿À¹öÇìµå´Â Åë½Å ±× ÀÚü ¿ÜÀÇ °Í¿¡¼­ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ¿ì¸®´Â ÀÌ¹Ì ¸¸µé¾î¾ß ÇÒ ÇÁ·Î¼¼½ºÀÇ °¹¼ö°¡ ±â°è¿¡ ÀÖ´Â ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù °°°Å³ª À۾ƾßÇÑ´Ù°í ¸»Çß¾ú´Ù. ±×·¯³ª Á¤È®È÷ ¾ó¸¶³ª ¸¹Àº ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î¾ß ÇÒ Áö ¾î¶»°Ô °áÁ¤ÇÒ ¼ö ÀÖÀ»±î?

ÃÖ°íÀÇ ¼º´ÉÀ» ³»·Á¸é, ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °¹¼ö´Â, ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ °è¼ÓÇؼ­ ½ÇÇàµÉ ¼ö ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °¹¼öÇÏ°í °°¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, ³×°³ÀÇ ÇÁ·Î¼¼¼­°¡ ÀÖ´Â SMP ½Ã½ºÅÛ¿¡¼­ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ¸ñÀûÀ¸·Î (¿¹¸¦ µé¾î WWW ¼­¹ö) µ¿ÀÛÇÏ°í ÀÖ´Ù¸é, ¿©·¯ºÐÀÌ ¸¸µç º´·Ä ÇÁ·Î±×·¥Àº ¼¼°³ÀÇ ÇÁ·Î¼¼½º¸¸À» »ç¿ëÇØ¾ß ÇÑ´Ù. ½Ã½ºÅÛ¿¡ ¸î °³ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ÀÖ´ÂÁö´Â uptime ¸í·É¿¡¼­ µ¹·ÁÁÖ´Â "Æò±Õ ºÎÇÏ(load average)"¸¦ ÂüÁ¶ÇÏ¿© ´ë°­Àº ¾Ë ¼ö ÀÖ´Ù.

´Ù¸¥ ¹æ¹ýÀ¸·Î renice ¸í·ÉÀ̳ª nice()


ID
Password
Join
You are a bundle of energy always on the go.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-04-23 19:57:06
Processing time 0.0025 sec