Linux Parallel Processing HOWTO
Linux Parallel Processing HOWTO
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)°¡
À̵éÀÌ´Ù.
º´·Äó¸®(Parallel Processing)´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö
ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼¿¡¼
½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥ ¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù.
ÇÁ·Î±×·¥À» N°³ÀÇ ÇÁ·Î¼¼¼¿¡¼ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼
½ÇÇàÇÏ´Â °Íº¸´Ù N¹è±îÁö »¡¶óÁú ¼ö ÀÖ´Ù.
¿À·§µ¿¾È Ưº°È÷ µðÀÚÀÎÇÑ "º´·Ä ÄÄÇ»ÅÍ(parellel computer)"¿¡¼
¿©·¯°³ÀÇ ÇÁ·Î¼¼¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ·± °æÇâ¿¡ µû¶ó ¸®´ª½º´Â
ÇöÀç ÇϳªÀÇ ÄÄÇ»ÅÍ ³»¿¡¼ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼°¡ °°Àº ¸Þ¸ð¸®¿Í
¹ö½º ÀÎÅÍÆäÀ̽º¸¦ °øÀ¯ÇÏ´Â SMP ½Ã½ºÅÛ(Á¾Á¾ "¼¹ö"·Î Æȸ®´Â)À»
Áö¿øÇÑ´Ù. ÀÌ ¿Ü¿¡µµ ¿©·¯´ëÀÇ ÄÄÇ»Å͸¦ ±×·ìÀ» Áö¾î (¿¹¸¦ µé¾î
°¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇÏ°í ÀÖ´Â PCµéÀÇ ±×·ì) ³×Æ®¿÷À¸·Î ¼·Î
¿¬°áÇÏ¿© º´·Äó¸® Ŭ·¯½ºÅÍ(parellel-processing cluster)¸¦ ¸¸µé ¼ö
ÀÖ´Ù. ¸®´ª½º¸¦ ÀÌ¿ëÇÑ º´·Ä ÄÄÇ»ÆÃÀÇ ¼¼¹ø° ¹æ¹ýÀº ¸ÖƼ¹Ìµð¾î
È®Àå ¸í·É¾î(multimedia instruction extensions, MMX)¸¦ »ç¿ëÇÏ¿©
¼ýÀÚ µ¥ÀÌÅÍ º¤Å͸¦ º´·Ä·Î ó¸®ÇÏ´Â °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ¸®´ª½º
½Ã½ºÅÛÀ» Àü¿ëÀ¸·Î ºÎ¼Ó º´·Äó¸® ¿£Áø(attached parellel processing
compute engine)ÀÇ "È£½ºÆ®"·Î »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ
¹®¼¿¡¼´Â ÀÌ ¸ðµç Á¢±Ù¹æ¹ýµéÀ» ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇÏ°Ú´Ù.
¿©·¯°³ÀÇ ÇÁ·Î¼¼¼¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸¹Àº ¿¬»êÀÇ Ã³¸®ÇÏ´Â ¼Óµµ¸¦
ºü¸£°Ô ÇÒ ¼ö ÀÖÁö¸¸, ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀº º´·Ä󸮶ó°í
Çؼ ¾ÆÁ÷ ³ª¾ÆÁö´Â°Ô ¾ø´Ù. ±âº»ÀûÀ¸·Î º´·Ä󸮴 ´ÙÀ½ °æ¿ì¿¡
ÇØ´çÇÒ ¶§ Àû´çÇÏ´Ù :
-
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º´Ç༺À»
°¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¾î´ÀÁ¤µµ ÀÌ´Â ÇÁ·Î±×·¥ Áß¿¡¼ °¢±â ´Ù¸¥ ÇÁ·Î¼¼¼¿¡¼
µ¶¸³ÀûÀ¸·Î µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ºÎºÐµéÀ» ÆľÇÇÏ´Â ¹®Á¦ÀÌ´Ù. ƯÁ¤
½Ã½ºÅÛÀ» »ç¿ëÇÏ¿© º´·Ä·Î ½ÇÇàÇÏ´Â °æ¿ì, ¾î¶² °ÍµéÀº º´·Ä·Î ½ÇÇàÇϴ°Ô
½ÇÁ¦·Î ´õ ´À¸° °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡¼ 4ÃÊ°¡
°É¸®´Â ÇÁ·Î±×·¥ÀÌ ³× ´ëÀÇ ÄÄÇ»ÅÍ¿¡¼ °¢°¢ 1Ãʸ¸¿¡ ½ÇÇàÀ» ³¡³½´Ù
ÇÏ´õ¶óµµ, À̵é ÄÄÇ»ÅÍ°¡ ¼·ÎÀÇ µ¿ÀÛÀ» ÅëÇÕÇϴµ¥ 3Ãʳª ±× ÀÌ»óÀÇ ½Ã°£ÀÌ
°É¸°´Ù¸é ¾Æ¹«·± ¼Óµµ°³¼±ÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù.
-
°ü½ÉÀ» °¡Áö°í Àִ ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÌ¹Ì º´·ÄÈ(º´·Äó¸®ÀÇ ÀÌÁ¡À»
È°¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºµÈ) µÇ¾ú°Å³ª, º´·Äó¸®ÀÇ ÀÌÁ¡À» È°¿ëÇÏ´Â ÃÖ¼ÒÇÑÀÇ
»õ·Î¿î ÄÚµùÀ» ÇÏ·Á°í ÇØ¾ß ÇÑ´Ù.
-
¿¬±¸ºÐ¾ß¿¡ °ü½ÉÀְųª ¾î´ÀÁ¤µµ Àͼ÷ÇÑ »ç¶÷ÀÌ º´·Ä󸮸¦ Æ÷ÇÔÇϵµ·Ï
³ª¼¾ß ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ÀÌ¿ëÇÑ º´·Ä󸮰¡ ¹Ýµå½Ã ¾î·Á¿î °ÍÀº
¾ÊÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚ¿¡°Õ Ä£¼÷ÇÏÁö ¾Ê°í, "¾Æ¹«°Íµµ ¸ð¸£´Â
»ç¶÷µéÀ» À§ÇÑ º´·Äó¸®"°°Àº Ã¥µµ ¾ÆÁ÷ ¾ø´Â »óȲÀÌ´Ù. ÀÌ HOWTO ¹®¼°¡
¾Ë¾Æ¾ß ÇÒ ¸ðµç°ÍÀº °¡Áö°í ÀÖÁø ¾Ê´õ¶óµµ ÁÁÀº Ãâ¹ßÁ¡ÀÌ µÉ °ÍÀÌ´Ù.
ÁÁÀº ¼Ò½ÄÀº À§ÀÇ ³»¿ëÀÌ ¸ðµÎ ÇØ´çÇÑ´Ù¸é, º¹ÀâÇÑ °è»êÀ»
¼öÇàÇϰųª ¹æ´ëÇÑ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì, ¸®´ª½º¸¦
ÀÌ¿ëÇÑ º´·Ä󸮰¡ ½´ÆÛÄÄÇ»ÅͱÞÀÇ ¼º´ÉÀ» ¹ßÈÖÇÒ ¼ö ÀÖ´Ù´Â
°ÍÀÌ´Ù. ´õ±º´Ù³ª ±×°Íµµ ´ç½ÅÀÌ ÀÌ¹Ì °¡Áö°í ÀÖÀ» °ª½Ñ Çϵå¿þ¾î¸¦
»ç¿ëÇÏ¿© ÇÒ ¼ö ÀÖ´Ù. º¸³Ê½º·Î º´·Ä ¸®´ª½º ½Ã½ºÅÛÀÌ ¹Ù»Ú°Ô º´·Ä
ÀÛ¾÷À» ¼öÇàÇÏ°í ÀÖÁö ¾ÊÀ» ¶§´Â ´Ù¸¥ ¿ëµµ·Î ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
º´·Ä󸮰¡ ´ç½ÅÀÌ ¹Ù¶ó´ø °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¾î´ÀÁ¤µµ ¼Ò¼ÒÇÑ
¼º´ÉÇâ»óÀ» ¹Ù¶õ´Ù¸é, ¿©ÀüÈ÷ ÇÒ ¼ö ÀÖ´Â ÀÏÀÌ ¸î°¡Áö ÀÖ´Ù. ¿¹¸¦
µé¾î, ¼øÂ÷󸮸¦ ÇÏ´Â ÇÁ·Î±×·¥µéÀº ºü¸¥ ÇÁ·Î¼¼¼¸¦ »ç¿ëÇÏ°í,
¸Þ¸ð¸®¸¦ Ãß°¡ÇÏ°í, IDE µð½ºÅ©¸¦ ºü¸¥ ¿ÍÀ̵å SCSI µð½ºÅ©·Î
¹Ù²Ù´Â µîÀÇ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ °ü½ÉÀ» °¡Áö´Â °ÍÀÌ
À̰Ŷó¸é ¹Ù·Î
<@@ref>sec_PerformanceIssues¼º´É ¹®Á¦ÀåÀ¸·Î
³Ñ¾î°¡°í, ±×·¸Áö ¾ÊÀ¸¸é °è¼Ó ÀоîÁֱ⠹ٶõ´Ù.
º´·Ä 󸮰¡ ¿©·¯ºÐÀÌ ¿øÇÏ´Â °ÍÀÌ ¾Æ´Ï´õ¶óµµ ¿©·¯ºÐÀÌ Àû¾îµµ °¡Àå ¿Â°ÇÇÑ
¼º´É °³¼±À» ÇÏ°íÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀÌ ÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ ¾ÆÁ÷ ³²¾Æ ÀÖ´Ù.
¿¹¸¦ µé¾î¼ ¿©·¯ºÐÀº Á» ´õ ºü¸¥ ÇÁ·Î¼¼¼, ¸Þ¸ð¸® Ãß°¡, IDE µð½ºÅ©¸¦ ºü¸¥
¿ÍÀ̵å SCSI·Î ¹Ù²Ù´Â µîÀÇ ÀÏÀ» ÇÔÀ¸·Î½á ½ÃÄö¼È ÇÁ·Î±×·¥µéÀÇ ¼º´ÉÀ»
°³¼±ÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ ¿©·¯ºÐÀÌ °ü½ÉÀÌ ÀÖ´Â ¸ðµç °ÍÀ̶ó¸é ¼½¼Ç
<@@ref>sec_PerformanceIssues¼º´É ¹®Á¦<@@ref>sec_PerformanceIssues¼º´É¿¡ ´ëÇÑ ³í¶õ·Î Á¡ÇÁÇ϶ó; ±×·¸Áö ¾Ê´Ù¸é
°è¼Ó Àб⠹ٶõ´Ù.
¿©·¯ ÇØ µ¿¾È ¸¹Àº ½Ã½ºÅÛ¿¡¼ º´·Ä󸮸¦ »ç¿ëÇØ¿ÔÁö¸¸, ´ëºÎºÐÀÇ
ÄÄÇ»ÅÍ »ç¿ëÀÚµéÀº ¿©ÀüÈ÷ Á» ³¸¼³ °ÍÀÌ´Ù. µû¶ó¼ º´·Äó¸®ÀÇ ¿©·¯
¹æ¹ýµéÀ» »ìÆ캸±â Àü¿¡, ¸î°¡Áö ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¿ë¾îµé¿¡
Àͼ÷ÇØÁö´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
- 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´Â ¾Æ´Ï´Ù.
ÀÌ 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¿¡¼´Â, ÀÌ ¾Ë°í¸®ÁòÀÇ ¿©·¯°¡Áö º´·Ä ±¸ÇöÀÌ ³ª¿À¸ç,
°¢°¢Àº ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.
ÀÌ ¹®¼ÀÇ ³ª¸ÓÁö´Â ´Ù¼¸°³ ºÎºÐÀ¸·Î ³ª´µ¾îÁ® ÀÖ´Ù. 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 ´ëÇÐÀº ¿©±â¼ ´Ù·é ¾î¶°ÇÑ ÀÛ¾÷À̳ª
°á°ú¹°µµ º¸ÁõÇÏÁö ¾Ê´Â´Ù.
ÀÌ ¹®¼´Â º´·Ä󸮸¦ À§ÇØ
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)¿¡
´ëÇؼ ¾ÆÁÖ °£´ÜÇÏ°Ô ¾Ë¾Æº¸°í, ¸¶Áö¸·À¸·Î ¿©·¯°¡Áö °øÀ¯ ¸Þ¸ð¸® º´·Ä ó¸®
¶óÀ̺귯¸®µé¿¡ ´ëÇØ ¾à°£ÀÇ Á¶¾ðÀ» Çϵµ·Ï ÇÑ´Ù.
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½Ã¿¡ °¡Á®¿À¸é µÇ¾î, ¹ö½º¸¦ µÑ·¯½Ñ °æÀïÀ» ÇÇÇÒ ¼ö ÀÖ¾î¼ Ä³½Ã¸¦
°øÀ¯ÇÏ´Â°Ô ½ÇÁúÀûÀ¸·Î µµ¿òÀÌ µÈ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ÇÁ·Î¼¼¼ ģȷÂÀ»
Àû¿ëÇÏÁö ¾Ê´Â °æ¿ì 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À» »ç¿ëÇÑ´Ù ÇÏ´õ¶óµµ µð½ºÅ©¸¦ ÀÌ¿ëÇÑ °¡»ó ¸Þ¸ð¸®º¸´Ù´Â
ÈξÀ ºü¸£´Ù.
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()