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

<!doctype linuxdoc system>
<article>
<title>Linux Parallel Processing HOWTO
<author>Hank Dietz, <tt><htmlurl url="mailto:pplinux@ecn.purdue.edu" name="pplinux@ecn.purdue.edu"></tt>
<date>v980105, 5 January 1998
<trans>1Àå-2Àå ÀÌÈ£, <tt><htmlurl url="mailto:i@flyduck.com"
name="(i@flyduck.com)"></tt>,
3Àå ÀÌÈÄ ¼±Á¤ÇÊ, <tt><htmlurl url="mailto:simje@maninet.com"
name="(simje@maninet.com)"></tt>
<tdate> 1999³â 12¿ù 3ÀÏ, ÃÖÁ¾ ¾÷µ¥ÀÌÆ®: 2000³â 4¿ù 18ÀÏ

<abstract>

<bf>º´·Äó¸®(Parallel Processing)</bf>´Â ÇÁ·Î±×·¥À» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö
ÀÖ´Â ¿©·¯ Á¶°¢À¸·Î ³ª´©¾î °¢ÀÚ ÀÚ½ÅÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥
¼öÇà ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù´Â °³³äÀÌ´Ù. ÇÁ·Î±×·¥À» <em>N</em>°³ÀÇ
ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàÇϸé ÇϳªÀÇ ÇÁ·Î¼¼¼­ ½ÇÇàÇÏ´Â °Íº¸´Ù <em>N</em>¹è±îÁö
»¡¶óÁú ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¸®´ª½º »ç¿ëÀÚµéÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ³×°¡Áö º´·Ä
󸮿¡ ´ëÇÑ Á¢±Ù¹ýÀ» ´Ù·é´Ù. SMP ¸®´ª½º ½Ã½ºÅÛ, ³×Æ®¿÷À¸·Î ¿¬°áµÈ ¸®´ª½º
½Ã½ºÅÛÀÇ Å¬·¯½ºÅÍ, ¸ÖƼ¹Ìµð¾î ¸í·É¾î(MMX°°Àº)¸¦ ÀÌ¿ëÇÑ º´·Ä ¼öÇà, ÇϳªÀÇ
¸®´ª½º ½Ã½ºÅÛÀÌ È£½ºÆ®ÇÏ´Â ºÎ¼Ó (º´·Ä) ÇÁ·Î¼¼¼­(attached processor)°¡
À̵éÀÌ´Ù.
</abstract>

<toc>

<!-- 1Àå -->
<!--***************************************************************-->
<sect>¼Ò°³
<!--***************************************************************-->
<p>

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

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

<!-- ------------------------------------------------------------- -->
<sect1>º´·Ä󸮰¡ ³»°¡ ¹Ù¶ó´ø °ÍÀΰ¡?
<!-- ------------------------------------------------------------- -->
<p>

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

<itemize>
<item> 
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿©·¯°³ÀÇ ÇÁ·Î¼¼¼­¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï º´Ç༺À»
°¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¾î´ÀÁ¤µµ ÀÌ´Â ÇÁ·Î±×·¥ Áß¿¡¼­ °¢±â ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­
µ¶¸³ÀûÀ¸·Î µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â ºÎºÐµéÀ» ÆÄ¾ÇÇÏ´Â ¹®Á¦ÀÌ´Ù. ƯÁ¤
½Ã½ºÅÛÀ» »ç¿ëÇÏ¿© º´·Ä·Î ½ÇÇàÇÏ´Â °æ¿ì, ¾î¶² °ÍµéÀº º´·Ä·Î ½ÇÇàÇϴ°Ô
½ÇÁ¦·Î ´õ ´À¸° °æ¿ì°¡ ÀÖÀ» ¼ö ÀÖ´Ù.  ¿¹¸¦ µé¾î ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡¼­ 4Ãʰ¡
°É¸®´Â ÇÁ·Î±×·¥ÀÌ ³× ´ëÀÇ ÄÄÇ»ÅÍ¿¡¼­ °¢°¢ 1Ãʸ¸¿¡ ½ÇÇàÀ» ³¡³½´Ù
ÇÏ´õ¶óµµ, À̵é ÄÄÇ»ÅͰ¡ ¼­·ÎÀÇ µ¿ÀÛÀ» ÅëÇÕÇϴµ¥ 3Ãʳª ±× ÀÌ»óÀÇ ½Ã°£ÀÌ
°É¸°´Ù¸é ¾Æ¹«·± ¼Óµµ°³¼±ÀÌ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. 

<item> 
°ü½ÉÀ» °¡Áö°í Àִ ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÀÌ¹Ì º´·ÄÈ­(º´·Äó¸®ÀÇ ÀÌÁ¡À»
Ȱ¿ëÇÏ¿© ´Ù½Ã ÀÛ¼ºµÈ) µÇ¾ú°Å³ª, º´·Äó¸®ÀÇ ÀÌÁ¡À» Ȱ¿ëÇÏ´Â ÃÖ¼ÒÇÑÀÇ
»õ·Î¿î ÄÚµùÀ» ÇÏ·Á°í ÇØ¾ß ÇÑ´Ù. 

<item> 
¿¬±¸ºÐ¾ß¿¡ °ü½ÉÀְųª ¾î´ÀÁ¤µµ Àͼ÷ÇÑ »ç¶÷ÀÌ º´·Ä󸮸¦ Æ÷ÇÔÇϵµ·Ï
³ª¼­¾ß ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀ» ÀÌ¿ëÇÑ º´·Ä󸮰¡ ¹Ýµå½Ã ¾î·Á¿î °ÍÀº
¾ÊÁö¸¸, ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ »ç¿ëÀÚ¿¡°Õ Ä£¼÷ÇÏÁö ¾Ê°í, "¾Æ¹«°Íµµ ¸ð¸£´Â
»ç¶÷µéÀ» À§ÇÑ º´·Äó¸®"°°Àº Ã¥µµ ¾ÆÁ÷ ¾ø´Â »óȲÀÌ´Ù. ÀÌ HOWTO ¹®¼­°¡
¾Ë¾Æ¾ß ÇÒ ¸ðµç°ÍÀº °¡Áö°í ÀÖÁø ¾Ê´õ¶óµµ ÁÁÀº Ãâ¹ßÁ¡ÀÌ µÉ °ÍÀÌ´Ù. 

</itemize>

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

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

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

<!-- ------------------------------------------------------------- -->
<sect1>¿ë¾î
<!-- ------------------------------------------------------------- -->
<p>

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

<descrip>

<tag>SIMD (Single Instruction stream, Multiple Data stream, ´ÜÀÏ
¸í·É¾î, ´ÙÁß µ¥ÀÌÅÍ ½ºÆ®¸²) :</tag>
SIMD´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ ¶È°°Àº ¿¬»êÀ» µ¿½Ã¿¡ ½ÇÇàÇÏÁö¸¸, °¢ ÇÁ·Î¼¼¼­°¡
ÀڽŸ¸ÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇØ ¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â º´·Ä ½ÇÇà ¸ðµ¨À» °¡¸®Å²´Ù.
ÀÌ ¸ðµ¨Àº ¹è¿­ÀÇ ¸ðµç ¿ø¼Ò¿¡ ´ëÇØ¼­ ¶È°°Àº ¿¬»êÀ» ¼öÇàÇÏ´Â °³³ä¿¡ ÀÚ¿¬È÷
µé¾î¸ÂÀ¸¸ç, µû¶ó¼­ Á¾Á¾ º¤Åͳª ¹è¿­ ó¸®¿Í °ü·ÃµÈ´Ù. ¸ðµç ¿¬»êÀÌ º»·¡
µ¿±âÈ­µÇ¾îÀÖÀ¸¹Ç·Î, SIMD ÇÁ·Î¼¼¼­°£ÀÇ »óÈ£ÀÛ¿ëÀº ´ëü·Î ½±°í È¿°úÀûÀ¸·Î
±¸ÇöÇÒ ¼ö ÀÖ´Ù. 
<p>

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

<tag>SPMD (Single Program, Multiple Data, ´ÜÀÏ ÇÁ·Î±×·¥, ´ÙÁß
µ¥ÀÌÅÍ) :</tag>
SPMD´Â MIMDÀÇ Á¦ÇÑµÈ ¹öÀüÀ¸·Î ¸ðµç ÇÁ·Î¼¼¼­°¡ °°Àº ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â
°ÍÀÌ´Ù. SIMD¿Í´Â ´Þ¸®, SPMD Äڵ带 ½ÇÇàÇÏ´Â °¢ ÇÁ·Î¼¼¼­´Â ÇÁ·Î±×·¥À»
½ÇÇà °úÁ¤¿¡¼­ ´Ù¸¥ Á¦¾î È帧 °úÁ¤À» µû¸¦ ¼ö ÀÖ´Ù.
<p>

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

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

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

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

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

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

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

<tag>SWAR (SIMD Within A Register, ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD) :</tag> 
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¿¡ µ¿ÀÇÇÑ ¼¼ ȸ»ç¸¦ Á¦¿ÜÇϰí, À̵é È®Àå
¸í·É¾îµéÀº ´ëÃæÀº ºñ½ÁÇÏÁö¸¸, ¼­·Î ȣȯµÇÁö´Â ¾Ê´Â´Ù.
<p>

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

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

<tag>IA32 (Intel Architecture, 32-bit, ÀÎÅÚ 32ºñÆ® ¾ÆÅ°ÅØÃÄ) :</tag> 
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³â±îÁö´Â Á¦Ç°ÀÌ ³ª¿ÀÁø ¾ÊÀ» ¿¹Á¤ÀÌ´Ù.
<p>

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

</descrip>
		
<!-- ------------------------------------------------------------- -->
<sect1>¿¹Á¦ ¾Ë°í¸®Áò <label id="sec_ExampleAlgorithm">
<!-- ------------------------------------------------------------- -->
<p>

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

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

<code>
  #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);
  }
</code>

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

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

<!-- ------------------------------------------------------------- -->
<sect1>ÀÌ ¹®¼­ÀÇ ±¸¼º
<!-- ------------------------------------------------------------- -->
<p>

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

<itemize>
<item> 
2ÀåÀº SMP ¸®´ª½º ½Ã½ºÅÛÀ» ´Ù·é´Ù. ÀÌ´Â °øÀ¯ ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÑ MIMD ½ÇÇàÀ»
Á÷Á¢ÀûÀ¸·Î Áö¿øÇϸç, ¸Þ½ÃÁö Àü´Þ ¿ª½Ã ½±°Ô ±¸ÇöµÈ´Ù. ¸®´ª½º´Â 16°³ÀÇ
ÇÁ·Î¼¼¼­¸¦ °®´Â SMP ±¸¼º±îÁö Áö¿øÇÏÁö¸¸, ´ëºÎºÐÀÇ SMP PC ½Ã½ºÅÛÀº µÎ°³³ª
³×°³ÀÇ ¶È°°Àº ÇÁ·Î¼¼¼­¸¦ °¡Áö°í ¸¸µé¾îÁø´Ù.

<item> 
3ÀåÀº °¢°¢ ¸®´ª½º¸¦ ½ÇÇàÇϰí ÀÖ´Â ±â°èµéÀ» ³×Æ®¿÷À¸·Î ¿¬°áÇÑ Å¬·¯½ºÅ͸¦
´Ù·é´Ù. Ŭ·¯½ºÅÍ´Â MIMD ½ÇÇà°ú ¸Þ½ÃÁö Àü´Þ, ±×¸®°í ´ë°³ ³í¸®Àû °øÀ¯
¸Þ¸ð¸®¸¦ Á÷Á¢ Áö¿øÇÏ´Â º´·Äó¸® ½Ã½ºÅÛÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ç¿ëÇÑ ³×Æ®¿÷
¹æ¹ý¿¡ µû¶ó SMP ½ÇÇàÀ» Èä³»³»°í, ÁýÇÕ ÇÔ¼ö(aggregate function) Åë½Åµµ
Áö¿øÇÒ ¼ö ÀÖ´Ù. Ŭ·¯½ºÅÍ·Î ¿¬°áµÈ ÇÁ·Î¼¼¼­ÀÇ ¼ýÀÚ´Â µÎ°³¿¡¼­ ¼öõ°³±îÁö
µÉ ¼ö Àִµ¥, ÀÌ ¼ýÀÚ´Â ÁÖ·Î ³×Æ®¿÷À» ±¸¼ºÇÏ´Â ¹°¸®ÀûÀÎ ¹è¼±¿¡ ÀÇÇØ
Á¦ÇÑÀ» ¹Þ´Â´Ù.  ¾î¶² °æ¿ì, Ŭ·¯½ºÅÍ¿¡ ¼­·Î ´Ù¸¥ À¯ÇüÀÇ ±â°èµéÀ» È¥ÇÕÇÒ
¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, DEC Alpha¿Í ÆæÆ¼¾ö ¸®´ª½º ½Ã½ºÅÛÀ» °áÇÕÇÒ ¼ö
Àִµ¥, ÀÌ·± °ÍÀ» °¡¸®ÄÑ <bf>ÀÌÁú Ŭ·¯½ºÅÍ</bf>(heterogeneous cluster)¶ó°í 
ÇÑ´Ù.

<item> 
4Àå¿¡¼­´Â SWAR, Áï ·¹Áö½ºÅÍ¿¡¼­ÀÇ SIMD(SIMD Within A Register)¸¦ ´Ù·é´Ù.
À̰ÍÀº ¸Å¿ì Á¦ÇÑÀûÀÎ À¯ÇüÀÇ º´·Ä ½ÇÇà ¸ðµ¨ÀÌÁö¸¸, ¹Ý¸é¿¡ ÀϹÝÀûÀÎ
ÇÁ·Î¼¼¼­¿¡ ÀÌ¹Ì ±¸ÇöµÇ¾î ÀÖ´Â ±â´ÉÀ̱⵵ ÇÏ´Ù. ÃÖ±Ù¿¡ ±Ù·¡ÀÇ
¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­¿¡ MMX (±×¸®°í ´Ù¸¥ °Íµéµµ) È®Àå ¸í·É¾îµéÀÌ Ãß°¡µÇ¸é¼­
ÀÌ·± Á¢±Ù¹æ¹ýÀÌ ´õ È¿À²ÀûÀÌ µÇ¾ú´Ù.

<item> 
5Àå¿¡¼­´Â ¸®´ª½º PC¸¦ °£´ÜÇÑ º´·Äó¸® ½Ã½ºÅÛÀÇ È£½ºÆ®·Î »ç¿ëÇÏ´Â °ÍÀ»
´Ù·é´Ù. ²Å´Â Ä«µå³ª ¿ÜºÎÀÇ ¹Ú½º ÇüÅ·Î, ºÎ¼Ó ÇÁ·Î¼¼¼­´Â ¸®´ª½º
½Ã½ºÅÛ¿¡°Ô ƯÁ¤ Á¾·ùÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ¾öû³­ ó¸® ´É·ÂÀ» ÁÙ ¼ö
ÀÖ´Ù. ¿¹¸¦ µé¾î, ¿©·¯°³ÀÇ DSP ÇÁ·Î¼¼¼­¸¦ Á¦°øÇÏ´Â °ª½Ñ ISAÄ«µå¸¦
ÀÌ¿ëÇÏ¿©, °æ°è°è»ê ¹®Á¦(compute-bound problem)¸¦ À§ÇÑ ¼ö¹é MFLOPSÀÇ Ã³¸®
´É·ÂÀ» °¡Áú ¼ö ÀÖ´Ù. ±×·¸Áö¸¸ À̵é Ãß°¡µÇ´Â º¸µåµéÀº ´ÜÁö ÇÁ·Î¼¼¼­ÀÏ
»ÓÀÌ´Ù. À̵éÀº ÀϹÝÀûÀ¸·Î OS¸¦ ½ÇÇàÇϰųª µð½ºÅ©³ª ÄÜ¼Ö I/O ´É·Â µîÀ»
°¡Áö°í ÀÖÁö ¾Ê´Ù. ÀÌ·± ½Ã½ºÅÛÀ» À¯¿ëÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ¸®´ª½º "È£½ºÆ®"°¡
ÀÌµé ±â´ÉµéÀ» Á¦°øÇØ¾ß ÇÑ´Ù.

</itemize>

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

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

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


<!-- 2Àå -->
<!--***************************************************************-->
<sect> SMP ¸®´ª½º
<!--***************************************************************-->
<p>

ÀÌ ¹®¼­´Â º´·Ä󸮸¦ À§ÇØ <url url="http://www.uk.linux.org/SMP/title.html"
name="SMP ¸®´ª½º"> ½Ã½ºÅÛÀ» ¾î¶»°Ô »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ °üÇØ °£´ÜÇϰÔ
°³¿ä¸¦ Á¦½ÃÇÑ´Ù.  SMP ¸®´ª½º¿¡ ´ëÇÑ °¡Àå ÃÖ±Ù Á¤º¸´Â ¾Æ¸¶µµ SMP ¸®´ª½º
ÇÁ·ÎÁ§Æ®ÀÇ ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¸®½ºÆ®¿¡ °¡ÀÔÇÏ·Á¸é
ÆíÁö º»¹®¿¡ <tt>subscribe linux-smp</tt> ¶ó°í Àû¾î <htmlurl
url="mailto:majordomo@vger.rutgers.edu"
name="majordomo@vger.rutgers.edu">·Î ÆíÁö¸¦ º¸³»¸é µÈ´Ù.

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

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

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

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

<!-- ------------------------------------------------------------- -->
<sect1>SMP Çϵå¿þ¾î(Hardware)
<!-- ------------------------------------------------------------- -->
<p>

SMP ½Ã½ºÅÛµéÀº ¿©·¯ÇØ ÀüºÎÅÍ »ç¿ëµÇ¾î ¿ÔÁö¸¸, ¾ó¸¶Àü±îÁö¸¸Çصµ ±â°è¸¶´Ù 
±âº»ÀûÀÎ ±â´ÉµéÀ» ¼­·Î ´Ù¸£°Ô ±¸ÇöÇÏ´Â °æÇâÀÌ À־, ¿î¿µÃ¼Á¦¿¡¼­ SMP¸¦
Áö¿øÇÏ´Â °ÍÀÌ È£È¯¼ºÀÌ ¾ø¾ú´Ù.  ÀÌ·± ¹®Á¦¸¦ Á¾½Ä½ÃŲ °ÍÀº ÀÎÅÚ¿¡¼­
¹ßÇ¥ÇÑ ´ÙÁßÇÁ·Î¼¼¼­ ±Ô¾à(Multiprocessor Specification, °£´ÜÈ÷ ÁÙ¿©¼­
<bf>MPS</bf>¶ó°í ÇÑ´Ù)ÀÌ´Ù.  MPS 1.4 ±Ô¾àÀº <url
url="http://www.intel.com/design/pro/datashts/242016.htm">¿¡¼­ 
PDF ÆÄÀÏ Çü½ÄÀ¸·Î µÈ ¹®¼­·Î ±¸ÇÒ ¼ö ÀÖÀ¸¸ç, <url
url="http://support.intel.com/oem_developer/ial/support/9300.HTM">¿¡¼­
MPS 1.1 ±Ô¾à¿¡ ´ëÇÑ °³¿ä¸¦ º¼ ¼ö ÀÖÁö¸¸, ÀÎÅÚÀÌ ÀÚ½ÅÀÇ WWW »çÀÌÆ®¸¦ Á¾Á¾
°³ÆíÀ» Çϱ⠶§¹®¿¡ ÀÌ ÁÖ¼Ò´Â ¹Ù²î¾úÀ» ¼öµµ ÀÖ´Ù.  ¸¹Àº <url
url="http://www.uruk.org/~erich/mps-hw.html"
name="Á¦ÀÛµé">Àº 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 ȣȯ ½Ã½ºÅÛµéÀÇ Â÷ÀÌ´Â ¿ì¼± ¹°¸®ÀûÀ¸·Î °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °ÍÀ»
¾î¶»°Ô ±¸ÇöÇÏ´À³Ä¿¡¼­ ³ªÅ¸³­´Ù.

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

ÀϺΠMPS Pentium ½Ã½ºÅÛ°ú, ¸ðµç MPS Pentium Pro¿Í Pentium II ½Ã½ºÅÛÀº 
µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ °¡Áö°í ÀÖ´Ù. (L2 ij½Ã´Â Pentium Pro³ª Pentium II
¸ðµâ¿¡ µé¾îÀÖ´Ù) ÀϹÝÀûÀ¸·Î µ¶ÀÚÀûÀÎ L2 ij½Ã¸¦ »ç¿ëÇϸé
ó¸® ¼Óµµ¸¦ ÃÖ´ëÈ­ÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸, ¸®´ª½º¿¡¼­´Â ¸í¹éÇÏ°Ô ±×·±
°ÍÀº ¾Æ´Ï´Ù.  À̸¦ È¥¶õÇÏ°Ô ÇÏ´Â ÁÖµÈ ÀÌÀ¯´Â, ÇöÀçÀÇ ¸®´ª½º ½ºÄÉÁÙ·¯°¡
°¢ ÇÁ·Î¼¼½º¸¦ ¶È°°Àº ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ°Ô ÇÏ´Â <bf>ÇÁ·Î¼¼¼­
ģȭ·Â(processor infinity)</bf>ÀÇ °³³äÀ» µû¸£Áö´Â ¾Ê±â ¶§¹®ÀÌ´Ù.
ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ´Â ÇÁ·Î¼¼¼­´Â ±Ý¹æ ¹Ù²ð¼ö ÀÖ´Ù.  ÀÌ ¹®Á¦´Â ÃÖ±Ù¿¡
"ÇÁ·Î¼¼¼­ °áÇÕ(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 ¹è±îÁö »¡¶óÁö´Â
°ÍÀ» º¸±âµµ ÇÏ¿´´Ù.

<sect2>¹ö½º ¼³Á¤(Bus configuration)?
<p>

¸ÕÀú À̾߱âÇÒ °ÍÀº ¿äÁò¿¡ ³ª¿À´Â ´ëºÎºÐÀÇ ½Ã½ºÅÛµéÀº, ÇÁ·Î¼¼¼­¿¡ Çϳª 
ÀÌ»óÀÇ 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 ½Ã½ºÅÛ¿¡¼­ ´õ¿í ÁõÆøµÈ´Ù.  ÀÌ´Â ¹ö½º Ŭ·° ¼Óµµ¸¦ ºü¸£°Ô ÇÏ´Â
°Íº¸´Ùµµ ´õ Áß¿äÇÑ ¹®Á¦ÀÌ´Ù.

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

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

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

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

<!-- ------------------------------------------------------------- -->
<sect1>°øÀ¯ ¸Þ¸ð¸® ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³<label
id="sec_IntroductionToSharedMemoryProgramming">
<!-- ------------------------------------------------------------- -->
<p>

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

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

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

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

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

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

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

<itemize>
<item>
¸¹Àº ¶óÀ̺귯¸®µéÀº °øÀ¯ÇÒ ¼ö ¾ø´Â ÀڷᱸÁ¶µéÀ» »ç¿ëÇÑ´Ù.  ¿¹¸¦ 
µé¾î, UNIX¿¡¼­ ´ëºÎºÐÀÇ ÇÔ¼öµéÀº <tt>errno</tt>¶ó´Â º¯¼ö¿¡´Ù°¡
¿¡·¯Äڵ带 ´ã¾Æ µ¹·ÁÁØ´Ù.  ¸¸¾à ¸ðµÎ °øÀ¯ÇÏ´Â µÎ °³ÀÇ ÇÁ·Î¼¼½º°¡
¿©·¯°¡Áö ÇÔ¼ö¸¦ ºÎ¸¥´Ù¸é, À̵éÀº ¶È°°Àº <tt>errno</tt> º¯¼ö¸¦
°øÀ¯Çϱ⠶§¹®¿¡ ¼­·Î °£¼·À» ÀÏÀ¸Å°°Ô µÉ °ÍÀÌ´Ù.  ºñ·Ï Áö±ÝÀº
<tt>errno</tt> ¹®Á¦¸¦ ÇØ°áÇÑ ¶óÀ̺귯¸®°¡ ÀÖ±ä ÇÏÁö¸¸, ÀÌ¿Í ºñ½ÁÇÑ
¹®Á¦´Â ´ëºÎºÐÀÇ ¶óÀ̺귯¸®¿¡ ¿©ÀüÈ÷ ³²¾Æ ÀÖ´Ù.  ¿¹¸¦ µé¾î, ¹Ì¸® Ưº°ÇÑ
ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾Ê°í, ¸ðµÎ °øÀ¯ÇÏ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½ºµéÀÌ X ¶óÀ̺귯¸®ÀÇ
ÇÔ¼öµéÀ» È£ÃâÇÑ´Ù¸é, X ¶óÀ̺귯¸®´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

<item>
ÀϹÝÀûÀ¸·Î Æ÷ÀÎÅ͸¦ À߸ø »ç¿ëÇϰųª, ¹è¿­¿¡¼­ À妽º¸¦ À߸ø ÁöÁ¤ÇÑ 
°æ¿ì, ÃÖ¾ÇÀÇ °á°ú·Î ÀÌ Äڵ带 ¼öÇàÇÏ´ø ÇÁ·Î¼¼½º°¡ Áױ⵵ ÇÑ´Ù.  À̶§
core ÆÄÀÏÀ» ¸¸µé¾î ¹«½¼ ÀÏÀÌ ÀϾ´ÂÁö ´Ü¼­¸¦ Á¦°øÇØÁֱ⵵ ÇÑ´Ù.  ¸ðµÎ
°øÀ¯ÇÏ´Â º´·Ä󸮿¡¼­´Â ÀÌ·± À߸øµÈ Á¢±ÙÀÌ ¹ß»ýÇϸé <em>´Ù¸¥
ÇÁ·Î¼¼½º±îÁöµµ Á×°Ô ÇÒ</em> °¡´É¼ºÀÌ Ä¿¼­, Áö¿ªÈ­(localize)¸¦ Çϰųª
¿¡·¯¸¦ °íÄ¡´Â °ÍÀ» °ÅÀÇ ºÒ°¡´ÉÇÏ°Ô ¸¸µç´Ù.
</itemize>

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

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

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

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

<sect3>ÀϺθ¦ °øÀ¯Çϱâ(Shared Something)
<p>

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

<itemize>
<item>»çÀü¿¡ ¹«¾ùÀÌ Á¤¸»·Î °øÀ¯ÇÒ Çʿ䰡 ÀÖ´ÂÁö ¾Æ´Â°Ô Èûµé´Ù.

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

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

<sect2>¿øÀÚ¼º°ú ¼ø¼­(Atomicity And Ordering)
<p>

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

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

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

<sect2>Èֹ߼º(Volatility)
<p>


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

<code>
volatile int * volatile p;
</code>

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

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

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

<sect2>¶ô(Locks)
<p>

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

<code>
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
</code>

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

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

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

¶ô(lock)À» Çϴµ¥ ºñÆ®(bit) ¿¬»êÀ» »ç¿ëÇÏ´Â GCC ÀζóÀÎ ¾î¼Àºí¸® ÄÚµåÀÇ 
¿¹Á¦°¡ <url
url="ftp://caliban.physics.utoronto.ca/pub/linux/"
name="bb_threads library">¶óÀ̺귯¸®ÀÇ ¼Ò½º Äڵ忡
ÀÖ´Ù.

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

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

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

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

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

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

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

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

´Ù¸¥ ¹æ¹ýÀ¸·Î <tt>renice</tt> ¸í·ÉÀ̳ª <tt>nice()</tt> ½Ã½ºÅÛ ÄÝ 
°°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© º´·Ä ÇÁ·Î±×·¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ¿ì¼±¼øÀ§(priority)¸¦
³ôÀÏ ¼öµµ ÀÖ´Ù.  ¿ì¼±¼øÀ§¸¦ ³ôÀÌ·Á¸é ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÑ´Ù.  ÀÌ »ý°¢Àº ´Ù¸¥
ÇÁ·Î¼¼½º¸¦ ÇÁ·Î¼¼¼­¿¡¼­ 쫒¾Æ³»¼­ ÀÚ½ÅÀÌ ¸¸µç ÇÁ·Î±×·¥ÀÌ ¸ðµç
ÇÁ·Î¼¼¼­¿¡¼­ °è¼ÓÇØ¼­ ½ÇÇàµÉ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù.  ÀÌ ¹æ¹ýÀº <url
url="http://luz.cs.nmt.edu/~rtlinux/"> ¿¡
ÀÖ´Â ½Ç½Ã°£(real-time) ½ºÄÉÁÙ·¯¸¦ Á¦°øÇÏ´Â SMP ¸®´ª½ºÀÇ 
ÇÁ·ÎÅäŸÀÔ(prototype) ¹öÀüÀ» »ç¿ëÇϸé Á»´õ È®½ÇÇÏ°Ô ´Þ¼ºÇÒ ¼ö ÀÖ´Ù

¿©·¯ºÐÀÌ SMP ½Ã½ºÅÛÀ» º´·Ä ±â°è·Î »ç¿ëÇÏ´Â À¯ÀÏÇÑ »ç¿ëÀÚ°¡ ¾Æ´Ï¶ó¸é, 
°è¼Ó ½ÇÇàÇÏ·Á°í ÇÏ´Â µÎ °³ ÀÌ»óÀÇ º´·Ä ÇÁ·Î±×·¥ »çÀÌ¿¡ Ãæµ¹ÀÌ ºú¾îÁú
¼öµµ ÀÖ´Ù.  ÀÌÀÇ Ç¥ÁØ ÇØ°á¹æ¹ýÀº <bf>Á¶´ÜÀ§(gang) ½ºÄÉÁÙ¸µ</bf> - Áï
µ¿½Ã¿¡ ÇϳªÀÇ º´·Ä ÇÁ·Î±×·¥¿¡ ¼ÓÇÏ´Â ÇÁ·Î¼¼½ºµé¸¸ÀÌ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï
½ºÄÉÁÙ¸µ ¿ì¼±¼øÀ§¸¦ ´Ù·ç´Â °ÍÀÌ´Ù.  ±×·¸Áö¸¸ Çϳª ÀÌ»óÀ» º´·Äó¸®Çϸé
°á°ú°¡ ´Ê°Ô µ¹¾Æ¿À°í, ½ºÄÉÁÙ·¯ÀÇ È°µ¿ÀÌ ¿À¹öÇìµå¸¦ ´õÇÏ°Ô µÈ´Ù´Â °ÍÀ»
»ó±âÇϱ⠹ٶõ´Ù.  µû¶ó¼­, ¿¹¸¦ µé¾î ³× °³ÀÇ ÇÁ·Î¼¼¼­¸¦ °¡Áø ½Ã½ºÅÛ¿¡ µÎ
°³ÀÇ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù¸é, µÎ °³ÀÇ ÇÁ·Î¼¼½º¸¦ °¢°¢ ½ÇÇàÇÏ´Â °ÍÀÌ, µÎ
°³ÀÇ ÇÁ·Î±×·¥ÀÌ ³×°³ÀÇ ÇÁ·Î¼¼½º¸¦ °¢°¢ »ç¿ëÇϸ鼭 Á¶´ÜÀ§ ½ºÄÉÁÙ¸µÀ»
ÇÏ´Â °Íº¸´Ù ´õ ³´´Ù.

ÀÌ·± ¹®Á¦¸¦ ´õ ²¿ÀÌ°Ô ÇÏ´Â °ÍÀÌ Çϳª ´õ ÀÖ´Ù.  ¿©·¯ºÐÀÌ ³·¿¡´Â Á¾ÀÏ 
°úÁßÇÏ°Ô »ç¿ëµÇ°í ÀÖÁö¸¸, ¹ã¿¡´Â ¿ÏÀüÈ÷ º´·Ä󸮿ëÀ¸·Î¸¸ »ç¿ë°¡´ÉÇÑ
±â°è¿¡¼­ ÇÁ·Î±×·¥À» °³¹ßÇϰí ÀÖ´Ù°í ÇÏÀÚ.  ¿©·¯ºÐÀº ³·¿¡ Å×½ºÆ®¸¦
Çϴ°ÍÀÌ ´À¸®´Ù´Â °ÍÀ» ¾Ë´õ¶óµµ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí ÀÛ¼ºÇÑ Äڵ带
Å×½ºÆ®ÇÏ°í ¼öÁ¤Çϱâ À§ÇØ ¸ðµç °¹¼öÀÇ ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î »ç¿ëÇÒ °ÍÀÌ´Ù.
±×·±µ¥, ÇÁ·Î¼¼½ºµéÀÌ ÇöÀç ½ÇÇàµÇ°í ÀÖÁö ¾Ê´Â (´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­) ´Ù¸¥
ÇÁ·Î¼¼½º¿Í °øÀ¯ ¸Þ¸ð¸®·Î °ªÀ» Àü´ÞÇϱ⸸À» ¾Æ¹«°Íµµ ÇÏÁö ¾Ê°í ±â´Ù¸®°í
ÀÖ´Ù¸é, À̵é ÀÛ¾÷Àº ¸Å¿ì ´À·ÁÁú °ÍÀÌ´Ù.  ÀÌ¿Í ¶È°°Àº ¹®Á¦´Â Äڵ带
ÇϳªÀÇ ÇÁ·Î¼¼¼­¹Û¿¡ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ °³¹ßÇϰí Å×½ºÆ®ÇÏ´Â °æ¿ì¿¡µµ
¹ß»ýÇÑ´Ù.

ÇØ°áÃ¥Àº Äڵ忡¼­ ´Ù¸¥ ÇÁ·Î¼¼¼­¿¡¼­ ÀϾ´Â µ¿ÀÛÀ» ÇÏ¿°¾øÀÌ ±â´Ù·Á¾ß 
ÇÏ´Â ºÎºÐ¿¡, ¸®´ª½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â ±âȸ¸¦ ÁÖµµ·Ï ÇÔ¼ö
È£ÃâÀ» Áý¾î³Ö´Â °ÍÀÌ´Ù.  ³ª´Â C ¸ÅÅ©·Î¸¦ »ç¿ëÇϴµ¥ À̸¦ ÇÏ´Â ¸ÅÅ©·Î¸¦
<tt>IDLE_ME</tt>¶ó°í ºÎ¸£°í ÀÖ´Ù.  ÇÁ·Î±×·¥À» Å×½ºÆ®Çϱâ À§Çؼ­
ÄÄÆÄÀÏÀ» ÇÒ¶§´Â <tt>cc -DIDLE_ME=usleep(1)</tt> °°ÀÌ Çϰí,
"Á¦Ç°"À¸·Î ½ÇÇàÇÒ ¶§¿¡´Â <tt>cc -DIDLE_ME={}</tt>°°ÀÌ ÄÄÆÄÀÏÀ» ÇÑ´Ù.
<tt>usleep(1)</tt>Àº 1/1000 Ãʵ¿¾È ÇÁ·Î¼¼½º°¡ Àáµé°Ô ÇÏ¿©, ¸®´ª½º
½ºÄÉÁÙ·¯°¡ ±× ÇÁ·Î¼¼¼­¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇϵµ·Ï ¼±ÅÃÇÒ ¼ö ÀÖ°Ô 
ÇÑ´Ù.  ÇÁ·Î¼¼½ºÀÇ °¹¼ö°¡ »ç¿ë°¡´ÉÇÑ ÇÁ·Î¼¼¼­ÀÇ °¹¼öº¸´Ù µÎ¹èÀÌ»ó ¸¹´Ù¸é,
<tt>usleep(1)</tt>¸¦ »ç¿ëÇÏ´Â Äڵ尡 À̸¦ »ç¿ëÇÏÁö ¾Ê´Â Äڵ庸´Ù
¿­¹èÀÌ»ó ºü¸£°Ô ½ÇÇàµÇ´Â °ÍÀº ±×¸® ÀÌ»óÇÑ ÀÏÀÌ ¾Æ´Ï´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>bb_threads
<!-- ------------------------------------------------------------- -->
<p>

bb_threads("Bare Bones(»À¸¸³²Àº)" threads) ¶óÀ̺귯¸®(<url 
url="ftp://caliban.physics.utoronto.ca/pub/linux/">)´Â
¸®´ª½º <tt>clone()</tt> È£ÃâÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÖ´Â ¾ÆÁÖ °£´ÜÇÑ
¶óÀ̺귯¸®ÀÌ´Ù.  tar ÆÄÀÏÀ» gzipÀ¸·Î ¾ÐÃàÇÏ¸é °Ü¿ì 7K
¹ÙÀÌÆ®¹Û¿¡ µÇÁö ¾Ê´Â´Ù!  ÀÌ ¶óÀ̺귯¸®´Â 2.4Àå¿¡¼­ ¼³¸íÇÏ´Â LinuxThreads
¶óÀ̺귯¸® ¶§¹®¿¡ ÀÌÁ¦ Çѹ°°£ °ÍÀÌ µÇ¾úÁö¸¸, ¿©ÀüÈ÷ ¾µ¸¸Çϰí, ÀÛ°í
°£´ÜÇÏ¿© ¸®´ª½º¿¡¼­ Áö¿øÇÏ´Â ¾²·¹µåÀÇ »ç¿ë¹ýÀ» ¼Ò°³Çϴµ¥¿¡µµ ¾Ë¸Â´Ù.
ºÐ¸íÈ÷ LinuxThreads¿ë ¼Ò½ºÄڵ带 º¸´Â °Íº¸´Ù ÀÌ Äڵ带 º¸´Â °ÍÀÌ ÈξÀ ´ú
±âÁ×À» °ÍÀÌ´Ù.  ¿ä¾àÇϸé bb_threads ¶óÀ̺귯¸®´Â ½ÃÀÛÇϱâ ÁÁÀº
ÁöÁ¡ÀÌÁö¸¸, Å« ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¶§¿¡´Â Àû´çÇÏÁø ¾Ê´Ù.

bb_threads ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ ±âº»ÀûÀÎ ±¸Á¶´Â
´ÙÀ½°ú °°´Ù :

<enum>
<item>ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù.

<item>
ÀÌÁ¦ °¢°¢ÀÇ ¾²·¹µå°¡ ÇÊ¿ä·Î ÇÏ´Â ÃÖ´ë ½ºÅÃÀÇ Å©±â¸¦ °è»êÇØ¾ß ÇÑ´Ù.  
À̸¦ Å©°Ô Àâ´õ¶óµµ ±×´ÙÁö ÇØ°¡ µÇÁö ¾Ê´Â´Ù (À̰ÍÀº °¡»ó ¸Þ¸ð¸®°¡
Á¸ÀçÇÏ´Â ÀÌÀ¯ÁßÀÇ ÇϳªÀÌ´Ù).  ±×·¯³ª ¸ðµç ½ºÅÃÀº ÇϳªÀÇ
°¡»ó
ÁÖ¼Ò °ø°£¿¡¼­ ³ª¿À±â ¶§¹®¿¡, ³Ê¹« Å©°Ô Àâ´Â °Íµµ ÁÁÀº»ý°¢ÀÌ ¾Æ´Ï´Ù. 
¿¹Á¦¿¡¼­´Â 64K¸¦ »ç¿ëÇϰí ÀÖ´Ù.  ÀÌ Å©±â¸¦ <em>b</em>
¹ÙÀÌÆ®·Î ¼³Á¤ÇÏ·Á¸é
<tt>bb_threads_stacksize(<em>b</em>)</tt>¸¦
È£ÃâÇÑ´Ù.

<item>
´ÙÀ½ ´Ü°è´Â ÇÊ¿äÇÑ ¶ô(lock)µéÀ» ¸ðµÎ ÃʱâÈ­ÇÏ´Â °ÍÀÌ´Ù.  ÀÌ 
¶óÀ̺귯¸®¿¡¼­ ±¸ÇöµÈ ¶ô ¸ÞÄ¿´ÏÁòÀº ¶ô¿¡ 0ºÎÅÍ
<tt>MAX_MUTEXES</tt>±îÁö ¼ýÀÚ¸¦ ºÙÀÌ´Â °ÍÀÌ´Ù.  ¶ô
<em>i</em>¸¦ ÃʱâÈ­ÇÏ·Á¸é
<tt>bb_threads_mutexcreate(<em>i</em>)</tt>¸¦ È£ÃâÇÑ´Ù.

<item>
¶óÀ̺귯¸® ·çƾÀ» È£ÃâÇÏ¿© »õ·Î¿î ¾²·¹µå¸¦ ¸¸µç´Ù.  ¿©±â¿¡ ÀÎÀÚ·Î 
»õ·Î¿î ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö¿Í, ¿©±â¿¡ Àü´ÞÇÒ ÀÎÀÚµéÀ» ³Ñ°ÜÁØ´Ù.  ÀÎÀÚ·Î
<em>arg</em> Çϳª¸¸ ¹Þ°í, ¾Æ¹«°Íµµ µ¹·ÁÁÖÁö ¾Ê´Â ÇÔ¼ö
<em>f</em>¸¦ ½ÇÇàÇÏ´Â ¾²·¹µå¸¦ »õ·Î ¸¸µç´Ù¸é, ÇÔ¼ö
<em>f</em>>¸¦ <tt>void <em>f</em>(void *arg, size_t dummy)</tt>
ó·³ ¼±¾ðÀ» Çϰí
<tt>bb_threads_newthread(<em>f</em>, &arg)</tt>ÇÔ¼ö¸¦
ºÎ¸£¸é µÈ´Ù.  Çϳª ÀÌ»óÀÇ ÀÎÀÚ¸¦ Àü´ÞÇØ¾ßÇÏ´Â °æ¿ì ÀÎÀÚ °ªµéÀ» °¡Áö°í
ÀÖ´Â ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ¸é µÈ´Ù.

<item>
º´·Ä Äڵ带 ½ÇÇàÇÑ´Ù.  ¶ôÀ» »ç¿ëÇÏ´Â
<tt>bb_threads_lock(<em>n</em>)</tt>¿Í
<tt>bb_threads_unlock(<em>n</em>)</tt> ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§
ÁÖÀǸ¦ ±â¿ïÀδ٠(¿©±â¼­ <em>n</em>Àº »ç¿ëÇÒ ¶ôÀ» ÁöÁ¤ÇÑ´Ù).  ÀÌ
¶óÀ̺귯¸®¿¡ ÀÖ´Â ¶ôÀ» °É°í ¶ôÀ» ÇØÁ¦ÇÏ´Â ¿¬»êÀº ¿øÀÚÀûÀÎ
¹ö½º-¶ô(bus-lock) ¸í·É¾î¸¦ »ç¿ëÇÏ´Â ¸Å¿ì ±âº»ÀûÀÎ ½ºÇɶô(spin lock)ÀÌ´Ù.
±×·¡¼­ °úµµÇÑ ¸Þ¸ð¸® Á¢±Ù Ãæµ¹À» ÀÏÀ¸Å³ ¼ö ÀÖÀ¸¸ç, ¾î¶² Á¢±Ùµµ
°øÁ¤ÇÏ´Ù´Â °ÍÀ» º¸ÁõÇÒ ¼ö ¾ø´Ù.  

bb_threads¿¡ ÇÔ²² µþ·Á¿À´Â ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ º¸¸é ÇÔ¼ö <tt>fnn</tt>°ú
<tt>main</tt>¿¡¼­ µ¿½Ã¿¡ <tt>printf()</tt>¸¦ ½ÇÇàÇÏ´Â °ÍÀ» ¸·´Âµ¥¿¡ ¶ôÀ»
¿Ç¹Ù¸£°Ô »ç¿ëÇÏÁö ¾Ê°í ÀÖ´Ù.  ÀÌ°Í ¶§¹®¿¡ ¿¹Á¦´Â Ç×»ó µ¿ÀÛÇÏÁö´Â ¾Ê´Â´Ù.
³»°¡ ÀÌ ¸»À»ÇÏ´Â °ÍÀº ¿¹Á¦ ÇÁ·Î±×·¥¿¡ Æ®ÁýÀ» Àâ±â À§Çؼ­°¡ ¾Æ´Ï¶ó,
À̰ÍÀÌ <em>¸Å¿ì ´Ù·ç±â ¾î·Æ´Ù</em>´Â °Í°ú LinuxThreads¸¦ »ç¿ëÇÏ´Â °ÍÀÌ
Á¶±Ý ½±´Ù´Â °É °­Á¶Çϱâ À§Çؼ­ÀÌ´Ù.

<item>
¾²·¹µå°¡ <tt>return</tt> ¸í·ÉÀ» ½ÇÇàÇϸé, ÀÌ´Â ½ÇÁ¦ÀûÀ¸·Î 
ÇÁ·Î¼¼½º¸¦ Á×ÀÌ°Ô µÈ´Ù.  ±×·¯³ª Áö¿ª ½ºÅà ¸Þ¸ð¸®´Â ÀÚµ¿À¸·Î ÇÒ´çÀÌ
ÇØÁ¦µÇÁö ¾Ê´Â´Ù.  ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é ¸®´ª½º´Â ÇÒ´ç ÇØÁ¦¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¸ç, 
¸Þ¸ð¸® °ø°£Àº ÀÚµ¿À¸·Î <tt>malloc()</tt>ÀÇ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸®
¸ñ·Ï(free list)À¸·Î µÇµ¹¾Æ°¡ Ãß°¡µÇÁö ¾Ê´Â´Ù.  µû¶ó¼­ ºÎ¸ð ÇÁ·Î¼¼½º´Â
Á×Àº ÀÚ½Ä ÇÁ·Î¼¼½º¸¶´Ù
<tt>bb_threads_cleanup(wait(NULL))</tt>¸¦
ºÒ·¯¼­ ÀÌ °ø°£À» ¹Ý³³ÇØ¾ß ÇÑ´Ù.
</enum>
<p>

´ÙÀ½ C ÇÁ·Î±×·¥Àº 1.3Àå¿¡¼­
¼³¸íÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿©, µÎ°³ÀÇ bb_threads ¾²·¹µå¸¦ ÀÌ¿ëÇØ¼­ 
ÆÄÀÌ(pi)ÀÇ ±Ù»çÄ¡¸¦ °è»êÇÑ´Ù.

<code>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "bb_threads.h"

volatile double pi = 0.0;
volatile int intervals;
volatile int pids[2];      /* Unix PIDs of threads */

void
do_pi(void *data, size_t len)
{
  register double width, localsum;
  register int i;
  register int iproc = (getpid() != pids[0]);

  /* set width */
  width = 1.0 / intervals;

  /* do the local computations */
  localsum = 0;
  for (i=iproc; i<intervals; i+=2) {
    register double x = (i + 0.5) * width;
    localsum += 4.0 / (1.0 + x * x);
  }
  localsum *= width;

  /* get permission, update pi, and unlock */
  bb_threads_lock(0);
  pi += localsum;
  bb_threads_unlock(0);
}

int
main(int argc, char **argv)
{
  /* get the number of intervals */
  intervals = atoi(argv[1]);

  /* set stack size and create lock... */
  bb_threads_stacksize(65536);
  bb_threads_mutexcreate(0);

  /* make two threads... */
  pids[0] = bb_threads_newthread(do_pi, NULL);
  pids[1] = bb_threads_newthread(do_pi, NULL);

  /* cleanup after two threads (really a barrier sync) */
  bb_threads_cleanup(wait(NULL));
  bb_threads_cleanup(wait(NULL));

  /* print the result */
  printf("Estimation of pi is %f\n", pi);

  /* check-out */
  exit(0);
}
</code>

<!-- ------------------------------------------------------------- -->
<sect1>LinuxThreads
<!-- ------------------------------------------------------------- -->
<p>

LinuxThreads <url
url="http://pauillac.inria.fr/~xleroy/linuxthreads/"> ´Â POSIX
1003.1c ¾²·¹µå Ç¥ÁØ¿¡ µû¶ó "¸ðµÎ °øÀ¯ÇÏ´Â" ¹æ½ÄÀ» ¿ÏÀüÇÏ°í Æ°Æ°ÇϰÔ
±¸ÇöÇÑ °ÍÀÌ´Ù.  ´Ù¸¥ POSIX ¾²·¹µå¸¦ Æ÷ÆÃÇÑ °Í°ú´Â ´Þ¸®, LinuxThreads´Â
bb_threads¿¡¼­ »ç¿ëÇÑ °Í°ú ¶È°°Àº ¸®´ª½º Ä¿³ÎÀÇ
¾²·¹µå(<tt>clone()</tt>)¸¦ »ç¿ëÇÑ´Ù.  POSIX¿Í ȣȯµÈ´Ù´Â °ÍÀº ´Ù¸¥
½Ã½ºÅÛ¿¡¼­ ¸¸µç »ó´ç¼öÀÇ ¾²·¹µå ÇÁ·Î±×·¥µéÀ» »ó´ëÀûÀ¸·Î ½±°Ô Æ÷ÆÃÇÒ ¼ö
ÀÖÀ¸¸ç, Âü°íÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¿¹Á¦°¡ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.  °£´ÜÈ÷ ¸»ÇØ,  
LinuxThreads´Â ¸®´ª½º¿¡¼­ ¹æ´ëÇÑ ±Ô¸ðÀÇ ¾²·¹µå ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§
»ç¿ëÇÒ ¼ö ÀÖ´Â È®½ÇÇÑ ¾²·¹µå ÆÐŰÁöÀÌ´Ù.

LinuxThreads ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ±âº» ÇÁ·Î±×·¥ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù :

<enum>
<item>
ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù.

<item>
´ÙÀ½ ´Ü°è´Â ÇÊ¿äÇÑ ¶ô(lock)µéÀ» ¸ðµÎ ÃʱâÈ­ÇÏ´Â °ÍÀÌ´Ù. 
¼ýÀÚ·Î ±¸º°µÇ´Â bb_threads ¶ô°ú´Â ´Þ¸® POSIX ¶ôµéÀº
<tt>pthread_mutex_t</tt>ŸÀÔ(type)ÀÇ º¯¼ö·Î ¼±¾ðµÈ´Ù.
<tt>pthread_mutex_init(&lock,val)</tt>ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿©
ÇÊ¿äÇÑ °¢°¢ÀÇ ¶ôµéÀ» ÃʱâÈ­ÇÑ´Ù.

<item>
bb_threads¿¡¼­Ã³·³ »õ·Î¿î ¾²·¹µå¸¦ ¸¸µé·Á¸é ¶óÀ̺귯¸® ·çƾÀ» 
È£ÃâÇØ¾ß ÇÑ´Ù.  ¿©±â¼­ ÀÎÀÚ´Â »õ·Î¿î ¾²·¹µå°¡ ½ÇÇàÇÒ ÇÔ¼ö¿Í, ¿©±â¿¡
Àü´ÞÇÒ ÀÎÀÚµéÀÌ´Ù.  ±×·¸Áö¸¸ POSIX¿¡¼­´Â »ç¿ëÀÚ°¡ °¢ ¾²·¹µå¸¦ ±¸º°ÇÒ ¼ö
ÀÖµµ·Ï <tt>pthread_t</tt> ŸÀÔÀÇ º¯¼ö¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.
<tt>f()</tt> ÇÔ¼ö¸¦ ½ÇÇàÇÏ´Â <tt>pthread_t</tt> ¾²·¹µå¸¦
»ý¼ºÇÏ·Á¸é <tt>pthread_create(&thread,NULL,f,&arg)</tt>¸¦
È£ÃâÇÑ´Ù.

<item>
º´·Ä Äڵ带 ½ÇÇàÇÑ´Ù. ÇÊ¿äÇÑ °æ¿ì¿¡
<tt>pthread_mutex_lock(&lock)</tt>¿Í
<tt>pthread_mutex_unlock(&lock)</tt>¸¦ È£ÃâÇϵµ·Ï
ÁÖÀÇÇÑ´Ù.

<item>
<tt>pthread_join(thread,&retval)</tt> ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °¢ ¾²·¹µå°¡
³¡³­ÈÄ¿¡ ¸¶¹«¸®¸¦ ÇÑ´Ù.

<item>C Äڵ带 ÄÄÆÄÀÏÇÒ ¶§ <tt>-D_REENTRANT</tt> ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù.
</enum>

´ÙÀ½Àº LinuxThreads¸¦»ç¿ëÇÏ¿© ÆÄÀÌ(pi)¸¦ °è»êÇÏ´Â º´·ÄÇÁ·Î±×·¥ÀÇ ¿¹ÀÌ´Ù. 
1.3Àå¿¡¼­ »ç¿ëÇÑ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿´°í, bb_threads ¿¹Á¦¿¡¼­Ã³·³ µÎ°³ÀÇ
¾²·¹µå°¡ º´·Ä·Î ½ÇÇàµÈ´Ù.

<code>
#include <stdio.h>
#include <stdlib.h>
#include "pthread.h"

volatile double pi = 0.0;  /* Approximation to pi (shared) */
pthread_mutex_t pi_lock;   /* Lock for above */
volatile double intervals; /* How many intervals? */

void *
process(void *arg)
{
  register double width, localsum;
  register int i;
  register int iproc = (*((char *) arg) - '0');

  /* Set width */
  width = 1.0 / intervals;

  /* Do the local computations */
  localsum = 0;
  for (i=iproc; i<intervals; i+=2) {
    register double x = (i + 0.5) * width;
    localsum += 4.0 / (1.0 + x * x);
  }
  localsum *= width;

  /* Lock pi for update, update it, and unlock */
  pthread_mutex_lock(&ero;pi_lock);
  pi += localsum;
  pthread_mutex_unlock(&ero;pi_lock);

  return(NULL);
}

int
main(int argc, char **argv)
{
  pthread_t thread0, thread1;
  void * retval;

  /* Get the number of intervals */
  intervals = atoi(argv[1]);

  /* Initialize the lock on pi */
  pthread_mutex_init(&ero;pi_lock, NULL);

  /* Make the two threads */
  if (pthread_create(&ero;thread0, NULL, process, "0") ||
      pthread_create(&ero;thread1, NULL, process, "1")) {
    fprintf(stderr, "%s: cannot make thread\n", argv[0]);
    exit(1);
  }

  /* Join (collapse) the two threads */
  if (pthread_join(thread0, &ero;retval) ||
      pthread_join(thread1, &ero;retval)) {
    fprintf(stderr, "%s: thread join failed\n", argv[0]);
    exit(1);
  }

  /* Print the result */
  printf("Estimation of pi is %f\n", pi);

  /* Check-out */
  exit(0);
}
</code>

<!-- ------------------------------------------------------------- -->
<sect1>System V °øÀ¯ ¸Þ¸ð¸®
<!-- ------------------------------------------------------------- -->
<p>

½Ã½ºÅÛ V IPC(Inter-Process Communication, ÇÁ·Î¼¼½º°£ Åë½Å)´Â ¸Þ½ÃÁö 
Å¥(message queue)¿Í ¼¼¸¶Æ÷¾î(semaphore), °øÀ¯ ¸Þ¸ð¸®(shared memory)
¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÏ´Â ¿©·¯°¡Áö ½Ã½ºÅÛ ÄÝÀ» Áö¿øÇÑ´Ù.  ¹°·Ð À̵é
¸ÞÄ¿´ÏÁòÀº ¿ø·¡ ÇϳªÀÇ ÇÁ·Î¼¼¼­¸¦ »ç¿ëÇÏ´Â ½Ã½ºÅÛ¿¡¼­ ¿©·¯°³ÀÇ
ÇÁ·Î¼¼½ºµéÀÌ Åë½ÅÀ» Çϴµ¥ »ç¿ëÇϱâ À§Çؼ­ ¸¸µé¾îÁ³´Ù.  ±×·¸Áö¸¸, ÀÌ
¸»Àº SMP ¸®´ª½º¿¡¼­ ÇÁ·Î¼¼½º°¡ ¾î¶² ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ°í ÀÖµçÁö
°£¿¡ ÇÁ·Î¼¼½º°£ Åë½Å¿¡¼­µµ Á¦´ë·Î µ¿ÀÛÇØ¾ß ÇÑ´Ù´Â Àǹ̸¦ ³»Æ÷Çϰí
ÀÖ´Ù.

ÀÌµé ½Ã½ºÅÛ ÄÝÀÌ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö »ìÆìº¸±â Àü¿¡, ½Ã½ºÅÛ V IPC È£ÃâÀÌ 
¼¼¸¶Æ÷¾î³ª ¸Þ½ÃÁö Àü´Þ°°Àº ÀÏÀ» À§ÇØ Á¸ÀçÇϱä ÇÏÁö¸¸, À̸¦ »ç¿ëÇØ¼±
¾ÈµÈ´Ù´Â °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.  ¿Ö ¾ÈµÇ´À³Ä?  À̵é ÇÔ¼öµéÀº 
ÀϹÝÀûÀ¸·Î ´À¸®°í SMP ¸®´ª½º¿¡¼­´Â Á÷·ÄÈ­(serialize)µÇ¾î ÀÖ´Ù.  ÀÌÁ¤µµ¸é
ÃæºÐÇϰڴÙ.

°øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·ÎÀÇ Á¢±ÙÀ» °øÀ¯ÇÏ´Â ÇÁ·Î¼¼½º ±×·ìÀ» ¸¸µå´Â ±âº»ÀûÀÎ
°úÁ¤Àº ´ÙÀ½°ú °°´Ù :

<enum>
<item>ÇϳªÀÇ ÇÁ·Î¼¼½º·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇÑ´Ù.

<item>
´ëü·Î ¿©·¯ºÐÀº ½ÇÇàµÇ´Â °¢°¢ÀÇ º´·Ä ÇÁ·Î±×·¥ÀÌ ÀڽŸ¸ÀÇ °øÀ¯ 
¸Þ¸ð¸® ¿µ¿ªÀ» °¡Áö±â¸¦ ¹Ù¶ö °ÍÀÌ´Ù.  µû¶ó¼­ <tt>shmget()</tt> ÇÔ¼ö¸¦
ºÒ·¯ ¿øÇÏ´Â Å©±â¸¸Å­ÀÇ »õ·Î¿î ¿µ¿ªÀ» ¸¸µé¾î¾ß ÇÑ´Ù.  ÀÌ È£ÃâÀº À̹Ì
Á¸ÀçÇÏ´Â °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÇ ID¸¦ ¾ò´Âµ¥¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.  ¾î¶²
°æ¿ìÀ̵ç, µ¹¾Æ¿À´Â °ªÀº °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÇ IDÀ̰ųª ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì
-1ÀÌ´Ù.  ¿¹¸¦ µé¾î, <em>b</em> ¹ÙÀÌÆ® Å©±âÀÇ °øÀ¯ ¸Þ¸ð¸®
¿µ¿ªÀ» ¸¸µç´Ù¸é, <tt>shmid
= shmget(IPC_PRIVATE, <em>b</em>, (IPC_CREAT | 0666))</tt>
°°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

<item>
´ÙÀ½ ´Ü°è´Â ÀÌ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ÀÌ ÇÁ·Î¼¼½º¿¡ ¿¬°áÇÏ´Â(attach) °ÍÀÌ´Ù.
¸» ±×´ë·Î ÀÌ ¸Þ¸ð¸®¸¦ ÀÌ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸® ¸Ê¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù.
ÇÁ·Î±×·¡¸Ó´Â <tt>shamt()</tt> ÇÔ¼ö È£Ãâ¿¡¼­ ¸Þ¸ð¸® ¿µ¿ªÀÌ ³ªÅ¸³¯
°¡»ó ÁÖ¼Ò¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ¼±ÅÃÇÑ ÁÖ¼Ò´Â ÆäÀÌÁö °æ°è(boundary)¿¡ µû¶ó
Á¤·Ä(align)ÀÌ µÇ¾î ÀÖ¾î¾ß Çϸç (Áï,  <tt>getpagesize()</tt>¿¡¼­
µ¹·ÁÁÖ´Â ÆäÀÌÁö Å©±â - º¸ÅëÀº 4096 ¹ÙÀÌÆ®ÀÌ´Ù - ÀÇ ¹è¼ö¿©¾ß
ÇÑ´Ù), ÀÌ´Â ÀÌ ÁÖ¼Ò¿¡ ÀÌ¹Ì Á¸ÀçÇÏ´ø ¾î¶² ¸Þ¸ð¸®À̵çÁö°£¿¡ ¸ÅÇÎÀ»
µ¤¾î½á¹ö¸°´Ù.  µû¶ó¼­, À̺¸´Ù´Â ½Ã½ºÅÛÀÌ ÁÖ¼Ò¸¦ °í¸¦ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ
´õ ¼±È£µÈ´Ù.  ¾î¶² °æ¿ìÀ̵ç, µ¹¾Æ¿À´Â °ªÀº ¸ÅÇÎÀÌ µÈ ¼¼±×¸ÕÆ®°¡ ½ÃÀÛÇÏ´Â
°¡»óÁÖ¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù.  ÄÚµå´Â <tt>shmptr =
shmat(shmid, 0, 0)</tt>°ú °°Àº ÇüÅÂÀÌ´Ù.  

¸ðµç °øÀ¯ º¯¼öµéÀ» ±¸Á¶Ã¼ÀÇ ¸â¹ö·Î
¼±¾ðÇϰí <em>shmptr</em>À» ÀÌ ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ·Î ¼±¾ðÇÔÀ¸·Î½á
°£´ÜÇÏ°Ô ¸ðµç Á¤Àû º¯¼ö¸¦ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ÇÒ´çÇÒ ¼ö ÀÖ´Ù.  ÀÌ
±â¹ýÀ» ÀÌ¿ëÇÏ¿©, °øÀ¯ º¯¼ö <em>x</em>´Â
<em>shmptr</em><tt>-></tt><em>x</em>·Î
Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

<item>
°øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â ¸¶Áö¸· ÇÁ·Î¼¼½º°¡ Á¾·áÇϰųª ÀÌ ¿µ¿ª¿¡¼­ 
¶³¾îÁ®³ª¿À¸é(detach) ÀÌ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» ¾ø¾Ö¾ßÇÑ´Ù.  ÀÌ ±âº» ÇൿÀ» 
¼³Á¤ÇÏ·Á¸é <tt>shmctl()</tt> ÇÔ¼ö¸¦ ºÎ¸¦ Çʿ䰡 ÀÖ´Ù.  ÄÚµå´Â 
<tt>shmctl(shmid, IPC_RMID, 0)</tt>°ú °°Àº ÇüÅ·ΠÀÛ¼ºÇÑ´Ù.

<item>
¿øÇÏ´Â °¹¼ö·Î ÇÁ·Î¼¼½ºµéÀ» ¸¸µé·Á¸é Ç¥ÁØ ¸®´ª½ºÀÇ 
<tt>fork()</tt> ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.  °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â °øÀ¯ ¸Þ¸ð¸®
¿µ¿ªÀ» »ó¼Ó¹Þ°ÔµÈ´Ù.

<item>
ÇÁ·Î¼¼½º°¡ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â ÀÛ¾÷À» ³¡¸¶Ä¡¸é, ÀÌ °øÀ¯ ¸Þ¸ð¸®
¿µ¿ªÀ¸·ÎºÎÅÍ ºÐ¸®(detach)ÇØ¾ß ÇÑ´Ù. 
ÀÌ´Â <tt>shmdt(shmptr)</tt>À» ºÒ·¯¼­ ÇÑ´Ù.
</enum>
<p>

À§¿¡ ¼³¸íÇÑ °úÁ¤¿¡¼­´Â ¸î°³ ¾ÈµÇ´Â ½Ã½ºÅÛ È£Ã⸸À» »ç¿ëÇÏÁö¸¸, ÀÏ´Ü °øÀ¯ 
¸Þ¸ð¸® ¿µ¿ªÀÌ ¸¸µé¾îÁö¸é, ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®»óÀÇ °ªÀ» ¹Ù²Û °æ¿ì
ÀÚµ¿À¸·Î ¸ðµç ÇÁ·Î¼¼½º¿¡ º¸ÀÌ°Ô µÈ´Ù.  °¡Àå Áß¿äÇÑ Á¡Àº °¢ Åë½Å ÀÛ¾÷ÀÌ 
½Ã½ºÅÛ ÄÝÀ» ÇÏ´Â ¿À¹öÇìµå¾øÀÌ ÀÌ·ç¾îÁø´Ù´Â °ÍÀÌ´Ù.

´ÙÀ½Àº ½Ã½ºÅÛ V °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ´Â C ÇÁ·Î±×·¥ÀÇ ¿¹ÀÌ´Ù.  ÀÌ 
ÇÁ·Î±×·¥Àº ÆÄÀÌ(pi)¸¦ °è»êÇÏ´Â °ÍÀ¸·Î 1.3Àå¿¡¼­ ³ª¿Â °Í°ú ¶È°°Àº
¾Ë°í¸®ÁòÀ» »ç¿ëÇÑ´Ù.

<code>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/shm.h>

volatile struct shared { double pi; int lock; } *shared;

inline extern int xchg(register int reg,
volatile int * volatile obj)
{
  /* Atomic exchange instruction */
__asm__ __volatile__ ("xchgl %1,%0"
                      :"=r" (reg), "=m" (*obj)
                      :"r" (reg), "m" (*obj));
  return(reg);
}

main(int argc, char **argv)
{
  register double width, localsum;
  register int intervals, i;
  register int shmid;
  register int iproc = 0;;

  /* Allocate System V shared memory */
  shmid = shmget(IPC_PRIVATE,
                 sizeof(struct shared),
                 (IPC_CREAT | 0600));
  shared = ((volatile struct shared *) shmat(shmid, 0, 0));
  shmctl(shmid, IPC_RMID, 0);

  /* Initialize... */
  shared->pi = 0.0;
  shared->lock = 0;

  /* Fork a child */
  if (!fork()) ++iproc;

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

  /* do the local computations */
  localsum = 0;
  for (i=iproc; i<intervals; i+=2) {
    register double x = (i + 0.5) * width;
    localsum += 4.0 / (1.0 + x * x);
  }
  localsum *= width;

  /* Atomic spin lock, add, unlock... */
  while (xchg((iproc + 1), &ero;(shared->lock))) ;	
  shared->pi += localsum;
  shared->lock = 0;

  /* Terminate child (barrier sync) */
  if (iproc == 0) {
    wait(NULL);
    printf("Estimation of pi is %f\n", shared->pi);
  }

  /* Check out */
  return(0);
}
</code>

³ª´Â ÀÌ ¿¹Á¦¿¡¼­ ¶ô(lock)À» ±¸ÇöÇϱâ À§ÇØ IA32ÀÇ ¿øÀÚÀûÀÎ(atomic)
±³È¯(exchange) ¸í·É¾î¸¦ »ç¿ëÇÏ¿´´Ù.  ´õ ³ªÀº ¼º´É°ú ȣȯ¼ºÀ»
¹Ù¶õ´Ù¸é, ¿øÀÚÀûÀÎ ¹ö½º-¶ô(bus-lock) ¸í·É¾î¸¦ »ç¿ëÇÏÁö ¾Ê´Â µ¿±âÈ­
±â¹ýÀ¸·Î ´ëüÇϱ⠹ٶõ´Ù.

ÇöÀç »ç¿ëÇϰí ÀÖ´Â ½Ã½ºÅÛ V IPC ±â´ÉµéÀÇ »óŸ¦ º¸¿©ÁÖ´Â <tt>ipcs</tt>À» 
±â¾ïÇϰí ÀÖ´Ù¸é, ¿©·¯ºÐÀÌ ¸¸µç Äڵ带 µð¹ö±ëÇÒ ¶§ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>¸Þ¸ð¸® ¸Ê È£Ãâ<label id="sec_MemoryMapCall">
<!-- ------------------------------------------------------------- -->
<p>

ÆÄÀÏ I/O ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÏ´Â ºñ¿ëÀº ¸Å¿ì Ŭ ¼ö ÀÖ´Ù.  »ç½Ç, À̰ÍÀÌ 
»ç¿ëÀÚ ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ÆÄÀÏ I/O ¶óÀ̺귯¸®°¡ ÀÖ´Â ÀÌÀ¯ÀÌ´Ù
(<tt>getchar()</tt>, <tt>fwrite()</tt> µî).  ±×·¯³ª »ç¿ëÀÚ
¹öÆÛ´Â ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ ¶È°°Àº ¾²±â °¡´ÉÇÑ ÆÄÀÏ¿¡ Á¢±ÙÇϰí ÀÖ´Ù¸é
»ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, »ç¿ëÀÚ ¹öÆÛ¸¦ °ü¸®ÇÏ´Â ¿À¹öÇìµåµµ ²Ï Å©´Ù.  BSD
UNIX¿¡¼­´Â ÆÄÀÏÀÇ ÀϺθ¦ »ç¿ëÀÚ ¸Þ¸ð¸®·Î ¸ÅÇÎÇÏ¿© º»ÁúÀûÀ¸·Î °¡»ó ¸Þ¸ð¸®
ÆäÀÌ¡ ¸ÞÄ¿´ÏÁòÀ» ÅëÇØ °»½ÅÀ» Çϵµ·Ï ÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛ ÄÝÀ» Ãß°¡ÇÏ¿©
À̸¦ ÇØ°áÇÑ´Ù.  ÀÌ¿Í ¶È°°Àº ¸ÞÄ¿´ÏÁòÀÌ ¸î³âÀü Sequent¿¡¼­ ¸¸µç
½Ã½ºÅÛ¿¡¼­ °øÀ¯ ¸Þ¸ð¸® º´·Äó¸® Áö¿øÀÇ ±â¹ÝÀ¸·Î »ç¿ëµÇ¾ú´Ù.  (¾ÆÁÖ
¿À·¡µÈ) man ÆäÀÌÁö¿¡ ¸î°¡Áö ¸Å¿ì ºÎÁ¤ÀûÀÎ ÀǰßÀÌ ÀÖÀ½¿¡µµ ºÒ±¸Çϰí,
¸®´ª½º´Â ±âº»ÀûÀÎ ÇÔ¼öµé Áß Àû¾îµµ ¸î°¡Áö´Â Á¦´ë·Î
¼öÇàÇϴµíÀÌ º¸À̸ç, ÀÌ ½Ã½ºÅÛ ÄÝÀ» ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ °øÀ¯ÇÒ ¼ö ÀÖ´Â 
¹«¸íÀÇ(anonymous) ¸Þ¸ð¸® ¿µ¿ªÀ¸·ÎÀÇ ¸ÅÇο¡ »ç¿ëÇÏ´Â °ÍÀ» Áö¿øÇÑ´Ù.

º»ÁúÀûÀ¸·Î ¸®´ª½º¿¡¼­ÀÇ <tt>mmap()</tt> ±¸ÇöÀº 2.5Àå¿¡¼­ ¼³¸íÇÑ 2, 
3, 4¹øÂ° ´Ü°è¸¦ Çϳª·Î ´ëüÇÑ °ÍÀÌ´Ù.  ¹«¸íÀÇ °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ»
¸¸µé·Á¸é :

<code>
shmptr =
    mmap(0,                        /* system assigns address */
         b,                        /* size of shared memory segment */
         (PROT_READ | PROT_WRITE), /* access rights, can be rwx */
         (MAP_ANON | MAP_SHARED),  /* anonymous, shared */
         0,                        /* file descriptor (not used) */
         0);                       /* file offset (not used) */
</code>

½Ã½ºÅÛ V °øÀ¯¸Þ¸ð¸®ÀÇ <tt>shmdt()</tt> ÇÔ¼ö¿Í ¶È°°Àº ÀÏÀ» ÇÏ´Â
ÇÔ¼ö´Â <tt>munmap()</tt>ÀÌ´Ù :

<code>
munmap(shmptr, b);
</code>

³» »ý°¢¿¡´Â ½Ã½ºÅÛ V °øÀ¯ ¸Þ¸ð¸® Áö¿ø ´ë½Å <tt>mmap()</tt>À» 
»ç¿ëÇÏ´Â °ÍÀÌ ½ÇÁ¦·Î ´õ ³´Áö´Â ¾Ê´Ù.

<!-- 3Àå -->
<!--***************************************************************-->
<sect>¸®´ª½º ½Ã½ºÅÛÀÇ Å¬·¯½ºÅÍ(Clusters Of Linux Systems)
<!--***************************************************************-->
<p>

ÀÌ ¼½¼ÇÀº ¸®´ª½º¸¦ »ç¿ëÇÑ Å¬·¯½ºÅÍ º´·Ä ó¸®ÀÇ °³°üÀ» Á¦°øÇÏ·Á°í ½ÃµµÇÒ
°ÍÀÌ´Ù. Ŭ·¯½ºÅÍ´Â ÇöÀç °¡Àå ÀαâÀÖ´Â °ÍÀÌÀÚ °¡Àå ´Ù¾çÇÏ´Ù. À̰ÍÀº
ÀüÅëÀûÀÎ ¿öÅ©½ºÅ×À̼ǵéÀ» ¿©·¯´ë ¹­Àº ³×Æ®¿÷(<bf>NOW</bf>; network of
workstations)¿¡¼­ ÀÌÁ¦ ¸· ÇÁ·Î¼¼¼­ ³ëµå·Î½á ¸®´ª½º ÇǾ¾µé·Î
»ç¿ëÇϱ⠽ÃÀÛÇÑ Ä¿½ºÅÒ º´·Ä ±â°è±îÁö ÀÖ´Ù. ¶ÇÇÑ ¸®´ª½º ±â°èµéÀÇ
Ŭ·¯½ºÅ͸¦ »ç¿ëÇÏ´Â º´·Ä 󸮸¦ À§ÇÑ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î Áö¿øµéÀÌ ÀÖ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>¿Ö Ŭ·¯½ºÅÍÀΰ¡(Why A Cluster)?
<!-- ------------------------------------------------------------- -->
<p>

Ŭ·¯½ºÅÍ º´·Ä 󸮴 ´ÙÀ½°ú °°Àº Áß¿äÇÑ ÀåÁ¡µéÀ» Á¦°øÇÑ´Ù:
<itemize>
<item>
Ŭ·¯½ºÅÍ¿¡ ÀÖ´Â °¢ ±â°èµéÀº ³ÐÀº ¹üÀ§ÀÇ ´Ù¸¥ ÄÄÇ»ÆÃ ¾îÇÃÀ» »ç¿ëÇÒ ¼ö
ÀÖ´Â ¿ÏÀüÇÑ ½Ã½ºÅÛÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¡¼­ ¸¹Àº »ç¶÷µéÀÌ Å¬·¯½ºÅÍ º´·Ä
ÄÄÇ»ÆÃÀº »ç¶÷µéÀÇ Ã¥»ó À§¿¡¼­ ÇÒ ÀϾøÀÌ ³î°í ÀÖ´Â ¿öÅ©½ºÅ×À̼ǵéÀÇ
"¹ö·ÁÁö´Â ½Ã°£µé(wasted cycles)" ¸ðµÎ¸¦ °¡Á®´Ù ¾´´Ù°í Á¦¾ÈÇϰÔ
µÇ¾ú´Ù. ÀÌ·± ½Ã°£µéÀ» ±¸ÇÏ´Â °ÍÀº ½ÇÁ¦ ±×·¸°Ô ½¬¿î °ÍÀÌ ¾Æ´Ï´Ù. ±×¸®°í
À̰ÍÀº µ¿·áÀÇ ½ºÅ©¸° ¼¼À̹ö¸¦ ´À¸®°Ô ÇÒ °ÍÀÌ´Ù. ±×·¯³ª À̰ÍÀ» ±×·¸°Ô µÉ
¼ö ÀÖ´Ù.

<item>
³×Æ®¿÷ ½Ã½ºÅÛµéÀÌ ÃÖ±Ù ±ÞÁõÇÏ´Â °ÍÀº Ŭ·¯½ºÅ͸¦ ¸¸µé±â À§ÇÑ Çϵå¿þ¾î
´ëºÎºÐÀÌ ´ë¿ë·®À¸·Î, ÀÌ¿¡ ´ëÀÀÇØ¼­ °á°úÀûÀ¸·Î ³·Àº "»óǰ"
°¡°ÝÀ¸·Î, ÆÈ¸®°í ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. Ŭ·¯½ºÅÍ Çϳª¿¡ ÇѰ³ÀÇ ºñµð¿À
Ä«µå, ¸ð´ÏÅÍ, Űº¸µå°¡ ÇÊ¿äÇÏ´Â »ç½ÇÀÌ Á» ´õ ºñ¿ëÀ» ¾Æ³¥ ¼ö ÀÖµµ·Ï
ÇÑ´Ù(ºñ·Ï Ãʱ⠸®´ª½º ¼³Ä¡¸¦ ¼öÇàÇÒ ¶§ Ŭ·¯½ºÅÍÀÇ °¢ ±â°èµé¿¡ À̵éÀ»
¿Å°Ü °¡¸ç ½á¾ß ÇÏÁö¸¸, ÀÏ´Ü ½ÇÇàµÇ¸é ÀüÇüÀûÀÎ ¸®´ª½º ÇǾ¾´Â "ÄܼÖ"À»
ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù). ÀÌ¿Í ºñ±³Çؼ­ SMP¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­´Â ÈξÀ ´õ ÀÛÀº
½ÃÀå¿¡¼­ ´ÜÀ§ ¼öÇà ¼º´É¿¡ ´ëÇÑ ´õ ³ôÀº °¡°ÝÀ» Çü¼ºÇذ¡°í ÀÖ´Ù.

<item>
Ŭ·¯½ºÅÍ ÄÄÇ»ÆÃÀº <em>¾ÆÁÖ Ä¿´Ù¶õ ½Ã½ºÅÛ</em>±îÁö Ä¿Áú ¼ö ÀÖ´Ù. ÇöÀç±îÁö
4°³ ÀÌ»óÀÇ ÇÁ·Î¼¼¼­µéÀ» °¡Áö´Â ¸®´ª½º-ȣȯ SMP¸¦ ã´Â °ÍÀÌ ¾î·Á¿î ¹Ý¸é¿¡
ÀϹÝÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ ³×Æ®¿÷ Çϵå¿þ¾î´Â 16°³ ±â°èµé±îÁö Ŭ·¯½ºÅÍ·Î ½±°Ô
¹­À» ¼ö ÀÖ´Ù. Á¶±Ý¸¸ ÀÛ¾÷ÇÏ¸é ¼ö¹é°³ ¶Ç´Â ½ÉÁö¾î ¼öõ°³ ±â°èµéÀ»
³×Æ®¿÷À¸·Î ¹­À» ¼ö ÀÖ´Ù. »ç½Ç Àüü ÀÎÅͳÝÀÌ ÇϳªÀÇ Ä¿´Ù¶õ Ŭ·¯½ºÅÍ·Î º¼
¼ö ÀÖ´Ù.

<item>
Ŭ·¯½ºÅÍ ¾È¿¡¼­ "°íÀå³­ ±â°è"¸¦ ±³Ã¼ÇÏ´Â °ÍÀÌ ÆÐ·¯Æ¼°¡ À߸øµÈ SMP¸¦
°íÄ¡´Â °Í¿¡ ºñÇØ¼­ ´õ ´Ü¼øÇÏ´Ù´Â »ç½ÇÀº Á¶½É½º·´°Ô µðÀÚÀÎµÈ Å¬·¯½ºÅÍ
¼³Á¤¿¡ Á» ´õ ³ôÀº °¡¿ë¼ºÀ» Á¦°øÇÑ´Ù. À̰ÍÀº(³ôÀº °¡¿ë¼ºÀº) Áß¿äÇÑ ¼­ºñ½º
Áß´ÜÀ» °ßµô ¼ö ¾ø´Â Ưº°ÇÑ ¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇØ¼­ Áß¿äÇÒ »Ó¸¸ÀÌ ¾Æ´Ï°í,
´ÜÀÏ-±â°è °íÀåÀÌ ÀÚÁÖ ÀϾ´Â ÃæºÐÇÑ ÇÁ·Î¼¼½ºµéÀ» °¡Áø ½Ã½ºÅÛµéÀÇ
ÀϹÝÀûÀÎ »ç¿ë¿¡µµ Áß¿äÇÏ´Ù.  (¿¹¸¦ µé¾î¼­ PC °íÀåÀÇ Æò±Õ ½Ã°£ÀÌ
2³âÀÏÁö¶óµµ 32°³ ±â°è¸¦ °®´Â Ŭ·¯½ºÅÍ¿¡¼­ Àû¾îµµ ÇÑ ±â°è°¡ 6°³¿ù À̳»¿¡
°íÀ峯 È®·üÀº ²Ï ³ô´Ù.) 
</itemize>
<p>

ÁÁ´Ù. Ŭ·¯½ºÅÍ´Â ÇÁ¸®À̰ųª ½Î°í ¾ÆÁÖ Ä¿Áú ¼ö ÀÖÀ¸¸ç °¡¿ë¼ºÀÌ ³ô´Ù...
±×·¸´Ù¸é ¿Ö ¸ðµç »ç¶÷µéÀÌ Å¬·¯½ºÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â°¡? ±Û½ê
°Å±â¿¡´Â ´ÙÀ½°ú °°Àº ¹®Á¦µéÀÌ Á¸ÀçÇÑ´Ù:

<itemize>
<item> 
¾ÆÁÖ ÀÛÀº ¿¹¿ÜµéÀ» Á¦¿ÜÇÏ°í ³×Æ®¿÷ Çϵå¿þ¾î´Â º´·Ä 󸮸¦ À§Çؼ­ °í¾ÈµÈ
°ÍÀÌ ¾Æ´Ï´Ù. ÀüÇüÀûÀ¸·Î SMP¿Í ºÎ¼Ó ÇÁ·Î¼¼¼­¿¡ ºñÇØ¼­ Áöü´Â ¾ÆÁÖ ³ô°í
´ë¿ªÆøÀº »ó´ëÀûÀ¸·Î ³·´Ù. ¿¹¸¦ µé¾î¼­ SMP Áöü´Â ÀϹÝÀûÀ¸·Î ¸î
¸¶ÀÌÅ©·ÎÃÊ(¿ªÀÚÁÖ: 100¸¸ºÐÀÇ 1ÃÊ)¸¦ ³ÑÁö ¾ÊÁö¸¸ Ŭ·¯½ºÅÍÀÇ °æ¿ì
ÀϹÝÀûÀ¸·Î ¼ö¹é ³»Áö ¼öõ ¸¶ÀÌÅ©·Î Ãʰ¡ °É¸°´Ù. SMP Åë½Å ´ë¿ªÆøÀº ´ë°³
100MBytes/secÀÌ ³Ñ´Â´Ù; ºñ·Ï °¡Àå ºü¸¥ ³×Æ®¿÷ Çϵå¿þ¾î(¿¹, "±â°¡ºñÆ®
ÀÌ´õ³Ý")°¡ ÀÌ¿¡ ÇÊÀûÇÒ ¼Óµµ¸¦ Á¦°øÇϱä ÇÏÁö¸¸ °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â
³×Æ®¿÷Àº À̺¸´Ù 10¿¡¼­ 1000¹è Á¤µµ ´õ ´À¸®´Ù.

³×Æ®¿÷ Çϵå¿þ¾îÀÇ ¼º´ÉÀº <em>°í¸³µÈ Ŭ·¯½ºÅÍ ³×Æ®¿÷</em>¿¡ ÃæºÐÇÒ ¸¸Å­
³·´Ù(The performance of network hardware is poor enough as an isolated
cluster network). ³×Æ®¿÷ÀÌ ´Ù¸¥ Æ®·¡ÇÈÀ¸·ÎºÎÅÍ °í¸³µÇ¾î ÀÖÁö ¾Ê´Ù¸é,
Ŭ·¯½ºÅÍ·Î µðÀÚÀÎµÈ ½Ã½ºÅÛº¸´Ù "³×Æ®¿÷À¸·Î ¹­Àº ±â°èµé"À» »ç¿ëÇÑ °æ¿ì°¡
´õ ¸¹±â ¶§¹®¿¡ ¼º´ÉÀº ¾ÆÁÖ ¾ÇÈ­µÉ ¼ö ÀÖ´Ù.  

<item>
Ŭ·¯½ºÅ͸¦ ´ÜÀÏ ½Ã½ºÅÛÀ¸·Î Ãë±ÞÇÏ´Â ¼ÒÇÁÆ®¿þ¾î Áö¿øÀº °ÅÀÇ ¾ø´Ù. ¿¹¸¦
µé¾î¼­ <tt>ps</tt> ¸í·ÉÀº ´ÜÀÏ ¸®´ª½º ½Ã½ºÅÛ¿¡ ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼½ºµé¿¡
´ëÇØ¼­¸¸ º¸°íÇÒ »Ó ¸®´ª½º ½Ã½ºÅÛµé·Î ¸¸µé¾îÁø Ŭ·¯½ºÅÍ Àüü¿¡¼­ ½ÇÇà
ÁßÀÎ ¸ðµç ÇÁ·Î¼¼½ºµé¿¡ ´ëÇØ¼­ º¸°íÇÏÁö ¾Ê´Â´Ù. 
</itemize>
<p>

±×·¡¼­, Ŭ·¯½ºÅÍ´Â ±²ÀåÇÑ ÀáÀç·ÂÀ» Á¦°øÇÏÁö¸¸ ÀÌ ÀáÀç·ÂÀÌ ´ëºÎºÐÀÇ
¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇØ¼­ ȹµæµÇ±â¿¡´Â ¾ÆÁÖ ¾î·Á¿ï ¼ö ÀÖ´Ù. ÀÌ·±
ȯ°æ¿¡ ÀûÇÕÇÑ ÇÁ·Î±×·¥µé¿¡ ´ëÇØ¼­ ÁÁÀº ¼º´ÉÀ» ȹµæÇϵµ·Ï ÇÏ´Â ¸¹Àº
¼ÒÇÁÆ®¿þ¾î Áö¿øÀÌ ÀÖ´Ù´Â °Í°ú ÁÁÀº ¼º´ÉÀ» ȹµæÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥µéÀÇ
¹üÀ§¸¦ ³ÐÈú ¼ö ÀÖµµ·Ï Ưº°È÷ ¼³°èµÈ ³×Æ®¿÷µéµµ ÀÖ´Ù´Â °ÍÀº ÁÁÀº
¼Ò½ÄÀÌ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>³×Æ®¿÷ Çϵå¿þ¾î(Network Hardware)<label id="sec_NetworkHardware">
<!-- ------------------------------------------------------------- -->
<p>
ÄÄÇ»ÅÍ ³×Æ®¿öÅ·Àº ±ÞÁõÇϰí ÀÖ´Ù... ÀÌ¹Ì À̰ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù.
³×Æ®¿öÅ· ±â¼ú°ú Á¦Ç°µéÀÇ °è¼Ó-Áõ°¡ÇÏ´Â ¿µ¿ªÀº °³¹ßÀÌ ÁøÇà Áß¿¡ ÀÖ°í
´ëºÎºÐÀº ±â°èµé(¿¹, °¢°¢ ¸®´ª½º¸¦ µ¹¸®´Â ÇǾ¾µé)ÀÇ ±×·ì¿¡ º´·Ä-ó¸®
Ŭ·¯½ºÅ͸¦ ¸¸µå´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Â ÇüÅ·Π»ç¿ë °¡´ÉÇÏ´Ù.

ºÒÇàÇϰԵµ ¾î¶² ³×Æ®¿÷ ±â¼úµµ ¸ðµç ¹®Á¦µéÀ» ÈǸ¢ÇÏ°Ô Ç®Áö ¸øÇÑ´Ù; »ç½Ç
Á¢±Ù, ºñ¿ë, ¼º´ÉÀÇ ¹üÀ§´Â ¾ó¸¥ ºÁ¼­ ¹Ï±â Èûµé´Ù. ¿¹¸¦ µé¾î¼­ Ç¥ÁØ
»ó¾÷ÀûÀ¸·Î-°¡´ÉÇÑ Çϵå¿þ¾î¸¦ »ç¿ëÇØ¼­ ³×Æ®¿÷À¸·Î ±â°èµéÀ» ¹­´Â µ¥ µå´Â
ºñ¿ëÀº ±â°è ´ç Àû°Ô´Â 5´Þ·¯¿¡¼­ ¸¹°Ô´Â 4000´Þ·¯±îÁö À̸¥´Ù. Á¦Á¶ÀÚ°¡
¸»ÇÏ´Â ´ë¿ªÆø(delivered bandwidth)¿Í Áöü ½Ã°£ °¢°¢Àº Å©±âÀÇ ³×°¡Áö
µî±Þ(four orders of magnitude)¿¡ µû¶ó º¯ÇÑ´Ù.

ƯÁ¤ ³×Æ®¿÷¿¡ ´ëÇØ¼­ ¹è¿ì·Á°í Çϱâ ÀÌÀü¿¡ ÀÌ·± °ÍµéÀº ¹Ù¶÷ó·³ ½±°Ô
º¯ÇÑ´Ù´Â °ÍÀ» ÀνÄÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù(¸®´ª½º ³×Æ®¿öÅ· ´º½ºµé¿¡ ´ëÇØ¼­´Â
<url url="http://www.uk.linux.org/NetNews.html">À» ÂüÁ¶).  ±×¸®°í ¾î¶²
³×Æ®¿÷µé¿¡ ´ëÇÏ Á¤È®ÇÑ µ¥ÀÌÅ͸¦ ¾ò´Â °ÍÀº ¾ÆÁÖ ¾î·Æ´Ù.
Ưº°È÷ È®½ÇÇÏÁö ¾Ê´Â °÷¿¡ ÀúÀÚ´Â ¹°À½Ç¥(<em>?</em>)¸¦ ³õ¾Ò´Ù. ÀÌ ÁÖÁ¦¸¦ 
¿¬±¸ÇÏ´Â µ¥ ¸¹Àº ½Ã°£À» ½èÁö¸¸ ³ª´Â ³» ¿ä¾à(ÀÌ ¹®¼­)ÀÌ À߸ø Åõ¼ºÀ̰í
¸¹Àº Áß¿äÇÑ °ÍµéÀ» »©¸Ô¾ú´Ù´Â °ÍÀ» È®½ÅÇÑ´Ù. ±³Á¤À̳ª Ãß°¡ÇØ¾ß ÇÏ´Â °ÍÀ»
°®°í ÀÖ´Ù¸é <htmlurl url="mailto:pplinux@ecn.purdue.edu"
name="pplinux@ecn.purdue.edu">·Î À̸ÞÀÏÀ» º¸³»Áֱ⠹ٶõ´Ù.

<url url="http://web.syr.edu/~jmwobus/comfaqs/lan-technology.html">¿¡ 
ÀÖ´Â LAN Technology Scorecard¿Í °°Àº ¿ä¾àµéÀº ¸¹Àº ¼­·Î ´Ù¸¥ ŸÀÔµéÀÇ
³×Æ®¿÷°ú LAN Ç¥Áص鿡 ´ëÇÑ Æ¯¼ºµéÀ» º¸¿©ÁØ´Ù. ±×·¯³ª ÀÌ ÇÏ¿ìÅõ¿¡ ÀÖ´Â
¿ä¾àÀº ´ëºÎºÐ ¸®´ª½º Ŭ·¯½ºÅ͸¦ ¸¸µå´Â µ¥ °ü·ÃÀÌ ÀÖ´Â ³×Æ®¿÷ Ư¼ºµé¿¡
´ëÇØ¼­ ÃÐÁ¡À» ¸ÂÃè´Ù. °¢ ³×Æ®¿÷À» ³íÀÇÇÏ´Â ¼½¼ÇÀº ªÀº Ư¼º ¸®½ºÆ®·Î
½ÃÀÛÇÑ´Ù. ´ÙÀ½Àº ÀÌ·± ¿£Æ®¸®µéÀÌ ÀǹÌÇÏ´Â ¹Ù¸¦ Á¤ÀÇÇÑ´Ù.

<descrip>
<tag>¸®´ª½º Áö¿ø(Linux support):</tag>

(À̰Ϳ¡ ´ëÇÑ) ´äº¯ÀÌ <em>no</em>¶ó¸é, ±× Àǹ̴ ºÐ¸íÇÏ´Ù. ´Ù¸¥ ´ë´äµéÀº
³×Æ®¿÷À» ¾ï¼¼½ºÇÏ´Â µ¥ »ç¿ëµÇ´Â ±âº» ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º¸¦
¼³¸íÇÏ·Á°í ÇÒ °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ³×Æ®¿÷ Çϵå¿þ¾î´Â, ÀüÇüÀûÀ¸·Î TCP/UDP
Åë½ÅÀ» Áö¿øÇÏ´Â, Ä¿³Î µå¶óÀ̹ö¸¦ ÅëÇØ¼­ ÀÎÅÍÆäÀ̽ºµÈ´Ù. ¾î¶² ´Ù¸¥
³×Æ®¿÷µéÀº Ä¿³ÎÀ» °ÅÄ¡Áö ¾Ê°í¼­ Áöü ½Ã°£À» Á» ´õ ÁÙÀ̱â À§Çؼ­ Á»
´õ Á÷Á¢ÀûÀÎ ÀÎÅÍÆäÀ̽ºµé(¿¹, ¶óÀ̺귯¸®)À» »ç¿ëÇϱ⵵ ÇÑ´Ù.

<p>

¸î³âÀü OS È£ÃâÀ» ÅëÇØ¼­ ºÎµ¿ ¼Ò¼ýÁ¡ À¯´ÏÆ®¸¦ ¾ï¼¼½º ÇÏ´Â °ÍÀÌ ¿ÏÀüÈ÷
ÈǸ¢ÇÑ °ÍÀ¸·Î »ý°¢µÇ¾îÁ³´Ù. ±×·¯³ª ÀÌÁ¦ ±×°ÍÀº ºÐ¸í ¿ì½º¿î °ÍÀÌ´Ù; ³»
ÀǰßÀ¸·Î´Â º´·Ä ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â ÇÁ·Î¼¼¼­µé °£ °¢ Åë½ÅÀÌ OS È£ÃâÀ»
¿ä±¸ÇÑ´Ù´Â °ÍÀº ¾î»öÇÑ °ÍÀÌ´Ù. ¹®Á¦´Â ÄÄÇ»Å͵éÀÌ ¾ÆÁ÷µµ ÀÌ·± Åë½Å
¸ÞÄ«´ÏÁòµéÀ» ÅëÇÕÇÏÁö ¸øÇß´Ù´Â °ÍÀÌ´Ù. ±×·¡¼­ ºñ-Ä¿³Î Á¢±ÙÀº À̽ļº
¹®Á¦µéÀ» °¡Áö´Â °æÇâÀÌ ÀÖ´Ù. ¿©·¯ºÐÀº °¡±î¿î ¹Ì·¡¿¡ ÀÌ·± °Í¿¡ ´ëÇØ¼­ Á»
´õ ¸¹Àº °ÍÀ» µè°Ô µÉ °ÍÀÌ´Ù. ´ë°³ »õ·Î¿î <bf>Virtual Interface (VI)
Architecture</bf><url url="http://www.viarch.org/">ÀÇ ÇüÅ·Πµè°Ô µÉ
°ÍÀÎ µ¥ À̰ÍÀº ÀϹÝÀûÀÎ OS È£Ãâ °èÃþÀ» ÇÇÇÏ´Â ´ëºÎºÐÀÇ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º
ÀÛ¾÷µé¿¡ ´ëÇÑ Ç¥ÁØÈ­µÈ ¹æ¹ýÀÌ´Ù. VI Ç¥ÁØÀº Compaq, Intel, ±×¸®°í
Microsoft¿¡ ÀÇÇØ¼­ Áö¿ø¹Þ°í ÀÖÀ¸¸ç ´ÙÀ½ ¸î ³â ¾È¿¡ SAN(½Ã½ºÅÛ ¿µ¿ª
³×Æ®¿÷) µðÀÚÀο¡ ´ëÇÑ °­ÇÑ Ãæ°ÝÀÌ µÉ °ÍÀÓ¿¡ Ʋ¸²¾ø´Ù.

<tag>ÃÖ´ë ´ë¿ªÆø(Maximum bandwidth):</tag>

À̰ÍÀº ¸ðµç »ç¶÷ÀÌ ½Å°æ¾²´Â ¼ýÀÚÀÌ´Ù. ³ª´Â ÀϹÝÀûÀ¸·Î ÀÌ·ÐÀûÀ¸·Î ÃÖ¼±ÀÎ
°æ¿ìÀÇ ¼öÄ¡¸¦ »ç¿ëÇß´Ù; ¿©·¯ºÐÀÇ ¸¶Àϸ®Áö´Â º¯<em>ÇÒ °ÍÀÌ´Ù</em>.

<tag>ÃÖ¼Ò Áöü(Minimum latency):</tag>

³» ÀǰßÀ¸·Î´Â, À̰ÍÀº ¸ðµç »ç¶÷µéÀÌ ´ë¿ªÆøº¸´Ù ´õ ½Å°æ½á¾ß ÇÒ ¼öÄ¡ÀÌ´Ù.
´Ù½Ã ³ª´Â ºñÇö½ÇÀûÀÎ ÃÖ¼±ÀÎ °æ¿ì(base-case) ¼öÄ¡¸¦ »ç¿ëÇßÁö¸¸ Àû¾îµµ ÀÌ
¼öÄ¡µéÀº Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ¸ðµÎ¸¦ Æ÷ÇÔÇÏ´Â <em>¸ðµç</em> Áöü
¼Ò½ºµéÀ» Æ÷ÇÔÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì ³×Æ®¿÷ Áöü´Â ¸î ¸¶ÀÌÅ©·ÎÃÊÀÌ´Ù; ¼öÄ¡°¡
Å©¸é Ŭ¼ö·Ï Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºµéÀÇ °èÃþµéÀÌ ºñÈ¿À²ÀûÀÌ´Ù´Â
°ÍÀ» ¹Ý¿µÇÑ´Ù.

<tag>±¸ÀÔ ¹æ¹ý(Available as):</tag>

´Ü¼øÇÏ°Ô ¸»Çؼ­, À̰ÍÀº ÀÌ Å¸ÀÔÀÇ ³×Æ®¿÷ Çϵå¿þ¾î¸¦ °®Ãâ ¼ö ÀÖ´Â ¹æ¹ýÀ»
¼³¸íÇÑ´Ù.  »óǰµéÀº ÁÖ¿ä ±¸ºÐ ÀÎÀÚ·Î °¡°ÝÀ» °¡Áö¸é¼­, ¸¹Àº º¥´õµé¿¡
ÀÇÇØ¼­ »ì ¼ö ÀÖ´Ù. ´Ù¼ö-º¥´õ¿¡ ÀÇÇÑ °ÍµéÀº ÇϳªÀÇ °æÀïÀûÀÎ º¥´õº¸´Ù Á»
´õ »ç±â ½±Áö¸¸ À̵éÀº Áß¿äÇÑ Â÷ÀÌ¿Í ÀáÀçÀûÀΠȣȯ¼º(interoperability)
¹®Á¦µéÀÌ ÀÖ´Ù. ´ÜÀÏ-º¥´õ ³×Æ®¿÷Àº °ø±ÞÀÚÀÇ ¼Õ¿¡ ¿ÏÀüÈ÷ Á¾¼ÓµÈ´Ù(±×·¯³ª
±×µéÀº ģöÇÒ ¼öµµ ÀÖ´Ù).  ÆÛºí¸¯ µµ¸ÞÀÎ µðÀÚÀÎÀ̶õ ±×°ÍÀ» ¿©·¯ºÐ¿¡°Ô ÆÈ
»ç¶÷À» ãÁö ¸øÇÏ´õ¶óµµ ºÎǰµéÀ» »ç¼­ ±×°ÍÀ» ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» ¸»ÇÑ´Ù.
¿¬±¸ ÇÁ·ÎÅäŸÀÔµéÀº ¸» ±×´ë·ÎÀÌ´Ù; ±×µéÀº ÀϹÝÀûÀ¸·Î ÀϹÝÀûÀ¸·Î ¿ÜºÎ
»ç¿ëÀڵ鿡°Ô ÁغñµÈ °ÍÀÌ ¾Æ´Ï°Å³ª ±×µéÀÌ »ì ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù.

<tag>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º(Interface port/bus used):</tag>

 ÀÌ ³×Æ®¿÷À» ¾î¶»°Ô Á¢¼Ó(hook-up)ÇÒ °ÍÀΰ¡? ÇöÀç °¡Àå ³ôÀº ¼º´É°ú °¡Àå
ÀϹÝÀûÀÎ °ÍÀº PCI ¹ö½º ÀÎÅÍÆäÀ̽º Ä«µåÀÌ´Ù. EISA, VESA ·ÎÄà ¹ö½º(VL
¹ö½º), ±×¸®°í ISA ¹ö½º Ä«µåµéµµ ÀÖ´Ù. ISA´Â ¸ÇóÀ½¿¡ ³ª¿Â °ÍÀÌ°í ¾ÆÁ÷µµ
³·Àº-¼º´ÉÀÇ Ä«µåµé¿¡ ´ëÇØ¼­ ¸¹ÀÌ »ç¿ëµÇ´Â °ÍÀÌ´Ù.  EISA´Â ¸¹Àº PCI
±â°èµé¿¡¼­ µÎ¹øÂ° ¹ö½º·Î »ç¿ëµÇ°í À־ ¸î°¡Áö Ä«µåµéÀÌ ÀÖ´Ù. ¿À´Ã³¯ VL
¹°°ÇµéÀ» ¸¹ÀÌ º¼ ¼ö ¾øÀ» °ÍÀÌ´Ù(ºñ·Ï <url url="http://www.vesa.org/">°¡
ÀǰßÀ» ´Þ¸®ÇÏÁö¸¸ ¸»ÀÌ´Ù).

<p>

¹°·Ð ¿©·¯ºÐÀÇ ÇǾ¾ÀÇ ÄÉÀ̽º¸¦ Çѹøµµ ¿­¾îº¸Áö ¾Ê°í »ç¿ëÇÒ ¼ö ÀÖ´Â ¾î¶²
ÀÎÅÍÆäÀ̽º´Â ÀÛÀº ¸Å·Â ÀÌ»ó °¡Áø´Ù. IrDA¿Í USB ÀÎÅÍÆäÀ̽ºµéÀº °è¼Ó
ºó¹øÇÏ°Ô ³ªÅ¸³ª°í ÀÖ´Ù. Ç¥ÁØ ÆÐ·¯·² Æ÷Æ®(SPP)´Â ÇÁ¸°Å͸¦ ºÙÀÌ´Â µ¥
»ç¿ëµÇÁö¸¸ ISA ¹ö½ºÀÇ ¿ÜºÎ È®ÀåÀ¸·Î½á ¸¹ÀÌ »ç¿ëµÇ¾î ¿Ô´Ù; ÀÌ »õ·Î¿î
±â´ÉÀº  EPP¿Í ECP °³¼±À» ±ÔÁ¤ÇÑ IEEE 1284 Ç¥ÁØ¿¡ ÀÇÇØ¼­ ÁõÁøµÇ¾ú´Ù. ¶ÇÇÑ
¿À·¡µÇ°í ½Å·Ú¼º ÀÖÁö¸¸ ´À¸° RS232 ½Ã¸®¾ó Æ÷Æ®°¡ ÀÖ´Ù. ³ª´Â VGA ºñµð¿À
Ä¿³ØÅÍ, Űº¸µå, ¸¶¿ì½º, ¶Ç´Â °ÔÀÓ Æ÷Æ®µéÀ» »ç¿ëÇØ¼­ ±â°èµéÀ» ¿¬°áÇÏ´Â
°ÍÀ» ¾ËÁö ¸øÇÑ´Ù... ±×·¡¼­ ¿©±â¿¡ ¾ø´Ù.

<tag>³×Æ®¿÷ ±¸Á¶(Network structure):</tag>

¹ö½º´Â ±¸¸® ¼±À̰ųª ±¸¸® ¼±µéÀÇ ¸ðÀÓÀ̰ųª ±¤¼¶À¯ÀÌ´Ù. Çãºê´Â ¿©±â¿¡
²ÅÇô ÀÖ´Â ¼­·Î ´Ù¸¥ ±¸¸®¼±/±¤¼¶À¯µéÀ» ¿¬°áÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ÀÖ´Â ÀÛÀº
¹Ú½ºÀÌ´Ù; ½ºÀ§Äª Çãºê(switched hub)´Â ´Ù¼ö Ä¿³Ø¼ÇµéÀÌ µ¿½Ã¿¡ µ¥ÀÌÅ͸¦
Àü¼ÛÇϵµ·Ï ÇÏ´Â ÇãºêÀÌ´Ù.

<tag>±â°è´ç ºñ¿ë(Cost per machine connected):</tag>
¿©±â¼­ ÀÌ·± ¼öÄ¡µéÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¸»ÇÑ´Ù. ³×Æ®¿÷ Ä¿³Ø¼ÇÀ» ¼¼Áö ¾Ê°í¼­
Ŭ·¯½ºÅÍÀÇ ÇÑ ³ëµå¿¡ ¾µ·Á°í ÇǾ¾¸¦ »ç´Â µ¥ 2000´Þ·¯°¡ µé¾ú´Ù°í
°¡Á¤Çغ¸ÀÚ. ÆÐ½ºÆ® ÀÌ´õ³Ý(Fast Ethernet)À» ´õÇÏ´Â °ÍÀº ³ëµå´ç ¾à
2400´Þ·¯°¡ µç´Ù; MyrinetÀ» ´ë½Å ´õÇÏ´Â µ¥¿¡´Â ¾à 3800´Þ·¯°¡ µç´Ù.
2¸¸´Þ·¯°¡ ÀÖ´Ù¸é Fast Ethernet¿¡ ¿¬°áµÈ 8°³ÀÇ ±â°è³ª Myrinet¿¡ ¿¬°áµ·
5°³ÀÇ ±â°è¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.  ¸ÖƼ ³×Æ®¿÷À» °¡Áö´Â °Íµµ
¾ÆÁÖ ÀǹÌÀÖÀ» ¼ö ÀÖ´Ù; ¿¹, $20,000·Î ÆÐ½ºÆ® ÀÌ´õ³Ý°ú TTL_PAPERS
µÑ ´Ù °¡Áö´Â 8°³ ±â°èµéÀ» ±¸¸ÅÇÒ ¼ö ÀÖ´Ù.  ¾îÇø®ÄÉÀ̼ÇÀ» °¡Àå »¡¸®
½ÇÇàÇÒ Å¬·¯½ºÅ͸¦ ¸¸µé °¡´É¼ºÀÌ °¡Àå ³ôÀº ³×Æ®¿÷À̳ª ³×Æ®¿÷ ÁýÇÕÀ»
¼±ÅÃÇÏÀÚ.

<p>

À̰ÍÀ» Àд ÇöÀç ÀÌ·± ¼öÄ¡µéÀº Ʋ¸± ¼öµµ ÀÖ´Ù... Á¦±â·² ±×µéÀº ¾Æ¸¶µµ
ÀÌ¹Ì Æ²·ÈÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ¾çÀÌ ÁÙ¾îµé°Å³ª Ưº° ÆÇ¸Å(special deal)µîÀÌ
ÀÖÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ¿©±â¼­ ¾ð±ÞµÈ °¡°Ýµé¶§¹®¿¡ ¿©·¯ºÐÀÌ  ¾ÆÁÖ ºÎÀûÀýÇÑ
¼±ÅÃÀ» ÇϰԲû Çϱ⿡ ÃæºÐÇÑ À߸øµÈ °ÍÀÏ °¡´É¼ºÀÌ Àû´Ù.  ¿©·¯ºÐÀÇ
¾îÇø®ÄÉÀ̼ÇÀÌ ³×Æ®¿÷ÀÇ Æ¯º°ÇÑ ¼Ó¼ºÀ» ¿ä±¸Çϰųª Ŭ·¯½ºÅ͸µµÈ ÇǾ¾µéÀÌ
»ó´ëÀûÀ¸·Î ºñ½Ñ °ÍÀÏ ¶§¿¡¸¸ ºñ½Ñ ³×Æ®¿÷ÀÌ Àǹ̰¡ ÀÖ´Ù´Â °ÍÀ» ¾Æ´Â µ¥´Â
¹Ú»ç ÇÐÀ§(ºñ·Ï ³ª´Â Çϳª °¡Áö°í ÀÖÁö¸¸ ;-)°¡ ÇÊ¿ä ¾ø´Ù.
</descrip>

<em>
³» ÀǰßÀ» µé¾úÀ¸¹Ç·Î ¼î¿Í ÇÔ²² ´ÙÀ½¿¡....(Now that you have the
        disclaimers, on with the show....)</em>

<sect2>¾ÆÅ©³Ý(ArcNet)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>2.5 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥ÅÍ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>ISA</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡µÇÁö ¾Ê´Â(unswitched) Çãºê³ª ¹ö½º(³í¸®ÀûÀÎ
        ¸µ)</em>
<item>±â°è´ç ºñ¿ë: <em>$200</em>
</itemize>

ARCNETÀº ÁÖ·Î ³»Àå ½Ç½Ã°£ Á¦¾î ½Ã½ºÅ۵鿡¼­ »ç¿ëµÇ±â À§Çؼ­ °í¾ÈµÈ Áö¿ª
³×Æ®¿÷(LAN)ÀÌ´Ù. ÀÌ´õ³Ý°ú ºñ½ÁÇÏ°Ô ³×Æ®¿÷Àº ¹°¸®ÀûÀ¸·Î ¹ö½º¿¡ ºÙÀÎ
ÅÇÀ̳ª Çϳª ÀÌ»óÀÇ Çãºêµé·Î Á¶Á÷µÈ´Ù. ±×·¯³ª ÀÌ´õ³Ý°ú ´Ù¸£°Ô À̰ÍÀº
³×Æ®¿÷À» ³í¸®ÀûÀ¸·Î ¸µÀ¸·Î ±¸ÃàÇÏ´Â ÅäÅ«-±â¹Ý ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÑ´Ù. ÆÐŶ
Çì´õ´Â ÀÛ´Ù(3 ¶Ç´Â 4¹ÙÀÌÆ®). ±×¸®°í ¸Þ½ÃÁöµéÀº ´ÜÀÏ ¹ÙÀÌÆ® µ¥ÀÌÅ͸¸Å­
ÀÛ°Ô Àü´ÞµÉ ¼ö ÀÖ´Ù. ±×·¡¼­, ARCNETÀº Á¦ÇÑµÈ Áö¿¬ µîÀ» °¡Áö¸é¼­,
ÀÌ´õ³Ýº¸´Ù Á» ´õ ÀϰüµÈ ¼º´ÉÀ» °¡Áø´Ù. ºÒÇàÇϰԵµ À̰ÍÀº ÀÌ´õ³Ýº¸´Ù ´õ
´À¸®°í ´ú À¯¸íÇÏ´Ù. ±×·¯¸é¼­µµ ´õ ºñ½Î´Ù. <url
url="http://www.arcnet.com/">¿¡ ÀÖ´Â ARCNET Trade Association·ÎºÎÅÍ ´õ
ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

<sect2>ATM
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö, AAL* ¶óÀ̺귯¸®.</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>155 Mb/s</em> (°ð, <em>1,200 Mb/s</em>)
<item>ÃÖ¼Ò Áöü: <em>120 microseconds</em>
<item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em>
<item>±â°è ´ç ºñ¿ë: <em>$3,000</em>
</itemize>

Áö³­ ¸î³â µ¿¾È È¥¼ö »óÅ¿¡ ÀÖÁö ¾Ê¾Ò´Ù¸é ¾Æ¸¶ ATM(ºñµ¿±â Àü¼Û ¸ðµå)°¡
¾î¶»°Ô ¹Ì·¡°¡.. ±Û½ê, ÀÏÁ¾ÀÇ ¹Ì·¡°¡ µÉ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ¼­ ¸¹ÀÌ µé¾úÀ»
°ÍÀÌ´Ù. ATMÀº HiPPIº¸´Ù ´õ ½Î°í ÆÐ½ºÆ® ÀÌ´õ³Ýº¸´Ù ´õ ºü¸£¸ç ÀüÈ­
ȸ»çµéÀÌ Á¦°øÇÏ´Â °Å¸®¸¸Å­ ±ä °Å¸®¿¡µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ATM ³×Æ®¿÷
ÇÁ·ÎÅäÄÝÀº ¶ÇÇÑ ´õ ³·Àº-¿À¹öÇìµå ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϵµ·Ï,
±×¸®°í ÀÛÀº ¸Þ½ÃÁöµé°ú ½Ç½Ã°£ Åë½Å(¿¹, µðÁöÅÐ ¿Àµð¿À¿Í ºñµð¿À)À» Á» ´õ
È¿°úÀûÀ¸·Î °ü¸®Çϵµ·Ï °í¾ÈµÇ¾ú´Ù. À̰ÍÀº ¶ÇÇÑ ¸®´ª½º°¡ ÇöÀç Áö¿øÇÏ´Â
°¡Àå-³ôÀº ´ë¿ªÆø ³×Æ®¿÷µé ÁßÀÇ ÇϳªÀÌ´Ù. ³ª»Û ¼Ò½ÄÀº ATMÀº ½ÎÁö ¾Ê°í
º¥´õµé °£¿¡ ȣȯ¼º ¹®Á¦°¡ ¾ÆÁ÷ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸®´ª½º ATM °³¹ß¿¡ ´ëÇÑ
°³°üÀº <url url="http://lrcwww.epfl.ch/linux-atm/">¿¡¼­ ãÀ» ¼ö
ÀÖ´Ù.

<sect2> CAPERS
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>AFAPI ¶óÀ̺귯¸®</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1.2 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>3 microseconds</em>
<item>±¸¸Å ¹æ¹ý: <em>»óǰ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>SPP</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>2°³ÀÇ ±â°èµé °£ ÄÉÀ̺í</em>
<item>±â°è´ç ºñ¿ë: <em>$2</em>
</itemize>

CAPERS(º´·Ä ½ÇÇà°ú ºü¸¥ µ¿±â¸¦ À§ÇÑ ÄÉÀÌºí ¾î´ðÅÍ; Cable Adapter for
Parallel Execution and Rapid Synchronization)´Â, Àü±â ÄÄÇ»ÅÍ
¿£Áö´Ï¾î¸µÀÇ ÆÛµà ´ëÇÐ Çб³(Purdue University School of Electrical and
Computer Engineering)¿¡¼­ÀÇ PAPERS ÇÁ·ÎÁ§Æ® <url
url="http://garage.ecn.purdue.edu/~papers/">ÀÇ ºÎ»ê¹°ÀÌ´Ù.  ±âº»ÀûÀ¸·Î
À̰ÍÀº µÎ ¸®´ª½º ÇǾ¾µé¿¡ ´ëÇÑ PAPERS ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱâ À§Çؼ­, ÀϹÝ
"LapLink" SPP-to-SPP ÄÉÀ̺íÀ» »ç¿ëÇϱâ À§Çؼ­ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÅäÄÝÀ»
Á¤ÀÇÇÑ´Ù. ¾ÆÀ̵ð¾î´Â ±ïÀÌÁö ¾ÊÁö¸¸ °¡°ÝÀ» ´õ ³·Ãâ ¼ö´Â ¾ø´Ù(¿ªÀÚÁÖ:
±×¸¸Å­ ½Î´Ù?).  ½Ã½ºÅÛ º¸¾ÈÀ» °³¼±Çϱâ À§Çؼ­ TTL_PAPERS¿Í ¸¶Âù°¡Áö·Î
±Ç°íµÇ´Â ¸¶ÀÌ³Ê Ä¿³Î ÆÐÄ¡°¡ ÀÖ´Ù. ±×·¯³ª ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù: <url
url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">.

<sect2>ÀÌ´õ³Ý(Ethernet)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>10 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>100 ¸¶ÀÌÅ©·ÎÃÊ</em>
<item>±¸¸Å ¹æ¹ý: <em>»óǰ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ ¶Ç´Â ½ºÀ§Ä¡ ¾ø´Â Çãºê, ¶Ç´Â Çãºê ¾ø´Â
¹ö½º</em>
<item>±â°è´ç ºñ¿ë: <em>$100</em>(Çãºê ¾ø´Â °æ¿ì
<em>$50</em>)
</itemize>

¸î³âµ¿¾È 10 Mbits/s ÀÌ´õ³ÝÀº Ç¥ÁØ ³×Æ®¿÷ ±â¼úÀÌ µÇ¾ú´Ù. ÁÁÀº ÀÌ´õ³Ý
ÀÎÅÍÆäÀ̽º Ä«µåµéÀº $50 ÀÌÇÏ·Î »ì ¼ö ÀÖ´Ù. ²Ï ¸¹Àº ÇǾ¾µéÀÌ
ÀÌÁ¦´Â ¸¶´õº¸µå¿¡ ÀÌ´õ³Ý ÄÁÆ®·Ñ·¯¸¦ °¡Áö°í ÀÖ´Ù. °¡º±°Ô-»ç¿ëµÇ´Â
³×Æ®¿÷¿¡ ´ëÇØ¼­ ÀÌ´õ³Ý ¿¬°áÀº Çãºê ¾ø´Â ¸ÖƼ-ÅÇ ¹ö½º·Î Á¶Á÷µÉ ¼ö ÀÖ´Ù;
±×·± ¼³Á¤Àº ÃÖ¼ÒÀÇ ºñ¿ëÀ¸·Î 200°³±îÁöÀÇ ±â°èµéÀ» ¹­À» ¼ö ÀÖ´Ù. ±×·¯³ª
º´·Ä 󸮿¡´Â ÀûÀýÇÏÁö ¾Ê´Ù. ´õºñ Çãºê(unswitched hub)¸¦ ´õÇÏ´Â °ÍÀº
½ÇÁ¦ ¼º´É Çâ»ó¿¡ µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù. ±×·¯³ª µ¿½Ã ¿¬°áµé¿¡ ´ëÇØ¼­ Àüü
´ë¿ªÆøÀ» Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê(switched hub)µéÀº Æ÷Æ®´ç ´ÜÁö ¾à
$100¸¸ µç´Ù. ¸®´ª½º´Â ³î¶ó¿ï Á¤µµ·Î ¸¹Àº ÀÌ´õ³Ý ÀÎÅÍÆäÀ̽ºµéÀ»
Áö¿øÇÏÁö¸¸ ÀÎÅÍÆäÀ̽º Çϵå¿þ¾îÀÇ º¯Á¾µéÀº ½É°¢ÇÑ ¼º´É Â÷À̸¦ ºÎ¸¦ ¼ö
ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¾î¶² °ÍµéÀÌ Áö¿øµÇ´ÂÁö¿Í ±×µéÀÌ Àß
ÀÛµ¿ÇÏ´ÂÁö¿¡ ´ëÇØ¼­ Çϵå¿þ¾î ȣȯ¼º ÇÏ¿ìÅõ(Hardware Compatibility
HOWTO)¸¦ º¸¶ó; ±×¸®°í ´ÙÀ½À» º¸ÀÚ <url
url="http://cesdis1.gsfc.nasa.gov/linux/drivers/">.

¼º´ÉÀ» Çâ»óÇÏ´Â Èï¹Ì·Î¿î ¹æ¹ýÀº NASA CESDIS¿¡¼­ ¼öÇàµÈ ºñ¿À¿ïÇÁ(Beowulf)
ÇÁ·ÎÁ§Æ® <url
url="http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html">¿¡¼­ ¼öÇàµÈ
16-±â°è ¸®´ª½º Ŭ·¯½ºÅÍ¿¡ ÀÇÇØ¼­ Á¦¾ÈµÇ¾ú´Ù. ¸¹Àº ÀÌ´õ³Ý Ä«µå µå¶óÀ̹öÀÇ
ÀúÀÚÀÎ Donald Becker´Â °¢ÀÚ ´Ù¸¥ °ÍÀ» shadowÇÏ´Â(Áï, µ¿ÀÏÇÑ ³×Æ®¿÷
ÁÖ¼ÒµéÀ» °øÀ¯ÇÏ´Â) ´Ù¼öÀÇ ÀÌ´õ³Ý ³×Æ®¿÷À» ÅëÇØ¼­ ·Îµå °øÀ¯(load
sharing)ÇÏ´Â Áö¿øÀ» °³¹ßÇÏ¿´´Ù. ÀÌ ·Îµå °øÀ¯´Â Ç¥ÁØ ¸®´ª½º ¹èÆ÷ÆÇ¿¡
³»ÀåµÇ°Ô µÇ¾ú°í ¼ÒÄÏ ÀÛ¾÷ ·¹º§ ¾Æ·¡¿¡ º¸ÀÌÁö ¾Ê°Ô ³»ÀåµÇ°Ô µÇ¾ú´Ù. Çãºê
ºñ¿ëÀÌ Áß¿äÇϱ⠶§¹®¿¡ °¢ ±â°è°¡ Çãºê ¾ø´Â ¶Ç´Â ´õ¹Ì Çãºê¸¦ °¡Áø µÎ °³
ÀÌ»óÀÇ ÀÌ´õ³Ý ³×Æ®¿÷ (¿ªÀÚÁÖ: Ä«µå)¿¡ ¿¬°áÇÏ´Â °ÍÀº ¼º´ÉÀ» °³¼±Çϱâ À§ÇÑ
ºñ¿ë-È¿°úÀûÀÎ ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù. »ç½Ç ÇÑ ±â°è°¡ ³×Æ®¿÷ ¼º´É º´¸ñ¿¡ °É¸°
»óȲ¿¡¼­ shadow ³×Æ®¿÷À» »ç¿ëÇÏ´Â ·Îµå °øÀ¯´Â ´ÜÀÏ ½ºÀ§Ä¡ Çãºê ³×Æ®¿÷À»
»ç¿ëÇÏ´Â °Íº¸´Ù ÈξÀ ´õ ÁÁ´Ù.

<sect2> ÀÌ´õ³Ý(ÆÐ½ºÆ® ÀÌ´õ³Ý, Fast Ethernet)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö.</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>100 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>80 ¸¶ÀÌÅ©·Î ÃÊ</em>
<item>±¸¸Å ¹æ¹ý: <em>»óǰ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ ¶Ç´Â ´õ¹Ì Çãºê</em>
<item>±â°è´ç ºñ¿ë: <em>$400?</em>
</itemize>

ºñ·Ï ±×µéÀ» "ÆÐ½ºÆ® ÀÌ´õ³Ý"À¸·Î ºÎ¸£´Â ¸î°¡Áö ´Ù¸¥ ±â¼úµéÀÌ ½ÇÁ¦
Á¸ÀçÇÏÁö¸¸ ÀÌ ¿ë¾î´Â ´ë°³ ¿¾³¯ "10 BaseT" 100 Mbits/s Àåºñ¿Í ÄÉÀ̺íµé°ú
´Ù¼Ò ȣȯµÇ´Â Çãºê-±â¹Ý  100Mbits/s ÀÌ´õ³ÝÀ» °¡¸®Å²´Ù. ±â´ëÇÏ´Â °Íó·³
ÀÌ´õ³ÝÀ¸·Î ºÒ¸®´Â °ÍµéÀº ¾î¶² °ÍÀ̳ª ÀϹÝÀûÀ¸·Î ¿ë·®À¸·Î °¡°ÝÀÌ
¸Å°ÜÁö°í ÀÌ·± ÀÎÅÍÆäÀ̽ºµéÀº ÀϹÝÀûÀ¸·Î 155 Mbits/s ATM Ä«µåµéÀÇ °¡°Ý¿¡
Àڱ׸¶ÇÑ Á¶°¢¿¡ Áö³ªÁö ¾Ê´Â´Ù. ÀÏ´ÜÀÇ ±â°èµéÀÌ ´ÜÀÏ 100 Mbits/s "¹ö½º"
(´õ¹Ì Çãºê¸¦ »ç¿ëÇØ¼­)ÀÇ ´ë¿ªÆøÀ» ³ª´² ¾²µµ·Ï ÇÏ´Â °ÍÀº °¢ ±â°èÀÇ ¿¬°á¿¡
Ç®·Î 10 Mbits/s¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê¸¦ °¡Áö°í 10 Mbits/s
ÀÌ´õ³ÝÀ» »ç¿ëÇÏ´Â °Íº¸´Ù ÁÁÁö ¾ÊÀ» ¼ö ÀÖ´Ù´Â ÇÔÁ¤(´ÜÁ¡)ÀÌ ÀÖ´Ù.

°¢ ±â°è¿¡°Ô µ¿½Ã¿¡ 100 Mbits/s¸¦ Á¦°øÇÒ ¼ö ÀÖ´Â ½ºÀ§Ä¡ Çãºê´Â ºñ½ÎÁö¸¸
°¡°ÝÀÌ ¸ÅÀÏ ¶³¾îÁö°í ÀÖ°í ÀÌ·± ½ºÀ§Ä¡µéÀº ´õ¹Ì Çãºêº¸´Ù ÈξÀ ´õ ³ôÀº
Àüü ³×Æ®¿÷ ´ë¿ªÆøÀ» ¸¸µç´Ù. ATM ½ºÀ§Ä¡µéÀ» ºñ½Î°Ô ¸¸µå´Â ¿äÀÎÀº ±×µéÀÌ
°¢ ATM ¼¿(»ó´ëÀûÀ¸·Î ÀÛÀº)µé¿¡ ´ëÇØ¼­ ¹Ýµå½Ã ½ºÀ§Ä¡ÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù;
¾î¶² ÆÐ½ºÆ® ÀÌ´õ³Ý ½ºÀ§Ä¡µéÀº ½ºÀ§Ä¡¸¦ Áö³¯ ¶§ ÀÛÀº Áöü¸¦ °¡Áú ¼ö ÀÖ´Â
±â¼úµéÀ» »ç¿ëÇÔÀ¸·Î½á ±â´ëµÇ´Â ´õ ³·Àº ½ºÀ§Äª ÁÖ±âÀÇ ÀÌÁ¡À» ÀÌ¿ëÇÑ´Ù.
±×·¯³ª ½ºÀ§Ä¡ ÆÐ½º¸¦ º¯°æÇÏ´Â µ¥ ¸î ¹Ð¸®ÃÊ(¿ªÀÚÁÖ: ¸¶ÀÌÅ©·Î Ãʰ¡
¾Æ´Ï´Ù)°¡ °É¸°´Ù... ±×·¡¼­ ¶ó¿ìÆÃ ÆÐÅÏÀÌ ÀÚÁÖ º¯ÇÑ´Ù¸é ÀÌ·± ½ºÀ§Ä¡´Â
ÇÇÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿©·¯ Ä«µåµé°ú µå¶óÀ̹öµé¿¡ ´ëÇØ¼­´Â <url
url="http://cesdis1.gsfc.nasa.gov/linux/drivers/">¸¦ º¸¶ó.

¶ÇÇÑ ÀÌ´õ³Ý¿¡¼­ ¼³¸íÇÑ °Íó·³ NASA¿¡¼­ ÀÌ·ïÁø Beowulf ÇÁ·ÎÁ§Æ® <url
url="http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html">°¡ ¸ÖƼ
ÆÐ½ºÆ® ÀÌ´õ³ÝÀ» ÅëÇØ¼­ ·Îµå °øÀ¯ÇÔÀ¸·Î½á ¼º´ÉÀ» °³¼±ÇÑ Áö¿øÀ» °³¹ßÇØ¿À°í
ÀÖ´Ù´Ï Âü°í ¹Ù¶õ´Ù.

<sect2> ÀÌ´õ³Ý(±â°¡ºñÆ® ÀÌ´õ³Ý,Gigabit Ethernet)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1,000 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>300 ¸¶ÀÌÅ©·Î ÃÊ?</em>
<item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê ¶Ç´Â FDR</em>
<item>±â°è´ç ºñ¿ë: <em>$2,500?</em>
</itemize>

±â°¡ºñÆ® ÀÌ´õ³Ý(Gigabit Ethernet) <url
url="http://www.gigabitethernet.org/">ÀÌ ÀÌ´õ³ÝÀ¸·Î ºÒ¸®´Â ÁÁÀº ±â¼úÀû
ÀÌÀ¯¸¦ °¡Áø´Ù°í È®½ÅÇÏÁö ¸øÇÑ´Ù. ±×·¯³ª À̰ÍÀÌ ½Î°í Å« ½ÃÀåÀÌ ÀÖ°í IP¸¦
Áö¿øÇÏ´Â ÄÄÇ»ÅÍ ³×Æ®¿÷ ±â¼úÀ» °®°í ÀÖ´Ù´Â °ÍÀ» À̸§ÀÌ Á¤È®ÇÏ°Ô ÀǹÌÇÏ´Â
°ÍÀº ¾Æ´Ï´Ù. ±×·¯³ª ÇöÀç °¡°ÝÀº Gb/s Çϵå¿þ¾î°¡ ¾ÆÁ÷ ¸¸µé±â¿¡ ±î´Ù·Î¿î
°ÍÀ̶ó´Â »ç½ÇÀ» ¹Ý¿µÇÑ´Ù.

´Ù¸¥ ÀÌ´õ³Ý ±â¼úµé°ú´Â ´Ù¸£°Ô ±â°¡ºñÆ® ÀÌ´õ³ÝÀº Á» ´õ ¹ÏÀ» ¼ö ÀÖ´Â
³×Æ®¿÷À» ¸¸µå´Â È帧 Á¦¾îÀÇ ·¹º§À» Á¦°øÇÑ´Ù. FDR, Áï Ç®-µàÇ÷º½º
¸®ÇÇÅÍ(Full-Duplex Repeater)´Â ¼º´ÉÀ» Çâ»ó½Ã۱â À§Çؼ­ ¹öÆÛ¸µ°ú
Áö¿ªÈ­µÈ È帧 Á¦¾î¸¦ »ç¿ëÇϸ鼭, ´Ü¼øÇÏ°Ô ¶óÀεéÀ» ¸ÖƼÇ÷º½ºÇÑ´Ù.
´ëºÎºÐÀÇ ½ºÀ§Ä¡ ÇãºêµéÀº ÇöÁ¸ÇÏ´Â ±â°¡ºñÆ®-°¡´É ±¤¼¶À¯
½ºÀ§Ä¡(gigabit-capable switch fabrics)¿¡ ´ëÇÑ »õ·Î¿î ÀÎÅÍÆäÀ̽º
¸ðµâµé·Î½á ±¸ÃàµÇ°í ÀÖ´Ù. ½ºÀ§Ä¡/FDR Á¦Ç°µéÀº Àû¾îµµ ´ÙÀ½°ú °°Àº
»çÀÌÆ®µé¿¡¼­ ±¸¸ÅµÉ ¼ö Àְųª ¹ßÇ¥µÇ°í ÀÖ´Ù.
<url url="http://www.acacianet.com/">, <url
url="http://www.baynetworks.com/">, <url
url="http://www.cabletron.com/">, <url
url="http://www.networks.digital.com/">, <url
url="http://www.extremenetworks.com/">, <url
url="http://www.foundrynet.com/">, <url url="http://www.gigalabs.com/">,
<url url="http://www.packetengines.com/">.  <url
url="http://www.plaintree.com/">, <url url="http://www.prominet.com/">,
<url url="http://www.sun.com/">, and <url url="http://www.xlnt.com/">.

¸®´ª½º µå¶óÀ̹ö <url
url="http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html">°¡
Á¸ÀçÇϸç Packet Engines "Yellowfin" G-NIC¿¡ ´ëÇØ¼­´Â <url
url="http://www.packetengines.com/">. ¸®´ª½º¿¡¼­ ÇÑ Ãʱâ Å×½ºÆ®´Â °¡Àå
ÁÁÀº 100 Mb/s ÆÐ½ºÆ® ÀÌ´õ³ÝÀ¸·Î ȹµæµÉ ¼ö ÀÖ´Â °Íº¸´Ù ¾à 2.5¹è ³ôÀº
´ë¿ªÆøÀ» ¾ò¾ú´Ù; ±â°¡ºñÆ® ³×Æ®¿÷ÀÇ °æ¿ìPCI ¹ö½º »ç¿ëÀ» Á¶½É½º·´°Ô Æ©´×ÇÏ´Â
°ÍÀÌ Áß¿äÇÑ ÀÎÀÚÀÌ´Ù. ÀǽÉÇÒ ¹Ù ¾øÀÌ µå¶óÀ̹ö °³¼±°ú ´Ù¸¥ NICµé¿¡ ´ëÇÑ
¸®´ª½º µå¶óÀ̹ö Áö¿øÀÌ °è¼Ó À̾îÁú °ÍÀÌ´Ù.

<sect2> FC (±¤¼¶À¯ ä³Î, Fibre Channel)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1,062 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸¸Å °æ·Î: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI?</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>?</em>
<item>±â°è ´ç °¡°Ý: <em>?</em>
</itemize>
<p>

FC(±¤¼¶À¯ ä³Î)ÀÇ ¸ñÀûÀº ³ôÀº-¼º´É ºí·° I/O(2,048 ¹ÙÀÌÆ® µ¥ÀÌÅÍ ÇÏÁßÀ»
½Ç¾î³ª¸£´Â FC ÇÁ·¹ÀÓ)¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. Ưº°È÷ ÄÄÇ»Å͸¦ ÅëÇØ¼­°¡ ¾Æ´Ï¶ó
FC¿¡ Á÷Á¢ ¿¬°áµÉ ¼ö ÀÖ´Â ´Ù¸¥ ÀúÀå ÀåÄ¡¿Í µð½ºÅ©µéÀ» °øÀ¯Çϱâ À§Çؼ­
¸»ÀÌ´Ù. ´ë¿ªÆø-º°·Î FC´Â 133¿¡¼­ 1,062 Mbits/s »çÀÌ ¾îµð¿¡¼­³ª
½ÇÇàµÇ¸é¼­ »ó´ëÀûÀ¸·Î ºü¸£´Ù°í ÇÑ´Ù. FC°¡ high-end SCSI¸¦ ´ëüÇÒ ¸¸Å­
À¯¸íÇØÁø´Ù¸é À̰ÍÀº °ª½Ñ ±â¼úÀÌ µÉ °ÍÀÌ´Ù; Áö±ÝÀº °ª½Ñ ±â¼úÀÌ ¾Æ´Ï¸ç
¸®´ª½º¿¡ ÀÇÇØ¼­ Áö¿øµÇÁö ¾Ê´Â´Ù. FC ·¹ÆÛ·±½ºµé¿¡ ´ëÇÑ ÁÁÀº ÄÝ·¢¼ÇÀº <url
url="http://www.amdahl.com/ext/CARP/FCA/FCA.html">¿¡¼­ Fibre Channel
Association¿¡ ÀÇÇØ¼­ °ü¸®µÇ°í ÀÖ´Ù.

<sect2>ÆÄÀ̾î¿ÍÀ̾î(FireWire, IEEE 1394)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>196.608 Mb/s</em> (°ð, <em>393.216 Mb/s</em>)
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸¸Å ¹æ¹ý: <em>¸ÖƼº¥´õ Çϵå¿þ¾î</em>
<item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>»çÀÌŬ ¾ø´Â ·£´ý(ÀÚ°¡-¼³Á¤)</em>
<item>±â°è´ç ºñ¿ë: <em>$600</em>
</itemize>

FireWire, <url url="http://www.firewire.org/">, IEEE 1394-1995 Ç¥ÁØÀÎ
À̰ÍÀº °í°´ ÀüÀÚÀåºñ(electronics)¸¦ À§ÇÑ Àúºñ¿ë °í¼Ó µðÁöÅ» ³×Æ®¿÷À»
À§Çؼ­ °í¾ÈµÈ °ÍÀÌ´Ù. Áø¿­Àå ¾îÇø®ÄÉÀ̼ÇÀº DV µðÁöÅÐ ºñµð¿À Ä·ÄÚ´õ¸¦
ÄÄÇ»ÅÍ¿¡ ¿¬°áÇÏ´Â °ÍÀÌÁö¸¸ FireWire´Â SCSI¸¦ ´ëüÇÏ´Â °ÍºÎÅÍ ¿©·¯ºÐÀÇ
°¡Á¤±ØÀå(home theater)ÀÇ °¢ ÄÄÆ÷³ÍÆ®µéÀ» »óÈ£¿¬°áÇÏ´Â °Í±îÁöÀÇ
¾îÇø®ÄÉÀ̼ǵéÀ» À§ÇÏ¿© »ç¿ëµÇµµ·Ï ÀǵµµÇ¾ú´Ù. À̰ÍÀº ¿ø(cycle)À» ¸¸µéÁö
¾Ê´Â ¹ö½ºµé°ú ºê¸®ÁöµéÀ» »ç¿ëÇÏ´Â ÀÓÀÇÀÇ ÅäÆú·ÎÁö¿¡¼­ ¿¬°áµÈ 64K
Àåºñµé±îÁö Çã¶ôÇϰí ÄÄÆ÷³ÍÆ®µéÀÌ ´õÇØÁö°Å³ª Á¦°ÅµÉ ¶§ ÀÚµ¿À¸·Î ¼³Á¤À»
°ËÃâÇÑ´Ù. ª°í(4 ¹ÙÀÌÆ® "quadlet") ³·Àº Áöü ½Ã°£À» °¡Áö´Â ¸Þ½ÃÁöµéÀÌ
ATM-likeÇÑ µ¿±â(isochronous) Àü¼Û(¸ÖƼ¹ÌÀÌ´õ ¸Þ½ÃÁöµéÀÇ µ¿±â¸¦ ¸ÂÃß´Â µ¥
»ç¿ëµÈ´Ù)°ú ÇÔ²² Áö¿øµÈ´Ù. ¾Æ´äÅØ(Adaptec)Àº ´ÜÀÏ PCI ÀÎÅÍÆäÀ̽º
Ä«µå¿¡ 63°³±îÁö ÀåÄ¡µéÀ» Çã¶ôÇÏ´Â FireWire Á¦Ç°µéÀ» °¡Áö°í ÀÖ°í
<url url="http://www.adaptec.com/serialio/">¿¡ FireWire¿¡ ´ëÇÑ ÁÁÀº
ÀϹÝÀûÀÎ Á¤º¸¸¦ ´ã°í ÀÖ´Ù.

ºñ·Ï FireWire°¡ »ç¿ë °¡´ÉÇÑ °¡Àå ³ôÀº ´ë¿ªÆø ³×Æ®¿÷ÀÌ µÉ ¼ö´Â ¾ø°ÚÁö¸¸
°í°´-·¹º§ ¸¶ÄÏ(°¡°ÝÀ» ¾ÆÁÖ ³·°Ô ¸¸µé)°ú ³·Àº Áöü ½Ã°£ Áö¿øÀº À̰ÍÀ»
¸î³â À̳»¿¡ ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅÍ ¸Þ½ÃÁö-Àü´Þ ³×Æ®¿÷ ±â¼úµé ÁßÀÇ Çϳª·Î
¸¸µé °ÍÀÌ´Ù.

<sect2>HiPPI°ú ½Ã·¯¾ó HiPPI
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1,600 Mb/s</em> (½Ã¸®¾óÀº <em>1,200 Mb/s</em>)
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>EISA, PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em>
<item>±â°è´ç ºñ¿ë: <em>$3,500</em> (½Ã¸®¾óÀº <em>$4,500</em>)
</itemize>
<p>

HiPPI (High Performance Parallel Interface)´Â ¿ø·¡ ½´ÆÛ ÄÄÇ»ÅÍ¿Í ´Ù¸¥
±â°è(½´ÆÛÄÄ, ÇÁ·¹ÀÓ ¹öÆÛ, µð½ºÅ© ¾î·¹ÀÌ µî) °£¿¡ ´ë·®ÀÇ µ¥ÀÌÅÍ ¼ÂµéÀÇ
Àü¼ÛÀ» À§Çؼ­ ¾ÆÁÖ ³ôÀº ´ë¿ªÆøÀ» Á¦°øÇϵµ·Ï ÀǵµµÇ¾úÀ¸¸ç ½´ÆÛÄÄ¿¡ ´ëÇÑ
Áö¹èÀûÀÎ ¤½ÁØÀÌ µÇ¾ú´Ù. ºñ·Ï À̰ÍÀº ¸ð¼ø ¾î¹ý(oxymoron)À̱ä ÇÏÁö¸¸
<bf>½Ã¸®¾ó HiPPI</bf>µµ ¶ÇÇÑ 32-ºñÆ® Æø Ç¥ÁØ(ÆÐ·¯·²) HiPPI ÄÉÀÌºí ´ë½Å¿¡
±¤¼¶À¯ ÄÉÀ̺íÀ» ÀüÇüÀûÀ¸·Î »ç¿ëÇÔÀ¸·Î½á, À¯¸íÇØÁú °ÍÀÌ´Ù. Áö³ª ¸î ³âµ¿¾È
HiPPI Å©·Î½º¹Ù ½ºÀ§Ä¡µéÀº ÀϹÝÀûÀÎ °ÍÀÌ µÇ¾úÀ¸¸ç °¡°ÝµéÀº ±Þ°ÝÇϰÔ
¶³¾îÁ³´Ù; ºÒÇàÇϰԵµ ½Ã¸®¾ó HiPPI´Â ¾ÆÁ÷ ºñ½Î°í À̰ÍÀÌ ¹Ù·Î PCI ¹ö½º
ÀÎÅÍÆäÀ̽º Ä«µåµéÀº ÀϹÝÀûÀ¸·Î Áö¿øÇÏ´Â °ÍÀÌ´Ù. ´õ ³ª»Û °ÍÀº ¸®´ª½º´Â
¾ÆÁ÷ HiPPI¸¦ Áö¿øÇÏÁö ¸øÇÑ´Ù´Â °ÍÀÌ´Ù. HiPPIÀÇ ÁÁÀº °³°üÀº CERN¿¡ ÀÇÇØ¼­
<url url="http://www.cern.ch/HSI/hippi/">¿¡¼­ °ü¸®µÇ°í ÀÖ´Ù; ±×µéÀº ¶ÇÇÑ
<url url="http://www.cern.ch/HSI/hippi/procintf/manufact.htm">¿¡ HiPPI
º¥´õµéÀÇ ´Ù¼Ò ±â´Ù¶õ ¸®½ºÆ®¸¦ °ü¸®ÇÑ´Ù.

<sect2> IrDA (Àû¿Ü¼± µ¥ÀÌÅÍ ¿¬ÇÕ; Infrared Data Association)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no?</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1.15 Mb/s¿Í 4 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸¸Å ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>ÀÎÅÍÆäÀ̽º/¹ö½º: <em>IrDA</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>ªÀº °Å¸® ¹«¼±(thin air) ;-)</em>
<item>±â°è´ç ºñ¿ë: <em>$0 </em>
</itemize>

IrDA(Àû¿Ü¼± µ¥ÀÌÅÍ ¿¬ÇÕ, <htmlurl url="http://www.irda.org/"
name="http://www.irda.org/">)´Â ¸¹Àº ·¦Åé ÇǽõéÀÇ Ãø¸é¿¡ ÀÖ´Â ÀÛÀº
Àû¿Ü¼± ÀåÄ¡ÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ¼­ µÎ °³ ÀÌ»óÀÇ ±â°èµéÀ»
Ä¿³ØÆ®ÇÏ´Â °ÍÀº Ÿ°í ³¯ ¶§ºÎÅÍ ¾î·Æ´Ù. ±×·¡¼­ Ŭ·¯½ºÅ͸µ¿¡ »ç¿ëµÉ
°¡´É¼ºÀÌ ³·´Ù. Don Becker°¡ IrDA¿¡ ¸î°¡Áö ¿¹ºñ ÀÛ¾÷À» Çß¾ú´Ù.

<sect2> Myrinet
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>¶óÀ̺귯¸®</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1,280 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>9 ¸¶ÀÌÅ©·Î ÃÊ</em>
<item>±¸¸Å ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em>
<item>ÀÎÅÍÆäÀ̽º Æ÷Æ®/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>½ºÀ§Ä¡ Çãºê</em>
<item>±â°è´ç °¡°Ý: <em>$1,800</em>
</itemize>

Myrinet <url url="http://www.myri.com/">Àº "½Ã½ºÅÛ ¿µ¿ª ³×Æ®¿÷" (System
Area Network, SAN)À¸·Î »ç¿ëµÉ ¼ö ÀÖµµ·Ï °í¾ÈµÈ ±Ù°Å¸® ¿µ¿ª
³×Æ®¿÷(LAN)ÀÌ´Ù. Áï º´·Ä ½Ã½ºÅÛÀ¸·Î ¿¬°áµÈ ±â°èµéÀÌ °¡µæÂù ³×Æ®¿÷
Äɺñ³Ý. LAN°ú SAN ¹öÀüµéÀº ¼­·Î ´Ù¸¥ ¹°¸®Àû ¸Åü¸¦ »ç¿ëÇÏ°í ´Ù¼Ò ´Ù¸¥
Ư¼ºµéÀ» °¡Áø´Ù; ÀϹÝÀûÀ¸·Î SAN ¹öÀüÀº Ŭ·¯½ºÅÍ ¾È¿¡¼­ »ç¿ëµÉ °ÍÀÌ´Ù.

MyrientÀº ±¸Á¶ÀûÀ¸·Î ¾ÆÁÖ ÀüÅëÀûÀÎ °ÍÀÌÁö¸¸ Ưº°È÷ Àß-±¸ÇöµÈ °ÍÀ̶ó´Â
ÆòÆÇÀ» µè°í ÀÖ´Ù. ¸®´ª½º¸¦ À§ÇÑ µå¶óÀ̹ö´Â ¼º´ÉÀÌ ÁÁ´Ù´Â ¸»À» µè´Â´Ù.
ºñ·Ï È£½ºÆ® ÄÄÇ»ÅÍ¿¡ ´ëÇÑ ¼­·Î ´Ù¸¥ PCI ¹ö½º ±¸Çö¹°µé¿¡ ´ëÇØ¼­ ¿©·¯
Ä¿´Ù¶õ ¼º´É º¯È­µéÀÌ ¸®Æ÷Æ®µÈ ¹Ù°¡ ÀÖ¾úÁö¸¸ ¸»ÀÌ´Ù.

ÇöÀç MyrinetÀº ³Ê¹« ½É°¢ÇÏ°Ô "¿¹»êÀ» À§ÇùÇÏ´Â" °ÍÀÌ ¾Æ´Ñ Ŭ·¯½ºÅÍ ±×·ìÀÇ
¼±È£µÇ´Â ³×Æ®¿÷ÀÓ¿¡ Ʋ¸²¾ø´Ù. ¸®´ª½º ÇǾ¾¿¡ ´ëÇÑ »ý°¢ÀÌ ÃÖ¼Ò 256 MB
RAM°ú SCSI RAID¸¦ °¡Áø Pentium Pro³ª Pentium II¶ó¸é MyrinetÀÇ °¡°ÝÀº ²Ï
ÇÕ¸®ÀûÀÎ °ÍÀÌ µÈ´Ù. ±×·¯³ª Á» ´õ ÀϹÝÀûÀÎ ÇǾ¾ ¼³Á¤À» »ç¿ëÇÑ´Ù¸é
¿©·¯ºÐÀÇ ¼±ÅÃÀÌ Myrinet¿¡ ¿¬°áµÈ <em>N</em> ±â°èµéÀ̳ª ¸ÖƼ ÆÐ½ºÆ®
À̳ʳÝÀ¸·Î ¹­ÀÎ <em>2N</em>°ú TTL_PAPERS »çÀÌ¿¡ ÀÖ´Ù´Â °ÍÀ» ¾Ë°Ô
µÉ °ÍÀÌ´Ù. ¿©·¯ºÐÀÇ ¿¹»êÀÌ ¾ó¸¶³ª µÇ´Â°¡¿Í ¿©·¯ºÐÀÌ ½Å°æ¾²´Â ÄÄÇ»ÅÍÀÇ
»ç¾çÀÌ ¾î¶² °ÍÀΰ¡¿¡ µû¶ó ÁÂÁö ¿ìÁö µÈ´Ù.

<sect2>ÆÄ¶ó½ºÅ×À̼Ç(Parastation)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>HAL ¶Ç´Â ¼ÒÄÏ ¶óÀ̺귯¸®</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>125 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>2 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>Çãºê¾ø´Â ¸Á(mesh)</em>
<item>±â°è´ç ºñ¿ë: <em>> $1,000</em>
</itemize>
<p>

Karlsruhe ´ëÇб³ Á¤º¸°øÇаú(Department of Informatics)ÀÇ
ÆÄ¶ó½ºÅ×À̼Ç(Parastation) ÇÁ·ÎÁ§Æ® <url
url="http://wwwipd.ira.uka.de/parastation">´Â PVM-ȣȯ Ä¿½ºÅÒ Àú-Áöü
³×Æ®¿÷À» ±¸Ãà ÁßÀÌ´Ù. ±×µéÀº ¸ÇóÀ½ Ä¿½ºÅÒ EISA ÀÎÅÍÆäÀ̽º¿Í BSD UNIX¸¦
½ÇÇàÇÏ´Â ÇǾ¾µéÀ» »ç¿ëÇÑ ¸ÇóÀ½ ±¸ÃàµÈ µÎ°³ÀÇ ÇÁ·Î¼¼¼­ ParaPC
ÇÁ·ÎÅäŸÀÔÀ» ¸¸µé¾úÀ¸¸ç ±× ´ÙÀ½ DEC AlphaµéÀ» »ç¿ëÇÑ Á» ´õ Å«
Ŭ·¯½ºÅ͵éÀ» ¸¸µé¾ú´Ù. PCI Ä«µåµéÀº HitexÀ̶ó°í ºÒ¸®´Â ȸ»ç¿Í °øÁ¶Çؼ­
¸¸µé¾îÁ³´Ù(<url url="http://www.hitex.com:80/parastation/"> ÂüÁ¶).
ÆÄ¶ó½ºÅ×ÀÌ¼Ç Çϵå¿þ¾î´Â ºü¸£°í ½Å·Ú¼º ÀÖ´Â ¸Þ½ÃÁö Àü¼Û°ú ´Ü¼øÇÑ
°ü¹®(barrier) µ¿±âÈ­¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù.

<sect2>PLIP
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1.2 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>»óǰ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>2 ±â°è °£ ÄÉÀ̺í</em>
<item>±â°è´ç ºñ¿ë: <em>$2</em>
</itemize>
<p>

"LapLink" ÄÉÀ̺íÀÇ ºñ¿ëÀ¸·Î PLIP(Parallel Line Interface Protocol)´Â
Ç¥ÁØ ¼ÒÄÏ-±â¹Ý ¼ÒÇÁÆ®¿þ¾î¸¦ »ç¿ëÇÏ¿© Ç¥ÁØ ÆÐ·¯·² Æ÷Æ®µéÀ» ÅëÇØ¼­ µÎ
¸®´ª½º ±â°èµéÀÌ Åë½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ´ë¿ªÆø, Áöü, ±×¸®°í
ÃøÁ¤°¡´É¼º(scalability)ÀÇ Ãø¸é¿¡¼­ º¸¸é À̰ÍÀº ¾ÆÁÖ Áß¿äÇÑ ³×Æ®¿÷ ±â¼úÀÌ
¾Æ´Ï´Ù. ±×·¯³ª °ÅÀÇ ¿µ¿¡ °¡±î¿î °¡°Ý°ú ¼ÒÇÁÆ®¿þ¾î ȣȯ¼ºÀÌ À¯¿ëÇÏ´Ù.
µå¶óÀ̹ö´Â Ç¥ÁØ ¸®´ª½º Ä¿³Î ¹èÆ÷ÆÇÀÇ ÀϺÎÀÌ´Ù.

<sect2>SCI
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>4,000 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>2.7 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>ƯÁ¤È¸»ç(proprietary) PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>?</em>
<item>±â°è´ç ºñ¿ë: <em>> $1,000</em>
</itemize>
<p>

SCI (Scalable Coherent Interconnect, ANSI/IEEE 1596-1992)ÀÇ ¸ñÀûÀº
±âº»ÀûÀ¸·Î ¸¹Àº ¼öÀÇ ±â°èµé¿¡ °ÉÃÄ ±ÙÁ¢(coherent) °øÀ¯ ¸Þ¸ð¸® °øÀ¯¸¦
Áö¿øÇÒ ¼ö ÀÖ´Â °í¼º´É ¸ÞÄ«´ÏÁò°ú ´Ù¾çÇÑ Å¸ÀÔÀÇ ¸Þ½ÃÁö Àü¼ÛÀ» Á¦°øÇÏ´Â
°ÍÀÌ´Ù. SCIÀÇ °í¾ÈµÈ ´ë¿ªÆø°ú Áöü´Â ´ëºÎºÐÀÇ ´Ù¸¥ ³×Æ®¿÷ ±â¼úµé°ú
	ºñ±³Çؼ­ µÑ ´Ù "³î¶ó¿î °Í"À̶ó°í ¸»Çصµ ±¦Âú´Ù. ´ÜÁ¡Àº SCI°¡ ½Ñ Á¦Ç°
	À¯´ÏÆ®·Î½á ³Î¸® »ç¿ë°¡´ÉÇÏÁö ¾Ê´Ù´Â °Í°ú ¸®´ª½º Áö¿øÀÌ ¾ÆÁ÷ ¾ø´Ù´Â
	°ÍÀÌ´Ù.

SCI´Â ÁÖ·Î
HP/Convex Exemplar SPP¿Í Sequent NUMA-Q 2000(<url
		url="http://www.sequent.com/">)¿Í °°Àº 
Áö¿ªÀûÀ¸·Î-°øÀ¯µÈ ¹°¸®ÀûÀ¸·Î-¹èÆ÷µÈ ¸Þ¸ð¸® ±â°èµé(logically-shared
		physically-distributed memory machines)¿¡ ´ëÇÑ ´Ù¾çÇÑ °íÀ¯
µðÀÚÀÎ ¾È¿¡¼­ »ç¿ëµÇ¾ú´Ù. ±×·¯³ª Dolphin(<url
		url="http://www.sequent.com/"> ÂüÁ¶)·ÎºÎÅÍ SCI´Â PCI ÀÎÅÍÆäÀ̽º
Ä«µå¿Í 4-way ½ºÀ§Ä¡(16 ±â°èµé±îÁö ³×°³ÀÇ 4-way ½ºÀ§Ä¡µéÀ» ºÙ¿©¼­ ¿¬°áµÉ
		¼ö ÀÖ´Ù)µéÀÌ ±×µéÀÇ CluStar Á¦Ç° ¶óÀÎÀ¸·Î½á »ç¿ë°¡´ÉÇÏ´Ù. SCI
°³°ü¿¡ ´ëÇÑ ÁÁÀº ¸µÅ©µéÀº CERN¿¡ ÀÇÇØ¼­ <url
url="http://www.cern.ch/HSI/sci/sci.html">¿¡¼­ °ü¸®µÈ´Ù.

<sect2>SCSI
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>5 Mb/s</em>¿¡¼­ <em>20 Mb/s</em> ÀÌ»ó±îÁö
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>¸ÖƼ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI, EISA, ISA Ä«µå</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>SCSI ÀåºñµéÀ» °øÀ¯ÇÏ´Â ±â°è°£ ¹ö½º</em>
<item>±â°è´ç ºñ¿ë: <em>?</em>
</itemize>
<p>

SCSI (Small Computer Systems Interconnect)´Â ±âº»ÀûÀ¸·Î µð½ºÅ©
µå¶óÀ̺êµé, CDROMµé, À̹ÌÁö ½ºÄ³³Ê µî°ú °°Àº µ¥ »ç¿ëµÇ´Â I/O ¹ö½ºÀÌ´Ù.
¿©±â¿¡´Â ºÐ¸®µÈ ¼¼°³ÀÇ Ç¥Áصé SCSI-1, SCSI-2, ±×¸®°í SCSI-3; Fast and
Ultra speeds; ±×¸®°í µ¥ÀÌÅÍ ÆÐ½º ³Êºñ·Î 8, 16, ¶Ç´Â 32ºñÆ®(SCSI-3¿¡¼­
		¾ð±ÞµÈ FireWire ȣȯ¼º°ú ÇÔ²²) °¡ ÀÖ´Ù. À̰ÍÀº ¾ÆÁÖ È¥¶õ½º·´´Ù.
±×·¯³ª ¿ì¸®´Â ¸ðµÎ ÁÁÀº SCSI´Â EIDEº¸´Ù ´õ ºü¸£°í ÀåºñµéÀ» Á» ´õ
È¿À²ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾È´Ù.

¸¹Àº »ç¶÷µéÀÌ ±ú´ÝÁö ¸øÇÏ´Â °ÍÀº µÎ ÄÄÇ»Å͵éÀÌ ´ÜÀÏ SCSI ¹ö½º¸¦ °øÀ¯ÇÏ´Â
°ÍÀÌ ¾ÆÁÖ ´Ü¼øÇÏ´Ù´Â »ç½ÇÀÌ´Ù. ÀÌ·± ¼³Á¤ ŸÀÔÀº ±â°è°£ µð½ºÅ©
µå¶óÀ̺êµéÀ» °øÀ¯Çϰí <bf>Àå¾Ö º¹±¸(fail-over)</bf>¸¦ ±¸Çö-ÇÑ ±â°è°¡
´Ù¸¥ ±â°è°¡ ½ÇÆÐÇßÀ» ¶§ µ¥ÀÌÅͺ£À̽º ¿ä±¸¸¦ ¶°¸Ãµµ·Ï ÇÏ°Ô ÇÔÀ¸·Î½á-¿¡
¾ÆÁÖ À¯¿ëÇÏ´Ù. ÇöÀç À̰ÍÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ PC Ŭ·¯½ºÅÍ Á¦Ç° WolfPack¿¡
ÀÇÇØ¼­ Áö¿øµÇ´Â À¯ÀÏÇÑ ¸ÞÄ«´ÏÁòÀÌ´Ù. ±×·¯³ª Á» ´õ Å« ½Ã½ºÅÛµé·Î È®ÀåµÉ
¼ö ¾ø´Ù´Â °ÍÀÌ °øÀ¯ SCSI¸¦ ÀϹÝÀûÀÎ º´·Ä 󸮿¡ ÀÖ¾î ´ú Èï¹Ì·Ó°Ô ¸¸µç´Ù.

<sect2>¼­¹ö³Ý(ServerNet)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>no</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>400 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>3 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>´ÜÀÏ-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>PCI</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>ÇãºêÀÇ À°°¢ Æ®¸®/4¸éü °ÝÀÚ(hexagonal
		tree/tetrahedral lattice of hubs)</em>
<item>±â°è´ç ºñ¿ë: <em>?</em>
</itemize>
<p>

¼­¹ö³Ý(ServerNet)Àº Tandem, <url url="http://www.tandem.com">ÀÇ °í-¼º´É
³×Æ®¿÷ Çϵå¿þ¾îÀÌ´Ù. Ưº°È÷ ¿Â¶óÀÎ Æ®·£Àè¼Ç ó¸®(OLTP) ¼¼°è¿¡¼­ ÅÄ´ýÀº
°í-½Å·Úµµ ½Ã½ºÅÛµéÀÇ ¼±µÎ·Î ¾Ë·ÁÁ® À־ ±×µéÀÇ ³×Æ®¿÷ÀÌ °í-¼º´É »Ó¸¸ÀÌ
¾Æ´Ï°í "³ôÀº µ¥ÀÌÅÍ ÅëÇÕ(integrity)°ú ½Å·Úµµ"±îÁö ÁÖÀåÇØµµ ³î¶ó¿î ÀÏÀÌ
¾Æ´Ï´Ù. ServerNetÀÇ ´Ù¸¥ Èï¹Ì·Î¿î ¸éÀº ÀÓÀÇÀÇ ÀåÄ¡¿¡¼­ ´Ù¸¥ ÀÓÀÇÀÇ
ÀåÄ¡·Î Á÷Á¢ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ¼ö ÀÖ´Ù°í ÁÖÀåÇÑ´Ù´Â °ÍÀÌ´Ù; <ref
id="sec_MPI" name="MPI"> ¼½¼Ç¿¡¼­
¼³¸íµÈ MPI ¸®¸ðÆ® ¸Þ¸ð¸® ¾ï¼¼½º ¸ÞÄ«´ÏÁòµé¿¡ ÀÇÇØ¼­ Á¦¾ÈµÈ °Í°ú ºñ½ÁÇÑ
¿ø-»çÀÌµå ½ºÅ¸ÀÏ·Î, ÇÁ·Î¼¼¼­µé»çÀ̻Ӹ¸ÀÌ ¾Æ´Ï°í µð½ºÅ© µå¶óÀ̺êµé µî
»çÀÌ¿¡¼­µµ ±×·¸´Ù. ¼­¹ö³Ý¿¡ ´ëÇÑ ¸¶Áö¸· ÇѰ¡Áö ÄÚ¸àÆ®: ´ÜÁö ½Ì±Û
º¥´õ¸¸ Á¸ÀçÇÏÁö¸¸ ±× º¥´õ´Â ¼­¹ö³ÝÀ» ÁÖ¿ä Ç¥ÁØÀ¸·Î, ÀáÀçÀûÀ¸·Î ¸¸µé ¼ö
ÀÖÀ» ¸¸Å­ ÃæºÐÈ÷ °­·ÂÇÏ´Ù. TandemÀº Compaq ¼ÒÀ¯ÀÌ´Ù.

<sect2>SHRIMP
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>»ç¿ëÀÚ-·¹º§ ¸Þ¸ð¸® ¸ÊµÈ(memory-mapped) ÀÎÅÍÆäÀ̽º</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>180 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>5 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>¿¬±¸ ÇÁ·ÎÅäŸÀÔ</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>EISA</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>mesh backplane (ÀÎÅÚ Paragon¿Í À¯»ç)</em>
<item>±â°è´ç ºñ¿ë: <em>?</em>
</itemize>
<p>

ÇÁ¸°½ºÅÏ ´ëÇб³ ÄÄÇ»ÅÍ °úÇÐ Çаú¿¡¼­ ÁøÇàÇϰí ÀÖ´Â
SHRIMP ÇÁ·ÎÁ§Æ®, <url url="http://www.CS.Princeton.EDU/shrimp/">´Â
ó¸® ³ëµå·Î½á ¸®´ª½º¸¦ ½ÇÇàÇÏ´Â ÇǾ¾µéÀ» »ç¿ëÇÑ º´·Ä ÄÄÇ»Å͸¦ ±¸ÃàÇϰí
ÀÖ´Ù. ù¹øÂ° SHRIMP(Scalable, High-Performance, Really Inexpensive
Multi-ProcessorÀÇ ¾àÀÚ)´Â Ä¿½ºÅÒ EISA Ä«µå ÀÎÅÍÆäÀ̽º À§ÀÇ µà¾ó Æ÷Æ®¸¦
°¡Áö´Â RAMÀ» »ç¿ëÇÑ ´Ü¼øÇÑ µÎ-ÇÁ·Î¼¼¼­ ÇÁ·ÎÅä ŸÀÔÀ̾ú´Ù. Áö±ÝÀº ÀÎÅÚ
Paragon(<url url="http://www.ssd.intel.com/paragon.html"> ÂüÁ¶)¿¡¼­ »ç¿ëµÈ
±×¹°¸Á(mesh) ¶ó¿ìÆÃ ³×Æ®¿÷°ú ±âº»ÀûÀ¸·Î µ¿ÀÏÇÑ "hub"¿¡ ¿¬°áÇϱâ À§Çؼ­
Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â Á» ´õ Å« ¼³Á¤µé¿¡ È®Àå°¡´ÉÇÑ ÇÁ·ÎÅäŸÀÔÀÌ
Á¸ÀçÇÑ´Ù. ¿Àº£Çìµå°¡ ÀûÀº "°¡»ó ¸Þ¸ð¸® ¸ÊµÈ Åë½Å" Çϵå¿þ¾î¿Í Áö¿ø
¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇϱâ À§ÇÑ »ó´çÈ÷ ¸¹Àº ³ë·ÂÀÌ ÀÌ·ç¾îÁ³´Ù.

<sect2>SLIP
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>Ä¿³Î µå¶óÀ̹ö</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>0.1 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>1,000 microseconds?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>»óǰ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>RS232C</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>µÎ ±â°èµé »çÀÌ¿¡ ÄÉÀÌºí »ç¿ë</em>
<item>±â°è´ç ºñ¿ë: <em>$2</em>
</itemize>
<p>

ºñ·Ï SLIP(½Ã¸®¾ó ¶óÀÎ ÀÎÅÍÆäÀ̽º ÇÁ·ÎÅäÄÝ;Serial Line Interface
Protocol)Àº ¼º´É ½ºÆåÆ®·³¿¡¼­ ³·Àº ÂÊ¿¡ ¿ÏÀüÈ÷ À§Ä¡Çϰí ÀÖÁö¸¸
SLIP(¶Ç´Â CSLIP¶Ç´Â PPP)´Â µÎ ±â°èµéÀÌ ÀÏ¹Ý RS232 ½Ã¸®¾ó Æ÷Æ®µéÀ»
ÅëÇØ¼­ ¼ÒÄÏ Åë½ÅÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¶Ç´Â ±×µéÀº ¸ðµ©À» °æÀ¯ÇÑ
´ÙÀ̾ó-¾÷À» ÅëÇØ¼­ ¿¬°áµÉ ¼öµµ ÀÖ´Ù. ¾î¶² °æ¿ì¿¡µµ Áöü ½Ã°£Àº ³ô°í
´ë¿ªÆøÀº ³·´Ù. ±×·¡¼­ SLIPÀº ´Ù¸¥ ´ë¾ÈµéÀÌ ÀüÇô ºÒ°¡´ÉÇÒ ¶§¸¸
»ç¿ëµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ÇǾ¾µåÀÌ µÎ °³ÀÇ RS232 Æ÷Æ®µéÀ»
°®°í ÀÖ´Ù´Â °ÍÀº ÁÖ¸ñÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. ±×·¡¼­ ±â°èµéÀ» ¼±Çü ¹è¿­À̳ª
¸µÇüÀ¸·Î ´Ü¼øÇÏ°Ô ¿¬°áÇØ¼­ ±â°èµé ±×·ìÀ» ³×Æ®¿öÅ·ÇÏ´Â °ÍÀÌ
°¡´ÉÇÏ´Ù. EQLÀ̶ó°í ºÒ¸®´Â ·Îµå ½¦¾î¸µ ¼ÒÇÁÆ®¿þ¾îµµ Á¸ÀçÇÑ´Ù.

<sect2>TTL_PAPERS
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>AFAPI ¶óÀ̺귯¸®</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>1.6 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>3 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>ÆÛºí¸¯-µµ¸ÞÀÎ ¼³°è, ½Ì±Û-º¥´õ Çϵå¿þ¾î</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>ÇãºêµéÀÇ Æ®¸®</em>
<item>±â°è´ç ºñ¿ë: <em>$100</em>
</itemize>
<p>

ÆÛµà ´ëÇб³ÀÇ ÀüÀÚ ¹× ÄÄÇ»ÅÍ ¿£Áö´Ï¾î¸µ Çб³¿¡¼­ ¼öÇà ÁßÀÎ
PAPERS (Purdue's Adapter for Parallel Execution and Rapid
Synchronization) ÇÁ·ÎÁ§Æ®, <url
url="http://garage.ecn.purdue.edu/~papers/">´Â º´·Ä ½´ÆÛÄÄÇ»ÅͰ¡
º¯Á¶µÇÁö ¾ÊÀº ÇǾ¾µé/¿öÅ©½ºÅ×À̼ǵéÀ» ³ëµå·Î »ç¿ëÇÏ¿© ±¸ÃàµÉ ¼ö ÀÖµµ·Ï
ÇÏ´Â, Å©±â Á¶Àý °¡´ÉÇÏ°í ³·Àº-Áöü ½Ã°£À» °¡Áö¸ç ÁýÇÕ ÇÔ¼ö Åë½Å
Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ ±¸Ãà Áß¿¡ ÀÖ´Ù.

µÎ°¡Áö °³¹ß ¶óÀεéÀ» ´ë·« µû¸£´Â SPP(Ç¥ÁØ ÆÐ·¯·² Æ÷Æ®; Standard Parallel
Port)¸¦ ÅëÇØ¼­ ÇǾ¾µé/¿öÅ©½ºÅ×À̼ǵéÀ» ¿¬°áÇÑ PAPERS Çϵå¿þ¾î´Â ±×
Á¾·ù°¡ 12°¡Áö°¡ ³Ñ´Â´Ù. "PAPERS"¶ó°í ºÒ¸®´Â ¹öÀüµéÀº ÀûÀýÇÑ ±â¼úÀ̸é
¹«¾ùÀ̵çÁö »ç¿ëÇØ¼­ ´õ ³ôÀº ¼º´ÉÀ» ¸ñÇ¥·Î ÇÑ´Ù; ÇöÀç ÀÛ¾÷Àº FPGAµé°ú
Áö±Ý °³¹ß Áß¿¡ ÀÖ´Â ³ôÀº ´ë¿ªÀÇ PCI ¹ö½º ÀÎÅÍÆäÀ̽º ¼³°èµéÀ» »ç¿ëÇÑ´Ù.
¹Ý¸é¿¡ "TTL_PAPERS"À̶ó°í ºÒ¸®´Â ¹öÀüµéÀº ÆÛµà ´ëÇÐ ¹Ù±ù¿¡¼­ ½±°Ô
Àç»ý»êµÉ ¼ö ÀÖµµ·Ï µðÀÚÀÎµÈ °ÍÀ̰í ÀϹÝÀûÀÎ TTL ·ÎÁ÷À» »ç¿ëÇØ¼­ ¸¸µé¾îÁú
¼ö ÀÖ´Â ¾ÆÁÖ ´Ü¼øÇÑ °ø¿ë µµ¸ÞÀÎ ¼³°è(public domain designs)ÀÌ´Ù. ÀÌ·±
µðÀÚÀÎ Áß Çϳª´Â »ó¿ëÀ¸·Î ¸¸µé¾îÁ³´Ù. <url
url="http://chelsea.ios.com:80/~hgdietz/sbm4.html">

´Ù¸¥ ´ëÇеéÀÇ Ä¿½ºÅÒ Çϵå¿þ¾î µðÀÚÀΰú ´Ù¸£°Ô TTL_PAPERS
Ŭ·¯½ºÅ͵éÀº USA¿¡¼­ ´ëÇѹα¹±îÁö ¸¹Àº ´ëÇе鿡¼­ Á¶¸³µÇ¾î ¿Ô´Ù.
´ë¿ªÆøÀº SPP Ä¿³Ø¼Çµé¿¡ ÀÇÇØ¼­ ½É°¢ÇÏ°Ô Á¦ÇѵǾî ÀÖÁö¸¸ °¡Àå ºü¸¥
¸Þ½ÃÁö-±â¹Ý ½Ã½ºÅÛµéÀº ±×·¯ÇÑ ÁýÇÕ ÇÔ¼öµé(aggregate functions)¿¡ ´ëÇØ¼­
ÇÊÀûÇÒ¸¸ÇÑ ¼º´ÉÀ» Á¦°øÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ PAPERS´Â Ưº°È÷ ºñµð¿À º®(video
wall; ¿ªÀÚÁÖ: Àü½ÃÀå µî¿¡¼­ º¼ ¼ö ÀÖ´Â ´ëÇü µð½ºÇ÷¹ÀÌ ¹× ÄÄÇ»ÅÍ, 
»ç¿îµå ½Ã½ºÅÛÀÇ Á¶ÇÕ)ÀÇ µð½ºÇ÷¹À̸¦ µ¿±âÈ­ÇÏ´Â µ¥(ºñµð¿À º®¿¡ ´ëÇØ¼­
¾ÕÀ¸·Î ³ª¿Ã Video Wall HOWTO¿¡¼­ ÀÚ¼¼È÷ ´Ù·ê °ÍÀÌ´Ù), °í-´ë¿ª ³×Æ®¿÷¿¡
´ëÇÑ ½ºÄÉÁÙ¸µ ¾ï¼¼½º, À¯ÀüÀÚ °Ë»ö(genetic search)¿¡¼­ Àü¿ª ºñ±³(global
fitness)¸¦ Æò°¡ÇÏ´Â °Í µî¿¡¼­ Ź¿ùÇÏ´Ù. ºñ·Ï PAPERS Ŭ·¯½ºÅ͵éÀÌ IBM
PowerPC AIX, DEC Alpha OSF/1, ±×¸®°í HP PA-RISC HP-UX ±â°èµéÀ» »ç¿ëÇØ¼­
¸¸µé¾îÁ³Áö¸¸ ¸®´ª½º-±â¹Ý PCµéÀÌ °¡Àå Àß Áö¿øµÇ´Â Ç÷§ÆûÀÌ´Ù.

TTL_PAPERS AFAPI¸¦ »ç¿ëÇÏ´Â »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀº ¸®´ª½º¿¡¼­, °¢
¾ï¼¼½º¿¡ ´ëÇØ¼­ OS È£Ãâ¾øÀÌ SPP Çϵå¿þ¾î Æ÷Æ® ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½ºÇÑ´Ù.
ÀÌ·¸°Ô Çϱâ À§Çؼ­ AFAPI´Â ¸Ç¸ÕÀú <tt>iopl()</tt>³ª <tt>ioperm()</tt>¸¦
»ç¿ëÇØ¼­ Æ÷Æ® ÆÛ¹Ì¼ÇÀ» ȹµæÇÑ´Ù. ÀÌ·± È£ÃâµéÀÇ ¹®Á¦Á¡Àº µÑ ´Ù »ç¿ëÀÚ
ÇÁ·Î±×·¥ÀÌ ±ÇÇÑÀ» °®µµ·Ï(¿ªÀÚÁÖ: ¾Æ¹«·¡µµ ·çÆ® ±ÇÇÑÀÏ °Í °°´Ù) ¿ä±¸Çؼ­
ÀáÀçÀûÀÎ º¸¾È ±¸¸ÛÀ» ¸¸µç´Ù´Â °ÍÀÌ´Ù. ¼Ö·ç¼ÇÀº ¼±ÅÃÀûÀÎ Ä¿³Î ÆÐÄ¡, <url
url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">ÀÌ´Ù. À̰ÍÀº
±ÇÇÑÀÖ´Â ÇÁ·Î¼¼½º°¡ ÀÓÀÇÀÇ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ Æ÷Æ® ÆÛ¹Ì¼ÇÀ» Á¦¾îÇϵµ·Ï
ÇÑ´Ù.

<sect2>USB (Universal Serial Bus)
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>kernel driver</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>12 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>?</em>
<item>±¸ÀÔ ¹æ¹ý: <em>commodity hardware</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>USB</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>bus</em>
<item>±â°è´ç ºñ¿ë: <em>$5?</em>
</itemize>
<p>

USB (Universal Serial Bus, <url url="http://www.usb.org/">)´Â Űº¸µå,
È­»ó ȸÀÇ Ä«¸Þ¶ó µî 127°³±îÁö ÁÖº¯±â±âµéÀ» ´Þ ¼ö ÀÖ°í
ÇÖ-Ç÷¯±×(hot-pluggable) °¡´ÉÇÑ ÀÏ¹Ý ÀÌ´õ³Ý ¼öÁØÀÇ ¼Óµµ¸¦ ³»´Â ¹ö½ºÀÌ´Ù.
¾ó¸¶³ª ¸¹Àº ÄÄÇ»Å͵éÀÌ ¼­·Î USB¸¦ »ç¿ëÇØ¼­ ¿¬°áµÉ ¼ö ÀÖ´ÂÁö´Â ½ÇÁ¦
¸íÈ®ÇÏÁö ¾Ê´Ù. ¾î·µç USB Æ÷Æ®µéÀº Áö±Ý ºü¸£°Ô RS232¿Í SPP¿Í °°Àº PC
¸¶´õº¸µåÀÇ Ç¥ÁØÀÌ µÇ¾î°¡°í ÀÖ´Ù. ±×·¯¹Ç·Î ¿©·¯ºÐÀÌ ±¸¸ÅÇÑ Â÷±â PCÀÇ
µÚÆí¿¡ USB Æ÷Æ®µéÀÌ ¼û¾î ÀÖ´õ¶óµµ ³î¶óÁö ¸»±â ¹Ù¶õ´Ù. ¸®´ª½º µå¶óÀ̹ö
°³¹ßÀº <url url="http://peloncho.fis.ucm.es/~inaky/USB.html">¿¡¼­
³íÀǵǰí ÀÖ´Ù.

¿©·¯°¡Áö Á¡¿¡¼­ USB´Â °ÅÀÇ ¿©·¯ºÐÀÌ ÇöÀç ±¸¸ÅÇÒ ¼ö ÀÖ´Â, ³·Àº-¼º´É,
Á¦·Î-ºñ¿ë(zero-cost)ÀÎ FireWire ¹öÀüÀÌ´Ù.

<sect2>WAPERS
<p>
<itemize>
<item>¸®´ª½º Áö¿ø: <em>AFAPI library</em>
<item>ÃÖ´ë ´ë¿ªÆø: <em>0.4 Mb/s</em>
<item>ÃÖ¼Ò Áöü: <em>3 microseconds</em>
<item>±¸ÀÔ ¹æ¹ý: <em>public-domain design</em>
<item>»ç¿ëµÈ ÀÎÅÍÆäÀ̽º/¹ö½º: <em>SPP</em>
<item>³×Æ®¿÷ ±¸Á¶: <em>wiring pattern between 2-64 machines</em>
<item>±â°è´ç ºñ¿ë: <em>$5</em>
</itemize>
<p>

WAPERS (º´·Ä ½ÇÇà°ú ºü¸¥ µ¿±âÈ­¸¦ À§ÇÑ Wired-AND ¾Æ´äÅÍ;
Wired-AND Adapter for Parallel Execution and Rapid
Synchronization)´Â ÆÛµà ´ëÇб³ÀÇ ÀüÀÚ ÄÄÇ»ÅÍ °øÇÐ Çб³¿¡¼­ ¼öÇà ÁßÀÎ
PAPERS ÇÁ·ÎÁ§Æ®, <url url="http://garage.ecn.purdue.edu/~papers/">ÀÇ
ºÎ»ê¹°ÀÌ´Ù. ÀûÀýÇÏ°Ô ±¸ÇöµÈ´Ù¸é SPP´Â 4-ºñÆ® Æø wired AND¸¦ ±¸ÇöÇϱâ
À§Çؼ­ ±â°èµé °£ ¼­·Î ¹­ÀÏ ¼ö ÀÖ´Â 4ºñÆ® ¿ÀÇÂ-ÄÝ·ºÅÍ Ãâ·ÂÀ» °¡Áø´Ù. ÀÌ
wired-AND´Â ÀüÀÚ°øÇÐÀûÀ¸·Î ´Ù·ç±â ¾î·Á¿î °ÍÀ̰í ÀÌ·± ½ÄÀ¸·Î ¿¬°áµÉ ¼ö
ÀÖ´Â ±â°èµéÀÇ ÃÖ´ë °³¼ö´Â Æ÷Æ®ÀÇ ¾Æ³¯·Î±× Ư¼º¿¡ Á¾¼ÓÀûÀÌ´Ù(ÃÖ´ë ¼ö½Å 
Àü·ù(sink current)¿Í ÈÞ½Ä ·¹Áö½ºÅÍ(pull-up register) °ª); ÀüÇüÀûÀ¸·Î 7°³
³»Áö 8°³ ±â°èµéÀÌ WAPERS·Î ³×Æ®¿öÅ·µÉ ¼ö ÀÖ´Ù. ºñ·Ï ºñ¿ë°ú Áöü½Ã°£ÀÌ
¾ÆÁÖ ³·Áö¸¸, ±×·¡¼­ ´ë¿ªÆøµµ ³·´Ù; WAPERS´Â Ŭ·¯½ºÅÍ¿¡¼­ ´ÜÀÏ
³×Æ®¿÷À¸·Î½á°¡ ¾Æ´Ï¶ó ÁýÇÕ ÀÛ¾÷µé¿¡ ´ëÇÑ µÎ¹øÂ° ³×Æ®¿÷À¸·Î½á ÈξÀ ´õ
ÁÁ´Ù. TTL_PAPERS¿Í ÇÔ²², ½Ã½ºÅÛ º¸¾ÈÀ» ³ôÀ̱â À§Çؼ­, ¹Ýµå½Ã
ÇÊ¿äÇÏÁö´Â ¾ÊÁö¸¸ ±Ç°íµÇ´Â ¸¶ÀÌ³Ê Ä¿³Î ÆÐÄ¡°¡ ÀÖ´Ù: <url
url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">.

<!-- ------------------------------------------------------------- -->
<sect1>³×Æ®¿÷ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º(Network Software Interface)
<!-- ------------------------------------------------------------- -->
<p>

º´·Ä ¾îÇø®ÄÉÀ̼ǵéÀ» Áö¿øÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ³íÀÇÇϱâ ÀÌÀü¿¡ ³×Æ®¿÷
Çϵå¿þ¾î¿¡ ´ëÇÑ ·Î¿ì-·¹º§ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºÀÇ ±âº»À» °£´ÜÈ÷ ¸ÕÀú
¾ê±âÇÏ´Â °ÍÀÌ À¯¿ëÇÏ´Ù. ½ÇÁ¦·Î 3°¡Áö ±âº» ¼±Åø¸ Á¸ÀçÇÑ´Ù: ¼ÒÄÏ, ÀåÄ¡
±¸µ¿±â(device drivers), ±×¸®°í À¯Àú-·¹º§ ¶óÀ̺귯¸®.

<sect2>¼ÒÄÏ
<p>

Áö±Ý±îÁö °¡Àå ÀϹÝÀûÀÎ ·Î¿ì-·¹º§ ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º´Â ¼ÒÄÏ
ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ¼ÒÄÏÀº Áö³­ 10³â°£ À¯´Ð½ºÀÇ ÀϺο´°í ´ëºÎºÐÀÇ Ç¥ÁØ
³×Æ®¿÷ Çϵå¿þ¾î´Â Àû¾îµµ µÎ°¡Áö ŸÀÔÀÇ ¼ÒÄÏ ÇÁ·ÎÅäÄݵé: UPD¿Í TCP¸¦
Áö¿øÇϵµ·Ï ¼³°èµÈ °ÍÀÌ´Ù. µÎ ¼ÒÄÏ Å¸ÀÔµéÀº ÇÑ ±â°è¿¡¼­ ´Ù¸¥ °ÍÀ¸·Î
ÀÓÀÇ Å©±âÀÇ µ¥ÀÌÅÍ ºí·°À» Àü¼ÛÇÒ ¼ö ÀÖµµ·Ï ÇÏÁö¸¸ ¸î°¡Áö Áß¿äÇÑ Â÷À̰¡
ÀÖ´Ù. ºñ·Ï ¼º´ÉÀº ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ µû¶ó¼­ ÈξÀ ¾ÇÈ­µÉ ¼ö ÀÖÁö¸¸
ÀüÇüÀûÀ¸·Î ÀÌ µÎ°¡Áö´Â ¾à 1,000 ¸¶ÀÌÅ©·Î ÃÊ Á¤µµÀÇ ÃÖ¼Ò Áöü¸¦ ¸¸µç´Ù.

ÀÌ·± ¼ÒÄÏ Å¸ÀÔµéÀº ´ëºÎºÐÀÇ ÀÌ½Ä °¡´É, ÇÏÀÌ-·¹º§, º´·Ä ó¸® ¼ÒÇÁÆ®¿þ¾î¿¡
´ëÇÑ ±âº» ³×Æ®¿÷ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽ºÀÌ´Ù; ¿¹¸¦ µé¾î¼­ PVMÀº UDP¿Í
TCP¸¦ È¥ÇÕÇÏ¿© »ç¿ëÇϱ⠶§¹®¿¡ ÀÌ µÑÀÇ Â÷ÀÌÁ¡À» ¾Æ´Â °ÍÀº ¼º´ÉÀ»
Æ©´×ÇÏ´Â µ¥ µµ¿òÀ» ÁÙ °ÍÀÌ´Ù. Á» ´õ ³ªÀº ¼º´ÉÀ» À§Çؼ­ ÇÁ·Î±×·¥ ¾È¿¡¼­
Á÷Á¢ ÀÌ·± ¸ÞÄ«´ÏÁòµéÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ¸Àº UDP¿Í TCPÀÇ ´Ü¼øÇÑ
°³°üÀÌ´Ù; ÀÚ¼¼ÇÑ ³»¿ëÀº ¸Å´º¾ó ÆäÀÌÁöµé°ú ÁÁÀº ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö Ã¥À»
º¸±â ¹Ù¶õ´Ù. 

<sect3>UDP ÇÁ·ÎÅäÄÝ (SOCK_DGRAM)
<p>

<bf>UDP</bf>´Â »ç¿ëÀÚ µ¥ÀÌÅͱ׷¥ ÇÁ·ÎÅäÄÝ(User Datagram Protocol)ÀÌÁö¸¸
UDPÀÇ ¼Ó¼ºÀ» ½Å·ÚÇÒ ¼ö ¾ø´Â µ¥ÀÌÅͱ׷¥ ó¸®(Unreliable Datagram
Processing)·Î Á» ´õ ½±°Ô ±â¾ïÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´Ù¸¥ ¸»·Î ÇØ¼­ UDP´Â °¢
ºí·°ÀÌ °³º° ¸Þ½ÃÁö·Î Àü¼ÛµÇµµ·Ï Çã¶ôÇÏÁö¸¸ ¸Þ½ÃÁö´Â Àü¼Û Áß À¯½ÇµÉ ¼ö
ÀÖ´Ù. »ç½Ç ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ Á¾¼ÓÀûÀ¸·Î UDP ¸Þ½ÃÁöµéÀº À¯½ÇµÉ ¼ö ÀÖ°í
¿©·¯¹ø µµÂøÇÒ ¼ö Àְųª ±×µéÀÌ º¸³»Áø ¼ø¼­¿Í ´Ù¸¥ ¼ø¼­·Î µµÂøÇÒ ¼ö ÀÖ´Ù.
UDP ¸Þ½ÃÁöÀÇ Àü¼ÛÀÚ´Â ÀÚµ¿À¸·Î ¹Þ¾Ò´Ù´Â ÅëÁö(acknowledgement)¸¦ ¹ÞÁö
¾Ê´Â´Ù. ±×·¡¼­ ÀÌ·± ¹®Á¦µéÀ» °ËÃâÇÏ°í º¸ÃæÇÏ´Â °ÍÀº »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ
Äڵ忡 ÀÇÁ¸ÇÑ´Ù.  ´ÙÇེ·´°Ôµµ UDP´Â ¸Þ½ÃÁö°¡ µµÂøÇß´Ù¸é ¹ÞÀº ¸Þ½ÃÁö°¡
¼Õ»óµÈ °ÍÀÌ ¾Æ´Ï°í ¿ÏÀüÇÑ °ÍÀ̶ó°í(Áï, UDP ¸Þ½ÃÁö Á¶°¢¸¸ ¹Þ¾Ò´Ù°í)
º¸ÀåÇÑ´Ù.

UDP°¡ ÁÁÀº Á¡Àº °¡Àå ºü¸¥ ¼ÒÄÏ ÇÁ·ÎÅäÄÝÀÌ µÇ·Á°í ÇÑ´Ù´Â °ÍÀÌ´Ù. ´õ
³ª¾Æ°¡ UDP´Â "¿¬°á ¾ø´Â(connectionless)" °ÍÀÌ´Ù. À̰ÍÀº °¢ ¸Þ½ÃÁö°¡
±âº»ÀûÀ¸·Î ¸ðµç ´Ù¸¥ °Íµé°ú µ¶¸³ÀÌ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À̰Ϳ¡ ´ëÇÑ ÁÁÀº
ºñÀ¯´Â ÆíÁöÀÌ´Ù; ¿©·¯ºÐÀº µ¿ÀÏÇÑ ÁýÁÖ¼Ò·Î ¿©·¯ ÆíÁö¸¦ º¸³¾ ¼ö ÀÖÁö¸¸
°¢°¢Àº ´Ù¸¥ °Íµé°ú µ¶¸³ÀÌ¸ç ¿©·¯ºÐÀÌ ÆíÁö¸¦ º¸³¾ ¼ö ÀÖ´Â »ç¶÷ÀÇ ¼ö¿¡
´ëÇÑ Á¦ÇÑÀÌ ¾ø´Ù.

<sect3>TCP ÇÁ·ÎÅäÄÝ(SOCK_STREAM)
<p>

UDP¿Í ´Ù¸£°Ô <bf>TCP</bf>´Â ½Å·ÚÇÒ ¼ö ÀÖ°í, ¿¬°á-±â¹ÝÀÎ ÇÁ·ÎÅäÄÝÀÌ´Ù.
º¸³»Áø °¢ ºí·°Àº ¸Þ½ÃÁö·Î º¸ÀÌÁö ¾Ê°í °Ñº¸±â¿¡ Àü¼ÛÀÚ¿Í ¼ö½ÅÀÚ »çÀÌÀÇ
¿¬°áÀ» ÅëÇØ¼­ Àü¼ÛµÈ ¿¬¼ÓÀûÀÎ ¹ÙÀÌÆ®¾È¿¡¼­ µ¥ÀÌÅÍ ºí·°À¸·Î º¸ÀδÙ.
À̰ÍÀº UDP ¸Þ½Ã¡°ú ¾ÆÁÖ ´Ù¸£´Ù. ¿Ö³Ä¸é °¢ ºí·°Àº ´Ü¼øÇÏ°Ô ¹ÙÀÌÆ®
½ºÆ®¸²ÀÇ ÀϺÎÀÌ°í °¢ ºí·°À» ¹ÙÀÌÆ® ½ºÆ®¸²¿¡¼­ ÃßÃâÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ ³»´Â
°ÍÀº »ç¿ëÀÚ Äڵ忡 Á¾¼ÓÀûÀ̱⠶§¹®ÀÌ´Ù; ¸Þ½ÃÁöµéÀ» ºÐ¸®ÇÏ´Â ¸¶Å·Àº ¾ø´Ù.
´õ ³ª¾Æ°¡ ³×Æ®¿÷ ¹®Á¦µé¿¡ ´ëÇØ¼­ ¿¬°áÀº Á» ´õ ±úÁö±â ½¬¿î °ÍÀÌ°í ¿¬°áÀÇ
Á¦ÇÑµÈ °³¼öµé¸¸ÀÌ °¢ ÇÁ·Î¼¼½ºµé¿¡ ´ëÇØ¼­ µ¿½Ã¿¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº
½Å·ÚÇÒ ¼ö Àֱ⠶§¹®¿¡ TCP´Â ÀϹÝÀûÀ¸·Î UDPº¸´Ù Á» ´õ ¹«°Å¿î ¿À¹öÇìµå¸¦
°¡Áø´Ù.

±×·¯³ª TCP¿¡ °üÇÑ ¸î°¡Áö Áñ°Å¿î ³î¶ó¿î °ÍµéÀÌ Á¸ÀçÇÑ´Ù. ´Ù¼ö ¸Þ½ÃÁöµéÀÌ
¿¬°áÀ» ÅëÇØ¼­ Àü´ÞµÇ¾ú´Ù¸é, ªÀº ¶Ç´Â ¦ÀÌ ¸ÂÁö ¾ÊÀº Å©±âÀÇ ¸Þ½ÃÁöµéÀÇ
±×·ì¿¡ ´ëÇØ¼­ UDPº¸´Ù ´õ ³ªÀº ¼º´ÉÀ» ÀáÀçÀûÀ¸·Î ³»¸é¼­,  TCP´Â ±×°ÍµéÀ»
¹öÆÛ ¾È¿¡¼­ ³×Æ®¿÷ Çϵå¿þ¾î ÆÐŶ Å©±â¿¡ ´õ Àß ¸Âµµ·Ï ¹­À» ¼ö ÀÖ´Ù´Â °ÍÀÌ
ù¹øÂ°ÀÌ´Ù. ´Ù¸¥ º¸³Ê½º´Â ±â°èµé °£¿¡ ½Å·ÚÇÒ ¼ö ÀÖ´Â Á÷Á¢ ¹°¸®Àû
¸µÅ©µéÀ» »ç¿ëÇØ¼­ ±¸ÃàµÈ ³×Æ®¿÷Àº TCP ¿¬°áÀ» ½±°í È¿À²ÀûÀ¸·Î Èä³»³¾ ¼ö
ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ParaStationÀÇ "Socket Library" ÀÎÅÍÆäÀ̽º
¼ÒÇÁÆ®¿þ¾îÀÇ °æ¿ì ÀÌ·¸°Ô µÇ¾ú´Ù. ÀÌ ¼ÒÇÁÆ®¿þ¾î´Â Ç¥ÁØ TCP OS È£Ãâµé°ú °¢
ÇÔ¼ö À̸§¿¡´Ù Á¢µÎ»ç <tt>PSS</tt>¸¦ ºÙÀÌ´Â °Í¸¸ ´Ù¸¥ »ç¿ëÀÚ-·¹º§
È£ÃâµéÀ» »ç¿ëÇÑ TCP ¹®¹ý(semantics)À» Á¦°øÇÑ´Ù.

<sect2>ÀåÄ¡ ±¸µ¿±â(Device Drivers)
<p>

³×Æ®¿÷¿¡ µ¥ÀÌÅ͸¦ ½ÇÁ¦·Î ³ÖÀ» ¶§°¡, ¶Ç´Â ³×Æ®¿÷À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ²ôÁý¾î
¿Ã ¶§°¡ ¿À¸é Ç¥ÁØ À¯´Ð½º ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º´Â ÀåÄ¡ ±¸µ¿±â¶ó°í ºÒ¸®´Â
À¯´Ð½º Ä¿³ÎÀÇ ÀϺΰ¡ µÈ´Ù. UDP¿Í TCP´Â ´ÜÁö µ¥ÀÌÅ͸¸ Àü¼ÛÇÏÁö ¾Ê°í
±×µéÀº ¶ÇÇÑ »ó´çÇÑ ¾çÀÇ ¼ÒÄÏ °ü¸®ÀÇ ¿À¹öÇìµå¸¦ °®°í ÀÖ´Ù. ¿¹¸¦ µé¾î¼­
¾î¶² °ÍµéÀº ´Ù¼öÀÇ TCP Ä¿³Ø¼ÇµéÀÌ ÇϳªÀÇ ¹°¸®Àû ³×Æ®¿÷ ÀÎÅÍÆäÀ̽º¸¦
°øÀ¯ÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» °ü¸®ÇØ¾ß ÇÑ´Ù. ÀÌ¿¡ ºñÇØ¼­ Àü¿ë ³×Æ®¿÷
ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ÀåÄ¡ ±¸µ¿±â´Â ´ÜÁö ¸î°¡Áö ´Ü¼øÇÑ µ¥ÀÌÅÍ Àü¼Û ÇÔ¼öµé¸¸
±¸ÇöÇÏ¸é µÈ´Ù. ÀÌ·± ÀåÄ¡ µå¶ó¤·À̹ö ÇÔ¼öµéÀº »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­,
ÀûÀýÇÑ ÀåÄ¡¸¦ È®ÀÎÇϱâ À§Çؼ­ <tt>open()</tt>À» »ç¿ëÇÏ°í ¿ÀÇÂµÈ "ÆÄÀÏ"¿¡
´ëÇØ¼­ <tt>read()</tt>¿Í <tt>write()</tt>¿Í °°Àº ½Ã½ºÅÛ È£ÃâÀ»
»ç¿ëÇÔÀ¸·Î½á, È£ÃâµÉ ¼ö ÀÖ´Ù.  ±×·¡¼­ °¢°¢ÀÇ ±×·± ÀÛ¾÷Àº µ¥ÀÌÅÍ ºí·°À»
½Ã½ºÅÛ È£ÃâÀÇ ¿À¹öÇìµåº¸´Ù ´õ ÀÛÀº ¿À¹öÇìµå·Î Àü¼ÛÇÒ ¼ö ÀÖ´Ù. ÀÌ·±
½Ã½ºÅÛ È£ÃâÀº ¼ö½Ê ¸¶ÀÌÅ©·Î Ãʰ¡ °É¸°´Ù.

¸®´ª½º¿¡ ´ëÇÑ ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº ¾î·ÆÁö ¾Ê´Ù... ÀåÄ¡ Çϵå¿þ¾î°¡
ÀÛµ¿ÇÏ´Â ¹æ¹ýÀ» <em>Á¤È®ÇϰÔ</em> ¾Ë°í ÀÖ´Ù¸é ¸»ÀÌ´Ù. À̰ÍÀÌ ÀÛµ¿ÇÏ´Â
¹æ¹ýÀ» ¸ð¸¥´Ù¸é ÃßÃøÇÏÁö ¸»¶ó. ÀåÄ¡ µå¶óÀ̹ö¸¦ µð¹ö±ëÇÏ´Â °ÍÀº Áñ°ÌÁö
¾ÊÀº ÀÏÀÌ°í ½Ç¼öµéÀº Çϵå¿þ¾î¸¦ Å¿ö¸ÔÀ» ¼ö ÀÖ´Ù. ±×·¯³ª À̰ÍÀÌ ¿©·¯ºÐÀ»
±×·¸°Ô °ÌÁÖ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é, ¿¹¸¦ µé¾î¼­ Àü¿ë ÀÌ´õ³Ý Ä«µå¸¦ ´õ¹Ì·Î
±×·¯³ª ÀϹÝÀûÀÎ ÀÌ´õ³Ý ÇÁ·ÎÅäÄÝ ¿À¹öÇìµå ¾øÀÌ ±â°è-´ë-±â°è ºü¸¥ Á÷Á¢
¿¬°á·Î »ç¿ëÇϱâ À§Çؼ­, ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº °¡´ÉÇÑ ÀÏÀÌ µÉ ¼ö
ÀÖ´Ù. »ç½Ç Ãʱâ ÀÎÅÚ ½´ÆÛÄÄÇ»Å͵éÀÌ Çß´ø °Í°ú »ó´çÈ÷ À¯»çÇÏ´Ù.... Á» ´õ
ÀÚ¼¼ÇÑ Á¤º¸¸¦ º¸°í ½Í´Ù¸é Device Driver HOWTO¸¦ º¸¶ó.  

<sect2>»ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®(User-Level Libraries)
<p>

¿©·¯ºÐÀÌ OS ÄÚ½º¸¦ ÅÃÇß´Ù¸é Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅÍ¿¡ ´ëÇÑ »ç¿ëÀÚ-·¹º§
¾ï¼¼½º´Â Á¤È®È÷ ¿©·¯ºÐÀÌ Çѹøµµ ¹è¿î ÀûÀÌ ¾ø´Â °ÍÀÌ´Ù. ¿Ö³Ä¸é OSÀÇ ÁÖ¿ä
¸ñÀû Áß Çϳª´Â ÀåÄ¡ ¾ï¼¼½º¸¦ Á¦¾îÇÏ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·¯³ª OS È£ÃâÀº
Àû¾îµµ ¼ö½Ê ¸¶ÀÌÅ©·Î ÃÊ ¿À¹öÇìµå°¡ °É¸°´Ù. ´ÜÁö 3 ¸¶ÀÌÅ©·Î ÃÊ µ¿¾È¿¡
±âº» ³×Æ®¿÷ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Â TTL_PAPERS¿Í °°Àº Ä¿½ºÅÒ ³×Æ®¿÷
Çϵå¿þ¾îÀÇ °æ¿ì ±×·± OS È£Ãâ ¿À¹öÇìµå´Â ÂüÀ» ¼ö ¾ø´Â °ÍÀÌ´Ù. ±×·±
¿À¹öÇìµå¸¦ ÇÇÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» Á÷Á¢
¾ï¼¼½ºÇÏ´Â »ç¿ëÀÚ-·¹º§ ÄÚµå - »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸® - ¸¦ °¡Áö´Â °ÍÀÌ´Ù.
±×·¡¼­ »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®°¡ Çϵå¿þ¾î¸¦ Á÷Á¢ ¾ï¼¼½ºÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº
¹«¾ùÀΰ¡, ÇÏÁö¸¸ ÀåÄ¡ ¾ï¼¼½º ±ÇÇÑ¿¡ ´ëÇÑ OS Á¦¾î¿Í ŸÇùÇÏÁö ¾Ê´Â ¹æ¹ýÀº
¹«¾ùÀΰ¡¿Í °°Àº °ÍÀÌ Áú¹®ÀÌ µÉ °ÍÀÌ´Ù.

ÀüÇüÀûÀÎ ½Ã½ºÅÛ¿¡¼­ »ç¿ëÀÚ-·¹º§ ¶óÀ̺귯¸®°¡ Çϵå¿þ¾î ÀåÄ¡ ·¹Áö½ºÅ͸¦
Á÷Á¢ ¾ï¼¼½ºÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù:

<enum>
<item>»ç¿ëÀÚ ÇÁ·Î±×·¥ ½ÃÀÛ¿¡¼­ ÀåÄ¡ ·¹Áö½ºÅ͸¦ Æ÷ÇÔÇÏ´Â ¸Þ¸ð¸® ÁÖ¼Ò
°ø°£À» »ç¿ëÀÚ ÇÁ·Î¼¼½º °¡»ó ¸Þ¸ð¸® ¸ÊÀ¸·Î ¸ÊÇÎÇÏ´Â OS È£ÃâÀ» »ç¿ëÇÑ´Ù.
¾î¶² ½Ã½ºÅ۵鿡¼­´Â <tt>mmap()</tt> È£Ãâ(¼½¼Ç <ref
id="sec_MemoryMapCall" name="¸Þ¸ð¸® ¸Ê È£Ãâ"> ¿¡¼­ ¸ÇóÀ½ ¾ð±ÞµÊ)ÀÌ I/O
ÀåÄ¡µéÀÇ ¹°¸®Àû ¸Þ¸ð¸® ÆäÀÌÁö ÁÖ¼ÒµéÀÇ Ç¥ÇöÇϴ Ư¼ö ÆÄÀÏÀ» ¸ÊÇÎÇÏ´Â µ¥
»ç¿ëµÉ ¼ö ÀÖ´Ù.  ¶Ç´Â ÀÌ·± ±â´ÉÀ» ¼öÇàÇÏ´Â ÀåÄ¡ ±¸µ¿±â¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀº
»ó´ëÀûÀ¸·Î ½±´Ù.  ´õ ³ª¾Æ°¡ ÀÌ ÀåÄ¡ ±¸µ¿±â´Â ÇÊ¿äÇÑ Æ¯Á¤ ÀåÄ¡
·¹Áö½ºÅ͵éÀ» ´ã°í ÀÖ´Â ÆäÀÌÁö(µé)À» ¸ÊÇÎÇÏ´Â °Í¸¸À¸·Î ¾ï¼¼½º¸¦ Á¦¾îÇÒ ¼ö
ÀÖ´Ù. ±×·¡¼­ OS ¾ï¼¼½º Á¦¾î¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù.

<item>¸ÊÇÎµÈ Áּҵ鿡 ´Ü¼øÇÏ°Ô ·ÎµùÇϰųª ÀúÀåÇÔÀ¸·Î½á OS È£Ãâ ¾øÀÌ ÀåÄ¡
·¹Áö½ºÅ͵éÀ» ¾ï¼¼½º. ¿¹¸¦ µé¾î¼­ <tt>*((char *) 0x1234) = 5;</tt>´Â
¸Þ¸ð¸® À§Ä¡ 1234(16Áø¼ö)¿¡´Ù ¹ÙÀÌÆ® °ª 5¸¦ ÀúÀåÇÒ °ÍÀÌ´Ù.
</enum>

´ÙÇེ·´°Ôµµ ÀÎÅÚ 386(±×¸®°í ȣȯ ÇÁ·Î¼¼½ºµé)¿¡ ´ëÇÑ ¸®´ª½º°¡ Á» ´õ ³ªÀº
¼Ö·ç¼ÇÀ» Á¦°øÇÏ´Â ÀÏÀÌ ¹ú¾îÁ³´Ù:

<enum>
<item>±ÇÇÑÀÌ ÀÖ´Â ÇÁ·Î¼¼½º·ÎºÎÅÍ <tt>ioperm()</tt> OS È£ÃâÀ» 
»ç¿ëÇÔÀ¸·Î½á ÀåÄ¡ ·¹Áö½ºÅÍ¿¡ ´ëÀÀÇÏ´Â Á¤È®ÇÑ I/O Æ÷Æ® Áּҵ鿡
¾ï¼¼½ºÇÏ´Â ÆÛ¹Ì¼ÇÀ» ¾ò´Â´Ù.  ¶Ç´Â ¸®´ª½º¿¡ ´ëÇÑ ÆÐÄ¡<url
url="http://garage.ecn.purdue.edu/~papers/giveioperm.html">À» »ç¿ëÇÏ¿©
µ¶¸³µÈ ±ÇÇÑÀÖ´Â »ç¿ëÀÚ ÇÁ·Î¼¼½º(Áï, "¸ÞŸ OS")¿¡ ÀÇÇØ¼­ ÆÛ¹Ì¼ÇÀÌ °ü¸®µÉ
¼ö ÀÖ´Ù.

<item>
386 Æ÷Æ® I/O ¸í·É¾îµéÀ» »ç¿ëÇØ¼­ OS È£Ãâ ¾øÀÌ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ» ¾ï¼¼½º.
</enum>
<p>

´Ù¼öÀÇ I/O ÀåÄ¡µéÀÌ ´ÜÀÏ ÆäÀÌÁö ¾È¿¡ ±×µéÀÇ ·¹Áö½ºÅ͸¦ °®´Â °ÍÀÌ
ÀϹÝÀûÀ̱⠶§¹®¿¡  ÀÌ µÎ¹øÂ° ¼Ö·ç¼ÇÀÌ ´õ ¼±È£µÈ´Ù. ÀÌ·± °æ¿ì ù¹øÂ°
±â¼úÀº ÀǵµµÈ °Í°ú µ¿ÀÏÇÑ ÆäÀÌÁö¿¡ À§Ä¡ÇÏ°Ô µÈ ´Ù¸¥ ÀåÄ¡ ·¹Áö½ºÅ͵éÀ»
¾ï¼¼½ºÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â º¸È£¸¦ Á¦°øÇÏÁö ¸øÇÒ °ÍÀÌ´Ù. ¹°·Ð 386 Æ÷Æ® I/O
¸í·ÉµéÀÌ C·Î ÄÚµùµÉ ¼ö ¾ø´Ù´Â °ÍÀÌ ´ÜÁ¡ÀÌ´Ù - ´ë½Å ¿©·¯ºÐÀº ¾à°£ÀÇ
¾î¼Àºí¸® Äڵ带 »ç¿ëÇÒ Çʿ䰡 »ý±æ °ÍÀÌ´Ù. ¹ÙÀÌÆ® °ªÀÇ Æ÷Æ® ÀÔ·ÂÀ» À§ÇÑ
GCC-·¦ÇεÈ(C ÇÁ·Î±×·¥¿¡¼­ »ç¿ë °¡´ÉÇÑ) ÀζóÀÎ ¾î¼Àºí¸® ÄÚµå ÇÔ¼ö´Â
´ÙÀ½°ú °°´Ù:

<code>
  extern inline unsigned char
  inb(unsigned short port)
  {
      unsigned char _v;
  __asm__ __volatile__ ("inb %w1,%b0"
                        :"=a" (_v)
                        :"d" (port), "0" (0));
      return _v;
  }
</code>

ºñ½ÁÇÏ°Ô ¹ÙÀÌÆ® Æ÷Æ® Ãâ·ÂÀ» À§ÇÑ GCC-·¦ÇÎµÈ ÄÚµå´Â ´ÙÀ½°ú °°´Ù:

<code>
extern inline void
outb(unsigned char value,
unsigned short port)
{
__asm__ __volatile__ ("outb %b0,%w1"
                      :/* no outputs */
                      :"a" (value), "d" (port));
}
</code>

<!-- ------------------------------------------------------------- -->
<sect1>PVM (º´·Ä °¡»ó ±â°è, Parallel Virtual Machine)
<!-- ------------------------------------------------------------- -->
<p>

PVM(º´·Ä °¡»ó ±â°è)´Â ÀϹÝÀûÀ¸·Î ¼ÒÄÏ À§¿¡ ±¸ÇöµÈ, ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö
ÀÖ°í ÀÌ½ÄµÉ ¼ö ÀÖ´Â ¸Þ½ÃÁö Àü´Þ ¶óÀ̺귯¸®ÀÌ´Ù. À̰ÍÀº ºÐ¸íÈ÷ ¸Þ½ÃÁö
Àü´Þ Ŭ·¯½ºÅÍ º´·Ä ÄÄÇ»ÆÃÀ» À§ÇÑ »ç½Ç»óÀÇ Ç¥ÁØÀ¸·Î ÀÚ¸®¸¦ Àâ¾Ò´Ù.

PVMÀº ´ÜÀÏ-ÇÁ·Î¼¼¼­¿Í SMP ¸®´ª½º ±â°èµé, ±×¸®°í ¼ÒÄÏ-°¡´É ³×Æ®¿÷(¿¹,
SLIP, PLIP, ÀÌ´õ³Ý, ATM)¿¡ ÀÇÇØ¼­ ¸µÅ©µÈ ¸®´ª½º ±â°èµéÀÇ
Ŭ·¯½ºÅ͸¦ Áö¿øÇÑ´Ù. »ç½Ç PVMÀº ´Ù¾çÇÑ ¼­·Î ´Ù¸¥ ŸÀÔµéÀÇ ÇÁ·Î¼¼¼­µé,
¼³Á¤, ±×¸®°í ¹°¸®ÀûÀÎ ³×Æ®¿÷µéÀÌ »ç¿ëµÈ ±â°èµé ±×·ì - <bf>À̱âÁ¾
Ŭ·¯½ºÅÍ</bf> -¿¡¼­ º´·Ä Ŭ·¯½ºÅͷνá ÀÎÅͳÝÀ» ÅëÇØ¼­ ¸µÅ©µÈ ±â°èµéÀ»
ó¸®ÇÏ´Â ¹üÀ§±îÁö ÀÛµ¿ÇÑ´Ù. PVMÀº ¶ÇÇÑ Å¬·¯½ºÅ͸¦ ÅëÇØ¼­ º´·Ä ÀÛ¾÷
Á¦¾î¸¦ À§ÇÑ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. À̵é Áß °¡Àå ÁÁÀº °Í, PVMÀº ¿À·§µ¿¾È
ÀÚÀ¯·Ó°Ô »ç¿ë °¡´ÉÇÏ¿´°í(ÇöÀç´Â <url
url="http://www.epm.ornl.gov/pvm/pvm_home.html">¿¡ ÀÖÀ½) ¸¹Àº ÇÁ·Î±×·¡¹Ö
¾ð¾î, ¾îÇø®ÄÉÀÌ¼Ç ¶óÀ̺귯¸®, µð¹ö±ë Åø µî°ú °°Àº °Í¿¡, ±×°ÍÀ» ±×µéÀÇ
"ÀÌ½Ä °¡´ÉÇÑ ¸Þ½ÃÁö-Àü´Þ Ÿ°Ù ¶óÀ̺귯¸®"·Î »ç¿ëÇÏ¿©, À̸£°Ô µÇ¾ú´Ù.
³×Æ®¿÷ ´º½º ±×·ì <htmlurl url="news:comp.parallel.pvm"
name="comp.parallel.pvm">ÀÌ ÀÖ´Ù.

±×·¯³ª PVM ¸Þ½ÃÁö Àü´Þ È£ÃâµéÀº ÀϹÝÀûÀ¸·Î ÀÌ¹Ì ³ôÀº Áöü¸¦ °¡Áö´Â Ç¥ÁØ
¼ÒÄÏ ÀÛ¾÷µé¿¡ ½É°¢ÇÑ ¿À¹öÇìµå¸¦ Ãß°¡ÇÑ´Ù. ´õ ³ª°¡¾Æ°¡ ¸Þ½ÃÁö Çڵ鸵
È£Ãâµé ÀÚ½ÅÀº Ưº°È÷ "ÇÁ·»µé¸®"ÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» ÀÌ·çÁö ¾Ê¾Ò´Ù.

¼½¼Ç <ref id="sec_ExampleAlgorithm" name = "¿¹Á¦ ¾Ë°í¸®Áò">¿¡¼­ ¸ÇóÀ½
¼³¸íµÈ °Í°ú µ¿ÀÏÇÑ ÆÄÀÌ(pi) °è»ê ¿¹Á¦¸¦ »ç¿ëÇØ¼­ ¸¸µç, C¿Í PVM
¶óÀ̺귯¸® È£ÃâÀ» »ç¿ëÇÑ ¹öÀüÀº ´ÙÀ½°ú °°´Ù:

<code>
#include <stdlib.h>
#include <stdio.h>
#include <pvm3.h>

#define NPROC	4

main(int argc, char **argv)
{
  register double lsum, width;
  double sum;
  register int intervals, i; 
  int mytid, iproc, msgtag = 4;
  int tids[NPROC];  /* array of task ids */

  /* enroll in pvm */
  mytid = pvm_mytid();

  /* Join a group and, if I am the first instance,
     iproc=0, spawn more copies of myself
  */
  iproc = pvm_joingroup("pi");

  if (iproc == 0) {
    tids[0] = pvm_mytid();
    pvm_spawn("pvm_pi", &argv[1], 0, NULL, NPROC-1, &ero;tids[1]);
  }
  /* make sure all processes are here */
  pvm_barrier("pi", NPROC);

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

  lsum = 0.0;
  for (i = iproc; i<intervals; i+=NPROC) {
    register double x = (i + 0.5) * width;
    lsum += 4.0 / (1.0 + x * x);
  }
  
  /* sum across the local results & scale by width */
  sum = lsum * width;
  pvm_reduce(PvmSum, &sum, 1, PVM_DOUBLE, msgtag, "pi", 0);

  /* have only the console PE print the result */
  if (iproc == 0) {
    printf("Estimation of pi is %f\n", sum);
  }

  /* Check program finished, leave group, exit pvm */
  pvm_barrier("pi", NPROC);
  pvm_lvgroup("pi");
  pvm_exit();
  return(0);
}
</code>

<!-- ------------------------------------------------------------- -->
<sect1>MPI (¸Þ½ÃÁö Àü´Þ ÀÎÅÍÆäÀ̽º, Message Passing Interface)<label
id="sec_MPI">
<!-- ------------------------------------------------------------- -->
<p>

PVMÀº »ç½Ç»ó Ç¥ÁØ ¸Þ½ÃÁö-Àü´Þ ¶óÀ̺귯¸®ÀÎ ¹Ý¸é¿¡ MPI(¸Þ½ÃÁö Àü´Þ
ÀÎÅÍÆäÀ̽º)´Â »ó´ëÀûÀ¸·Î »õ·Î¿î °ø½Ä Ç¥ÁØÀÌ´Ù. MPI Ç¥ÁØ¿¡ ´ëÇÑ È¨
ÆäÀÌÁö´Â <url url="http://www.mcs.anl.gov:80/mpi/">ÀÌ¸ç ´º½º±×·ìÀº
<htmlurl url="news:comp.paralle.mpi" name="comp.paralle.mpi">ÀÌ´Ù.  

±×·¯³ª MPI¸¦ ³íÀÇÇϱâ Àü¿¡ ÀúÀÚ´Â Áö³­ ¸î³â µ¿¾È ÀϾ PVM ´ë MPI Á¾±³
ÀüÀï¿¡ ´ëÇØ¼­ Á¶±Ý ¾ê±âÇÏ°í ½ÍÀº Ãæµ¿À» ´À³¤´Ù. ´ÙÀ½Àº Â÷ÀÌÁ¡µé¿¡ ´ëÇØ¼­
»ó´ëÀûÀ¸·Î Æí°ß¾øÀÌ ¿ä¾àÇÏ·Á°í ½ÃµµÇÑ °ÍÀÌ´Ù:

<descrip>
<tag>½ÇÇà Á¦¾î ȯ°æ(Execution control environment).</tag>
´Ü¼øÇÏ°Ô ¾ê±âÇØ¼­ MPI´Â ½ÇÇà Á¦¾î ȯ°æÀÌ ¾î¶»°Ô ±¸ÇöµÇ´Â°¡¿Í ±¸ÇöµÉ ¼ö
ÀÖ´ÂÁö ¾ø´ÂÁö¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀº ¹Ý¸é PVMÀº ½ÇÇà Á¦¾î ȯ°æ Çϳª¸¦ °®´Â´Ù.
±×·¡¼­ PVM ÇÁ·Î±×·¥ ½ÇÇàÀ» ½ÃÀÛÇÏ´Â °Í°ú °°Àº ÀϵéÀº ¸ðµç °÷¿¡¼­
µ¿ÀÏÇÏ°Ô ÀÌ·ç¾îÁö´Â ¹Ý¸é MPIÀÇ °æ¿ì À̰ÍÀº ¾î¶² ±¸ÇöÀÌ »ç¿ëµÇ´Â°¡¿¡
µû¶ó¼­ ´Ù¸¦ ¼ö ÀÖ´Ù. 

<tag>À̱âÁ¾ Ŭ·¯½ºÅÍ Áö¿ø(Support for heterogeneous clusters).</tag>
PVMÀº ¿öÅ©½ºÅ×ÀÌ¼Ç »çÀÌŬ-Ȱ¿ë ¼¼°è¿¡¼­ ÀÚ¶ó³µ°í ±×·¡¼­ Á÷Á¢ ±â°è¿Í ¿î¿µ
üÁ¦ÀÇ À̱âÁ¾ È¥ÇÕÀ» °ü¸®ÇÑ´Ù. ¹Ý¸é¿¡ MPI´Â Ÿ°ÙÀÌ MPP(°Å´ëÇÑ º´·Ä
ÇÁ·Î¼¼¼­)À̰ųª °ÅÀÇ µ¿ÀÏÇÑ ¿öÅ©½ºÅ×À̼ǵéÀÇ Àü¿ë Ŭ·¯½ºÅÍÀÏ °ÍÀ̶ó°í
°¡Á¤ÇÑ´Ù. 
 
<tag>ºÎ¾ý ½ÌÅ©´ë ÁõÈıº(Kitchen sink syndrome).</tag>
PVM´Â MPI 2.0ÀÌ ÇÏÁö ¸øÇÏ´Â ¸ñÀûÀÇ ÅëÀÏÀ» Áõ¸íÇÑ´Ù. »õ·Î¿î MPI 2.0
Ç¥ÁØÀº ±âº» ¸Þ½ÃÁö Àü´Þ ¸ðµ¨À» ¹þ¾î³ª´Â ¸¹Àº ±â´ÉµéÀ» ´ã°í ÀÖ´Ù -
RMA(¸®¸ðÆ® ¸Þ¸ð¸® ¾ï¼¼½º, Remote Memory Access)¿Í º´·Ä ÆÄÀÏ I/O¿Í °°Àº
°Íµé. ÀÌ·± °ÍµéÀÌ À¯¿ëÇѰ¡? ¹°·Ð ±×µéÀº ±×·¸´Ù... ±×·¯³ª MPI 2.0À»
¹è¿ì´Â °ÍÀº ¿ÏÀüÈ÷ »õ·Î¿î ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¹è¿ì´Â °Í°ú °ÅÀÇ ¶È°°´Ù.

<tag>»ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ¼³°è(User interface design).</tag>
MPI´Â PVMÀ» µû¶ó ¼³°èµÇ¾ú°í ºÐ¸íÈ÷ ±×°ÍÀ¸·ÎºÎÅÍ ¹è¿ü´Ù. MPI´Â ´õ
´Ü¼øÇÏ°í ´õ È¿°úÀûÀÎ ¹öÆÛ Çڵ鸵°ú ¸Þ½ÃÁö·Î »ç¿ëÀÚ-Á¤ÀÇ µ¥ÀÌÅÍ ±¸Á¶°¡
Àü´ÞµÇµµ·Ï ÇÏ´Â °í¼öÁØ Ãß»óÈ­¸¦ Á¦°øÇÑ´Ù.

<tag>¹ýÀÇ È¿·Â(The force of law).</tag>
³» °è»ê¿¡ ÀÇÇϸé MPI¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù PVMÀ» »ç¿ëÇϵµ·Ï ¼³°èµÈ °ÍµéÀÌ
¾ÆÁ÷ ¾ÆÁÖ ¸¹ÀÌ ÀÖ´Ù; ±×·¯³ª ±×°ÍµéÀ» MPI·Î Æ÷ÆÃÇÏ´Â °ÍÀº ½±´Ù. ±×¸®°í
MPI°¡ ³Î¸® Áö¿øµÇ´Â Çü½ÄÀûÀΠǥÁØ¿¡ ÀÇÇØ¼­ Áö¿øµÈ´Ù´Â »ç½ÇÀº MPI¸¦
»ç¿ëÇÏ´Â °ÍÀº ¸¹Àº ±â°üµéÀÇ °æ¿ì, Á¤Ã¥»óÀÇ ¹®Á¦ÀÌ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
</descrip>

°á·ÐÀÌ ³µ´Â°¡? ±Û½ê ¸®´ª½º ½Ã½ºÅÛµé·Î ¸¸µç Ŭ·¯½ºÅÍ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ´Â,
ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ°í µ¶¸³ÀûÀ¸·Î °³¹ßµÈ MPI ¹öÀüÀº Àû¾îµµ ¼¼°¡Áö
Á¸ÀçÇÑ´Ù(±×¸®°í ³ª´Â ±×°Íµé Áß Çϳª¸¦ ¿©±â¿¡¼­ ¼³¸íÇÑ´Ù):

<itemize>

<item>LAM(±Ù°Å¸® ¿µ¿ª ¸ÖƼ ÄÄÇ»ÅÍ, Local Area Multicomputer)´Â MPI 1.1
Ç¥ÁØÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ °ÍÀÌ´Ù. À̰ÍÀº MPI ÇÁ·Î±×·¥µéÀÌ °³º° ¸®´ª½º
½Ã½ºÅÛ¾ÈÀ̳ª UDP/TCP ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¸®´ª½º ½Ã½ºÅÛ Å¬·¯½ºÅ͸¦
ÅëÇØ¼­ ½ÇÇàµÇ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ÀÌ ½Ã½ºÅÛÀº ´Ü¼øÇÑ ½ÇÇà Á¦¾î ±â´ÉµéÀ»
´ã°í ÀÖÀ¸¸ç  ´Ù¾çÇÑ ÇÁ·Î±×·¥ °³¹ß°ú µð¹ö±ë µµ¿ì¹Ì(aids)¸¦ °¡Áö°í ÀÖ´Ù.
À̰ÍÀº ´ÙÀ½ <url url="http://www.osc.edu/lam.html">
¼­ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

<item>MPICH(MPI Ä«¸á·¹¿Â, CHameleon)Àº MPI 1.1 Ç¥ÁØÀÇ À̽ļºÀÌ ³ôÀº
¿ÏÀüÇÑ ±¸ÇöÀ¸·Î½á °í¾ÈµÇ¾ú´Ù. LAN°ú °°ÀÌ À̰ÍÀº °³º° ¸®´ª½º ½Ã½ºÅÛÀ̳ª
UDP/TCP ¼ÒÄÏ Åë½ÅÀ» »ç¿ëÇÏ´Â ¸®´ª½º ½Ã½ºÅ۵鿡 °ÉÃļ­ MPI ÇÁ·Î±×·¥µéÀÌ
½ÇÇàµÇµµ·Ï Çã¿ëÇÑ´Ù. ±×·¯³ª È¿À²ÀûÀÌ°í ½±°Ô Ÿ°ÙÀ» ¹Ù²Ü ¼ö ÀÖ´Â ±¸ÇöÀ»
Á¦°øÇÔÀ¸·Î½á ¸í¹éÇÏ°Ô MPI¸¦ ÁõÁøÇÑ °ÍÀÌ ±× ÀåÁ¡ÀÌ´Ù. ÀÌ MPI ±¸ÇöÀ»
Æ÷ÆÃÇϱâ À§Çؼ­ "ä³Î ÀÎÅÍÆäÀ̽º(channel interface)"ÀÇ ´Ù¼¸°¡Áö ÇÔ¼öµéÀ»
±¸ÇöÇϰųª Á» ´õ ³ªÀº ¼º´ÉÀ» À§Çؼ­ ¿ÏÀüÇÑ MPICH ADI(Ãß»ó ÀåÄ¡
ÀÎÅÍÆäÀ̽º, Abstract Device Interface)¸¦ ±¸ÇöÇÑ´Ù. MPICH, ±×¸®°í À̰Ϳ¡
´ëÇÑ °Í°ú Æ÷ÆÃ¿¡ °üÇÑ ¸¹Àº Á¤º¸µéÀÌ <url
url="http://www.mcs.anl.gov/mpi/mpich/">¿¡ ÀÖ´Ù.

<item>AFMPI(ÁýÇÕ ÇÔ¼ö MPI, Aggregate Function MPI)´Â MPI 2.0 Ç¥ÁØ ±¸ÇöÀÇ
ºÎºÐ ÁýÇÕÀÌ´Ù. À̰ÍÀº ³»°¡ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. AFAPI À§¿¡ ¸¸µé¾îÁ³°í
³·Àº-Áöü½Ã°£ ÁýÇÕ(collective) Åë½Å ÇÔ¼öµé°ú RMAµéÀ» º¸¿©ÁÖµµ·Ï
°í¾ÈµÇ¾ú°í ±×·¡¼­ MPI µ¥ÀÌÅÍ Å¸ÀÔµé, Åë½ÅÀÚµé(communicators)µî¸¸À»
Á¦°øÇÑ´Ù. À̰ÍÀº °³º° ¸®´ª½º ½Ã½ºÅÛÀ̳ª AFAPI-°¡´É ³×Æ®¿÷ Çϵå¿þ¾î¿¡
ÀÇÇØ¼­ ¿¬°áµÈ Ŭ·¯¼­ÅÍ¿¡ °áÃļ­ MPI¸¦ »ç¿ëÇÑ C ÇÁ·Î±×·¥µéÀ» Çã¶ôÇÑ´Ù.
À̰ÍÀº <url url="http://garage.ecn.purdue.edu/~papers/">¿¡¼­ ÀÚÀ¯·Ó°Ô
¾òÀ» ¼ö ÀÖ´Ù.
</itemize>

À̵é MPI ±¸Çö¹°µéÁß ¾î¶² °ÍÀ» ¾²´ø °£¿¡ ´ëºÎºÐÀÇ °ø¿ë Åë½Å ŸÀÔµéÀ»
¼öÇàÇÏ´Â °ÍÀº ¾ÆÁÖ ´Ü¼øÇÏ´Ù.

±×·¯³ª MPI 2.0Àº, À̵é Áß¿¡ Çϳª¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Ó°¡ MPI¿Í
°°Àº ´Ù¸¥ ÄÚµù ½ºÅ¸ÀϵéÀ» ÀνÄÇÏÁö ¸øÇÒ Á¤µµ·Î ÃæºÐÈ÷ ¼­·Î ´Ù¸¥ ¿©·¯°¡Áö
Åë½Å ÆÐ·¯´ÙÀÓµéÀ» ¼­·Î ¿¬µ¿½ÃŲ´Ù. ±×·¡¼­ ´Ü ÇϳªÀÇ ¿¹Á¦ ÇÁ·Î±×·¥À»
Á¦°øÇÏ´Â °Íº¸´Ù MPI°¡ Áö¿øÇÏ´Â ±âº»ÀûÀ¸·Î ¼­·Î ´Ù¸¥ Åë½Å ÆÐ·¯´ÙÀÓµé
°¢°¢ÀÇ ¿¹Á¦¸¦ °¡Áö´Â °ÍÀÌ À¯¿ëÇÏ´Ù. ¾Æ·¡¿¡ ³ª¿À´Â ¸ðµç ¼¼°¡Áö
ÇÁ·Î±×·¥µéÀº ÀÌ HOWTO¸¦ ÅëÇØ¼­ »ç¿ëµÇ´Â PiÀÇ °ªÀ» ±¸ÇÏ´Â, µ¿ÀÏÇÑ ±âº»
¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ´Ù.

°¢ ÇÁ·Î¼¼¼­°¡ ±×°ÍÀÇ ºÎºÐÇÕÀ» ÃÑÇÕÀ» ±¸ÇÏ°í ±× °á°ú¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î¼¼¼­
0¹ø¿¡°Ô Àü´ÞÇϱâ À§Çؼ­ ±âº» MPI ¸Þ½ÃÁö-Àü´Þ È£ÃâµéÀ» »ç¿ëÇϴ ù¹øÂ°
MPI ÇÁ·Î±×·¥:

<code>
#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>

main(int argc, char **argv)
{
  register double width;
  double sum, lsum;
  register int intervals, i; 
  int nproc, iproc;
  MPI_Status status;

  if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1);
  MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc);
  MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc);
  intervals = atoi(argv[1]);
  width = 1.0 / intervals;
  lsum = 0;
  for (i=iproc; i<intervals; i+=nproc) {
    register double x = (i + 0.5) * width;
    lsum += 4.0 / (1.0 + x * x);
  }
  lsum *= width;
  if (iproc != 0) {
    MPI_Send(&ero;lbuf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
  } else {
    sum = lsum;
    for (i=1; i<nproc; ++i) {
      MPI_Recv(&ero;lbuf, 1, MPI_DOUBLE, MPI_ANY_SOURCE,
               MPI_ANY_TAG, MPI_COMM_WORLD, &ero;status);
      sum += lsum;
    }
    printf("Estimation of pi is %f\n", sum);
  }
  MPI_Finalize();
  return(0);
}
</code>

µÎ¹øÂ° MPI ¹öÀüÀº ÁýÇÕÀûÀÎ(collective) Åë½Å(ÀÌ Æ¯º°ÇÑ ¾îÇø®ÄÉÀ̼ÇÀÇ
°æ¿ì À̰ÍÀº °¡Àå ÀûÀýÇÏ´Ù):

<code>
#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>

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

  if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1);
  MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc);
  MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc);
  intervals = atoi(argv[1]);
  width = 1.0 / intervals;
  lsum = 0;
  for (i=iproc; i<intervals; i+=nproc) {
    register double x = (i + 0.5) * width;
    lsum += 4.0 / (1.0 + x * x);
  }
  lsum *= width;
  MPI_Reduce(&ero;lsum, &ero;sum, 1, MPI_DOUBLE,
             MPI_SUM, 0, MPI_COMM_WORLD);
  if (iproc == 0) {
    printf("Estimation of pi is %f\n", sum);
  }
  MPI_Finalize();
  return(0);
}
</code>

¼¼¹øÂ° MPI ¹öÀüÀº °¢ ÇÁ·Î¼¼¼­°¡ ÀÚ½ÅÀÇ ·ÎÄà <tt>lsum</tt>¸¦ ÇÁ·Î¼¼¼­
0¹øÀÇ <tt>sum</tt>·Î ´õÇϱâ À§Çؼ­ MPI 2.0 RMA ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÑ´Ù.

<code>
#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>

main(int argc, char **argv)
{
  register double width;
  double sum = 0, lsum;
  register int intervals, i; 
  int nproc, iproc;
  MPI_Win sum_win;

  if (MPI_Init(&ero;argc, &ero;argv) != MPI_SUCCESS) exit(1);
  MPI_Comm_size(MPI_COMM_WORLD, &ero;nproc);
  MPI_Comm_rank(MPI_COMM_WORLD, &ero;iproc);
  MPI_Win_create(&ero;sum, sizeof(sum), sizeof(sum),
                 0, MPI_COMM_WORLD, &ero;sum_win);
  MPI_Win_fence(0, sum_win);
  intervals = atoi(argv[1]);
  width = 1.0 / intervals;
  lsum = 0;
  for (i=iproc; i<intervals; i+=nproc) {
    register double x = (i + 0.5) * width;
    lsum += 4.0 / (1.0 + x * x);
  }
  lsum *= width;
  MPI_Accumulate(&ero;lsum, 1, MPI_DOUBLE, 0, 0,
                 1, MPI_DOUBLE, MPI_SUM, sum_win);
  MPI_Win_fence(0, sum_win);
  if (iproc == 0) {
    printf("Estimation of pi is %f\n", sum);
  }
  MPI_Finalize();
  return(0);
}
</code>

MPI 2.0 RMA ¸ÞÄ«´ÏÁòÀº, ¼­·Î ´Ù¸¥ ¸Þ¸ð¸® À§Ä¡µé¿¡ °ÅÁÖÇÏ´Â ´Ù¾çÇÑ
ÇÁ·Î¼¼¼­µéÀ§ÀÇ ´ëÀÀÇÏ´Â µ¥ÀÌÅÍ ±¸Á¶ÀÇ ÀÓÀÇÀÇ ÀáÀçÀû ¹®Á¦Á¡µéÀ» ¾ÆÁÖ Àß
±Øº¹ÇÑ´Ù´Â Á¡À» ÁÖ¸ñÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. À̰ÍÀº, º£À̽º ÁÖ¼Ò¸¦
ÀǹÌÇÏ´Â "â(window)"¸¦ ÂüÁ¶ÇÏ´Â °Í°ú °æ°è ÃÊ¿ù ¾ï¼¼½º(out-of-bound
access)¿¡ ´ëÇÑ º¸È£¿Í ±×¸®°í ÆòµîÇÑ ÁÖ¼Ò Å©±â Á¶Àý(even address
scaling)¿¡ ÀÇÇØ¼­ °¡´ÉÇÏ´Ù. RMA 󸮴 ´ÙÀ½
<tt>MPI_Win_fence</tt> ÀÌÀü±îÁö ¿¬±âµÉ ¼ö ÀÖ´Ù´Â »ç½Ç¿¡
ÀÇÇØ¼­ µµ¿òÀ» ¹Þ´Â´Ù. °£´ÜÈ÷ ¸»Çؼ­ RMA ¸ÞÄ«´ÏÁòÀº ºÐ»ê °øÀ¯
¸Þ¸ð¸®¿Í ¸Þ½ÃÁö Àü´Þ °£ÀÇ ÀÌ»óÇÑ Á¶ÇÕ(strange cross)À̶ó°í ¸»ÇÒ ¼öµµ
ÀÖ°ÚÁö¸¸ ÀáÀçÀûÀ¸·Î ¾ÆÁÖ È¿À²ÀûÀÎ Åë½ÅÀ» »ý¼ºÇÏ´Â ¾ÆÁÖ ±ú²ýÇÑ
ÀÎÅÍÆäÀ̽ºÀÌ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>AFAPI (ÁýÇÕ ÇÔ¼ö API, Aggregate Function API)
<!-- ------------------------------------------------------------- -->
<p>

PVM, MPI µî°ú ´Ù¸£°Ô AFAPI(ÁýÇÕ ÇÔ¼ö ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥ ÀÎÅÍÆäÀ̽º;
Aggregate Function Application Program Interface)´Â ÇöÁ¸ÇÏ´Â ³×Æ®¿÷
Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î À§¿¡ ³õÀÎ Æ÷ÆÃ°¡´ÉÇÑ Ãß»ó ÀÎÅÍÆäÀ̽º¸¦ ±¸ÃàÇÏ´Â
½Ãµµ·Î½á ÀÏ»ýÀ» ½ÃÀÛÇÏÁö ¾Ê¾Ò´Ù. ±×·¯±â º¸´Ù´Â AFAPI´Â PAPERS (º´·Ä
½ÇÇà°ú ºü¸¥ µ¿±âÈ­¸¦ À§ÇÑ ÆÛµà ¾Æ´äÅÍ; Purdue's Adapter for Parallel
Execution and Rapid Synchronization; <url
url="http://garage.ecn.purdue.edu/~papers/"> ÂüÁ¶)¿¡ ´ëÇÑ
Çϵå¿þ¾î-Á¾¼ÓÀûÀÎ ·Î¿ì-·¹º§ Áö¿ø ¶óÀ̺귯¸®·Î½á ½ÃÀÛÇÏ¿´´Ù.

PAPERS´Â <ref id="sec_NetworkHardware" name="³×Æ®¿÷ Çϵå¿þ¾î">¿¡¼­ 
¾à°£ ³íÀǵǾú´Ù; À̰ÍÀº Áöü½Ã°£ÀÌ ¾à ¼ö ¸¶ÀÌÅ©·Î
Ãʵ¿¾ÈÀÎ °ø¿ë µµ¸ÞÀÎ ¼³°è Ä¿½ºÅÒ ÁýÇÕ ÇÔ¼ö ³×Æ®¿÷ÀÌ´Ù. ±×·¯³ª ÇöÁ¸ÇÏ´Â
½´ÆÛÄÄÇ»Å͵麸´Ù ÄÄÆÄÀÏ·¯ ±â¼ú¿¡¼­ ´õ ³ªÀº Ÿ°ÙÀÌ µÉ ¼ö ÀÖ´Â
½´ÆÛÄÄÇ»Å͸¦ ¸¸µé·Á´Â ½Ãµµ·Î½á À̰ÍÀÌ °³¹ßµÇ¾ú´Ù´Â °ÍÀÌ PAPERS¿¡ ´ëÇØ¼­
Áß¿äÇÑ °ÍÀÌ´Ù. À̰ÍÀº ÁúÀûÀ¸·Î ´ëºÎºÐÀÇ ¸®´ª½º Ŭ·¯½ºÅÍ ³ë·Âµé°ú,
»ó´ëÀûÀ¸·Î º°·Î ÃæºÐÇÏÁö ¾Ê´Â ¼º±ä º´·Ä ¾îÇø®ÄÉÀ̼ǵ鿡 ´ëÇÑ Ç¥ÁØ
³×Æ®¿÷À» »ç¿ëÇÏ·Á°í ³ë·ÂÇÏ´Â µ¥ ÃÐÁ¡À» ¸ÂÃá PVM/MPIµé°ú ¾ÆÁÖ ´Ù¸£´Ù.
¸®´ª½º ÇǾ¾µéÀÌ PAPERS ½Ã½ºÅÛÀÇ ÄÄÆ÷³ÍÆ®µé·Î »ç¿ëµÈ´Ù´Â »ç½ÇÀº ´Ü¼øÇϰÔ
°¡´ÉÇÑÇÑ °¡Àå ºñ¿ë-È¿À²ÀûÀÎ ¹æ½ÄÀ¸·Î ÇÁ·ÎÅäŸÀÔµéÀ» ±¸ÇöÇØº» °ÍÀÌ´Ù´Â
°ÍÀ» ¸»ÇÒ »ÓÀÌ´Ù.

ÇÑ Å¸½ºÀÇ ¼­·Î´Ù¸¥ ÇÁ·ÎÅäŸÀÔ ±¸Çö¹°µé¿¡ ´ëÇÑ °ø¿ë ·Î¿ì-·¹º§
¼ÒÇÁÆ®¿þ¾î ÀÎÅÍÆäÀ̽º Çʿ䰡 AFAPI·Î PAPERS ¶óÀ̺귯¸®°¡
Ç¥ÁØÈ­µÇµµ·Ï ÇÑ °ÍÀÌ´Ù. ±×·¯³ª AFAPI¿¡ ÀÇÇØ¼­ »ç¿ëµÇ´Â ¸ðµ¨Àº Ÿ°í³¯
ÀûºÎÅÍ ´õ ´Ü¼øÇϰí, ÀüÇüÀûÀÎ º´·Äó¸® ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼­ ÄÄÆÄÀÏµÈ Äڵ峪
SIMD ¾ÆÅ°ÅØÃĵéÀ» À§Çؼ­ ÀÛ¼ºµÈ ÄÚµåµéÀÇ ´õ Á¤±³ÇÑ »óÈ£ÀÛ¿ë¿¡ Á» ´õ
Àû´çÇÏ´Ù. ÀÌ ¸ðµ¨ÀÇ ´Ü¼ø¼ºÀº PAPERS Çϵå¿þ¾î¸¦ ¸¸µé±â ½±°Ô ÇÒ »Ó¸¸
¾Æ´Ï°í SMPµé°ú °°Àº ´Ù¸¥ Çϵå¿þ¾î ½Ã½ºÅ۵鿡 ´ëÇÑ ³î¶øµµ·Ï È¿À²ÀûÀÎ
AFAPI Æ÷ÆÃÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù.

AFAPI´Â ÇöÀç TTL_PAPERS, CAPERS, ¶Ç´Â WAPERS¸¦ »ç¿ëÇÏ¿© Ä¿³ØÆ®µÈ ¸®´ª½º
Ŭ·¯½ºÅ͵鿡¼­ Àß ÀÛµ¿ÇÑ´Ù. À̰ÍÀº ¶ÇÇÑ (OS È£ÃâµéÀ̳ª ½ÉÁö¾î ¹ö½º-¶ôÅ·
¸í·É¾îµé ¾øÀ̵µ, ¼½¼Ç <ref
id="sec_IntroductionToSharedMemoryProgramming" name="°øÀ¯ ¸Þ¸ð¸®
ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³"> ÂüÁ¶) SHMAPERS¶ó°í ºÒ¸®´Â ½Ã½ºÅÛ V °ø¿ë ¸Þ¸ð¸®
¶óÀ̺귯¸®(System V Shared Memory library)¸¦ »ç¿ëÇÑ SMP ½Ã½ºÅÛµé
À§¿¡¼­µµ ÀÛµ¿ÇÑ´Ù. ÀüÅëÀûÀÎ ³×Æ®¿÷(¿¹, ÀÌ´õ³Ý) À§¿¡¼­ UDP ºê·Îµåij½ºÆ®¸¦
»ç¿ëÇÑ ¸®´ª½º Ŭ·¯½ºÅÍ À§¿¡¼­ ½ÇÇàÇÏ´Â ¹öÀüÀÌ °³¹ß Áß¿¡ ÀÖ´Ù. ¸ðµç
°ü·ÃµÈ ¹öÀüµéÀÌ <url url="http://garage.ecn.purdue.edu/~papers/">¿¡¼­
¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. AFAPIÀÇ ¸ðµç ¹öÀüµéÀº C³ª C++·ÎºÎÅÍ È£ÃâµÇµµ·Ï
¼³°èµÇ¾ú´Ù.

´ÙÀ½ ¿¹Á¦´Â ¼½¼Ç <ref id="sec_ExampleAlgorithm" 
name = "¿¹Á¦ ¾Ë°í¸®Áò">¿¡¼­ ¼³¸íµÈ ¹Ù ÀÖ´Â PiÀÇ AFAPI¹öÀüÀÌ´Ù. 

<code>
#include <stdlib.h>
#include <stdio.h>
#include "afapi.h"

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

  if (p_init()) exit(1);

  intervals = atoi(argv[1]);
  width = 1.0 / intervals;

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

  sum = p_reduceAdd64f(sum) * width;

  if (IPROC == CPROC) {
    printf("Estimation of pi is %f\n", sum);
  }

  p_exit();
  return(0);
}
</code>

<!-- ------------------------------------------------------------- -->
<sect1>´Ù¸¥ Ŭ·¯½ºÅÍ Áö¿ø ¶óÀ̺귯¸®µé
<!-- ------------------------------------------------------------- -->
<p>

PVM, MPI, ±×¸®°í AFAPI¿¡ µ¡ºÙ¿© ´ÙÀ½ ¶óÀ̺귯¸®µéÀº ¸®´ª½º Ŭ·¯½ºÅ͸¦
»ç¿ëÇØ¼­ º´·Ä ÄÄÇ»ÆÃÇÏ´Â µ¥ À¯¿ëÇÒ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ÀÌ·± ½Ã½ºÅÛµéÀº ÀÌ
¹®¼­¿¡¼­ Á» ´õ °¡º­¿î Ãë±ÞÀ» ¹Þ¾Ò´Ù. ¿Ö³Ä¸é PVM, MPI, ±×¸®°í AFAPI¿Í
´Ù¸£°Ô ³ª´Â ¸®´ª½º Ŭ·¯½ºÅÍ¿¡ ÀÌ·± ½Ã½ºÅÛµéÀ» Á÷Á¢ »ç¿ëÇÒ ±âȸ°¡ ÀüÇô
¶Ç´Â °ÅÀÇ ¾ø¾ú±â ¶§¹®ÀÌ´Ù.ÀÌ·± °ÍµéÀ̳ª ´Ù¸¥ ¶óÀ̺귯¸®µé Áß ¾î¶²
°ÍÀÌ¶óµµ Æ¯º°È÷ À¯¿ëÇÏ´Ù°í »ý°¢µÇ¸é ¿©·¯ºÐÀÌ Ã£Àº °ÍÀ» ¼³¸íÇÑ À̸ÞÀÏÀ»
<htmlurl url="mailto:pplinux@ecn.purdue.edu"
name="pplinux@ecn.purdue.edu">·Î º¸³»Áֱ⠹ٶõ´Ù. ±×·¯¸é ³ª´Â ±×
¶óÀ̺귯¸®¸¦ È®Àå ¼½¼Ç¿¡ ´õÇÏ´Â °ÍÀ» °í·ÁÇϰڴÙ.

<sect2>Condor (ÇÁ·Î¼¼½º ÀÌÁÖ Áö¿ø, process migration support)
<p>
Condor´Â ¿öÅ©½ºÅ×À̼ǵéÀÇ Ä¿´Ù¶õ À̱âÁ¾ Ŭ·¯½ºÅ͸¦ °ü¸®ÇÒ ¼ö ÀÖ´Â ºÐ»ê
ÀÚ¿ø °ü¸® ½Ã½ºÅÛÀÌ´Ù. À̰ÍÀÇ ¼³°è µ¿±â´Â Ŭ·¯½ºÅÍÀÇ È°¿ëµÇÁö ¾Ê´Â ¿ª·®À»
¿À·¡-½ÇÇàµÇ°í °è»êÀÌ ¸¹Àº Àϵ鿡 ´ëÇØ¼­ »ç¿ëÇϰíÀÚ ÇÏ´Â »ç¶÷µéÀÇ ¿ä±¸¿¡
ÀÇÇØ¼­ÀÌ´Ù. Condor´Â ½Ã°¢ ¹× ½ÇÇà ±â°èµéÀÌ °øÅë ÆÄÀÏ ½Ã½ºÅÛÀ» °øÀ¯ÇÏÁö
¾Ê°í/°Å³ª ÆÐ½º¿öµå ¸ÞÄ«´ÏÁòÀ» °øÀ¯ÇÏÁö ¾ÊÀ»Áö¶óµµ, ½ÇÇà ±â°è¿¡ Ä¿´Ù¶õ
½ÃÀÛ ±â°èÀÇ È¯°æÀ» À¯ÁöÇÑ´Ù. ´ÜÀÏ ÇÁ·Î¼¼½º¸¦ À¯ÁöÇÏ´Â Condor ÀÛ¾÷µéÀº
À̺¥Æ® ¿Ï·á¸¦ È®ÀÎÇÏ´Â µ¥ ÇÊ¿äÇϱ⠶§¹®¿¡ ÀÚµ¿À¸·Î checkpointµÇ°í 
¿öÅ©½ºÅ×ÀÌ¼Çµé »çÀÌ¿¡¼­ ÀÌÁֵȴÙ.

Condor´Â <url url="http://www.cs.wisc.edu/condor/"> ¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.
¸®´ª½º Æ÷ÆÃµÈ ¹öÀüÀÌ Á¸ÀçÇÑ´Ù; ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº <url
url="http://www.cs.wisc.edu/condor/linux/linux.html">À» ã¾Æ º¼ ¼ö ÀÖ´Ù.
ÀÚ¼¼ÇÑ °ÍÀº <htmlurl url="mailto:condoradmin@cs.wisc.edu"
name="condoradmin@cs.wisc.edu">À» ¸¸³ªº¸¶ó.

<sect2>DFN-RPC (German Research Network - Remote Procedure Call)
<p>

DFN-RPC(µ¶ÀÏ ¿¬±¸ ³×Æ®¿÷ RPC) ÅøÀº ¿öÅ©½ºÅ×À̼ǰú °è»ê ¼­¹ö³ª Ŭ·¯½ºÅÍ
°£¿¡ °úÇÐ-±â¼úÀûÀÎ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥µéÀ» ºÐ»êÇϰí
º´·ÄÈ­(parallelize)Çϱâ À§Çؼ­ °³¹ßµÇ¾ú´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â Æ÷Æ®¶õÀ¸·Î
ÀÛ¼ºµÈ ¾îÇø®ÄÉÀ̼ǿ¡ ÃÖÀûÈ­µÇ¾î ÀÕÁö¸¸ DFN-RPC´Â ¶ÇÇÑ C ȯ°æ¿¡¼­µµ
»ç¿ëµÉ ¼ö ÀÖ´Ù. À̰ÍÀº ¸®´ª½º·Î Æ÷ÆÃµÇ¾ú´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â <url
url="ftp://ftp.uni-stuttgart.de/pub/rus/dfn_rpc/README_dfnrpc.html">¿¡
ÀÖ´Ù.

<sect2>DQS (ºÐ»ê Å¥À× ½Ã½ºÅÛ, Distributed Queueing System)
<p>

Á¤È®ÇÏ°Ô ¸»Çؼ­ ¶óÀ̺귯¸®´Â ¾Æ´ÏÁö¸¸ DQS 3.0 (ºÐ»ê Å¥À× ½Ã½ºÅÛ)Àº
¸®´ª½º¿¡¼­ °³¹ßµÇ°í Å×½ºÆ®µÈ ÀÛ¾÷ Å¥À× ½Ã½ºÅÛÀÌ´Ù. À̰ÍÀº À̱âÁ¾
Ŭ·¯½ºÅ͸¦ ÇϳªÀÇ ¿£ÅÍÆ¼·Î½á »ç¿ëÇÏ°í °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾ú´Ù.
À̰ÍÀº <url
url="http://www.scri.fsu.edu/~pasko/dqs.html">¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

CODINE 4.1.1(ºÐ»ê ³×Æ®¿÷ ȯ°æ¿¡¼­ÀÇ °è»ê, COmputing in DIstributed
Network Environments)¶ó°í ºÒ¸®´Â »ó¾÷¿ë ¹öÀüµµ ¶ÇÇÑ Á¸ÀçÇÑ´Ù. À̰ÍÀÇ
Á¤º¸´Â <url url="http://www.genias.de/genias_welcome.html">¿¡¼­
ãÀ» ¼ö ÀÖ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>ÀÏ¹Ý Å¬·¯½ºÅÍ Âü°íÀÚ·á
<!-- ------------------------------------------------------------- -->
<p>
Ŭ·¯½ºÅ͵éÀº ¾ÆÁÖ ¸¹Àº ¹æ½ÄÀ¸·Î ±¸ÃàµÇ°í »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ Èï¹Ì·Î¿î
°øÇåÀ» ÇÑ ±×·ìµéÀÌ ²Ï ÀÖ´Ù. ´ÙÀ½Àº ÀϹÝÀûÀÎ °ü½É°Å¸®°¡ µÉ ¼ö ÀÖ´Â ´Ù¾çÇÑ
Ŭ·¯½ºÅÍ-°ü·Ã ÇÁ·ÎÁ§Æ®µé¿¡ ´ëÇÑ ·¹ÆÛ·±½ºÀÌ´Ù. À̰ÍÀº ¸®´ª½º¿¡ ÇÑÁ¤µÈ
°Í°ú ±×·¸Áö ¾ÊÀº ÀϹÝÀûÀΠŬ·¯½ºÅÍ ·¹ÆÛ·±½ºµéÀ» ´ã°í ÀÖ´Ù. ÀÌ ¸®½ºÆ®´Â
¾ËÆÄºª ¼ø¼­·Î ³ª¿Í ÀÖ´Ù.

<sect2>Beowulf
<p>

Beowulf ÇÁ·ÎÁ§Æ®´Â, <url url="http://cesdis1.gsfc.nasa.gov/beowulf/">,
»óǰ ÇǾ¾-Ŭ·¡½º Çϵå¿þ¾î, °í-´ë¿ªÆø Ŭ·¯½ºÅÍ-ÀÎÅͳΠ³×Æ®¿÷, ±×¸®°í
¸®´ª½º ¿î¿µ üÁ¦¸¦ ±â¹ÝÀ¸·Î ÇÑ ±Ô°Ýǰ ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͸¦ »ç¿ëÇϱâ
À§ÇÑ ¼ÒÇÁÆ®¿þ¾î Á¦ÀÛ¿¡ ÁýÁßÇϰí ÀÖ´Ù. 

Thomas Sterling°¡ Beowulf µÚÀÇ ÃßÁø·ÂÀ̾úÀ¸¸ç °è¼ÓÇØ¼­ ÀϹÝÀûÀÎ °úÇÐ
ÄÄÇ»ÆÃÀ» À§ÇÑ ¸®´ª½º Ŭ·¯½ºÅ͸µÀÇ ¿õº¯ÀûÀÌ°í ¼ÖÁ÷ÇÑ Á¦¾ÈÀÚÀ̾ú´Ù. »ç½Ç,
¸¹Àº ±×·ìµéÀÇ Áö±Ý ±×µéÀÇ Å¬·¯½ºÅ͸¦ "Beowulf class" ½Ã½ºÅÛµéÀ̶ó°í
ºÎ¸¥´Ù - ½ÉÁö¾î ±× Ŭ·¯½ºÅͰ¡ ½ÇÁ¦ °ø½ÄÀûÀÎ Beowulf ¼³°è¿¡ ÀüÇô ºñ½ÁÇÏÁö
¾Ê´õ¶óµµ ¸»ÀÌ´Ù.

Beowulf ÇÁ·ÎÁ§Æ®¸¦ Áö¿øÇÏ´Â ÀÏÀ» ÇÏ´Â Don Becker´Â ¸®´ª½º¿¡ ÀÇÇØ¼­
ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ¸¹Àº ³×Æ®¿÷ µå¶óÀ̹öµéÀ» ¸¸µé¾ú´Ù. À̵é Áß ¸¹Àº
°ÍµéÀÌ BSD¿¡¼­ »ç¿ëµÇµµ·Ï Àû¿ëµÇ¾î ¿Ô´Ù. DonÀº ¶ÇÇÑ ºñ½Ñ ½ºÀ§Ä¡ Çãºê¾øÀÌ
´õ ³ôÀº ´ë¿ªÆøÀ» ȹµæÇϵµ·Ï ´Ù¼öÀÇ º´·Ä Ä¿³Ø¼ÇµéÀ» ÅëÇØ¼­ ·Îµå-ºÐ¹è¸¦
Çã¿ëÇÏ´Â ¸¹Àº ¸®´ª½º ³×Æ®¿÷ µå¶óÀ̹öµé¿¡ ´ëÇØ¼­µµ Ã¥ÀÓÀ» Áö°í ÀÖ´Ù. ÀÌ·±
·Îµå-ºÐ¹è(load-sharing) ŸÀÔÀº Beowulf Ŭ·¯½ºÅͰ¡ ¿øÁ¶ÀÎ ´Ù¸¥ °Í°ú
±¸º°µÈ´Â ±â´ÉÀ̾ú´Ù.

<sect2>Linux/AP+
<p>

Linux/AP+ ÇÁ·ÎÁ§Æ®, <url
url="http://cap.anu.edu.au/cap/projects/linux/">´Â Á¤È®ÇÏ°Ô ¸®´ª½º
Ŭ·¯½ºÅ͸µ¿¡ ´ëÇÑ °ÍÀÌ ¾Æ´Ï°í ¸®´ª½º¸¦ Fujitsu AP1000+À¸·Î Æ÷ÆÃÇÏ´Â °Í°ú
ÀûÀýÇÑ º´·Ä ó¸® ÁõÁøÀ» ´õÇÏ´Â °Í¿¡ ÃÐÁ¡À» ¸ÂÃá °ÍÀÌ´Ù. AP1000+´Â ȯÇü
ÅäÆú·ÎÁö, 25 MB/s ´ë¿ªÆø, ±×¸®°í 10 ¸¶ÀÌÅ©·Î ÃÊ Áöü ½Ã°£ ... À» °¡Áø
Ä¿½ºÅÒ ³×Æ®¿÷À» »ç¿ëÇÏ´Â »ó¿ë SPARC-±â¹Ý º´·Ä ±â°èÀÌ´Ù. ´Ü¼øÇÏ°Ô ¸»Çؼ­
À̰ÍÀº SPARC ¸®´ª½º Ŭ·¯½ºÅä¿Í ¾ÆÁÖ À¯»çÇÏ´Ù.

<sect2>Locust
<p>

·ÎÄ¿½ºÆ®(Locust) ÇÁ·ÎÁ§Æ®, <url
url="http://www.ecsl.cs.sunysb.edu/~manish/locust/">´Â ¸Þ½ÃÁö-Áöü½Ã°£À»
¼û±â±â À§Çؼ­ ±×¸®°í ½Ç½Ã°£À¸·Î ³×Æ®¿÷ Æ®·¡ÇÈÀ» ÁÙÀ̱â À§Çؼ­
ÄÄÆÄÀÏ-½Ã°£ Á¤º¸¸¦ »ç¿ëÇÏ´Â ºÐ»ê °¡»ó °øÀ¯ ¸Þ¸ð¸® ½Ã½ºÅÛÀ» ±¸ÃàÇϰí
ÀÖ´Ù. Pupa´Â ·ÎÄ¿½ºÆ®ÀÇ ±â¹Ý Åë½Å ¼­ºê½Ã½ºÅÛÀ̰í FreeBSDÀÇ 486 ÇǾ¾µéÀ»
¿¬°áÇϱâ À§Çؼ­ ÀÌ´õ³ÝÀ» »ç¿ëÇÏ¿© ±¸ÇöµÇ¾ú´Ù. ¸®´ª½ºÀΰ¡?

<sect2>Midway DSM (Distributed Shared Memory)
<p>

Midway, <url
url="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/midway/WWW/HomePage.html">´Â
TreadMarks¿Í ´Ù¸£Áö ¾Ê´Â, ¼ÒÇÁÆ®¿þ¾î-±â¹Ý DSM(ºÐ»ê °øÀ¯ ¸Þ¸ð¸®)
½Ã½ºÅÛÀÌ´Ù. À̰ÍÀº »ó´ëÀûÀ¸·Î ´À¸° ÆäÀÌÁö-ÆúÆ® ¸ÞÄ«´ÏÁòµéº¸´Ù´Â
ÄÄÆÄÀÏ-½Ã°£ µµ¿ò(aids)À» »ç¿ëÇÏ°í °øÂ¥¶ó´Â °ÍÀÌ Èñ¼Ò½ÄÀÌ´Ù. ³ª»Û ¼Ò½ÄÀº
À̰ÍÀÌ ¸®´ª½º Ŭ·¯½ºÅ͵é À§¿¡¼­ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.

<sect2>Mosix
<p>

MOSIZ´Â BSDI BSD/OS¸¦ º¯Á¶Çؼ­ ÇǾ¾µéÀ» ³×Æ®¿÷À¸·Î ¹­Àº ±×·ì À§¿¡¼­ µ¿Àû
·Îµå ¹ë·±½Ì°ú ¼±Á¡(preemptive) ÇÁ·Î¼¼½º ÀÌÁÖ¸¦ Á¦°øÇϵµ·Ï ÇÑ °ÍÀÌ´Ù.
À̰ÍÀº º´·Ä 󸮿¡ ´ëÇØ¼­»Ó¸¸ÀÌ ¾Æ´Ï°í Á¶Àý °¡´ÉÇÑ(scalable) SMP¿Í ¾ÆÁÖ
À¯»çÇÑ Å¬·¯½ºÅ͸¦ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â µ¥¿¡µµ ÁÁÀº °ÍÀÌ´Ù. ¸®´ª½º ¹öÀüÀÌ
ÀÖÀ»±î? Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <url
url="http://www.cs.huji.ac.il/mosix/">¸¦ ÂüÁ¶ÇÏÀÚ.

<sect2>NOW (Network Of Workstations)
<p>

¹öŬ¸® NOW (³×Æ®¿÷À¸·Î ¹­Àº ¿öÅ©½ºÅ×À̼ǵé, Network Of Workstations)
ÇÁ·ÎÁ§Æ®, <url url="http://now.cs.berkeley.edu/">´Â ³×Æ®¿÷À¸·Î ¹­Àº
¿öÅ©½ºÅ×À̼ǵéÀ» »ç¿ëÇØ¼­ º´·Ä ÄÄÇ»ÆÃÀ» Çϵµ·Ï ¸¹Àº ¾Ð·ÂÀ» Çà»çÇØ¿Ô´Ù.
ÇöÀç ¸¹Àº ÀÛ¾÷µéÀÌ, ¸ðµÎ "´ÙÀ½ ¸î³â ¾È¿¡ ½ÇÁúÀûÀÎ 100°³ÀÇ ÇÁ·Î¼¼¼­
½Ã½ºÅÛÀ» µ¥¸ðÇÏ´Â °Í"À» ÇâÇØ¼­, ÀÌ·ç¾îÁö°í ÀÖ´Ù. ¾Æ»Ô»ç, À̵éÀº ¸®´ª½º¸¦
»ç¿ëÇÏÁö ¾Ê´Â´Ù.

<sect2>¸®´ª½º¸¦ »ç¿ëÇÏ´Â º´·Ä ó¸®(Parallel Processing Using Linux)
<p>

¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä ó¸® WWW »çÀÌÆ®, <url
url="http://yara.ecn.purdue.edu/~pplinux/">, ´Â ÀÌ HOWTOÀÇ È¨ ÆäÀÌÁöÀ̸ç
ÇÏ·çÂ¥¸® Æ©Å͸®¾óÀ» ³ë¸° ¿Â¶óÀÎ ½½¶óÀ̵éÀ» Æ÷ÇÔÇÑ ¸¹Àº °ü·ÃµÈ ¹®¼­µéÀÌ
ÀÖ´Â °÷ÀÌ´Ù. PAPERS ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ÀÛ¾÷À» Á¦¿ÜÇÏ°íµµ ÆÛµà ´ëÇб³ ÀüÀÚ
¹× ÄÄÇ»ÅÍ °øÇÐ Çб³´Â ÀϹÝÀûÀ¸·Î º´·Ä ó¸®ÀÇ ¸®´õ·Î ±º¸²ÇؿԴÙ; ÀÌ
»çÀÌÆ®´Â ´Ù¸¥ »ç¶÷µéÀÌ ¸®´ª½º ÇǾ¾µéÀ» º´·Ä 󸮿¡ Àû¿ëÇÏ´Â °ÍÀ» µ½±â
À§Çؼ­ ¼³¸³µÇ¾ú´Ù.

ÆÛµàÀÇ Ã¹¹øÂ° ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅͰ¡ 1994³â 2¿ù¿¡ Á¶¸³µÈ ÀÌ·¡·Î ºñµð¿À
º®(video wall)À» Æ÷ÇÔÇÑ, ¼ö¸¹Àº ¸®´ª½º ÇǾ¾ Ŭ·¯½ºÅ͵éÀÌ ÆÛµà¿¡¼­
Á¶¸³µÇ¾î¿Ô´Ù. ºñ·Ï ÀÌ·± Ŭ·¯½ºÅ͵éÀÌ 386, 486, ±×¸®°í Pentium
½Ã½ºÅÛµé(Pentium Pro ½Ã½ºÅÛÀº ¾ø´Ù)À» »ç¿ëÇßÁö¸¸ ¿ä±Ù·¡ ÀÎÅÚÀÌ Pentium
II ½Ã½ºÅÛµé·Î µÈ ´Ù¼öÀÇ Ä¿´Ù¶õ Ŭ·¯½ºÅ͵éÀ» ¸¸µé ¼ö ÀÖµµ·Ï ÆÛµà ´ëÇб³¿¡
±âºÎ¸¦ Çß´Ù. ÀÌ·± Ŭ·¯½ºÅ͵éÀÌ ¸ðµÎ PAPERS ³×Æ®¿÷À» °¡Áö°í °¡Áú °ÍÀÌÁö¸¸
´ëºÎºÐÀÇ °ÍµéÀÌ ¶ÇÇÑ ÀüÅëÀûÀÎ ³×Æ®¿÷À» °¡Áø´Ù.

<sect2>ÆæÆ¼¾ö ÇÁ·Î Ŭ·¯½ºÅÍ ¿öÅ©¼¥(Pentium Pro Cluster Workshop)
<p>

¾ÆÀÌ¿À¿Í(Iowa) ÁÖ µ¥¸ðÀÎ(Des Moines)¿¡¼­ 1997³â 4¿ù 10-11¿¡ AMES ·¦Àº
ÆæÆ¼¾ö ÇÁ·Î Ŭ·¯½ºÅÍ ¿öÅ©¼¥À» ¿­¾ú´Ù. ÀÌ ¿öÅ©¼¥ÀÇ WWW »çÀÌÆ®, <url
url="http://www.scl.ameslab.gov/workshops/PPCworkshop.html">, ´Â ¸ðµç
Âü°¡ÀÚµé·ÎºÎÅÍ ¼öÁýµÈ dzºÎÇÑ ÇǾ¾ Ŭ·¯½ºÅÍ Á¤º¸µéÀ» °®°í ÀÖ´Ù.

<sect2>TreadMarks DSM (Distributed Shared Memory)
<p>

DSM (ºÐ»ê °øÀ¯ ¸Þ¸ð¸®, Distributed Shared Memory)´Â À̰Ϳ¡ ÀÇÇØ¼­
¸Þ½ÃÁö-Àü´Þ ½Ã½ºÅÛÀÌ SMPó·³ ÇൿÇÏ´Â °Í°°ÀÌ º¸ÀÏ ¼ö ÀÖ´Â, ±â¼úÀÌ´Ù.
¸î°¡Áö ±×·± ½Ã½ºÅÛµéÀÌ Á¸ÀçÇϰí À̵é Áß ´ëºÎºÐÀº ¸Þ½ÃÁö Àü¼ÛÀ»
Æ®¸®°Å(Ã˹ß)Çϱâ À§Çؼ­ OS ÆäÀÌÁö-¿À·ù ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÑ´Ù. TreadMarks,
<url url="http://www.cs.rice.edu/~willy/TreadMarks/overview.html">´Â
ÀÌ·± ½Ã½ºÅÛµé Áß Á» ´õ È¿À²ÀûÀÎ °ÍÀÌ¸ç ¸®´ª½º Ŭ·¯½ºÅÍ À§¿¡¼­ ½ÇÇàµÈ´Ù.
½½Ç ¼Ò½ÄÀº "TreadMarks°¡ ´ëÇб³µéÀ̳ª ºñ¿µ¸® ±â°üµé¿¡ Àúºñ¿ëÀ¸·Î
¹èÆ÷µÇ°í ÀÖ´Ù´Â °ÍÀÌ´Ù". ÀÌ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ Á» ´õ ¸¹Àº Á¤º¸¸¦ ¿øÇÑ´Ù¸é
<htmlurl url="mailto:treadmarks@ece.rice.edu"
name="treadmarks@ece.rice.edu">°ú Á¢ÃËÇØº¸±â ¹Ù¶õ´Ù.

<sect2>U-Net (User-level NETwork interface architecture)
<p>

ÄÚ³Ú ´ëÇб³ÀÇ 
U-Net (User-level NETwork interface architecture) ÇÁ·ÎÁ§Æ®, <url
url="http://www2.cs.cornell.edu/U-Net/Default.html">´Â ³×Æ®¿÷
ÀÎÅÍÆäÀ̽º¸¦ °¡»óÈ­ÇØ¼­(virtualize) ¾îÇø®ÄÉÀ̼ǵéÀÌ ¸Þ½ÃÁöµéÀ»
¿î¿µÃ¼Á¦ÀÇ °£¼·¾øÀÌ Àü¼ÛÇϰųª ¼ö½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â, »óǰ ³×Æ®¿÷
Çϵå¿þ¾î¸¦ »ç¿ëÇÑ ³·Àº Áöü ½Ã°£°ú ³ôÀº ´ë¿ªÆøÀ» Á¦°øÇÏ´Â ½Ãµµ¸¦ Çϰí
ÀÖ´Ù.  U-NetÀº Fast ÀÌ´õ³Ý¿¡ ±â¹ÝÇÑ DECchip DC21140 ¸¦ »ç¿ëÇϰųª Fore
Systems PCA-200(PCA-200E°¡ ¾Æ´Ô) ATM Ä«¸¦ »ç¿ëÇÏ´Â ¸®´ª½º ÇǾ¾µé À§¿¡¼­
ÀÛµ¿ÇÑ´Ù.

<sect2>WWT (Wisconsin Wind Tunnel)
<p>

À§½ºÄܽſ¡´Â »ó´çÈ÷ ¸¹Àº Ŭ·¯½ºÅÍ-°ü·Ã ÀÛ¾÷µéÀÌ ÀÌ·ç¾îÁö°í ÀÖ´Ù. WWT
(Wisconsin Wind Tunnel) ÇÁ·ÎÁ§Æ®, <url
url="http://www.cs.wisc.edu/~wwt/">´Â ÄÄÆÄÀÏ·¯µé°ú ±â¹Ý ÆÐ·¯·² Çϵå¿þ¾î
»çÀÌÀÇ "Ç¥ÁØ" ÀÎÅÍÆäÀ̽º¸¦ °³¹ßÇÏ´Â ÂÊÀÇ ¸ðµç Á¾·ùÀÇ ÀϵéÀ» ¼öÇàÇϰí
ÀÖ´Ù. Wisconsin COW (Cluster Of Workstations), Cooperative Shared Memory
and Tempest, Paradyn Parallel Performance Tools µîÀÌ ÀÖ´Ù. ºÒÇàÇϰԵµ
¸®´ª½º¿¡ °üÇÑ ÀϵéÀº º°·Î ¾ø´Ù.

<!-- 4Àå -->
<!--***************************************************************-->
<sect>ÇϳªÀÇ ·¹Áö½ºÅÍÀ§¿¡¼­ÀÇ SIMD(¿¹: MMX »ç¿ë)
<!--***************************************************************-->
<p>

´ÜÀÏ ·¹Áö½ºÅÍ ³»ÀÇ SIMD(SWAR)´Â »õ·Î¿î ¾ÆÀ̵ð¾î°¡ ¾Æ´Ï´Ù.
<em>k</em>-ºñÆ® ·¹Áö½ºÅÍ, µ¥ÀÌÅÍ ÆÐ½º, ±×¸®°í ÇÔ¼ö À¯´Ö À» °¡Áö´Â ±â°è°¡
ÀÖÀ» ¶§ ÀÏ¹Ý ·¹Áö½ºÅÍ ¿¬»êµéÀÌ <em>n</em>°³ÀÇ <em>k</em>/<em>n</em>-ºñÆ®,
Á¤¼ö ÇÊµå °ªµé À§¿¡¼­ SIMD º´·Ä ¿¬»êµé·Î ¼öÇàµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ
¿À·¡ÀüºÎÅÍ ¾Ë·ÁÁ® ¿Ô´Ù. ±×·¯³ª SWAR ±â¼úµé¿¡ ÀÇÇØ¼­ Á¦°øµÇ´Â 2¹è¿¡¼­
8¹è±îÁöÀÇ ¼Óµµ Áõ°¡°¡ ¸ÞÀνºÆ®¸² ÄÄÇ»ÆÃ¿¡ ´ëÇÑ °ü½É»ç°¡ µÈ °ÍÀº ¿äÁòµé¾î
¸ÖƼ¹Ìµð¾î¿¡ ´ëÇÑ °­·ÄÇÑ Ãß¼¼¶§¹®ÀÌ´Ù. ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µéÀÇ 1997 ¹öÀü
´ëºÎºÐÀº SWAR¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀ» ´ã°í ÀÖ´Ù:

<itemize>
<item><htmlurl
url="http://www.amd.com/html/products/pcd/techdocs/appnotes/20726a.pdf"
name="AMD K6 MMX (MultiMedia eXtensions)">

<item><htmlurl url="http://www.cyrix.com:80/process/SUPPORT/isv.htm"
name="Cyrix M2 MMX (MultiMedia eXtensions)">

<item><htmlurl
url="http://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphahb2.pdf"
name="Digital Alpha MAX (MultimediA eXtensions)">

<item><htmlurl
url="http://hpcc997.external.hp.com:80/wsg/strategies/pa2go3/pa2go3.html"
name="Hewlett-Packard PA-RISC MAX (Multimedia Acceleration
eXtensions)">

<item><htmlurl url="http://developer.intel.com/drg/mmx/" name="Intel
Pentium II & Pentium with MMX (MultiMedia eXtensions)">

<item><htmlurl url="http://www.microunity.com/www/mediaprc.htm"
name="Microunity Mediaprocessor SIGD (Single Instruction on Groups of
Data)">

<item><htmlurl url="http://www.mips.com/arch/ISA5/" name="MIPS Digital
Media eXtension (MDMX, pronounced Mad Max)">

<item><htmlurl url="http://www.sun.com/sparc/vis/index.html" name="Sun
SPARC V9 VIS (Visual Instruction Set)">
</itemize>

»õ·Î¿î ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­µé¿¡ ÀÇÇØ¼­ Á¦°øµÇ´Â Çϵå¿þ¾î Áö¿ø¿¡´Â ¸î°¡Áö
°áÇÔµéÀÌ ÀÖ°í ¾î¶² Çʵå Å©±âµé¿¡ ´ëÇØ¼­ ¾î¶² ¿¬»êµé¸¸À» Áö¿øÇÏ´Â °Í°ú
°°Àº ´ÜÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª ¸¹Àº SWAR ¿¬»êµéÀÌ È¿À²ÀûÀ̾î¾ß ÇÏ´Â Çϵå¿þ¾î
Áö¿øÀÌ ÇÊ¿ä¾ø´Ù´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¿¹¸¦ µé¾î¼­ ºñÆ®´ÜÀ§
¿¬»êµéÀº ÇϳªÀÇ ·¹Áö½ºÅ͸¦ ³í¸®ÀûÀ¸·Î ºÐÇÒÇÏ´Â °Í¿¡ ÀÇÇØ¼­ ¿µÇâÀ» ¹ÞÁö
¾Ê´Â´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>SWAR: ¾îµð¿¡ ÁÁÀº °ÍÀ̰¡(What Is It Good For)?
<!-- ------------------------------------------------------------- -->
<p>

ºñ·Ï <em>¸ðµç</em> ÇöÀç ÇÁ·Î¼¼¼­µéÀÌ Àû¾îµµ ¾î´ø SWAR º´·Ä
±â´É(parallelism)°ú ÇÔ²² ¼öÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù°í ÇÏ´õ¶óµµ °¡Àå ÁÁÀº
SWAR-°³¼± ¸í·É ¼Âµéµµ ¾ÆÁÖ ÀϹÝÀûÀÎ-¸ñÀûÀÇ º´·Ä ±â´É(parallelism)À»
Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ ½½Ç »ç½ÇÀÌ´Ù. »ç½Ç, ¸¹Àº »ç¶÷µéÀÌ Pentium°ú
"Pentium with MMX technology" »çÀÌÀÇ ¼öÇà ´É·Â Â÷À̰¡ ¿ì¿¬È÷µµ MMX¿Í
µ¿½Ã¿¡ ³ªÅ¸³­ ´õ Å« L1 ij½¬¿Í °°Àº °Íµé ¶§¹®À̶ó°í »ý°¢ÇÑ´Ù. ±×·¸´Ù¸é
SWAR(Áï MMX)´Â Çö½ÇÀûÀ¸·Î ¾îµð¿¡ ÁÁÀº °ÍÀΰ¡?

<itemize>
<item>Á¤¼öµé¸¸ ÀÖ´Â °ÍÀÌ, ´õ ÀûÀº °ÍÀÌ ´õ ÁÁ´Ù. 32-ºñÆ® °ªµéÀº 64-ºñÆ®
MMX ·¹Áö½ºÅÍ¿¡ ¸Â¾Æ ¶³¾îÁöÁö¸¸ 8°³ÀÇ 1-¹ÙÀÌÆ® ¹®ÀÚµéÀ̳ª 1-ºñÆ®°ªµéÀÇ
ü½ºÆÇ Å©±â(ü½ºÆÇÀº °¡·Î ¼¼·Î 8°³¾¿ÀÇ Ä­ÀÌ ÀÖ´Ù. ±×·¡¼­ 64°³;
¿ªÀÚÁÖ) °³¼ö ÀüüÀÌ´õ¶óµµ ¸Â¾Æ ¶³¾îÁø´Ù.

Note: ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â ¼ø°£ ºñ·Ï ¸¹Àº ³»¿ëÀÌ ¾øÁö¸¸ <em>MMXÀÇ
ºÎµ¿-¼Ò¼ýÁ¡ ¹öÀüÀÌ ÀÖÀ»</em> °ÍÀÌ´Ù. Cyrix´Â <bf>MMFP</bf>¿¡ ´ëÇÑ ¸î°¡Áö
¼³¸íÀ» ´ãÀº ½½¶óÀ̵åµéÀ» <url
url="ftp://ftp.cyrix.com/developr/mpf97rm.pdf">¿¡ Æ÷½ºÆÃÇØ³õ¾Ò´Ù. ¾ó¸¥
ºÁ¼­ MMFP´Â µÎ 32-ºñÆ® ºÎµ¿-¼Ò¼ýÁ¡ ¼ýÀÚµéÀÌ 64-ºñÆ® MMX ·¹Áö½ºÅÍ Çϳª¿¡
ÆÑÅ·µÇ´Â °ÍÀ» Áö¿øÇÒ °ÍÀÌ´Ù; À̰ÍÀ» µÎ°³ÀÇ MMFP ÆÄÀÌÇÁ¶óÀεé·Î ¹­À¸¸é
Ŭ·° Çϳª´ç ³×°³ÀÇ ´ÜÀÏ-Á¤¹Ðµµ FLOP¸¦ »ý»êÇÒ °ÍÀÌ´Ù.

<item>SIMD, ¶Ç´Â º¤ÅÍ-½ºÅ¸ÀÏ º´·Ä ó¸®(parallelism). µ¿ÀÏÇÑ ¿¬»êÀÌ ¸ðµç
Çʵåµé¿¡ µ¿½Ã¿¡ Àû¿ëµÈ´Ù. ¼±ÅÃµÈ Çʵåµé¿¡ È¿°ú¸¦ ¾ø¾Ö´Â ¹æ¹ýµé(Áï, SIMD
enable ¸¶½ºÅ·)ÀÌ Á¸ÀçÇÏÁö¸¸ ±×µéÀº º¹ÀâÇÏ°í ¼º´ÉÀ» ÀúÇϽÃŲ´Ù.

<item>
Áö¿ªÈ­(localized)µÇ°í Á¤±ÔÀûÀÎ(¿ÀÈ÷·Á ÆÑÅ·µÈ), ¸Þ¸ð¸® ÂüÁ¶ ÆÐÅϵé.
ÀϹÝÀûÀÎ SWAR, ±×¸®°í Ưº°È÷ MMX, ´Â ·£´ý-¼ø¼­ Á¢±Ù¿¡ Áã¾àÀÌ´Ù; º¤ÅÍ
<tt>x[y]</tt>(¿©±â¼­ <tt>y</tt>´Â À妽º ¹è¿­ÀÌ´Ù)¸¦ ¸ðÀ¸´Â °ÍÀº ¾öû
ºñ½Î´Ù.
</itemize>

À̵éÀº ½É°¢ÇÑ Á¦¾àÁ¡µéÀÌÁö¸¸ ÀÌ·± ŸÀÔÀÇ º´·Ä 󸮴 ¸¹Àº º´·Ä
¾Ë°í¸®Áòµé¿¡¼­ ³ªÅ¸³ª´Â °ÍÀÌ´Ù - ¸ÖƼ¹Ìµð¾î ¾îÇø®ÄÉÀ̼ǵé»Ó¸¸ÀÌ ¾Æ´Ï°í.
¾Ë°í¸®ÁòÀÇ ÀûÀýÇÑ Å¸ÀÔ¿¡ ´ëÇØ¼­ SWAR´Â SMP³ª Ŭ·¯½ºÅÍ º´·Ä 󸮺¸´Ù ÈξÀ
È¿À²ÀûÀÌ´Ù... ±×¸®°í À̰ÍÀº ±×°ÍÀ» »ç¿ëÇÏ´Â µ¥ ¾î¶² Ãß°¡ ºñ¿ëµµ µéÁö
¾Ê´Â´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>SWAR ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¼Ò°³(Introduction To SWAR Programming)
<!-- ------------------------------------------------------------- -->
<p>

SWARÀÇ ±âº» °³³ä(ÄÁ¼Á), ´ÜÀÏ ·¹Áö½ºÅÍ ¾È¿¡¼­ÀÇ SIMD, ´Â ¿öµå-±æÀÌ
·¹Áö½ºÅ͵é À§¿¡¼­ÀÇ ¿¬»êµéÀÌ <em>n</em>°³ÀÇ <em>k</em>/<em>n</em>-ºñÆ®
ÇÊµå ¼öÄ¡µé¿¡ ´ëÇÑ SIMD º´·Ä ¿¬»êÀ» ¼öÇàÇÔÀ¸·Î½á °è»ê ¼Óµµ¸¦ ³ôÀÌ´Â µ¥
»ç¿ëµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ±×·¯³ª SWAR ±â¼úÀ» »ç¿ëÇÏ´Â °ÍÀº ´Ù¼Ò ¾î»öÇÒ ¼ö
ÀÖÀ¸¸ç ¶ÇÇÑ ¾î¶² SWAR ¿¬»êµéÀº ½ÇÁ¦ ´ëÀÀµÇ´Â ÀÏ·ÃÀÇ ¼øÂ÷ÀûÀÎ ¿¬»êµéº¸´Ù,
±×µéÀÌ ÇÊµå ºÐÇÒÀ» ¼öÇàÇÏ´Â Ãß°¡ÀÇ ¸í·É¾îµéÀ» ¿ä±¸Çϱ⠶§¹®¿¡, ´õ
°í ºñ¿ëÀÌ´Ù.

ÀÌ °üÁ¡À» ¿¹½ÃÇϱâ À§Çؼ­ »ó´çÈ÷ ´Ü¼øÈ­µÈ, °¢ 32-ºñÆ® ·¹Áö½ºÅÍ ¾È¿¡¼­
4°³ÀÇ 8-ºñÆ® ÇʵåµéÀ» °ü¸®ÇÏ´Â, SWAR ¸ÞÄ«´ÏÁòÀ» »ý°¢Çغ¸µµ·Ï ÇÏÀÚ. µÎ
·¹Áö½ÃÅ͵é¾ÈÀÇ ¼öÄ¡µéÀº ´ÙÀ½°ú °°ÀÌ Ç¥ÇöµÉ ¼ö ÀÖ°Ú´Ù:

<code>
         PE3     PE2     PE1     PE0
      +-------+-------+-------+-------+
Reg0  | D 7:0 | C 7:0 | B 7:0 | A 7:0 |
      +-------+-------+-------+-------+
Reg1  | H 7:0 | G 7:0 | F 7:0 | E 7:0 |
      +-------+-------+-------+-------+
</code>

À̰ÍÀº ´Ü¼øÇÏ°Ô °¢ ·¹Áö½ºÅͰ¡ ±âº»ÀûÀ¸·Î 4°³ÀÇ µ¶¸³ 8-ºñÆ® Á¤¼ö ¼öÄ¡µéÀÇ
º¤ÅÍ·Î º¼ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¶Ç´Â Ç׸ñ 0 (PE0)¸¦ ó¸®ÇÏ´Â Reg0¿Í
Reg1¿¡ ÀÖ´Â ¼öÄ¡µé·Î½á <tt>A</tt>¿Í <tt>E</tt>¸¦, ±×¸®°í PE1ÀÇ
·¹Áö½ºÅ͵鿡 ÀÖ´Â ¼öÄ¡µé·Î½á <tt>B</tt>°ú <tt>F</tt>¸¦, ±×¸®°í °è¼Ó ÀÌ·±
½ÄÀ¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù.

ÀÌ ¹®¼­ÀÇ ³ª¸ÓÁö ºÎºÐÀº ÀÌ·± Á¤¼ö º¤Å͵鿡 ´ëÇÑ SIMD º´·Ä ¿¬»êÀ» À§ÇÑ
±âº» Ŭ·¡½ºµé°ú À̵éÀÇ ÇÔ¼öµéÀÌ ¾î¶»°Ô ±¸ÇöµÉ ¼ö ÀÖ´Â °¡¿¡ ´ëÇØ¼­
´ë·«ÀûÀ¸·Î ¸®ºäÇÒ °ÍÀÌ´Ù.

<sect2>´ÙÇü¼º ¿¬»ê(Polymorphic Operations)
<p>

¾î¶² SWAR ¿¬»êµéÀº, ÀÌ ¿¬»êÀÌ ½ÇÁ¦ ÀÌ·± 8-ºñÆ® Çʵåµé¿¡ º´·Ä·Î ¼­·Î
µ¶¸³ÀûÀ¸·Î °è»êµÇµµ·Ï ÀǵµµÇ¾ú´Ù´Â »ç½Ç¿¡ ½Å°æ¾²Áö ¾Ê°í¼­ ÀÏ¹Ý 32-ºñÆ®
Á¤¼ö ¿¬»êµéÀ» »ç¿ëÇØ¼­ ½±°Ô ¼öÇàµÉ ¼ö ÀÖ´Ù. ¿ì¸®´Â ÀÓÀÇÀÇ ÀÌ·± SWAR
¿¬»êµéÀ» <em>´ÙÇü¼º(polymorphic)</em>À̶ó°í ºÎ¸¥´Ù. ¿Ö³Ä¸é ÀÌ ±â´ÉÀÌ
Çʵå ŸÀÔµé(Å©±âµé)¿¡ ÀÇÇØ¼­ ¿µÇâÀ» ¹ÞÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

ÀÓÀÇÀÇ Çʵ尡 ¿µÀÌ ¾Æ´Ñ°¡¸¦ Å×½ºÆ®ÇÏ´Â °ÍÀº ´ÙÇü¼ºÀÌ´Ù. ±×¸®°í ¸ðµç
ºñÆ®´ÜÀ§ ³í¸® ¿¬»êµéµµ ±×·¸´Ù. ¿¹¸¦ µé¾î¼­ ÀÏ¹Ý ºñÆ®´ÜÀ§ and ³í¸®
¿¬»ê(CÀÇ <tt>&</tt> ¿¬»êÀÚ)Àº ºñÆ®´ÜÀ§·Î ¼öÇàÇÏ°í ±× Çʵå Å©±â°¡
¾ó¸¶³ª µÇ´ÂÁö¿¡ ½Å°æ¾²Áö ¾Ê´Â´Ù. À§ ·¹Áö½ºÅ͵éÀÇ ´Ü¼øÇÑ ºñÆ®´ÜÀ§ and
¿¬»ê °á°ú´Â ´ÙÀ½°ú °°Àº °á°ú¸¦ ¸¸µé¾î ³½´Ù:

<code>
          PE3       PE2       PE1       PE0
      +---------+---------+---------+---------+
Reg2  | D&ero;H 7:0 | C&ero;G 7:0 | B&ero;F 7:0 | A&ero;E 7:0 |
      +---------+---------+---------+---------+
</code>

ºñÆ®´ÜÀ§ and ¿¬»êÀº Ç×»ó ¿¬»ê´ë»ó ºñÆ® <em>k</em> ¼öÄ¡µé¿¡ ÀÇÇØ¼­¸¸
¿µÇâÀ» ¹Þ´Â °á°ú ºñÆ® <em>k</em>ÀÇ ¼öÄ¡¸¦ °¡Áö±â ¶§¹®¿¡ ¾î¶² Çʵå
Å©±â¶óµµ µ¿ÀÏÇÑ ´ÜÀÏ ¸í·É¿¡ ÀÇÇØ¼­ Áö¿ø¹Þ´Â´Ù.

<sect2>ºÐÇÒµÈ ¿¬»ê(Partitioned Operations)
<p>

ºÒÇàÇϰԵµ ¸¹Àº Áß¿äÇÑ SWAR ¿¬»êµéÀÌ ´ÙÇü¼ºÀÌ ¾Æ´Ï´Ù. ´õÇϱâ, »©±â,
°öÇϱâ, ³ª´©±â µî°ú °°Àº »çÄ¢¿¬»êµéÀº ¸ðµÎ Çʵåµé°£ÀÇ
ÀÚ¸®¿Ã¸²(carry)/ºô·Á¿È(borrow) »óÈ£ÀÛ¿ëÀ» ÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ¿ì¸®´Â ÀÌ·±
SWAR ¿¬»êµéÀ» <em>ºÐÇÒµÈ(partitioned)</em> °ÍÀ̶ó°í ºÎ¸¥´Ù. ¿Ö³Ä¸é °¢
¿¬»êÀÌ ¹Ýµå½Ã ¿¬»ê´ë»óµéÀ» È¿À²ÀûÀ¸·Î ºÐÇÒÇØ¾ß Çϰí Çʵåµé °£ÀÇ
»óÈ£ÀÛ¿ëÀ» ¸·¾Æ¾ß Çϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ·± È¿°ú¸¦ ¾ò´Â µ¥ »ç¿ëµÉ ¼ö
ÀÖ´Â ¼¼°¡Áö ¼­·Î ´Ù¸¥ ¹æ¹ýµéÀÌ Á¸ÀçÇÑ´Ù.

<sect3>ºÐÇÒµÈ ¸í·É¾î(Partitioned Instructions)
<p>

ºÐÇÒµÈ ¿¬»êµéÀ» ±¸ÇöÇÏ´Â °¡Àå ¸í¹éÇÑ Á¢±Ù¹ýÀº Çʵåµé °£ÀÇ carry/borrow
³í¸®¸¦ ÀÚ¸£´Â "ºÐÇÒµÈ º´·Ä ¸í·É¾î"¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀ» Á¦°øÇÏ´Â
°ÍÀÌ´Ù. ÀÌ·± Á¢±ÙÀº ÃÖ°íÀÇ ¼º´ÉÀ» ³»Áö¸¸ ÇÁ·Î¼¼¼­ÀÇ ¸í·É ÁýÇÕÀ» º¯°æÇؾß
Çϰí ÀϹÝÀûÀ¸·Î Çʵå Å©±â¿¡ ¸¹Àº Á¦ÇѵéÀÌ ÀÖ´Ù(¿¹, 8-ºñÆ® ÇʵåµéÀÌ
Áö¿øµÉ ¼ö ÀÖÁö¸¸ 12-ºñÆ® ÇʵåµéÀº ±×·¸Áö ¸øÇÑ °æ¿ì).

AMD/Cyrix/Intel MMX, Digital MAX, HP MAX, ±×¸®°í Sun VIS´Â ¸ðµÎ ºÐÇÒ
¸í·ÉµéÀÇ Á¦ÇÑµÈ ¹öÀüµéÀ» ±¸ÇöÇÑ °ÍµéÀÌ´Ù. ºÒÇàÇϰԵµ ÀÌ·± ¼­·Î ´Ù¸¥ ¸í·É
¼Â È®ÀåµéÀº Áß¿äÇÑ ´Ù¸¥ Á¦¾àµéÀ» °¡Áö±â ¶§¹®¿¡ ±×µé°£¿¡ ¾Ë°í¸®ÁòµéÀÌ
¼­·Î Æ÷ÆÃµÉ ¼ö ¾ø°Ô ¸¸µç´Ù. ¿¹¸¦ µé¾î¼­ ´ÙÀ½°ú °°Àº ºÐÇÒµÈ ¿¬»êÀÇ
»ùÇøµÀ» »ý°¢Çغ¸ÀÚ:

<code>
  Instruction           AMD/Cyrix/Intel MMX   DEC MAX   HP MAX   Sun VIS
+---------------------+---------------------+---------+--------+---------+
| Absolute Difference |                     |       8 |        |       8 |
+---------------------+---------------------+---------+--------+---------+
| Merge Maximum       |                     |   8, 16 |        |         |
+---------------------+---------------------+---------+--------+---------+
| Compare             |           8, 16, 32 |         |        |  16, 32 |
+---------------------+---------------------+---------+--------+---------+
| Multiply            |                  16 |         |        |    8x16 |
+---------------------+---------------------+---------+--------+---------+
| Add                 |           8, 16, 32 |         |     16 |  16, 32 |
+---------------------+---------------------+---------+--------+---------+
</code>

ÀÌ Å×ÀÌºí¿¡¼­ ¼ýÀÚµéÀº °¢ ¿¬»êÀÌ Áö¿øµÇ´Â Çʵå Å©±âµéÀ» ºñÆ® ´ÜÀ§·Î
³ªÅ¸³½ °ÍÀÌ´Ù. ºñ·Ï ÀÌ Å×À̺íÀÌ Á» ´õ ÈǸ¢ÇÑ °ÍµéÀ» Æ÷ÇÔÇÑ ¸¹Àº ¸í·ÉµéÀ»
»ý·«ÇÑ °ÍÀ̱â´Â ÇÏÁö¸¸ ¸¹Àº Â÷À̰¡ ÀÖ´Ù´Â °ÍÀº ºÐ¸íÇÑ »ç½ÇÀÌ´Ù.
ÀÌÀÇ Á÷Á¢ÀûÀÎ °á°ú´Â °í-¼öÁØ ¾ð¾îµé(High-Level Languages; HLLs)°¡ ½ÇÁ¦·Î
ÇÁ·Î±×·¡¹Ö ¸ðµ¨·Î½á ¾ÆÁÖ ÀûÇÕÇÑ °ÍÀº ¾Æ´Ï´Ù¶ó´Â °Í°ú Æ÷ÆÃÀÌ ÀϹÝÀûÀ¸·Î
¾ÆÁÖ ³ª»Ú´Ù´Â °ÍÀÌ´Ù.

<sect3>±³Á¤ Äڵ带 °¡Áö´Â ºÐÇÒµÇÁö ¾ÊÀº ¿¬»ê(Unpartitioned Operations
		With Correction Code)
<p>

ºÐÇÒ ¸í·É¾îµéÀ» »ç¿ëÇØ¼­ ºÐÇÒ ¿¬»êµéÀ» ±¸ÇöÇÏ´Â °ÍÀº ºÐ¸íÈ÷ È¿À²ÀûÀÏ ¼ö
ÀÖÁö¸¸ ÇÊ¿äÇÑ ºÐÇÒ ¿¬»êÀÌ Çϵå¿þ¾î¿¡ ÀÇÇØ¼­ Áö¿øµÇÁö ¾ÊÀ¸¸é ¾î¶»°Ô ÇÒ
°ÍÀΰ¡? ÇØ´äÀº Çʵ尣 carry/borrowÀ» °¡Áø ¿¬»êµéÀ» ÀÏ¹Ý ¸í·É¾îµéÀ»
»ç¿ëÇØ¼­ ¼öÇàÇÏ°í ¿øÇÏÁö ¾Ê´Â ÇÊµå »óÈ£ÀÛ¿ëÀ» ±³Á¤ÇÏ´Â °ÍÀÌ´Ù. 

À̰ÍÀº ¼øÀüÈ÷ ¼ÒÇÁÆ®¿þ¾î·Î Á¢±ÙÇÏ´Â °ÍÀÌ°í ±³Á¤ÀÛ¾÷Àº ¿À¹öÇìµå¸¦
ÀÏÀ¸Å°Áö¸¸ ¿ÏÀüÈ÷ ÀϹÝÀûÀÎ ÇÊµå ºÐÇÒ·Î Àß ÀÛµ¿ÇÑ´Ù. ÀÌ·± Á¢±Ù¹ýÀº
ºÐÇÒ ¸í·É¿¡ ´ëÇÑ Çϵå¿þ¾î Áö¿øÀÇ °¸µéÀ» ä¿ì´Â µ¥ »ç¿ëµÉ ¼ö Àְųª
¾Æ´Ï¸é Çϵå¿þ¾î Áö¿øÀ» ÀüÇô ÇÏÁö ¾Ê´Â Ÿ°Ù ±â°èµé¿¡ ´ëÇØ¼­ ¿ÏÀüÇÑ ±â´ÉÀ»
Á¦°øÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ¶ÇÇÑ ¿ÏÀüÈ÷ ÀϹÝÀûÀÌ´Ù. »ç½Ç C¿Í
°°Àº ¾ð¾î·Î ÄÚµå ½ÃÄö½ºµéÀ» Ç¥ÇöÇÔÀ¸·Î½á ÀÌ·± Á¢±Ù¹ýÀº SWAR ÇÁ·Î±×·¥µéÀÌ
¿ÏÀüÈ÷ Æ÷ÆÃ °¡´ÉÇÑ °ÍÀ¸·Î ¸¸µç´Ù.

±×·¸´Ù¸é ´ÙÀ½°ú °°Àº Áú¹®ÀÌ ¹Ù·Î »ý±ä´Ù: ºñºÐÇÒ ¿¬»êµéÀ» ±³Á¤ ÄÚµå·Î
SWAR ºÐÇÒ ¿¬»êµéÀ» ½Ã¹°·¹À̼ÇÇÏ´Â °ÍÀÌ Á¤È®È÷ ¾ó¸¶³ª ºñÈ¿À²ÀûÀΰ¡? ±Û½ê
À̰ÍÀº È®½ÇÈ÷ $64k ¹®Á¦ÀÌ´Ù... ÇÏÁö¸¸ ¸¹Àº ¿¬»êµéÀÌ ¿¹»óÇÏ´Â
°Í¸¸Å­ ¾î·Á¿î °ÍÀº ¾Æ´Ï´Ù.

ÀϹÝÀûÀÎ 32-ºñÆ® ¿¬»êµéÀ» »ç¿ëÇØ¼­ ³×°³ÀÇ ¼ººÐÀ» °¡Áö´Â 8-ºñÆ® Á¤¼ö
º¤ÅÍµé µÎ°³¸¦ ´õÇÏ´Â °Í, <tt>x</tt>+<tt>y</tt>À» »ý°¢Çغ¸ÀÚ.

ÀϹÝÀûÀÎ 32-ºñÆ® µ¡¼ÀÀº ½ÇÁ¦·Î Á¤È®ÇÑ °á°ú¸¦ ¸¸µéÁö¸¸ 8-ºñÆ® Çʵåµé Áß
Çϳª¶óµµ ´ÙÀ½ Çʵå·Î ij¸®(ÀÚ¸® ¿Ã¸²)¸¦ ¸¸µç´Ù¸é Á¤È®ÇÑ °á°ú¸¦ ¸¸µé¾î³»Áö
¸øÇÑ´Ù. ±×·¡¼­ ¿ì¸®ÀÇ ¸ñÀûÀº ´Ü¼øÇÏ°Ô ±×·± ij¸®°¡ ÀϾÁö ¾Êµµ·Ï
º¸ÀåÇÏ´Â °ÍÀÌ´Ù. µÎ°³ÀÇ <em>k</em>-ºñÆ® ÇʵåµéÀ» ´õÇÏ´Â °ÍÀº ¸¹¾Æ¾ß
<em>k</em>+1 ºñÆ® °á°ú¸¦ ¸¸µé¾î ³»±â ¶§¹®¿¡ ¿ì¸®´Â °¢ ÇʵåÀÇ msb(most
significant bit)¸¦ ´Ü¼øÈ÷ "¸¶½ºÅ· Á¦°Å(masking out)"ÇÔÀ¸·Î½á ¾î¶² ij¸®µµ
¹ß»ýÇÏÁö ¾Êµµ·Ï º¸ÀåÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº <tt>0x7f7f7f7f</tt>·Î °¢
ÇÇ¿¬»êÀÚ¸¦ ºñÆ®´ÜÀ§ and(bitwise anding)ÇÏ°í ³ª¼­ ÀÏ¹Ý 32-ºñÆ® ´õÇϱ⸦
¼öÇàÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù.

<code>
t = ((x &ero; 0x7f7f7f7f) + (y &ero; 0x7f7f7f7f));
</code>

ÀÌ °á°ú´Â Á¤È®ÇÏ´Ù... °¢ ÇʵåÀÇ msb¸¦ Á¦¿ÜÇÏ°í ¸»ÀÌ´Ù. °¢ Çʵ忡 ´ëÇØ¼­
±³Á¤°ªÀ» °è»êÇØº¸ÀÚ. À̰ÍÀº, <tt>x</tt>¿Í <tt>y</tt>ÀÇ msbµéÀ» <tt>t</tt>¿¡
´ëÇØ¼­ °è»êµÈ 7-ºñÆ® ij¸® °á°ú¿¡  µÎ °³ÀÇ 1-ºñÆ® ºÐÇÒµÈ µ¡¼ÀÀ» ÇÏ´Â
¹®Á¦¿¡ Áö³ªÁö ¾Ê´Â´Ù.  ´ÙÇེ·´°Ôµµ 1-ºñÆ® ºÐÇÒ µ¡¼ÀÀº ÀÏ¹Ý exclusive or ¿¬»êÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù. ±×·¡¼­ ±× °á°ú´Â ´ÙÀ½°ú °°´Ù:

<code>
(t ^ ((x ^ y) &ero; 0x80808080))
</code>

ÁÁ´Ù, ±Û½ê, À̰ÍÀº ±×·¸°Ô ´Ü¼øÇÑ °ÍÀÌ ¾Æ´Ò ¼ö ÀÖ´Ù. °á±¹ 4°³ÀÇ µ¡¼ÀÀ»
À§Çؼ­ 6¹ø ¿¬»êÀ» ¼öÇàÇÑ´Ù. ±×·¯³ª ¿¬»êÀÌ È½¼ö´Â Çʵ尡 ¸î°³Àΰ¡¿¡ µû¶ó
´Ù¸£Áö ¾Ê´Ù´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ. ±×·¡¼­ Á» ´õ ¸¹Àº ÇʵåµéÀÌ ÀÖÀ¸¸é ¿ì¸®´Â
¼Óµµ Çâ»óÀ» ¾òÀ» ¼ö ÀÖ´Ù. »ç½Ç ÇʵåµéÀÌ ´ÜÀÏ ¿¬»ê(Á¤¼ö º¤ÅÍ)À¸·Î
·ÎµåµÇ°í ÀúÀåµÇ¾ú±â ¶§¹®¿¡, ¿ì¸®´Â ¾î¶² ½ÄÀ¸·Îµç ´Ü¼øÇÏ°Ô ¼Óµµ Çâ»óÇÒ ¼ö
ÀÖÀ¸¸ç, ·¹Áö½ºÅÍ °¡¿ë¼ºÀº °³¼±µÉ ¼ö ÀÖ°í, µ¿Àû ÄÚµå ½ºÄÉÁÙ¸µ
Á¾¼Ó¼ºÀÌ ´õ Àû´Ù(ºÎºÐ ¿öµå ÂüÁ¶¸¦ ÇÇÇÒ ¼ö Àֱ⠶§¹®¿¡).

<sect3>ÇÊµå ¼öÄ¡ Á¦¾î(Controlling Field Values)
<p>

ºÎºÐ ¿¬»ê ±¸Çö¿¡ ´ëÇÑ ´Ù¸¥ µÎ°¡Áö Á¢±Ù¹ý µÑ ´Ù ·¹Áö½ºÅ͵鿡 ´ëÇÑ °ø°£
Ȱ¿ëÀ» ÃÖ´ëÈ­ÇÏ·Á°í ÇÏ´Â ¹Ý¸é¿¡, ´ë½Å ÇÊµå °ªµéÀ» Á¦¾îÇØ¼­ ³»ºÎ-Çʵå
ij¸®/ºô¸² À̺¥Æ®µéÀÌ Àý´ë ÀϾÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ Á» ´õ °è»ê Ãø¸é¿¡¼±
È¿À²ÀûÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ¿ì¸®°¡ ´õÇØÁø ¸ðµç ÇÊµå °ªµéÀÌ ¾î¶² Çʵå
¿À¹öÇ÷ο쵵 ÀϾÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾È´Ù¸é ºÎºÐ ´õÇϱ⠿¬»êÀº ÀϹÝÀûÀÎ
´õÇϱ⠸í·ÉÀ» »ç¿ëÇØ¼­ ±¸ÇöµÉ ¼ö ÀÖ´Ù; »ç½Ç ÀÌ·± Á¦ÇÑÀÌ ÁÖ¾îÁö¸é
ÀϹÝÀûÀÎ ´õÇϱ⠿¬»êÀÌ ´ÙÇü¼º(¿ªÀÚÁÖ: Çʵå Å©±â¿¡ µ¶¸³ÀÌ´Ù)ÀÎ °Íó·³ 
º¸ÀÌ°í ±³Á¤ ÄÚµå ¾øÀÌ ¾î¶² Çʵå Å©±âµé¿¡µµ »ç¿ë °¡´ÉÇÏ´Ù. ±×·¡¼­ ¾î¶»°Ô 
ÇÊµå °ªµéÀÌ Ä³¸®/ºô¸² À̺¥Æ®¸¦ ¹ß»ý½ÃŰÁö ¾Êµµ·Ï º¸ÀåÇÒ ¼ö Àִ°¡°¡
°ü°ÇÀÌ µÈ´Ù.

ÀÌ·± Ư¼ºÀ» º¸ÀåÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº ÇÊµå °ªµéÀÇ ¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖ´Â
ºÎºÐÈ­µÈ ¸í·ÉµéÀ» ±¸ÇöÇÏ´Â °ÍÀÌ´Ù. Digital MAX º¤ÅÍ minimum°ú maximum
¸í·ÉµéÀº ³»ºÎ-Çʵå ij¸®/ºô¸²À» ÇÇÇϱâ À§Çؼ­ ÇÊµå °ªµéÀ» Ŭ¸³ÇÎ(¿ªÀÚÁÖ:
ÀÚ¸§)ÇÏ´Â Çϵå¿þ¾îÀûÀÎ Áö¿øÀÌ´Ù.

±×·¯³ª ¿ì¸®°¡ ÇÊµå °ªµéÀÇ ¹üÀ§¸¦ È¿°úÀûÀ¸·Î Á¦ÇÑÇÒ ¼ö ¾ø´Â ºÎºÐÈ­µÈ
¸í·ÉµéÀ» °¡ÁöÁö ¸øÇÑ´Ù°í °¡Á¤ÇÏÀÚ... °©½Î°Ô ij¸®/ºô¸² À̺¥Æ®µéÀÌ ÀÎÁ¢
Çʵåµé »çÀÌ¿¡ °£¼·ÇÏÁö ¾Ê´Â´Ù°í º¸ÀåÇϵµ·Ï ÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ Á¶°ÇÀÌ
Àִ°¡? ÀÌÀÇ ÇØ´äÀº »çÄ¢¿¬»ê Ư¼ºÀÇ ºÐ¼®¿¡ ÀÖ´Ù. µÎ <em>k</em>-ºñÆ®
¼ýÀÚµéÀ» ´õÇÏ´Â °ÍÀº ¸¹¾Æ¾ß <em>k</em>+1 ºñÆ®·Î µÈ ¼ýÀÚ¸¦ »ý¼ºÇÑ´Ù;
±×·¡¼­ <em>k</em>+1 ºñÆ®´Â ÀÏ¹Ý ¸í·ÉµéÀ» »ç¿ëÇÔ¿¡µµ ºÒ±¸ÇÏ°í ±×·± ¿¬»êÀ»
¾ÈÀüÇÏ°Ô ´ãÀ» ¼ö ÀÖ´Ù.

±×·¡¼­ ¿ì¸®ÀÇ ÀÌÀü ¿¹Á¦¾È¿¡¼­ 8-ºñÆ® ÇʵåµéÀÌ ÀÌÁ¦´Â 1-ºñÆ®ÀÇ "ij¸®/ºô¸²
¿ÏÃæ±â(spacers)"¸¦ °¡Áö´Â 7-ºñÆ® ÇʵåµéÀ̶ó°í °¡Á¤ÇÏÀÚ:

<code>
              PE3          PE2          PE1          PE0
      +----+-------+----+-------+----+-------+----+-------+
Reg0  | D' | D 6:0 | C' | C 6:0 | B' | B 6:0 | A' | A 6:0 |
      +----+-------+----+-------+----+-------+----+-------+
</code>

7-ºñÆ® µ¡¼ÀÀÇ º¤ÅÍ´Â ´ÙÀ½°ú °°ÀÌ ¼öÇàµÈ´Ù. ¾î¶² ºÎºÐ ¿¬»êÀ» ½ÃÀÛÇϱâ
ÀÌÀü¿¡ ¸ðµç ij¸® ¿ÏÃæ ºñÆ®µé(<tt>A'</tt>, <tt>B'</tt>, <tt>C'</tt>,
±×¸®°í <tt>D'</tt>)°¡ 0À̶ó´Â °ªÀ» °®´Â´Ù°í °¡Á¤ÇÏÀÚ. ´Ü¼øÇÏ°Ô ÀÏ¹Ý µ¡¼À
¿¬»êÀ» ¼öÇàÇÔÀ¸·Î½á ¸ðµç ÇʵåµéÀº Á¤È®ÇÑ 7-ºñÆ® °ªµéÀ» ¾ò´Â´Ù; ±×·¯³ª
¾î¶² ¿ÏÃæ ºñÆ® °ªµéÀº ÀÌÁ¦ 1ÀÌ µÉ ¼ö ÀÖ´Ù. ¿ì¸®´Â À̰ÍÀ» 
ÀüÅëÀûÀÎ ¿¬»êÀÎ ¿ÏÃæ ºñÆ®µé¿¡ ´ëÇÑ ¸¶½ºÅ©-Á¦°Å¸¦ Çѹø ´õ ¼öÇàÇÔÀ¸·Î½á
±³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿ì¸®ÀÇ 7-ºñÆ® Á¤¼ö º¤ÅÍ µ¡¼À, <tt>x</tt>+<tt>y</tt>Àº
±×·¡¼­ ´ÙÀ½°ú °°´Ù:

<code>
((x + y) &ero; 0x7f7f7f7f)
</code>

À̰ÍÀº ³×°³ÀÇ µ¡¼ÀÀ» µÎ ¸í·É¾î·Î ÁÙÀÎ °ÍÀÌ´Ù. ±×·¡¼­ À̰ÍÀº ÁÁÀº ¼Óµµ
Çâ»óÀ» ºÐ¸íÈ÷ °¡Á®¿Ã °ÍÀÌ´Ù.

ÁÖÀÇ ±íÀº µ¶ÀÚ(sharp reader)´Â ¿ÏÃæ ºñÆ®µéÀ» 0À¸·Î ¼³Á¤ÇÏ´Â °ÍÀº »©±â
¿¬»ê¿¡¼­ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ´«Ä¡Ã«À» °ÍÀÌ´Ù. ±×·¯³ª ±× ±³Á¤ ¹æ¹ýÀÌ
¾ÆÁÖ ´Ü¼øÇÏ´Ù. <tt>x</tt>-<tt>y</tt>¸¦ °è»êÇϱâ À§Çؼ­ ¿ì¸®´Â
<tt>x</tt>¿¡ ÀÖ´Â ¿ÏÃæ ºñÆ®µéÀº ¸ðµÎ 1ÀÌ°í  <tt>y</tt>¿¡ ÀÖ´Â ¿ÏÃæ
ºñÆ®µéÀº ¸ðµÎ 0À̶ó´Â Ãʱâ Á¶°ÇÀ» È®½ÇÇÏ°Ô ÇÑ´Ù. °¡Àå ³ª»Û °æ¿ì¿¡ ¿ì¸®´Â
´ÙÀ½°ú °°Àº °ÍÀ» ¾òÀ» °ÍÀÌ´Ù:

<code>
(((x | 0x80808080) - y) &ero; 0x7f7f7f7f)
</code>

±×·¯³ª Ãß°¡ÀÇ ºñÆ®º° or ¿¬»êÀº Á¾Á¾, <tt>x</tt>ÀÇ °ªÀ» »ý¼ºÇÏ´Â ¿¬»êÀÌ
<tt>& 0x7f7f7f7f</tt> ´ë½Å¿¡ <tt>| 0x80808080</tt>À» ¸¶Áö¸·
½ºÅÜÀ¸·Î½á »ç¿ëÇÑ´Ù´Â °ÍÀ» È®½ÇÇÏ°Ô ÇÔÀ¸·Î½á, ÃÖÀûÈ­µÉ ¼ö ÀÖ´Ù.

¾î¶² ¹æ¹ýÀÌ SWAR ºÎºÐÈ­µÈ ¿¬»êµé¿¡ ´ëÇØ¼­ »ç¿ëµÇ¾î¾ß ÇÒ °ÍÀΰ¡? ±× ´äÀº
´Ü¼øÇϰԵµ "°¡Àå ºü¸¥ ¼Óµµ(Çâ»ó)À» ³»´Â °ÍÀÌ¸é ¹«¾ùÀÌµç µÈ´Ù"´Â °ÍÀÌ´Ù.
Èï¹Ì·Ó°Ôµµ »ç¿ëÇϱâ À§ÇÑ ÀÌ»óÀûÀÎ ¹æ¹ýÀº µ¿ÀÏÇÑ ±â°èÀ§¿¡¼­ µ¿ÀÛÇÏ´Â
µ¿ÀÏÇÑ ÇÁ·Î±×·¥ ³»¿¡¼­(µµ) ¼­·Î ´Ù¸¥ Çʵå Å©±âµé¿¡ ´ëÇØ¼­ ¼­·Î ´Ù¸¦ ¼ö
ÀÖ´Ù.

<sect2>Åë½Å°ú ŸÀÔ º¯È¯ ¿¬»ê(Communication & Type Conversion
		Operations)
<p>

ºñ·Ï, À̹ÌÁö Çȼ¿µé¿¡ ´ëÇÑ ¸¹Àº ¿¬»êµéÀ» Æ÷ÇÔÇØ¼­, ¾î¶² º´·Ä °è»êÀº ÇÑ
º¤ÅÍÀÇ <em>i</em>¹øÂ° °ªÀº ÇÇ¿¬»êÀÚ º¤Å͵éÀÇ <em>i</em>¹øÂ° À§Ä¡¿¡
³ªÅ¸³ª´Â °ªµé¸¸ÀÇ ÇÔ¼öÀ̶ó´Â ¼Ó¼ºÀ» °®°í ÀÖÁö¸¸, À̰ÍÀº ÀϹÝÀûÀ¸·Î ±×·±
°æ¿ì°¡ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î¼­ ºÎµå·´°Ô Çϱâ(smoothing)¿Í °°Àº Çȼ¿
¿¬»êµéÁ¶Â÷ ÀÎÁ¢ Çȼ¿µéÀ» ÇÇ¿¬»êÀÚµé·Î ¿ä±¸Çϰí FFTµé°ú °°Àº º¯È¯µéµµ Á»
´õ º¹ÀâÇÑ(´ú Áö¿ªÈ­µÈ) Åë½Å ÆÐÅϵéÀ» ¿ä±¸ÇÑ´Ù.

SWAR¸¦ À§ÇÑ, ºÎºÐÈ­µÇÁö ¾ÊÀº ½¬ÇÁÆ® ¿¬»êµéÀ» »ç¿ëÇÑ, 1-Â÷¿ø °¡Àå ±ÙÁ¢ÇÑ
ÀÌ¿ô Åë½ÅÀ» È¿À²ÀûÀ¸·Î ±¸ÇöÇÏ´Â °ÍÀº ¾î·Á¿î ÀÏÀÌ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î¼­,
<tt>PE</tt><em>i</em>·ÎºÎÅÍ <tt>PE</tt>(<em>i</em>+1)·Î °ªÀ» À̵¿Çϱâ
À§Çؼ­ ´Ü¼øÇÑ ½¬ÇÁÆ® ¿¬»êÀ¸·Îµµ ÃæºÐÇÏ´Ù. ÇʵåµéÀÌ 8-ºñÆ®ÀÇ ±æÀ̸¦
°¡Áø´Ù¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ °ÍÀÌ´Ù:

<code>
(x << 8)
</code>

±×·¯³ª À̰ÍÀº Ç×»ó ±×·¸°Ô ´Ü¼øÇÏÁö ¾Ê´Ù. ¿¹¸¦ µé¾î¼­
<tt>PE</tt><em>i</em>·ÎºÎÅÍ <tt>PE</tt>(<em>i</em>-1)·Î °ªÀ» À̵¿ÇÏ·Á¸é,
´Ü¼øÇÑ ½¬ÇÁÆ® ¿¬»êÀ¸·Îµµ ÃæºÐÇÏ´Ù. ±×·¯³ª C ¾ð¾î´Â ¿À¸¥ÂÊ ½¬ÇÁÆ®°¡ ºÎÈ£
ºñÆ®¸¦ º¸Á¸ÇÏ´ÂÁö ¾ÊÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÏÁö ¾Ê°í ¾î¶² ±â°èµéÀº ºÎÈ£ ºÙÀº
¿À¸¥ÂÊ ½¬ÇÁÆ®¸¸À» Áö¿øÇÑ´Ù. ±×·¡¼­ ÀϹÝÀûÀÎ °æ¿ì ¿ì¸®´Â ¹Ýµå½Ã
¸í½ÃÀûÀ¸·Î, ÀáÀçÀûÀÎ º¹»çµÈ(replicated) ºÎÈ£ ºñÆ®µéÀ» 0À¸·Î ¸¸µé¾î¾ß
ÇÑ´Ù:

<code>
((x >> 8) &ero; 0x00ffffff)
</code>

"wrap-around Ä¿³Ø¼Çµé"À» ´õÇÏ´Â °Íµµ ¶ÇÇÑ ºÎºÐÈ­µÇÁö ¾ÊÀº ½¬ÇÁÆ®¸¦
»ç¿ëÇØ¼­ »ó´çÈ÷ È¿À²ÀûÀÌ´Ù. ¿¹¸¦ µé¾î¼­ <tt>PE</tt><em>i</em>·ÎºÎÅÍ °ªÀ»
<tt>PE</tt>(<em>i</em>+1)·Î wraparound¸¦ ÀÌ¿ëÇØ¼­ ¿Å±â·Á¸é:

<code>
((x << 8) | ((x >> 24) &ero; 0x000000ff))
</code>

½ÇÁúÀûÀÎ ¹®Á¦´Â Á» ´õ ÀϹÝÀûÀÎ Åë½Å ÆÐÅÏÀÌ ¹Ýµå½Ã ±¸ÇöµÇ¾î¾ß ÇÑ´À °æ¿ì¿¡
¹ß»ýÇÑ´Ù. ´ÜÁö HP MAX ¸í·É¾î ÁýÇÕ¸¸ÀÌ ´ÜÀÏ ¸í·ÉÀ¸·Î ÇʵåµéÀÇ ÀÓÀÇ
Àç¹èÄ¡¸¦ Áö¿øÇÑ´Ù. À̰ÍÀº <tt>Permute</tt>¶ó°í ºÒ¸°´Ù. ÀÌ
<tt>Permute</tt> ¸í·ÉÀº ½ÇÁ¦·Î À̸§ÀÌ À߸ø Áö¾îÁ³´Ù; À̰ÍÀº ÇʵåµéÀÇ
ÀÓÀÇÀÇ permutation<footnote>¿ªÀÚÁÖ: ¼ø¿­À̶ó°í ¹ø¿ªÇÏÁö¸¸ ¼öÇп¡¼­´Â ÀÏÁ¤
°³¼öÀÇ °´Ã¼µéÀÇ ÀÚ¸® À̵¿À» ¸»ÇÑ´Ù</footnote>¸¸ ¼öÇàÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó
¹Ýº¹(repetition)µµ Çã¿ëÇÑ´Ù. °£´ÜÈ÷ ¸»Çؼ­ À̰ÍÀº ÀÓÀÇÀÇ <tt>x[y]</tt>
¿¬»êÀ» ¼öÇàÇÑ´Ù.

ºÒÇàÇϰԵµ <tt>x[y]</tt>´Â ±×·± ¸í·É¾øÀÌ ±¸ÇöÇϱⰡ ¾ÆÁÖ ¾î·Æ´Ù. ÄÚµå
½ÃÄö½º´Â ÀϹÝÀûÀ¸·Î ±æ¸é¼­µµ ºñÈ¿À²ÀûÀÌ´Ù; »ç½Ç À̰ÍÀº ¼øÂ÷ÀûÀÎ
ÄÚµåÀÌ´Ù. À̰ÍÀº ¾ÆÁÖ ½Ç¸Á½º·¯¿î °ÍÀÌ´Ù. MasPar MP1/MP2¿Í Thinking
Machines CM1/CM2/CM200
SIMD ½´ÆÛÄÄÇ»ÅÍ¿¡¼­ÀÇ <tt>x[y]</tt>ÀÇ »ó´ëÀûÀ¸·Î ³ôÀº ¿¬»ê ¼Óµµ´Â ÀÌ·±
±â°èµéÀÇ ¼º´ÉÀÌ ÁÁ¾Ò´ø ÁÖ¿ä ÀÌÀ¯µé ÁßÀÇ ÇϳªÀ̾ú´Ù. ±×·¯³ª
<tt>x[y]</tt>´Â Ç×»ó °¡Àå ±ÙÁ¢ÇÑ ÀÌ¿ô Åë½Åº¸´Ùµµ, ½ÉÁö¾î ±×·±
½´ÆÛÄÄÇ»Å͵鿡¼­Á¶Â÷, ´õ ´À¸®±â ¶§¹®¿¡ ¸¹Àº ¾Ë°í¸®ÁòµéÀÌ <tt>x[y]</tt>
¿¬»êµé¿¡ ´ëÇÑ ¼ö¿ä¸¦ ÃÖ¼ÒÈ­Çϱâ À§Çؼ­ °í¾ÈµÇ¾î ¿Ô¾ú´Ù. °£´ÜÇÏ°Ô ¸»Çؼ­
Çϵå¿þ¾î Áö¿ø¾øÀÌ À̰ÍÀº <tt>x[y]</tt>°¡ ÇÕ¹ýÀûÀÌÁö ¾ÊÀº °Íó·³ ¶Ç´Â
Àû¾îµµ ½Ñ °ÍÀÌ ¾Æ´Ñ°Íó·³ SWAR ¾Ë°í¸®ÁòµéÀ» °³¹ßÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀ»
°ÍÀÌ´Ù.

<sect2>¼øÈ¯ ¿¬»ê(Recurrence Operations) (Ãà¼Ò, ½ºÄµ µî)
<p>

¼øÈ¯À̶õ °è»êµÇ´Â °ªµé°£ÀÇ ¿Ü¸é»ó ¼øÂ÷ÀûÀÎ °ü°è°¡ ÀÖ´Â °è»êÀ» ¸»ÇÑ´Ù.
±×·¯³ª ÀÌ·± ¼øÈ¯ÀÌ °áÇÕÀûÀÎ ¿¬»êµéÀ» Æ÷ÇÔÇÑ´Ù¸é ¼¼°³ÀÇ ±¸Á¶È­µÈ º´·Ä
¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© ±× °è»êÀ» ÀçÄÚµùÇÏ´Â °ÍÀÌ °¡´ÉÇÒ ¼ö ÀÖ´Ù.

º´·ÄÈ­°¡ °¡´ÉÇÑ ¼øÈ¯(recurrence)ÀÇ ´ëºÎºÐÀÇ ÀϹÝÀûÀΠŸÀÔÀº ¾Æ¸¶µµ °áÇÕ
Ãà¼Ò(associative reduction)À¸·Î ¾Ë·ÁÁø Ŭ·¡½ºÀÏ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ¾î¶²
º¤ÅÍ °ªµéÀÇ µ¡¼ÀÀ» °è»êÇϱâ À§Çؼ­ ´ÙÀ½°ú °°Àº ¿ÏÀüÈ÷ ¼øÂ÷ÀûÀÎ C Äڵ带
ÀÛ¼ºÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù:

<code>
t = 0;
for (i=0; i<MAX; ++i) t += x[i];
</code>

±×·¯³ª, ÀÌ·± µ¡¼ÀÀÇ ¼ø¼­´Â ´Ù¼ö º°·Î Áß¿äÇÏÁö ¾Ê´Ù. ºÎµ¿ ¼Ò¼ýÁ¡°ú
±ØÇÑ(saturation) ¼öÇÐÀº µ¡¼ÀÀÇ ¼ø¼­°¡ ¹Ù²î¸é ´Ù¸¥ ´äµéÀ» ³¾ ¼ö ÀÖÁö¸¸
ÀϹÝÀûÀÎ wrap-around Á¤¼ö µ¡¼ÀµéÀº µ¡¼ÀÀÇ ¼ø¼­¿¡ °ü°è¾øÀÌ µ¿ÀÏÇÑ
°á°úµéÀ» ³¾ °ÍÀÌ´Ù. ±×·¡¼­ ¿ì¸®´Â ÀÌ·± ½ÃÄö½º¸¦, ù¹øÂ° µÎ °ªµé ½ÖµéÀ»
´õÇϰí, ±×´ÙÀ½¿¡ ÀÌ·± ºÎºÐÇÕµéÀ» ´õÇϰí ÀÌ·±½ÄÀ¸·Î ´ÜÀÏ ¸¶Áö¸· µ¡¼ÀÀÌ
³ª¿Ã ¶§±îÁö °è¼ÓÇÏ´Â, ¼¼°³ÀÇ-±¸Á¶È­µÈ º´·Ä µ¡¼ÀÀ¸·Î ÀçÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
³×°³ÀÇ 8-ºñÆ® °ªµéÀÇ º¤ÅÍ¿¡ ´ëÇØ¼­ µÎ µ¡¼À ´Ü°èµéÀÌ ÇÊ¿äÇÏ´Ù; ù¹øÂ°
´Ü°è´Â µÎ°³ÀÇ 8-ºñÆ® µ¡¼ÀÀ» ¼öÇàÇϰí, ±×´ÙÀ½ µÎ°³ÀÇ 16-ºñÆ® °á°ú
ÇʵåµéÀ» »ý¼ºÇÑ´Ù(°¢°¢Àº 9-ºñÆ® °á°ú¸¦ ´ã°í ÀÖ´Ù):

<code>
t = ((x &ero; 0x00ff00ff) + ((x >> 8) &ero; 0x00ff00ff));
</code>

µÎ¹øÂ° ½ºÅÜÀº ÀÌ·± µÎ°³ÀÇ 9-ºñÆ® °ªµéÀ» 16-ºñÆ® Çʵåµé¾È¿¡¼­, ´ÜÀÏ
10-ºñÆ® °á°ú¸¦ ¸¸µé±â À§ÇØ, ´õÇÑ´Ù:

<code>
((t + (t >> 16)) &ero; 0x000003ff)
</code>

½ÇÁ¦, µÎ¹øÂ° ½ºÅÜÀº µÎ°³ÀÇ 16-ºñÆ® ÇÊµå µ¡¼ÀµéÀ» ¼öÇàÇÑ´Ù... ±×·¯³ª ¸Ó¸®
16-ºñÆ® µ¡¼ÀÀº Àǹ̰¡ ¾ø´Ù. À̰ÍÀÌ ¹Ù·Î ¿Ö °á°ú°¡ ´ÜÀÏ 10-ºñÆ® °á°ú °ª¿¡
´ëÇØ¼­ ¸¶½ºÅ·µÇ´Â°¡¿¡ ´ëÇÑ ÀÌÀ¯ÀÌ´Ù.

"º´·Ä Á¢µÎ¾î(parallel prefix)" ¿¬»êÀ¸·Î ¾Ë·ÁÁø ½ºÄµÀº ´Ù¼Ò È¿À²ÀûÀ¸·Î
±¸ÇöÇϱⰡ ´õ ¾î·Æ´Ù. À̰ÍÀº ¿Ö³Ä¸é, Ãà¼Ò(reduction)°ú ´Ù¸£°Ô, ½ºÄµÀÌ
ºÎºÐÀûÀÎ(partitioned) °á°ú¸¦ ³»±â ¶§¹®ÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ½ºÄµÀº ¾ÆÁÖ
¸í¹éÇÑ, ºÎºÐÀûÀÎ ¿¬»êµéÀÇ ½ÃÄö½º¸¦ »ç¿ëÇØ¼­ ±¸ÇöµÉ ¼ö ÀÖ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>¸®´ª½º¿¡¼­ÀÇ MMX SWAR
<!-- ------------------------------------------------------------- -->
<p>

¸®´ª½ºÀÌ °æ¿ì IA32 ÇÁ·Î¼¼¼­µéÀÌ ¿ì¸®ÀÇ ÁÖ¿ä °ü½É»çÀÌ´Ù. AMD, Cyrix,
±×¸®°í Intel ¸ðµÎ µ¿ÀÏÇÑ MMX ¸í·É¾îµéÀ» ±¸ÇöÇÑ´Ù°í ÇÏ´Â °ÍÀº ±Â´º½ºÀÌ´Ù.
±×·¯³ª MMX ¼º´ÉÀº ¼­·Î ´Ù¸£´Ù; ¿¹¸¦ µé¾î¼­ K6´Â MMX ÆÄÀÌÇÁ¶óÀÎÀ» ´ÜÁö
Çϳª¸¸ °¡Áø´Ù - (ÀÌ¿¡ ¹ÝÇØ¼­)Pentium with MMX´Â µÎ°³¸¦ °¡Áø´Ù. IntelÀÌ
¾ÆÁ÷µµ ÀÌ·± ¸ÛûÇÑ MMX ±¤°í¸¦ °è¼ÓÇϰí ÀÖ´Ù´Â °ÍÀÌ À¯ÀÏÇÑ ¹èµå´º½ºÀÌ´Ù.
;-)

SWAR¸¦ À§ÇÏ¿© MMX¸¦ »ç¿ëÇÏ´Â µ¥´Â ½ÇÁ¦ ´ÙÀ½°ú °°Àº ¼¼°¡Áö Á¢±Ù¹ýÀÌ ÀÖ´Ù:

<enum>
<item>MMX ¶óÀ̺귯¸® ·çƾµéÀ» »ç¿ëÇÏ´Â °Í. Ưº°È÷ IntelÀº ¸î°¡Áö "¼º´É
¶óÀ̺귯¸®µéÀ»(performance libraries)", <url
url="http://developer.intel.com/drg/tools/ad.htm"> °³¹ßÇß´Ù. À̰ÍÀº ÀϹÝ
¸ÖƼ¹Ìµð¾î ÀÛ¾÷µé¿¡ ´ëÇØ¼­ ¼ÕÀ¸·Î-ÃÖÀûÈ­µÈ ´Ù¾çÇÑ ·çƾµéÀ» Á¦°øÇÑ´Ù.
ÀûÀº ³ë·ÂÀ¸·Î ¸¹Àº ºñ-¸ÖƼ¹Ìµð¾î ¾Ë°í¸®ÁòµéÀÌ ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ-ÁýÁß
Æ÷¼ÇµéÀÇ ÀϺΰ¡ ÀÌ·± ¶óÀ̺귯¸® ·çƾµéÀ» Çϳª ¶Ç´Â ±×ÀÌ»ó »ç¿ëÇØ¼­
±¸ÇöµÉ¼ö ÀÖµµ·Ï ÀçÀÛ¾÷µÉ ¼ö ÀÖ´Ù. ÀÌ·± ¶óÀ̺귯¸®µéÀº ÇöÀç ¸®´ª½º¿¡
´ëÇØ¼­ »ç¿ëºÒ°¡´ÉÀÌÁö¸¸ Æ÷ÆÃ °¡´ÉÇÒ ¼ö ÀÖ´Ù.

<item>MMX ¸í·É¾îµéÀ» Á÷Á¢ »ç¿ëÇÏ´Â °Í. À̰ÍÀº ´Ù¼Ò µÎ°¡Áö Á¡µé¿¡ ÀÇÇØ¼­
º¹ÀâÇÏ´Ù. ù¹øÂ° ¹®Á¦´Â MMX°¡ ÇÁ·Î¼¼¼­¿¡¼­ »ç¿ë°¡´ÉÇÏÁö ¾ÊÀ» ¼ö À־
´ëü ±¸Çö¹°ÀÌ ¹Ýµå½Ã Á¦°øµÇ¾î¾ß ÇÒ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. µÎ¹øÂ° ¹®Á¦´Â
¸®´ª½º¿¡¼­ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â IA32 ¾î¼Àºí·¯°¡ ÇöÀç MMX ¸í·É¾îµéÀ»
ÀÌÇØÇÏÁö ¸øÇÑ´Ù´Â °ÍÀÌ´Ù.

<item>ÀûÀýÇÑ MMX ¸í·É¾îµéÀ» Á÷Á¢ »ý¼ºÇÒ ¼ö ÀÖ´Â °í-¼öÁØ ¾ð¾î³ª ¸ðµâ
ÄÄÆÄÀÏ·¯(module compiler)¸¦ »ç¿ëÇÏ´Â °Í. ±×·± ÅøµéÀº ÇöÀç °³¹ß Áß¿¡
ÀÖÁö¸¸ ¾î¶² °Íµµ ¾ÆÁ÷ ¸®´ª½º¿¡¼­ ¿ÏÀüÇÑ ±â´ÉÀ» °¡Áø °ÍÀÌ ¾ø´Ù. ¿¹¸¦
µé¾î¼­ ÆÛµà ´ëÇб³ (<url
		url="http://dynamo.ecn.purdue.edu/~hankd/SWAR/">)¿¡¼­ ¿ì¸®´Â
ÇöÀç ¸í½ÃÀûÀ¸·Î º´·Ä C ¹æ¾ðÀ¸·Î ÀÛ¼ºµÈ ÇÔ¼öµéÀ» ÃëÇØ¼­ C ÇÔ¼öµé·Î °¡´ÉÇÑ
SWAR ¸ðµâµéÀ» »ý¼ºÇÒ ÄÄÆÄÀÏ·¯¸¦ °³¹ßÇϰí ÀÖÁö¸¸, ¾ÆÁ÷ MMX¸¦ Æ÷ÇÔÇØ¼­ 
SWAR Áö¿øÀÌ °¡´ÉÇÑ °ÍÀÌ¸é ¹«¾ùÀÌµç »ç¿ëÇÑ´Ù. ù¹øÂ° ÇÁ·ÎÅäŸÀÔ ¸ðµâ
ÄÄÆÄÀÏ·¯´Â 1996³â °¡À»¿¡ ¸¸µé¾îÁ³´Ù. ±×·¯³ª ÀÌ ±â¼úÀ» »ç¿ë°¡´ÉÇÑ
»óűîÁö ¸¸µå´Â °ÍÀº óÀ½¿¡ ¿¹»óÇÑ °Íº¸´Ù ´õ ¿À·¡ °É¸®°í ÀÖ´Ù.
</enum>

¿ä¾àÇϸé MMX SWAR´Â ¿©ÀüÈ÷ »ç¿ëÇϱ⿡ ¾î·Æ´Ù. ±×·¯³ª ¿©ºÐÀÇ ³ë·ÂÀ» Á¶±Ý
´õÇϸé À§¿¡¼­ ÁÖ¾îÁø µÎ¹øÂ° Á¢±Ù¹ýÀº Áö±Ýµµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ±×
±âº»ÀÌ´Ù:

<enum>
<item>ÇÁ·Î¼¼¼­°¡ MMX¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¸é MMX¸¦ ¾µ ¼ö ¾ø´Ù. ´ÙÀ½ GCC
ÄÚµå´Â MMX°¡ ¿©·¯ºÐÀÇ ÇÁ·Î¼¼¼­¿¡¼­ Áö¿øµÇ´ÂÁö ¾ÈµÇ´ÂÁö¸¦ Å×½ºÆ®ÇÏ´Â µ¥
»ç¿ëµÉ ¼ö ÀÖ´Ù. Áö¿ø¾ÈµÇ¸é 0ÀÌ ¸®Åϵǰí Áö¿øµÇ¸é 0ÀÌ ¾Æ´Ñ °ªÀÌ ¸®ÅϵȴÙ.

<code>
inline extern
int mmx_init(void)
{
	int mmx_available;

	__asm__ __volatile__ (
		/* Get CPU version information */
		"movl $1, %%eax\n\t"
		"cpuid\n\t"
		"andl $0x800000, %%edx\n\t"
		"movl %%edx, %0"
		: "=q" (mmx_available)
		: /* no input */
	);
	return mmx_available;
}
</code>

<item>MMX ·¹Áö½ºÅÍ´Â ±âº»ÀûÀ¸·Î GCC°¡ <tt>unsigned long long</tt>¶ó°í
ºÎ¸£´Â °Í Áß Çϳª¸¦ °®°í ÀÖ´Ù. ±×·¡¼­ ÀÌ·± ŸÀÔÀÇ ¸Þ¸ð¸®-±â¹Ý º¯¼öµéÀº
¿©·¯ºÐÀÇ MMX ¸ðµâµé°ú ±×µéÀ» È£ÃâÇÏ´Â C ÇÁ·Î±×·¥µé°£ÀÇ Åë½Å ¸ÞÄ«´ÏÁòÀÌ
µÈ´Ù. ¶Ç´Â MMX µ¥ÀÌÅ͸¦ ÀÓÀÇÀÇ 64-ºñÆ® Á¤·ÄµÈ µ¥ÀÌÅÍ ½ºÆ®·°ÃÄ·Î
¼±¾ðÇÒ¼öµµ ÀÖ´Ù (¿©·¯ºÐÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» <tt>unsigned long long</tt>
Çʵ带 °¡Áö´Â <tt>union</tt>ÀÇ Å¸ÀÔÀ¸·Î ¼±¾ðÇÔÀ¸·Î½á 64-ºñÆ®
Á¤·ÄÀÌ µÇµµ·Ï ÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù).

<item>MMX°¡ »ç¿ë°¡´ÉÀ̶ó¸é ¿©·¯ºÐÀº, °¢ ¸í·ÉÀ» ÀÎÄÚµåÇÏ´Â <tt>.byte</tt>
¾î¼Àºí¸® Áö½Ã¾î¸¦ »ç¿ëÇÑ ¿©·¯ºÐÀÇ MMX Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­
MMX ¸í·É¾î <tt>PADDB MM0,MM1</tt>´Â ´ÙÀ½°ú °°ÀÌ GCC ÀÎ-¶óÀÎ ¾î¼Àºí¸®
ÄÚµå·Î ÀÎÄÚµùµÉ ¼ö ÀÖ´Ù:

<code>
__asm__ __volatile__ (".byte 0x0f, 0xfc, 0xc1\n\t");
</code>

MMX´Â ºÎµ¿ ¼Ò¼ýÁ¡ ¿¬»êµé¿¡ ´ëÇØ¼­ »ç¿ëµÇ´Â Çϵå¿þ¾î¿Í µ¿ÀÏÇÑ °ÍµéÀ»
»ç¿ëÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ±×·¡¼­ MMX ÄÚµå¿Í ¼­·Î ¼¯ÀÎ ÄÚµå´Â ºÎµ¿ ¼Ò¼ýÁ¡
¿¬»êµéÀ» È£ÃâÇØ¼­´Â ¾ÈµÈ´Ù. ºÎµ¿ ¼Ò¼ýÁ¡ ½ºÅõµ ¶ÇÇÑ MMX Äڵ带 ½ÇÇàÇϱâ
Àü¿¡ ºñ¿öÁ®¾ß ÇÑ´Ù; ºÎµ¿ ¼Ò¼ýÁ¡ ½ºÅÃÀº ÀϹÝÀûÀ¸·Î ºÎµ¿ ¼Ò¼ýÁ¡À» »ç¿ëÇÏÁö
¾Ê´Â C ÇÔ¼öÀÇ ½ÃÀÛÁ¡¿¡¼­ ºñ¿öÁø´Ù.

<item>´ÙÀ½°ú °°ÀÌ ÄÚµùµÉ ¼ö ÀÖ´Â °Íó·³, <tt>EMMS</tt> ¸í·ÉÀ»
½ÇÇàÇÔÀ¸·Î½á, MMX Äڵ带 Á¾·áÇÏÀÚ:

<code>
__asm__ __volatile__ (".byte 0x0f, 0x77\n\t");
</code>
</enum>

À§ÀÇ °ÍÀÌ ¾ÆÁÖ ÀÌ»óÇϰí Á¶ÀâÇÏ°Ô º¸ÀÎ´Ù¸é ±×·¸´Ù. ±×·¯³ª MMX´Â ¿©ÀüÈ÷ ²Ï
Àþ´Ù... ÀÌ ¹®¼­ÀÇ ³ªÁß ¹öÀüÀº MMX SWAR¸¦ ÇÁ·Î±×·¥ÇÏ´Â Á» ´õ ³ªÀº
¹æ¹ýµéÀ» Á¦°øÇÒ °ÍÀÌ´Ù.

<!--***************************************************************-->
<sect>¸®´ª½º°¡ È£½ºÆ®ÇÏ´Â ºÎ¼Ó ÇÁ·Î¼¼¼­(Linux-Hosted Attached
		Processors)
<!--***************************************************************-->
<p>

ÀÌ·± Á¢±ÙÀº ¿ä»õ º°·Î ÀαⰡ ¾øÁö¸¸ ´Ù¸¥ º´·Ä ó¸® ¹æ¹ýµéÀÌ ¸®´ª½º
½Ã½ºÅÛÀ» È£½ºÆ®¿¡ ºÎ¼Ó º´·É ÄÄÇ»ÆÃ ½Ã½ºÅÛÀ¸·Î »ç¿ëÇÔÀ¸·Î½á ³·Àº ºñ¿ë¿¡
°í¼º´ÉÀ» ¾ò´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù. ¹®Á¦´Â ¼ÒÇÁÆ®¿þ¾î Áö¿øÀÌ ¾ÆÁÖ ÀÛ´Ù´Â
°ÍÀÌ´Ù; ¿©·¯ºÐÀº °ÅÀÇ È¥ÀÚÀÌ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>¸®´ª½º PC´Â ÁÁÀº È£½ºÆ®ÀÌ´Ù(A Linux PC Is A Good Host)
<!-- ------------------------------------------------------------- -->
<p>

ÀϹÝÀûÀ¸·Î ºÎ¼Ó º´·Ä ÇÁ·Î¼¼¼­µéÀº ƯÁ¤ ŸÀÔÀÇ ±â´ÉµéÀ» ¼öÇàÇÏ´Â µ¥
Àü¹®È­µÇ´Â °æÇâÀÌ ÀÖ´Ù.

¿©·¯ºÐÀÌ ¾î¼¸é È¥ÀÚÀÏ·±Áö ¸ð¸¥´Ù´Â »ç½Ç¿¡ ±âÁ×±â Àü¿¡ ´ÙÀ½°ú °°Àº °ÍÀ»
ÀÌÇØÇÏ´Â °ÍÀº À¯¿ëÇÏ´Ù. Áï, ¸®´ª½º PC°¡ ÀûÀýÇÏ°Ô Æ¯Á¤ ½Ã½ºÅÛÀ»
È£½ºÆ®Çϵµ·Ï ÇÏ´Â °ÍÀº ¾î·Á¿ï ¼ö ÀÖÀ»Áö¶óµµ ¸®´ª½º PC´Â ÀÌ·± ŸÀÔÀ¸·Î
»ç¿ëµÇ´Â µ¥¿¡´Â ÀûÀýÇÑ ¸î°³ ¾ÈµÇ´Â Ç÷§Æûµé Áß ÇϳªÀÌ´Ù.

PCµéÀº µÎ°¡Áö ÁÖ¿äÇÑ ÀÌÀ¯ ¶§¹®¿¡ ÁÁÀº È£½ºÆ®ÀÌ´Ù. ù¹øÂ°´Â ½Î°í ½¬¿î
È®Àå ´É·ÂÀÌ´Ù; ´õ ¸¹Àº ¸Þ¸ð¸®, µð½ºÅ©, ³×Æ®¿÷ µî°ú °¡Àº ¸®¼Ò½ºµéÀÌ ½±°Ô
PC¿¡ Ãß°¡µÈ´Ù. µÎ¹øÂ°´Â ÀÎÅÍÆäÀ̽ºÀÇ ¿ëÀ̼ºÀÌ´Ù. ISA¿Í PCI
¹ö½º ÇÁ·ÎÅäŸÀÔ Ä«µåµéÀÌ ³Î¸® »ç¿ë°¡´ÉÇÒ»Ó¸¸ ¾Æ´Ï¶ó º´·Ä Æ÷Æ®´Â ¿ÏÀüÈ÷
ºñ-ħ·«ÀûÀÎ ÀÎÅÍÆäÀ̽º·Î Àû´çÇÑ ¼º´ÉÀ» Á¦°øÇÑ´Ù. IA32 ºÐ¸®µÈ I/O
½ºÆäÀ̽º´Â ¶ÇÇÑ °³º° I/O Æ÷Æ® ÁÖ¼ÒµéÀÇ ·¹º§¿¡¼­ Çϵå¿þ¾î I/O ÁÖ¼Ò
ÇÁ·ÎÅØ¼ÇÀ» Á¦°øÇÔÀ¸·Î½á ÀÎÅÍÆäÀ̽º¸¦ ¿ëÀÌÇÏ°Ô ÇÑ´Ù.

¸®´ª½º´Â ¶ÇÇÑ ÁÁÀº È£½ºÆ® OSÀÌ´Ù. Àüü ¼Ò½º ÄÚµåÀÇ ÀÚÀ¯·Î¿î »ç¿ë °¡´É¼º,
¸¹Àº "ÇÙÅ·" Ä«À̵åµé, À̵éÀº ¸í¹éÈ÷ ´ë´ÜÇÑ µµ¿òÀÌ´Ù. ±×·¯³ª ¸®´ª½º´Â
¶ÇÇÑ ±¦ÂúÀº °ÅÀÇ-½Ç-½Ã°£ ½ºÄÉÁÙ¸µÀ» Á¦°øÇϰí <url
url="http://luz.cs.nmt.edu/~rtlinux/">¿¡´Â ¸®´ª½ºÀÇ ÁøÁ¤ÇÑ ½Ç-½Ã°£
¹öÀüÁ¶Â÷ ÀÖ´Ù. ¾Æ¸¶µµ ¿ÏÀüÇÑ UNIX ȯ°æÀ» Áö¿øÇÏ´Â ¹Ý¸é ¸®´ª½º´Â
Microsoft DOS ¶Ç´Â Windows¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºµÈ °³¹ß ÅøµéÀ»
Áö¿øÇÏ´Â °ÍÀÌ Á¶±Ý ´õ Áß¿äÇÑ »ç½ÇÀÌ´Ù. MSDOS ÇÁ·Î±×·¥µéÀº, ±ÛÀÚ ±×´ë·Î
MSDOS¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÇÁ·ÎÅØÆ¼µå °¡»ó ¸Ó½®À» Á¦°øÇÏ´Â, 
<tt>dosemu</tt>¸¦ »ç¿ëÇÑ ¸®´ª½º ÇÁ·Î¼¼½º ¾È¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ¸®´ª½º´Â
Á» ´õ Á÷Á¢ÀûÀ¸·Î Windows 3.xx ÇÁ·Î±×·¥µé¿¡ ´ëÇØ¼­ Áö¿øÇÑ´Ù:
<tt>wine</tt>, <url
url="http://www.linpro.no/wine/">, °ú °°Àº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î´Â UNIX/X
ȯ°æ¾È¿¡¼­ Á¤È®Çϰí È¿À²ÀûÀ¸·Î ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇÒ¸¸Å­ ÃæºÐÈ÷
Àß Windows 3.11À» ½Ã¹Ä·¹ÀÌÆ®ÇÑ´Ù.

´ÙÀ½ µÎ ¼½¼ÇµéÀº ³»°¡ ¸®´ª½º¿¡¼­ Áö¿øµÇ¾úÀ¸¸é ÇÏ°í ¹Ù¶ó´Â ºÎ¼Ó º´·Ä 
½Ã½ºÅ۵鿡 ´ëÇÑ ¿¹Á¦µéÀ» Á¦°øÇÑ´Ù....

<!-- ------------------------------------------------------------- -->
<sect1>±×°Í¿¡ DSP¸¦ Àû¿ëÇߴ°¡(Did You DSP That)?
<!-- ------------------------------------------------------------- -->
<p>

°í-¼º´É DSP(µðÁöÅÐ ½Ã±×³Î ó¸®(Digital Signal Processing)) ÇÁ·Î¼¼¼­
½ÃÀåÀÌ ¹ø¼ºÁßÀÌ´Ù. ºñ·Ï ÀÌ·± ĨµéÀÌ ÀϹÝÀûÀ¸·Î ¾îÇø®ÄÉÀ̼Ç-Á¾¼ÓÀûÀÎ
½Ã½ºÅ۵鿡 ÀÓº£µùµÇµµ·Ï °í¾ÈµÈ °ÍÀÌÁö¸¸, ±×µéÀº ¶ÇÇÑ °Å´ëÇÑ ºÎ¼Ó º´·Ä
ÄÄÇ»ÅÍµé ¶ÇÇÑ ¸¸µé°í ÀÖ´Ù. ¿Ö ±×·±°¡? 

<itemize>
<item>Texas Instruments (<url
url="http://www.ti.com/">) TMS320¿Í Analog Devices (<url
url="http://www.analog.com/">) SHARC DSP ÆÐ¹Ð¸®¿Í °°Àº ¸¹Àº
°ÍµéÀÌ "Á¢Âø(glue)" ·ÎÁ÷ÀÌ °ÅÀÇ ¾ø´Â ¶Ç´Â ÀüÇô ¾ø´Â º´·Ä
±â°èµéÀ» ¸¸µéµµ·Ï °íµÈ °ÍÀÌ´Ù. 

<item>À̵éÀº ¾ÆÁÖ, Ưº°È÷ MIP³ª MFLOP ´ç ºñ¿ëÀÌ, ½Î´Ù. ±âº» Áö¿ø ·ÎÁ÷ÀÇ
ºñ¿ëÀ» Æ÷ÇÔÇØ¼­ DSP ÇÁ·Î¼¼¼­°¡ ºñ±³°¡´ÉÇÑ ¼º´ÉÀ» °¡Áö´Â PC ÇÁ·Î¼¼¼­ÀÇ
ºñ¿ëÀÇ 10ºÐÀÇ 1À̶ó°í ÇÑ´Ù.

<item>±×µéÀº ¸¹Àº Àü·ÂÀ» ¾²°Å³ª ¸¹Àº ¿­À» ¹ß»ýÇϰųª ÇÏÁö ¾Ê´Â´Ù. À̰ÍÀº
ÀüÅëÀûÀÎ ÇǾ¾ÀÇ ÆÄ¿ö ¼­ÇöóÀÌ¿¡ ÀÇÇÑ Àü·ÂÀ» ÀÌ·± ÀÏ·ÃÀÇ Ä¨µé¿¡ °ø±ÞÇÏ´Â
°ÍÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù - ±×¸®°í ±×°ÍµéÀ» ¿©·¯ºÐÀÇ ÇǾ¾ ÄÉÀ̽º¿¡
³Ö¾îµµ À̰ÍÀÌ ¿ÀºìÀÌ µÇÁö ¾ÊÀ»°ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù.

<item>°í-¼öÁØ (¿¹, C) ÄÄÆÄÀÏ·¯µéÀÌ Àß »ç¿ëÇÒ °Í°°Áö ¾ÊÀº ´ëºÎºÐÀÇ DSP
¸í·É¾î ÁýÇÕ - ¿¹¸¦ µé¾î¼­ "ºñÆ® ¿ª¹æÇâ ¾îµå·¹½Ì(<item>°í-¼öÁØ (¿¹, C)
ÄÄÆÄÀÏ·¯µéÀÌ Àß »ç¿ëÇÒ °Í°°Áö ¾ÊÀº ´ëºÎºÐÀÇ DSP 
¸í·É¾î ÁýÇÕ¿¡´Â ÀÌ»óÇÏ°Ô º¸ÀÌ´Â °ÍµéÀÌ ÀÖ´Ù - ¿¹¸¦ µé¾î¼­ "ºñÆ® ¿ª¹æÇâ
¾îµå·¹½Ì(Bit Reverse Addressing)". ºÎ¼Ó º´·Ä ½Ã½ºÅÛÀ» »ç¿ëÇÏ¸é ±×·±
È£½ºÆ®¿¡¼­ ´ëºÎºÐÀÇ Äڵ带 Á÷¼±ÀûÀ¸·Î(straightforwardly) ÄÄÆÄÀÏÇϰí
½ÇÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ¿¡ ¹ÝÇØ¼­ DSP À§¿¡¼­ ½Ã°£À» ´ëºÎºÐ Àâ¾Æ¸Ô´Â
¸î°³ ¾ÈµÇ´Â ¾Ë°í¸®ÁòµéÀº Á¶½É½º·´°Ô ¼ÕÀ¸·Î-Æ©´×µÈ ÄÚµå·Î ½ÇÇàµÈ´Ù.

<item>ÀÌ·± DSP ÇÁ·Î¼¼¼­µéÀº ½ÇÁ¦ UNIX-like OS¿¡¼­ ½ÇÇàµÇµµ·Ï °í¾ÈµÈ °ÍÀÌ
¾Æ´Ï°í ÀϹÝÀûÀ¸·Î µ¶¸³-½ÇÇàÇü ¹ü¿ë ÄÄÇ»ÅÍ ÇÁ·Î¼¼¼­µé°ú ¸¶Âù°¡Áö·Î ÁÁÁö
¾Ê´Ù. ¿¹¸¦ µé¾î¼­ ¸¹Àº °ÍµéÀÌ ¸Þ¸ð¸® °ü¸® Çϵå¿þ¾î¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù.
´Ù¸¥ ¸»·Î ÇÏ¸é ±×µéÀº Á» ´õ ¹ü¿ë ±â°èµé¿¡ ÀÇÇØ¼­ È£½ºÆ®µÇ¾î¾ß °¡Àå Àß
ÀÛµ¿µÈ´Ù... ¸®´ª½º¿Í °°Àº.
</itemize>

¾î¶² ¿Àµð¿À Ä«µåµé°ú ¸ðµ©µéÀº ¸®´ª½º µå¶óÀ̹öµéÀÌ ¾ï¼¼½ºÇÒ ¼ö ÀÖ´Â DSP
ÇÁ·Î¼¼¼­µéÀ» Æ÷ÇÔÇϰí ÀÖÁö¸¸ ³×°³ ¶Ç´Â ±× ÀÌ»óÀÇ DSP ÇÁ·Î¼¼¼­µéÀ» °¡Áö´Â
ºÎ¼Ó º´·Ä ½Ã½ºÅÛÀ» »ç¿ëÇÏ¸é ±× ´ñ°¡°¡ Å©´Ù.

Texas Instruments TMS320 ½Ã¸®Áî, <url
url="http://www.ti.com/sc/docs/dsps/dsphome.htm">, ´Â ¾ÆÁÖ ¿À·§µ¿¾È ¾ÆÁÖ
ÀαⰡ ÀÖ¾ú°í TMS320-±â¹Ý º´·Ä ÇÁ·Î¼¼¼­¸¦ ¸¸µé±â°¡ ½¬¾ú±â ¶§¹®¿¡
»ç¿ë°¡´ÉÇÑ ±×·± ½Ã½ºÅÛµéÀÌ ²Ï ÀÖ¾ú´Ù. TMS320¿¡´Â Á¤¼ö-¸¸ÀÇ ¹öÀü°ú
ºÎµ¿-¼Ò¼ýÁ¡ °¡´É ¹öÀüµéÀÌ ÀÖ´Ù; ´õ ¿À·¡µÈ µðÀÚÀεéÀº ´Ù¼Ò ºñÀÏ»óÀûÀÎ
´ÜÀÏ-Á¤¹Ðµµ ºÎµ¿-¼Ò¼ýÁ¡ Æ÷¸äÀ» »ç¿ëÇßÁö¸¸ »õ·Î¿î ¸ðµ¨µéÀº IEEE Æ÷¸äµéÀ»
Áö¿øÇÑ´Ù. ¿À·¡µÈ TMS320C4x ('C4x ·Î ¾Ë·ÁÁü)´Â TI-Á¾¼ÓÀûÀÎ ´ÜÀÏ-Á¤¹Ðµµ
ºÎµ¿-¼Ò¼ýÁ¡ Æ÷¸äÀ» »ç¿ëÇØ¼­ 80 MFLOPS±îÁö ȹµæÇß´Ù; ÀÌ¿¡ ¹ÝÇØ¼­ ´ÜÀÏ
'C67x Àº VelociTI¶ó°í ºÒ¸®´Â VLIW-±â¹Ý Ĩ ¾ÆÅ°ÅØÃĸ¦ »ç¿ëÇØ¼­, 
1 GFLOPS ´ÜÀÏ-Á¤¹Ðµµ ¶Ç´Â IEEE ºÎµ¿ ¼Ò¼öÁ¡ ¿¬»ê¿¡ ´ëÇØ¼­ 420
MFLOPS ¹è-Á¤¹Ðµµ±îÁö Á¦°øÇÒ °ÍÀÌ´Ù. ¸ÖƼÇÁ·Î¼¼¼­·Î ÀÌ·± ĨµéÀÇ ±×·ìÀ»
¼³Á¤ÇÏ´Â °ÍÀÌ ½¬¿ï»Ó ¾Æ´Ï¶ó ´ÜÀÏ Ä¨¾È¿¡¼­µµ 'C8x ¸ÖƼÇÁ·Î¼¼¼­´Â µÎ°³
¶Ç´Â ³×°³ÀÇ Á¤¼ö ºÎ¼Ó DSPµé°ú ÇÔ²² 100 MFLOPS IEEE ºÎµ¿-¼Ò¼ýÁ¡ RISC
¸¶½ºÅÍ ÇÁ·Î¼¼¼­¸¦ Á¦°øÇÒ °ÍÀÌ´Ù.

¸î°³ÀÇ ºÎ¼Ó º´·Ä ½Ã½ºÅ۵麸´Ù ´õ ¸¹ÀÌ »ç¿ëµÈ¹Ù ÀÖ´Â ´Ù¸¥ DSP ÇÁ·Î¼¼¼­
ÆÐ¹Ð¸®´Â Analog Devices <url url="http://www.analog.com/"> »çÀÇ 
SHARC(ADSP-2106x·Î ¾Ë·ÁÁü)ÀÌ´Ù. ÀÌ·± ĨµéÀº ¿ÜºÎ Á¢Âø(glue) ³í¸® ¾øÀÌ
6°³ÀÇ ÇÁ·Î¼¼¼­ °øÀ¯ ¸Þ¸ð¸® ¸ÖƼÇÁ·Î¼¼¼­·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù. ±×¸®°í Á¡ ´õ
Å« ½Ã½ºÅ۵鵵 ¿©¼¸°³ÀÇ 4-ºñÆ® links/chip(Ĩ´ç ¸µÅ©)¸¦ »ç¿ëÇØ¼­ ¼³Á¤µÉ ¼ö
ÀÖ´Ù. ´ëºÎºÐÀÇ ´õ Å« ½Ã½ºÅÛµéÀº ±º»ç¿ë ¾îÇø®ÄÉÀ̼ÇÀ» ¸ñÇ¥·Î ÇÏ´Â °Í
°°°í ¾à°£ ºñ½Î´Ù. ±×·¯³ª Integrated
Computing Engines, Inc., <url url="http://www.iced.com/">, ȸ»ç´Â
GreenICE¶ó°í ºÒ¸®´Â Èï¹Ì·Î¿î Á¶±×¸¸ µÎ-º¸µå PCI Ä«µå ¼ÂÀ» ¸¸µé¾ú´Ù. ÀÌ
À¯´ÖÀº 16°³ÀÇ SHARC ÇÁ·Î¼¼¼­µé ¹è¿­À» °¡Áö°í ÀÖ°í ´ÜÀÏ-Á¤¹Ðµµ IEEE
Æ÷¸äÀ» »ç¿ëÇØ¼­ ¾à 1.9 GFLOPSÀÇ ÃÖ°í ¼Óµµ¸¦ ³¾ ¼ö ÀÖ´Ù. GreenICE´Â
$5,000 ¹Ì¸¸ÀÇ °¡°ÝÀÌ´Ù.

³» ÀǰßÀ¸·Î´Â ºÎ¼Ó º´·É DSPµéÀº ½ÇÁ¦·Î ¸®´ª½º º´·Ä ó¸® Ä¿¹Â³ÊƼ°¡ ´õ
¸¹Àº ½Å°æÀ» ½á¾ß ¸¶¶¥ÇÒ °ÍÀ̶ó°í »ý°¢ÇÑ´Ù....

<!-- ------------------------------------------------------------- -->
<sect1>FPGAs°ú Àç¼³Á¤ °¡´ÉÇÑ ³í¸® ¿¬»ê
<!-- ------------------------------------------------------------- -->
<p>

º´·Ä 󸮰¡ °¡Àå ³ôÀº ¼º´ÉÇâ»óÀ» ¾ò±â À§ÇÑ °ÍÀÌ ÀüºÎÀ̶ó¸é ¿Ö Ä¿½ºÅÒ
Çϵå¿þ¾î¸¦ ¸¸µéÁö ¾Ê´Â°¡? ±Û½ê, ¿ì¸®´Â ¸ðµÎ ´äÀ» ¾Ë°í ÀÖ´Ù; À̰ÍÀº ³Ê¹«
ºñ½Î¸ç °³¹ßÇϱ⿡ ½Ã°£ÀÌ ³Ê¹« ¿À·¡ °É¸®°í Á¶±ÝÀÌ¶óµµ ¾Ë°í¸®ÁòÀ» º¯°æÇÒ
¶§¸é ¾µ¸ð¾ø´Â °ÍÀÌ µÇ¹ö¸°´Ù. ±âŸ µîµî. ±×·¯³ª ÀüÀÚÀûÀ¸·Î ÀçÇÁ·Î±×·¡¹Ö
°¡´ÉÇÑ FPGA(Çʵå ÇÁ·Î±×·¡¸Óºí °ÔÀÌÆ® ¾î·¹ÀÌ(Field Programmable Gate
			Arrays))µéÀÇ ¿äÁòÀÇ Áøº¸°¡ ÀÌ·± Á¦¾àµéÀÇ ´ëºÎºÐÀ» ¹«·ÂÈ­½ÃÄÑ
¹ö·È´Ù. Áö±Ý °ÔÀÌÆ® ¹ÐÁýµµ°¡ ÃæºÐÈ÷ ³ô¾Æ¼­ ´Ü¼øÇÑ Àüü ÇÁ·Î¼¼¼­°¡ ÇϳªÀÇ
FPGA¿¡ µé¾î°¡µµ·Ï ¸¸µé¾îÁú ¼ö ÀÖ°í FPGA¸¦ Àç¼³Á¤(ÀçÇÁ·Î±×·¥)ÇÏ´Â °Íµµ
¶ÇÇÑ, ÇÑ ¾Ë°í¸®ÁòÀÇ ÇÑ ±¹¸é¿¡¼­ ´ÙÀ½À¸·Î ¿Å°Ü°¥ ¶§¶óµµ Àç¼³Á¤ÇÏ´Â °ÍÀÌ
Ÿ´çÇÒ¸¸Å­ÀÇ ¼öÁرîÁö ³·¾ÆÁ³´Ù.

ÀÌ ³»¿ëÀº ½ÉÀåÀÌ ¾àÇÑ »ç¶÷µéÀ» À§ÇÑ °ÍÀÌ ¾Æ´Ï´Ù: ¿©·¯ºÐÀº FPGA ¼³Á¤¿¡
´ëÇØ¼­, ¸®´ª½º È£½ºÆ® ½Ã½ºÅÛ À§ÀÇ ÇÁ·Î±×·¥µé¿¡ ´ëÇØ¼­ ÀÎÅÍÆäÀ̽ºÇÏ´Â
·Î¿ì-·¹º§ Äڵ带 ÀÛ¼ºÇÏ´Â Àϰú ÇÔ²², VHDL°ú °°Àº Çϵå¿þ¾î
±â¼ú(description) ¾ð¾îµé·Î ÀÛ¾÷ÇØ¾ß ÇÑ´Ù. ±×·¯³ª FPGAÀÇ ºñ¿ëÀº ³·°í
Ưº°È÷ ³·Àº-Á¤¹Ðµµ Á¤¼ö µ¥ÀÌÅÍ(½ÇÁ¦, ÀÌ·± Àç·áÀÇ Á¶±×¸¸ »óÀ§ÁýÇÕ¿¡
		´ëÇØ¼­´Â SWAR°¡ ´õ ³´´Ù)¿¡ ´ëÇØ¼­ ÀÛ¾÷ÇÏ´Â ¾Ë°í¸®Áòµé¿¡ ´ëÇØ¼­
ºñ¿ëÀÌ ³·°í, FPGA´Â ¿©·¯ºÐÀÌ µ¥ÀÌÅ͸¦ Á¦°øÇÏ´Â ¼Óµµ¸¸Å­ ºü¸£°Ô º¹ÀâÇÑ
¿¬»êµéÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ´Ü¼øÇÑ FPGA-±â¹Ý ½Ã½ºÅÛµéÀº À¯ÀüÀÚ
µ¥ÀÌÅͺ£À̽º °Ë»ö¿¡¼­ ½´ÆÛÄÄÇ»Åͺ¸´Ù ´õ ³ªÀº ¼Óµµ¸¦ ¸¸µç´Ù.

ÀûÀýÇÑ FPGA-±â¹Ý Çϵå¿þ¾î¸¦ ¸¸µå´Â ´Ù¸¥ ȸ»çµéÀÌ ÀÖÁö¸¸ ´ÙÀ½°ú °°Àº µÎ
ȸ»ç°¡ ÁÁÀº »ùÇÃÀ» Á¦½ÃÇÑ´Ù.

Virtual Computer Company´Â µ¿ÀûÀ¸·Î Àç¼³Á¤ °¡´ÉÇÑ SRAM-±â¹Ý Xilinx
FPGAµéÀ» »ç¿ëÇÑ ´Ù¾çÇÑ Á¦Ç°µéÀ» Á¦°øÇÑ´Ù. ±×µéÀÇ 8/16ºñÆ® "°¡»ó ISA
ÇÁ·ÎÅä º¸µå(Virtual ISA Proto Board)" <url
url="http://www.vcc.com/products/isa.html">´Â $2,000 ¹Ì¸¸ÀÌ´Ù.

¾ËÅ×¶ó(Altera) ARC-PCI(Altera Reconfigurable Computer, PCI bus),  <url
url="http://www.altera.com/html/new/pressrel/pr_arc-pci.html">,
´Â ºñ½ÁÇÑ Å¸ÀÔÀÇ Ä«µåÀÌÁö¸¸ ¾ËÅ×¶ó FPGAµé°ú ISA°¡ ¾Æ´Ñ PCI ¹ö½º ÀÎÅÍÆäÀ̽º¸¦
»ç¿ëÇÑ´Ù.

¸¹Àº ¼³°è Åøµé, Çϵå¿þ¾î ±â¼ú(description)¾ð¾î, ÄÄÆÄÀÏ·¯, ¶ó¿ìÅÍ, ¸ÊÆÛ
µîÀº À©µµ¿ìÁ DOS¿¡¼­¸¸ ½ÇÇàµÇ´Â ¿ÀºêÁ§Æ® ÄÚµå·Î Á¦°øµÈ´Ù. È£½ºÆ®
ÇǾ¾¿¡´Ù DOS/Windows¸¦ °¡Áø µð½ºÅ© ÆÄƼ¼ÇÀ» °¡Áö°í ±×°ÍµéÀÌ ÇÊ¿äÇÒ
¶§¸¶´Ù ¸®ºÎÆÃÇÑ´Ù. ±×·¯³ª ÀÌµé ¼ÒÇÁÆ®¿þ¾î ÆÑŰÁöµéÀº ¸®´ª½º¿¡¼­
<tt>dosemu</tt>¸¦ »ç¿ëÇØ¼­ ¶Ç´Â, <tt>wine</tt>¿Í °°Àº À©µµ¿ìÁî
¿¡¹Ä·¹ÀÌÅ͸¦ »ç¿ëÇØ¼­ ½ÇÇàµÉ ¼ö ÀÖ´Ù.

<!--***************************************************************-->
<sect>ÀϹÝÀûÀÎ °ü½É°Å¸® Áß¿¡¼­
<!--***************************************************************-->
<p>

ÀÌ ¼½¼Ç¿¡¼­ ´Ù·ç¾îÁö´Â ³»¿ëÀº ¸ðµç ¸®´ª½ºÀÇ ³×°¡Áö º´·Ä ó¸® ¸ðµ¨µé¿¡
Àû¿ëµÇ´Â °ÍÀÌ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ÄÄÆÄÀÏ·¯
<!-- ------------------------------------------------------------- -->
<p>

³ª´Â ÁÖ·Î ÄÄÆÄÀÏ·¯ ¿¬±¸ÀÚ·Î ¾Ë·ÁÁ® ÀÖ´Ù. ±×·¡¼­ ³ª´Â ¸®´ª½º ½Ã½ºÅ۵鿡
´ëÇÑ È¿À²ÀûÀÎ º´·Ä Äڵ带 ÀÚµ¿À¸·Î »ý¼ºÇÏ´Â À§´ëÇÑ ÄÄÆÄÀÏ·¯µéÀÌ ¸¹ÀÌ
ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ¾úÀ¸¸é ÇÑ´Ù. ºÒÇàÇϰԵµ ´Ù¾çÇÑ ¸í½ÃÀû Åë½Å°ú
´Ù¸¥ º´·Ä ¿¬»êµéÀ» »ç¿ëÇÑ ¿©·¯ºÐÀÇ º´·Ä ÇÁ·Î±×·¥À» GCC·Î ÄÄÆÄÀ쵃 C
ÄÚµå·Î Ç¥ÇöÇÔÀ¸·Î½á ¼º´ÉÀ» ³ôÀÏ ¼ö ÀÖ´Ù´Â °ÍÀº ¾î·Æ´Ù´Â °ÍÀÌ Áø½ÇÀÌ´Ù.

´ÙÀ½ ¾ð¾î/ÄÄÆÄÀÏ·¯ ÇÁ·ÎÁ§Æ®µéÀÌ °í-¼öÁØ ¾ð¾îµé·ÎºÎÅÍ È¿À²ÀûÀÎ Äڵ带
¸¸µå´Â ³ë·ÂÀ» Çϰí ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÌµé °¢°¢Àº ±×°ÍÀÌ ÁöÇâÇÏ´Â
ÇÁ·Î±×·¡¹Ö ÀÛ¾÷µéÀÇ Á¾·ù¿¡ ´ëÇØ¼­´Â È¿À²ÀûÀÌÁö¸¸ ¾î¶² °Íµµ °­·ÂÇÑ ¹ü¿ë
¾ð¾îÀÌÁö ¾Ê°í, GCC·Î ÄÄÆÄÀÏÇÒ C ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀ» ¿µ¿øÈ÷ ¸ØÃß°Ô
ÇÒ ¸¸ÇÑ °ÍÀÌ ¾ø´Ù. (±×·¡µµ) À̰ÍÀº ÁÁ´Ù. ÀÌ·± ¾ð¾îµé°ú ÄÄÆÄÀÏ·¯µéÀ»
±×µéÀÌ ÀǵµµÈ ¹Ù´ë·Î »ç¿ëÇÏ°í ¿©·¯ºÐÀº ´õ ªÀº °³¹ß ½Ã°£, ½¬¿î µð¹ö±ë°ú
À¯Áö º¸¼ö µîÀÇ º¸»óÀ» ¹ÞÀ» °ÍÀÌ´Ù.

¿©±â¿¡ ¸®½ºÆ®µÈ(¾ËÆÄºª ¼ø¼­·Î) °Íµé ¿Ü¿¡ ¸¹Àº ¾ð¾îµé°ú ÄÄÆÄÀÏ·¯µéÀÌ
ÀÖ´Ù. ÀÚÀ¯·Ó°Ô »ç¿ë°¡´ÉÇÑ ÄÄÆÄÀÏ·¯µé(À̵éÁß ´ëºÎºÐÀº ¸®´ª½º º´·Ä 󸮿¡
´ëÇØ¼­ ¾Æ¹«°Íµµ ÇÏÁö ¸øÇÑ´Ù)Àº <url
url="http://www.idiom.com/free-compilers/">¿¡ ÀÖ´Ù.

<sect2>Fortran 66/77/PCF/90/HPF/95
<p>

Àû¾îµµ °úÇÐ ÄÄÇ»ÆÃ »çȸ¿¡¼­´Â ¾ðÁ¦³ª Æ÷Æ®¶õ(Fortran)ÀÌ ÀÖ´Ù. ¹°·Ð ÀÌÁ¦
Æ÷Æ®¶õÀº 1966³â ANSI Ç¥ÁØ¿¡¼­ ±×·¨´ø °Í°ú ¶È°°Àº °ÍÀ» ÀǹÌÇÏÁö ¾Ê´Â´Ù.
±âº»ÀûÀ¸·Î Æ÷Æ®¶õ 66Àº ¾ÆÁÖ ´Ü¼øÇÑ °ÍÀÌ´Ù. Æ÷Æ®¶õ 77Àº ¸¹Àº °ÍµéÀ»
Ãß°¡Çß°í À̵é Áß °¡Àå ÁÖ¸ñÇÒ ¸¸ÇÑ °ÍÀº ¹®ÀÚ µ¥ÀÌÅÍ¿¡ ´ëÇÑ °³¼±µÈ Áö¿ø°ú
<tt>DO</tt> ·çÇÁ ¹®¹ýÀÇ º¯°æÀÌ´Ù. PCF (Parallel Computing Forum)
Æ÷Æ®¶õÀº 77¿¡´Ù ´Ù¾çÇÑ º´·Ä ó¸® Áö¿øÀ» ´õÇÏ·Á°í ½ÃµµÇÏ¿´´Ù. Æ÷Æ®¶õ 90Àº
¿ÏÀüÇÑ-±â´ÉÀÇ Çö´ë ¾ð¾îÀÌ´Ù. À̰ÍÀº ±âº»ÀûÀ¸·Î C++-ºñ½ÁÇÑ °´Ã¼-ÁöÇâ
ÇÁ·Î±×·¡¹Ö ±â´Éµé°ú º´·Ä ¹è¿­ ¹®¹ýÀ» 77 ¾ð¾î¿¡ Ãß°¡ÇÑ °ÍÀÌ´Ù. µÎ
¹öÀüµé(HPF-1°ú HPF-2)¸¦ °¡Áö´Â HPF (High-Performance Fortran, <url
		url="http://www.crpc.rice.edu/HPFF/home.html">)´Â ±âº»ÀûÀ¸·Î
Áøº¸µÈ, Ç¥ÁØÈ­µÈ, ¿ì¸®µéÀÌ º¸Åë CM Æ÷Æ®¶õ, MasPar Æ÷Æ®¶õ, ¶Ç´Â Æ÷Æ®¶õ
D·Î ¾Ë°í ÀÖ´Â °ÍÀÇ ¹öÀüÀÌ´Ù; À̰ÍÀº ´Ù¾çÇÑ º´·Ä ó¸® °³¼±Á¡µéÀ» ³Ö¾î¼­
Æ÷Æ®¶õ 90À» È®ÀåÇÑ °ÍÀÌ´Ù. ÁÖ·Î µ¥ÀÌÅÍ ·¹À̾ƿôÀ» ÁöÁ¤ÇÏ´Â µ¥ ÃÐÁ¡À» µÐ
°ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î Æ÷Æ®¶õ 95´Â 90À» »ó´ëÀûÀ¸·Î Àû°Ô ÁõÁø½ÃŰ°í °³¼±ÇÑ
°ÍÀÌ´Ù. 

C·Î ÀÛ¾÷ÇÑ °ÍÀº ÀϹÝÀûÀ¸·Î <tt>f2c</tt>, <tt>g77</tt> (¸®´ª½º-Á¾¼ÓÀûÀÎ
ÈǸ¢ÇÑ °³°üÀº <url
url="http://linux.uni-regensburg.de/psi_linux/gcc/html_g77/g77_91.html">¿¡
ÀÖ´Ù), ¶Ç´Â <url url="http://extweb.nag.co.uk/nagware/NCNJNKNM.html">
»ó¾÷¿ë ¹öÀü Æ÷Æ®¶õ 90/95°úµµ Àß ÀÛµ¿ÇÑ´Ù. À̰ÍÀº ÀÌµé ¸ðµç ÄÄÆÄÀÏ·¯µéÀÌ
°á°úÀûÀ¸·Î GCCÀÇ ¹é-¿£µå¿¡¼­ »ç¿ëµÈ °Í°ú ÄÚµå-»ý¼º¿¡¼­ µ¿ÀÏÇϱâ
¶§¹®ÀÌ´Ù.

SMP¿¡ ´ëÇÑ Äڵ带 »ý¼ºÇÒ ¼ö ÀÖ´Â »ó¾÷¿ë Æ÷Æ®¶õ º´·Ä±â(parallelizer)µéÀº
<url url="http://www.kai.com/">°ú <url
url="http://www.psrv.com/vast/vast_parallel.html">¿¡¼­ ãÀ» ¼ö
ÀÖ´Ù. ÀÌ·± ÄÄÆÄÀÏ·¯µéÀÌ SMP ¸®´ª½º¿¡¼­ ÀÛµ¿ÇÒ·±Áö ¾ÈÇÒ·±Áö´Â ¸ð¸£Áö¸¸
Ç¥ÁØ POSIX ½º·¹µåµé(Áï, LinuxThreads)°¡ SMP ¸®´ª½ºÇÏ¿¡¼­ ÀÛµ¿ÇÑ´Ù¸é
±×°ÍÀº °¡´ÉÇÒ °ÍÀÌ´Ù.

Æ÷Æ®·£µå ±×·ì(Portland Group)Àº, <url url="http://www.pgroup.com/">, SMP
¸®´ª½º¿¡ ´ëÇÑ Äڵ带 »ý¼ºÇÏ´Â »ó¾÷¿ë º´·ÄÈ­ HPF Æ÷Æ®¶õ(±×¸®°í C, C++)¸¦
°¡Áö°í ÀÖ´Ù; ±×µéÀº ¶ÇÇÑ MPI³ª PVMÀ» »ç¿ëÇÑ Å¬·¯½ºÅ͵éÀ» Ÿ°ÙÀ¸·Î ÇÑ
¹öÀüµµ °®°í ÀÖ´Ù.  <url url=" http://www.apri.com/">ÀÇ FORGE/spf/xHPF
Á¦Æûµéµµ SMPµéÀ̳ª Ŭ·¯½ºÅ͵鿡 ´ëÇØ¼­ À¯¿ëÇÒ °ÍÀÌ´Ù.

º´·Ä ¸®´ª½º ½Ã½ºÅÛµé°ú ÀÛ¾÷ÀÌ °¡´ÉÇϵµ·Ï ¸¸µé¾îÁú ¼ö ÀÖ´Â, ÀÚÀ¯·Ó°Ô
»ç¿ë°¡´ÉÇÑ º´·ÄÈ­ Æ÷Æ®¶õµéÀº ´ÙÀ½°ú °°Àº °ÍµéÀ» Æ÷ÇÔÇÑ´Ù:

<itemize>
<item>ADAPTOR (ÀÚµ¿ µ¥ÀÌÅÍ º´·ÄÈ­ º¯È¯±â(Automatic DAta Parallelism
			TranslaTOR), <url
url="http://www.gmd.de/SCAI/lab/adaptor/adaptor_home.html">), ´Â
HPF¸¦ MPI ¶Ç´Â PVM È£Ãâµé·Î ÀÌ·ç¾îÁø Æ÷Æ®¶õ 77/90 ÄÚµå·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù.
±×·¯³ª ¸®´ª½º´Â ¾ð±ÞÇÏÁö ¾Ê´Â´Ù.

<item>Ä«³×±â ¸á·ÐÀÇ Fx <url url="http://www.cs.cmu.edu/~fx/Fx"> ´Â
¸î°¡Áö ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵éÀ» ¸ñÇ¥·Î »ï´Â´Ù. ±×·¯³ª ¸®´ª½º´Â?

<item>HPFC (ÇÁ·ÎÅäŸÀÔ HPF ÄÄÆÄÀÏ·¯, <url
url="http://www.cri.ensmp.fr/~coelho/hpfc.html">) PVM È£Ãâµé·Î ÀÌ·ç¾îÁø
Æ÷Æ®¶õ 77À» »ý¼ºÇÑ´Ù. À̰ÍÀº ¸®´ª½º Ŭ·¯½ºÅÍ¿¡¼­ »ç¿ë°¡´ÉÀΰ¡?

<item>PARADIGM (ºÐ»ê-¸Þ¸ð¸® ¹ü¿ë ¸ÖƼÄÄÇ»ÅÍ¿¡ ´ëÇÑ º´·ÄÈ­
		ÄÄÆÄÀÏ·¯(PARAllelizing compiler for DIstributed-memory
			General-purpose Multicomputers), <url
url="http://www.crhc.uiuc.edu/Paradigm/">) ´Â ¸®´ª½º¿¡¼­ »ç¿ëµÉ ¼ö
Àִ°¡?

<item>Polaris ÄÄÆÄÀÏ·¯, <url
url="http://ece.www.ecn.purdue.edu/~eigenman/polaris/">, ´Â °øÀ¯ ¸Þ¸ð¸®
¸ÖƼÇÁ·Î¼¼½ºµé¿¡ ´ëÇÑ Æ÷Æ®¶õ Äڵ带 »ý¼ºÇÏ°í ¾ó¸¶ ¾ÈÀ־ PAPERS 
¸®´ª½º Ŭ·¯½ºÅ͸¦ ´Ù½Ã ¸ñÇ¥·Î »ïÀ» °ÍÀÌ´Ù.

<item>PREPARE, <url
url="http://www.irisa.fr/EXTERNE/projet/pampa/PREPARE/prepare.html">, ´Â
MPI Ŭ·¯½ºÅ͵éÀ» ¸ñÇ¥·Î »ï´Â´Ù... IA32 ÇÁ·Î¼¼¼­µé¿¡¼­ ½ÇÇàµÇ´Â Äڵ带
»ý¼ºÇÒ ¼ö ÀÖ´ÂÁö ¾ø´ÂÁö´Â ºÐ¸íÇÏÁö ¾Ê´Ù.

<item>ADAPT¿Í ADLIB¸¦ Á¶ÇÕÇØ¼­, shpf(°í¼º´É Æ÷Æ®¶õ ÄÄÆÄÀÏ ½Ã½ºÅÛ
		ºÎºÐÁýÇÕ(Subset High Performance Fortran compilation system),
		<url
		url="http://www.ccg.ecs.soton.ac.uk/Projects/shpf/shpf.html">)´Â
MPI È£ÃâµéÀ» °¡Áö´Â Æ÷Æ®¶õ 90À» »ý¼ºÇÏ´Â ÆÛºí¸¯ µµ¸ÞÀο¡ ÀÖ´Â °ÍÀÌ´Ù...
±×·¡¼­ ¿©·¯ºÐÀÌ ¸®´ª½º¿¡¼­ Æ÷Æ®¶õ 90 ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù¸é...

<item>SUIF (½ºÅÄÆ÷µå ´ëÇб³ Áß°£ Çü½Ä(Stanford University Intermediate
Form), <url url="http://suif.stanford.edu/"> ÂüÁ¶) ´Â C¿Í Æ÷Æ®¶õ ¸ðµÎ¿¡
´ëÇÑ º´·ÄÈ­ ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù. À̰ÍÀº Àü¹Ì ÄÄÆÄÀÏ·¯ ÀÎÇÁ¶ó
ÇÁ·ÎÁ§Æ®(National Compiler Infrastructure Project)¿¡ ´ëÇØ¼­µµ °ü½ÉÀ»
°¡Áö°í ÀÖ´Ù. ±×·¡¼­ º´·Ä ¸®´ª½º ½Ã½ºÅÛµéÀ» ¸ñÇ¥·Î ÇÏ´Â »ç¶÷ÀÌ Àִ°¡?
</itemize>

Æ÷Æ®¶õÀÇ ´Ù¾çÇÑ ¹æ¾ðµé¿¡ ´ëÇÑ ÀáÀçÀûÀ¸·Î À¯¿ëÇÑ ¸¹Àº ÄÄÆÄÀÏ·¯µéÀ»
»©¸Ô¾ú´Ù°í È®½ÅÇÏÁö¸¸ ÃßÀûÇϱ⿡ ¾î·Á¿î Á¡ÀÌ ¸¹´Ù. ³ªÁß¿¡ ³ª´Â
¸®´ª½º¿¡¼­ ÀÛµ¿ÇÑ´Ù°í ¾Ë·ÁÁø ±×·± ÄÄÆÄÀÏ·¯µé¸¸ ¸ð¾Æ º¸°íÀÚ ÇÑ´Ù.
<htmlurl url="mailto:pplinux@ecn.purdue.edu"
name="pplinux@ecn.purdue.edu">·Î ºñÆòÀ̳ª ±³Á¤À» À̸ÞÀÏ·Î º¸³»ÁÖ±â
¹Ù¶õ´Ù.

<sect2>GLU (Granular Lucid)
<p>

GLU (Granular Lucid) ´Â Áý¾àÀûÀ̰í(intensional) (Lucid) ±ä±ÞÇÑ ¸ðµ¨µéÀ» Á¶ÇÕÇÑ
ÇÏÀ̺긮µå ÇÁ·Î±×·¡¹Ö ¸ðµ¨¿¡ ±â¹ÝÇÑ °í-¼öÁØ ÇÁ·Î±×·¡¹Ö ½Ã½ºÅÛÀÌ´Ù.
À̰ÍÀº PVM°ú TCP ¼ÒÄϵéÀ» Áö¿øÇÑ´Ù. À̰ÍÀº ¸®´ª½º¿¡¼­ ½ÇÇàµÇ´Â°¡? Á» ´õ
¸¹Àº Á¤º¸°¡ <url
url="http://www.csl.sri.com/GLU.html">¿¡ ÀÖ´Ù.

<sect2>Jade¿Í SAM
<p>

Jade ´Â C¸¦ È®ÀåÇØ¼­ ¼øÂ÷ÀûÀÌ°í ±ä±ÞÇÑ(imperative) ÇÁ·Î±×·¥µé ¾È¿¡¼­
¼º±ä Çù·ÂÀ» °³¹ßÇϵµ·Ï ÇÑ º´·Ä ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. À̰ÍÀº ºÐ»ê °øÀ¯
¸Þ¸ð¸® ¸ðµ¨À» °¡Á¤ÇÑ´Ù. À̰ÍÀº PVMÀ» »ç¿ëÇÏ´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵鿡
´ëÇØ¼­ SAM¿¡ ÀÇÇØ ±¸ÇöµÈ´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â <url
url="http://suif.stanford.edu/~scales/sam.html">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.

<sect2>Mentat°ú Legion
<p>

Mentat´Â ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅ͵鿡¼­ ÀÛµ¿ÇÏ°í ¸®´ª½º·Î Æ÷ÆÃµÈ¹Ù ÀÖ´Â
°´Ã¼-ÁöÇâ º´·Ä ó¸® ½Ã½ºÅÛÀÌ´Ù. Mentat ÇÁ·Î±×·¡¹Ö ¾ð¾î(MPL)Àº C++¿¡
±â¹ÝÇϰí ÀÖ´Â °´Ã¼-ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. Mentat ½Ç½Ã°£ ½Ã½ºÅÛÀº
ºñ-ºí·ÏÅ· RPCµé°ú ¾à°£ ´àÀº  ¾î¶² °ÍµéÀ» »ç¿ëÇÑ´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â
<url url="http://www.cs.virginia.edu/~mentat/">¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.

Legion <url url="http://www.cs.virginia.edu/~legion/"> ´Â Mentat ÀÇ
»óÀ§¿¡ ¸¸µé¾îÁø °ÍÀ̰í WANÀ¸·Î ¹­ÀÎ ±â°èµé¿¡ ´ëÇØ¼­ ´ÜÀÏ °¡»ó ±â°è¸¦
Á¦°øÇÑ´Ù.

<sect2>MPL (MasPar ÇÁ·Î±×·¡¹Ö ¾ð¾î)
<p>

Mentat ÀÇ MPL°ú È¥µ¿µÇÁö ¸»ÀÚ. ÀÌ ¾ð¾î´Â ¿ø·¡ MasPar SIMD ½´ÆÛÄÄÇ»Å͸¦
À§ÇÑ ¿ø½Ã º´·Ä C ¹æ¾ðÀ¸·Î½á °³¹ßµÇ¾ú´Ù. ±Û½ê, MasPar´Â ½ÇÁ¦ ´õÀÌ»ó
Àå»ç¸¦ ÇÏÁö ¾ÊÁö¸¸(±×µéÀº ÀÌÁ¦ NeoVista Solutions, <url
		url="http://www.neovista.com">, µ¥ÀÌÅÍ ¸¶ÀÌ´× È¸»çÀÌ´Ù), ±×µéÀÇ
MPL ÄÄÆÄÀÏ·¯´Â GCC¸¦ »ç¿ëÇØ¼­ °³¹ßµÇ¾ú¾ú´Ù. ±×·¡¼­ À̰ÍÀº ¾ÆÁ÷µµ
ÀÚÀ¯·Ó°Ô »ç¿ë°¡´ÉÇÏ´Ù. HuntsvilleÀÇ ¾Ë¶ó¹Ù¸¶ ´ëÇб³¿Í ÆÛµà ´ëÇб³ À̵é°ú
Á¶ÀÎÆ®Çؼ­ MasPar ÀÇ MPLÀº AFAP È£ÃâµéÀ» °¡Áø C Äڵ带 »ý¼ºÇÏ´Â °ÍÀ¸·Î
¸ñÇ¥°¡ ¹Ù²î¾ú´Ù(¼½¼Ç 3.6À» ÂüÁ¶), ±×·¡¼­ ¸®´ª½º SMP ¹× Ŭ·¯½ºÅ͵é À§Çؼ­
ÀÛµ¿ÇÑ´Ù. ±×·¯³ª ±× ÄÄÆÄÀÏ·¯´Â ´Ù¼Ò ¹ö±×°¡ ¸¹´Ù. <url
url="http://www.math.luc.edu/~laufer/mspls/papers/cohen.ps"> ÂüÁ¶.

<sect2>PAMS (º´·Ä ¾îÇø®ÄÉÀÌ¼Ç °ü¸® ½Ã½ºÅÛ(Parallel Application Management System))
<p>

Myrias ´Â PAMS (º´·Ä ¾îÇø®ÄÉÀÌ¼Ç °ü¸® ½Ã½ºÅÛ) À̶ó°í ºÒ¸®´Â ¼ÒÇÁÆ®¿þ¾î
Á¦Ç°À» ÆÄ´Â ȸ»çÀÌ´Ù. PAMS´Â °¡»ó °øÀ¯ ¸Þ¸ð¸® º´·Ä 󸮸¦ À§ÇÑ ¾ÆÁÖ
´Ü¼øÇÑ Áö½Ã¾îµéÀ» Á¦°øÇÑ´Ù. ¸®´ª½º ±â°èµéÀÇ ³×Æ®¿÷Àº ¾ÆÁ÷ Áö¿øµÇÁö
¾Ê´Â´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§Çؼ­´Â <url
url="http://www.myrias.com/">¸¦ ÂüÁ¶ÇÏÀÚ.

<sect2>Parallaxis-III
<p>

Parallaxis-III ´Â µ¥ÀÌÅÍ º´·ÄÈ­ (SIMD ¸ðµ¨)¿¡ ´ëÇÑ "°¡»ó ÇÁ·Î¼¼¼­¿Í
Ä¿³Ø¼Ç(virtual processors and connections)"À¸·Î Modula-2¸¦ È®ÀåÇÑ ±¸Á¶Àû
ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. Parallaxis ¼ÒÇÁÆ®¿þ¾î´Â ¼øÂ÷ ¹× º´·Ä ÄÄÇ»ÅÍ
½Ã½ºÅÛµéÀ» À§ÇÑ ÄÄÆÄÀÏ·¯µé°ú, µð¹ö°Å(gdb¿Í xgdb µð¹ö°Å¿¡ ´ëÇÑ È®ÀåÆÇ),
±×¸®°í ¼­·Î ´Ù¸¥ ¿µ¿ªÀÇ, Ưº°È÷ À̹ÌÁö ó¸® ¿µ¿ªÀÇ, ¸¹Àº ¾çÀÇ »ùÇÃ
¾Ë°í¸®Áòµé·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. À̰ÍÀº ¼øÂ÷ ¸®´ª½º ½Ã½ºÅÛµé À§Çì¼­
½ÇÇàµÈ´Ù... ±¸ ¹öÀüÀº ´Ù¾çÇÑ º´·Ä Ÿ°ÙµéÀ» Áö¿øÇß¾ú´Ù. ±×¸®°í »õ·Î¿î
¹öÀüµµ (¿¹, PVM Ŭ·¯½ºÅ͸¦ Ÿ°ÙÀ¸·Î »ïÀ½) ¶ÇÇÑ ±×·²°ÍÀÌ´Ù. Á» ´õ ÀÚ¼¼ÇÑ
Á¤º¸´Â <url
url="http://www.informatik.uni-stuttgart.de/ipvr/bv/p3/p3.html">¿¡¼­
ãÀ» ¼ö ÀÖ´Ù.

<sect2>pC++/Sage++
<p>

pC++/Sage++ ´Â ¾î¶² ±âº» "¿ä¼Ò(element)" Ŭ·¡½º·ÎºÎÅÍ "°´Ã¼µéÀÇ
ÁýÇÕü(collections of objects)"¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅÍ-º´·Ä ½ºÅ¸ÀÏ ÀÛ¾÷µéÀ»
Çã¿ëÇÏ´Â C++¿¡ ´ëÇÑ ¾ð¾î È®ÀåÀÌ´Ù. À̰ÍÀº PVM¿¡¼­ ½ÇÇàµÉ ¼ö ÀÕ´Â C++
Äڵ带 »ý¼ºÇÏ´Â ¼±Çà ÇÁ·Î¼¼¼­ÀÌ´Ù. À̰ÍÀº ¸®´ª½º¿¡¼­ ÀÛµ¿Çϴ°¡? Á» ´õ
¸¹Àº Á¤º¸´Â <url url="http://www.extreme.indiana.edu/sage/">¿¡¼­ ãÀ» ¼ö
ÀÖ´Ù.

<sect2>SR (¸®¼Ò½º µ¿±â(Synchronizing Resources))
<p>

SR (¸®¼Ò½º µ¿±â(Synchronizing Resources))´Â ¸®¼Ò½ºµéÀÌ ±×µéÀÌ °øÀ¯ÇÏ´Â
ÇÁ·Î¼¼½ºµé°ú º¯¼öµéÀ» ĸ½¶È­ÇÏ´Â Çù·Â(concurrent) ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù;
¿¬»ê(operation)µéÀÌ ÇÁ·Î¼¼½º »óÈ£ÀÛ¿ë¿¡ ´ëÇÑ ÁÖ¿ä ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù.
SR Àº È£Ãâ°ú ¼­ºñ½º ÀÛ¾÷µé¿¡ ´ëÇÑ ¸ÞÄ«´ÏÁòµéÀÇ »õ·Î¿î Á¤ÇÕÀ» Á¦°øÇÑ´Ù.
°á°úÀûÀ¸·Î ¸ðµç ·ÎÄà ±×¸®°í ¸®¸ðÆ® ÇÁ·Î½ÃÀú È£Ãâ, ¶ûµ¥ºä, ¸Þ½ÃÁö Àü´Þ,
µ¿Àû ÇÁ·Î¼¼½º »ý¼º, ¸ÖƼij½ºÆ®, ±×¸®°í ¼¼¸¶Æ÷¾îµéÀÌ Áö¿øµÈ´Ù. SR Àº ¶ÇÇÑ
°øÀ¯µÈ(shared) Àü¿ª º¯¼öµé°ú ¿¬»ê(operation)µéÀ» Áö¿øÇÑ´Ù.

À̰ÍÀº ¸®´ª½º·Î Æ÷ÆÃµÇ¾úÁö¸¸ ±×°ÍÀ¸·Î ½ÇÇàµÉ ¼ö ÀÖ´Â º´·ÄÈ­°¡ ¹«¾ùÀÎÁö´Â
ºÐ¸íÇÏÁö ¾Ê´Ù. Á» ´õ ¸¹Àº Á¤º¸´Â <url
url="http://www.cs.arizona.edu/sr/www/index.html">¿¡¼­ °¡´ÉÇÏ´Ù.

<sect2>ZPL°ú IronMan
<p>

ZPL Àº °øÇаú °úÇÐ ¾îÇø®ÄÉÀ̼ǵéÀ» Áö¿øÇϵµ·Ï °í¾ÈµÈ ¹è¿­-±â¹Ý
ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ´Ù. À̰ÍÀº IronMan À̶ó°í ºÒ¸®´Â ´Ü¼øÇÑ ¸Þ½ÃÁö-Àü´Þ
ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ È£ÃâÀ» »ý¼ºÇϸç ÀÌ·± ÀÎÅÍÆäÀ̽º¸¦ ±¸¼ºÇÏ´Â ¸î°¡Áö
ÇÔ¼öµéÀÌ °ÅÀÇ ¸ðµç ¸Þ½ÃÁö-Àü´Þ ½Ã½ºÅÛÀ» »ç¿ëÇØ¼­ ½±°Ô ±¸ÇöµÉ ¼ö ÀÖ´Ù.
±×·¯³ª ¿öÅ©½ºÅ×ÀÌ¼Ç Å¬·¯½ºÅÍµé »óÀÇ PVM °ú MPI, ±×¸®°í
¸®´ª½º°¡ Áö¿øµÇ´Â °ÍÀÌ ÁÖ¿ä Ÿ°ÙÀÌ´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â <url
url="http://www.cs.washington.edu/research/projects/orca3/zpl/www/">¿¡¼­
ãÀ» ¼ö ÀÖ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>¼º´É ¹®Á¦(Performance Issues) <label id="sec_PerformanceIssues">
<!-- ------------------------------------------------------------- -->
<p>

ƯÁ¤ÇÑ ¸¶´õº¸µå, ³×Æ®¿÷ Ä«µåµé µîÀ» ¾î¶² °ÍÀÌ ÃÖ°íÀΰ¡¸¦
¾Ë¾Æº¸·Á°í º¥Ä¡¸¶Å·ÇÏ´Â µ¥, ¸¹Àº ½Ã°£À» ¼ÒºñÇÏ´Â »ç¶÷µéÀÌ ¸¹ÀÌ ÀÖ´Ù.
ÀÌ·± °ÍÀÇ ¹®Á¦´Â ¿©·¯ºÐÀÌ ¾î¶² °ÍÀ» º¥Ä¡¸¶Å·ÇÒ ¼ö ÀÖÀ» ¶§¿¡´Â À̹Ì
±×°ÍÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â °Í Áß¿¡ ÃÖ°í°¡ ´õÀÌ»ó ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù; À̰ÍÀº
½ÉÁö¾î ½ÃÀå¿¡¼­ »ç¶óÁö°í ¿ÏÀü ´Ù¸¥ ¼Ó¼ºµéÀ» °¡Áø °³¼±µÈ ¸ðµ¨·Î
±³Ã¼µÇ¾úÀ»¼ö ÀÖ´Ù.

PC Çϵå¿þ¾î¸¦ »ç´Â °ÍÀº ¿À·£Áö Á꽺¸¦ »ç´Â °Í°ú °°´Ù. º¸Åë À̰ÍÀº ¶óº§¿¡ ºÙÀº
ȸ»ç À̸§ÀÌ ¹«¾ùÀÎÁö´Â »ó°üÀÌ ¾ø°í ¾ÆÁÖ ÁÁÀº Àç·Î·Î ¸¸µé¾îÁø´Ù. ±¸¼º
¼ººÐµé(¶Ç´Â ¿À·»Áö Á꽺 ³óÃà¾×)ÀÌ ¹«¾ùÀ¸·Î ¸¸µé¾îÁ³´ÂÁö ½Å°æ¾²°Å³ª ¾Æ´Â
»ç¶÷Àº °ÅÀÇ ¾ø´Ù. Áï, ¿©·¯ºÐÀÌ ½Å°æ¾µ Çϵå¿þ¾î Â÷À̵éÀº º°·Î ¾ÈµÈ´Ù.
¿©·¯ºÐÀÌ ¸®´ª½º·Î ¾µ Çϵå¿þ¾î¿¡ ´ëÇØ¼­ ±âÇØÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¹«¾ùÀΰ¡¸¦
È®½ÇÈ÷ ¾Ë°í ºü¸¥ ¹è´Þ, ÁÁÀº °¡°Ý, ±×¸®°í ¹Ýǰ¿¡ ´ëÇÑ ÀûÀýÇÑ Á¤Ã¥¿¡
´ëÇØ¼­¸¸ ½Å°æÀ» ÁýÁßÇ϶ó´Â °ÍÀÌ ³» Á¶¾ðÀÌ´Ù.

¼­·Î ´Ù¸¥ PC ÇÁ·Î¼¼¼­µé¿¡ ´ëÇÑ ÈǸ¢ÇÑ °³°üÀº <url
url="http://www.pcguide.com/ref/cpu/fam/">¿¡ ÀÖ´Ù; »ç½Ç ¿ÏÀüÇÑ WWW
»çÀÌÆ® <url url="http://www.pcguide.com/">¿¡´Â PC Çϵå¿þ¾îÀÇ ÁÁÀº ±â¼úÀûÀÎ
°³°üµéÀÌ ¸ð¿© ÀÖ´Ù. ƯÁ¤ Çϵå¿þ¾î ¼³Á¤µéÀÇ ¼º´É¿¡ ´ëÇØ¼­ Á¶±Ý ¾Æ´Â °Íµµ
À¯¿ëÇÏ´Ù. ±×¸®°í ¸®´ª½º º¥Ä¡¸¶Å· HOWTO(Linux Benchmarking HOWTO) <url
url="http://sunsite.unc.edu/LDP/HOWTO/Benchmarking-HOWTO.html">°¡
½ÃÀÛÇϱ⿡ ÁÁÀº °÷ÀÌ´Ù.

ÀÎÅÚ IA32 ÇÁ·Î¼¼¼­µéÀº ½ÇÇàÁßÀÎ ½Ã½ºÅÛÀÇ ¼º´ÉÀ» Á¤±³ÇÑ ¼¼ºÎ»çÇ×±îÁö
ÃøÁ¤ÇÏ´Â µ¥ »ç¿ëµÇ´Â ¸¹Àº Ư¼öÇÑ ·¹Áö½ºÅ͵éÀ» °¡Áø´Ù. ÀÎÅÚ VTune, <url
url="http://developer.intel.com/design/perftool/vtune/">, ´Â ¾ÆÁÖ ¿ÏÀüÇÑ
ÄÚµå-Æ©ÆÃ ½Ã½ºÅÛ¿¡¼­ ¼º´É ·¹Áö½ºÅ͵éÀ» ³Ð°Ô »ç¿ëÇÑ´Ù... À̰ÍÀº
ºÒÇàÇϰԵµ ¸®´ª½º¿¡¼­ ½ÇÇàµÇÁö ¾Ê´Â´Ù. ÆæÆ¼¾ö ¼º´É ·¹Áö½ºÅ͵éÀ»
¾ï¼¼½ºÇϱâ À§ÇÑ ·Îµù °¡´ÉÇÑ ¸ðµâ ÀåÄ¡ µå¶óÀ̹ö, ±×¸®°í ¶óÀ̺귯¸®
·çƾµéÀº <url url="http://www.cs.umd.edu/users/akinlar/driver.html">¿¡¼­
ãÀ» ¼ö ÀÖ´Ù. ÀÌ·± ¼º´É ·¹Áö½ºÅ͵éÀº ´Ù¸¥ IA32 ÇÁ·Î¼¼¼­µé°ú ´Ù¸£´Ù´Â
°ÍÀ» ±â¾ïÇÏÀÚ; ÀÌ·± ÄÚµå´Â 486, Pentium Pro, Pentium II, K6 µî°ú´Â
ÀÛµ¿ÇÏÁö ¾Ê°í Pentium¿¡ ´ëÇØ¼­¸¸ ÀÛµ¿ÇÑ´Ù.

¼º´É¿¡ ´ëÇÑ ´Ù¸¥ ¾ð±ÞÀº, Ä¿´Ù¶õ Ŭ·¯½ºÅ͵éÀ» ¸¸µé°í ±×°ÍÀ» Á¶±×¸¸ °ø°£¿¡
³Ö°íÀÚ ÇÏ´Â »ç¶÷µé¿¡ Ưº°È÷, ÀûÀýÇÏ´Ù. Àû¾îµµ ¿äÁòÀÇ ¾î¶² ÇÁ·Î¼¼¼­µéÀº
¿Âµµ ¼¾¼­¸¦ ³»ÀåÇϰí ÀÖ°í ¿î¿µ ¿Âµµ°¡ ³Ê¹« ³ôÀ» ¶§ ³»ºÎ Ŭ·°À» ´ÊÃß´Â µ¥
»ç¿ëµÇ´Â ȸ·Îµé(¿­ »ý¼ºÀ» ÁÙÀÌ°í ½Å·Úµµ¸¦ ³ôÀÌ´Â ½Ãµµ)À» °¡Áö°í ÀÖ´Ù.
³ª´Â ¸ðµç »ç¶÷µéÀÌ ÆçƼ¿¡<footnote>¿ªÀÚÁÖ: ÆçƼ¿¡ È¿°ú - ÀÌÁ¾(ì¶ðú)ÀÇ ±Ý¼Ó
Á¢Ã˸鿡 ¾àÇÑ Àü·ù°¡ Èê·¶À» ¶§ ¿­ÀÌ ¹ß»ý ¶Ç´Â Èí¼öµÇ´Â Çö»ó</footnote>
ÀåÄ¡(¿­ ÆßÇÁ)¸¦ »ç¼­ °¢ CPU¸¦ ½ÄÈú ÇÊ¿ä´Â ¾ø´Ù°í Á¦¾ÈÇÏÁö¸¸ ³ôÀº ¿î¿µ
¿­ÀÌ ¼ººÐµéÀÇ »ç¿ë½Ã°£À» ÁÙÀϻӸ¸ ¾Æ´Ï¶ó - ½Ã½ºÅÛ ¼º´ÉÀ» Á÷Á¢ ÁÙÀÏ ¼öµµ
ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ¿©·¯ºÐÀÇ ÄÄÇ»Å͵éÀ» °ø±âÈ帧À» Â÷´ÜÇÏ´Â ¹°¸®Àû
¹èÄ¡¼Ó¿¡ ³õÁö ¸»°í Á¦ÇÑµÈ ¿µ¿ª¾È¿¡¼­ ¿­À» Àâ¾Æ¶ó. ±âŸ µîµî.

¸¶Áö¸·À¸·Î ¼º´ÉÀ̶õ ´Ü¼øÈ÷ ¼Óµµ»Ó¸¸ÀÌ ¾Æ´Ï°í ½Å·Úµµ¿Í °¡¿ë¼ºµµ
Æ÷ÇԵȴÙ. ³ôÀº ½Å·Úµµ¶õ ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ, ºñ·Ï ±¸¼º ¿ä¼ÒµéÀÌ
½ÇÆÐÇÏ´õ¶óµµ,  °ÅÀÇ Àý´ë·Î Á×Áö(crash) ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù... À̰ÍÀº
ÀϹÝÀûÀ¸·Î ¿©ºÐÀÇ ÆÄ¿ö °ø±Þ±â¿Í ÇÖ-½º¿Ò ¸¶´õº¸µå¿Í °°Àº Ư¼ö ±â´ÉµéÀ»
¿ä±¸ÇÑ´Ù. À̰ÍÀº º¸Åë ½ÎÁö ¾Ê´Ù. ³ôÀº °¡¿ë¼ºÀ̶õ °ÅÀÇ ¸ðµç ½Ã°£¿¡ »ç¿ë
°¡´ÉÇÏ´Ù´Â °³³äÀ» ¸»ÇÑ´Ù... ½Ã½ºÅÛÀº ±× ±¸¼º¿ä¼Ò°¡ ½ÇÆÐÇÒ ¶§ Á×À» ¼öµµ
ÀÖÁö¸¸ ½Ã½ºÅÛÀº À绡¸® °íÃÄÁö°í ¸®ºÎÆÃµÈ´Ù. ¸¹Àº ±âº» À̽´µéÀ» ³íÀÇÇÑ
High-Availability HOWTO°¡ ÀÖ´Ù. ±×·¯³ª Ŭ·¯½ºÅÍ¿¡ ´ëÇØ¼­ Ưº°È÷, ³ôÀº
°¡¿ë¼ºÀº ¸î°³ÀÇ ¿©ºÐÀ» °¡Áö´Â °ÍÀ¸·Î ½±°Ô ȹµæµÉ ¼ö ÀÖ´Ù. ³ª´Â Àû¾îµµ
ÇѰ³ÀÇ ¿©ºÐÀ» ±ÇÀåÇÏ´Â ¹ÙÀ̰í Ä¿´Ù¶õ Ŭ·¯½ºÅÍ¿¡¼­ 16°³ ±â°è¸¶´Ù Çϳª¾¿ÀÇ
¿©ºÐÀ» Àû¾îµµ °¡Áö´Â °ÍÀ» ¼±È£ÇÑ´Ù. À߸øµÈ Çϵå¿þ¾î¸¦ ¹ö¸®°í ±×°ÍÀ»
¿©ºÐÀÇ °ÍÀ¸·Î ±³Ã¼ÇÏ´Â °ÍÀº À¯Áöº¸¼ö °è¾àº¸´Ùµµ ´õ ³ôÀº °¡¿ë¼º°ú ´õ ³·Àº
ºñ¿ëÀ» ¾òÀ»¼ö ÀÖµµ·Ï ÇÑ´Ù.

<!-- ------------------------------------------------------------- -->
<sect1>°á·Ð - °Å±â¿¡ ÀÖ´Ù.
<!-- ------------------------------------------------------------- -->
<p>

±×·¡ ¸®´ª½º¸¦ »ç¿ëÇØ¼­ º´·Ä 󸮸¦ ÇÏ´Â »ç¶÷ÀÌ Àִ°¡? ±×·¸´Ù!

¸¹Àº »ç¶÷µéÀÌ ¸¹Àº º´·Ä-ó¸® ½´ÆÛÄÄÇ»ÅÍ È¸»çµéÀÌ Á״´ٴ °ÍÀÌ º´·Ä
󸮰¡ ½Ãµé½ÃµéÇØÁö±â ½ÃÀÛÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÏ´Â °ÍÀÌ ¾Æ´Ñ°¡ÇÏ°í »ý°¢Çß´ø
°ÍÀº ¾ÆÁÖ ¿À·¡ ÀüÀÇ ÀÏÀÌ ¾Æ´Ï´Ù. ³ª´Â ±×´ç½Ã ±×·² °ÍÀ̶ó°í »ý°¢ÇÏÁö
¾Ê¾Ò°í(³»°¡ ½ÇÁ¦·Î ÀϾ °ÍÀ̶ó°í »ý°¢ÇÑ °Í¿¡ ´ëÇÑ °ÍÀ» Àç¹Ì°Å¸®·Î
º¸·Á¸é <url
url="http://dynamo.ecn.purdue.edu/~hankd/Opinions/pardead.html">¸¦
ÂüÁ¶Çϱ⠹ٶõ´Ù), º´·Ä 󸮰¡ Áö±Ý ¶Ç´Ù½Ã ÀϾ°í ÀÖ´Â °ÍÀº ¸í¹éÇÑ
»ç½ÇÀÌ´Ù. ½ÉÁö¾î ¾ó¸¶Àü¿¡ º´·Ä ½´ÆÛÄÄÇ»Å͸¦ ¸¸µå´Â °ÍÀ» ÁßÁöÇÑ IntelÀÌ
MMX¿Í ¾ÕÀ¸·Î ³ª¿Ã IA64 EPIC (Explicitly Parallel Instruction Computer)°ú
°°Àº °Íµé¿¡¼­ º´·Ä ó¸® Áö¿øÀ» ÇÑ´Ù°í ÀÚ¶ûÇϰí ÀÖ´Ù.

¿©·¯ºÐÀÌ ¼±È£ÇÏ´Â °Ë»ö ¿£Áø¿¡¼­ "Linux"¿Í "paralle'À» °Ë»öÇÑ´Ù¸é
¿©·¯ºÐÀº ¸î°³ÀÇ »çÀÌÆ®µéÀÌ ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮿¡ Æ÷ÇԵȴٴ °ÍÀ»
¾Ë°Ô µÉ °ÍÀÌ´Ù. Ưº°È÷ Linux PC Ŭ·¯½ºÅ͵éÀº ¸ðµç °÷¿¡¼­ ¶°¿À¸£´Â °Íó·³
º¸ÀÏ °ÍÀÌ´Ù. PC Çϵå¿þ¾îÀÇ Àúºñ¿ë °í¼º´É°ú ÇÕÃļ­ ¸®´ª½ºÀÇ
ÀûÀýÇÔ(appropriateness)´Â ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮸¦ ÀÛ°í, ¿¹»êÀÌ ÀûÀº
±×·ìµé°ú Å©°í ¿¹»êÀÌ ¸¹°í ±¹°¡ÀûÀÎ ¿¬±¸¼Òµé ¸ðµÎÀÇ ÀαâÀÖ´Â ½´ÆÛÄÄÇ»ÆÃ
Á¢±ÙÀ¸·Î ¸¸µé¾ú´Ù.

ÀÌ ¹®¼­ µµÃ³¿¡ ÀÖ´Â ´Ù¾çÇÑ ÇÁ·ÎÁ§Æ®µéÀÌ ºñ½ÁÇÑ º´·Ä ¸®´ª½º ¼³Á¤À» °¡Áö´Â
"À¯»çÇÑ" ¿¬±¸ »çÀÌÆ®µé ¸®½ºÆ®¸¦ °ü¸®ÇÑ´Ù. ±×·¯³ª <url
url="http://yara.ecn.purdue.edu/~pplinux/Sites/">¿¡, º´·Ä 󸮿¡ ¸®´ª½º
½Ã½ºÅÛµéÀ» »ç¿ëÇÏ´Â ´Ù¾çÇÑ »çÀÌÆ®µéÀÇ »çÁø, ¼³¸í, ±×¸®°í ¿¬¶ô Á¤º¸µéÀ»
Á¦°øÇϱâ À§Çؼ­ °í¾ÈµÈ ¹®¼­µéÀÌ ÀÖ´Ù.

<itemize>
<item>¿©·¯ºÐÀº ¹Ýµå½Ã "¿µ¼ÓÀûÀÎ" º´·Ä ¸®´ª½º »çÀÌÆ®¸¦ °¡Á®¾ß ÇÑ´Ù: SMP,
±â°èµéÀÇ Å¬·¯½ºÅÍ, SWAR ½Ã½ºÅÛ, ¶Ç´Â ºÎ¼Ó ÇÁ·Î¼¼¼­¸¦ °¡Áö´Â PC µîµîÀº
»ç¿ëÀڵ鿡°Ô <em>¸®´ª½º¿¡¼­ º´·Ä ÇÁ·Î±×·¥µéÀ» ¼öÇàÇÒ ¼ö</em> ÀÖµµ·Ï
¼³Á¤µÈ´Ù. º´·Ä 󸮸¦ Á÷Á¢ Áö¿øÇÏ´Â ¸®´ª½º-±â¹Ý ¼ÒÇÁÆ®¿þ¾î ȯ°æ (¿¹,
		PVM, MPI, AFAPI)ÀÌ ±× ½Ã½ºÅÛ¿¡ ¹Ýµå½Ã ¼³Ä¡µÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª,
Çϵå¿þ¾î´Â ¸®´ª½ºÀÇ º´·Ä 󸮿¡ ¸ÅÀÏ Çʿ䰡 ¾ø°í º´·Ä ÇÁ·Î±×·¥µéÀÌ
½ÇÇàÁßÀÌ ¾Æ´Ò ¶§ ¿ÏÀüÈ÷ ´Ù¸¥ ¸ñÀûµéÀ» À§Çؼ­ »ç¿ëµÉ ¼ö ÀÖ´Ù.

<item>¿©·¯ºÐÀÇ »çÀÌÆ®°¡ ¸®½ºÆ®µÇµµ·Ï ¿ä±¸ÇÏÀÚ. ¿©·¯ºÐÀÇ »çÀÌÆ® Á¤º¸¸¦
<htmlurl url="mailto:pplinux@ecn.purdue.edu"
name="pplinux@ecn.purdue.edu">¿¡°Ô º¸³»ÀÚ. ¿©·¯ºÐÀÇ »çÀÌÆ® Á¤º¸¿¡ ´ëÇØ¼­
´Ù¸¥ ¿£Æ®¸®µé¿¡¼­ »ç¿ëµÈ Æ÷¸äÀ» µû¸£±â ¹Ù¶õ´Ù. <em>±× »çÀÌÆ®¿¡ ´ëÇÑ
Á¢ÃË °¡´ÉÇÑ »ç¶÷À¸·ÎºÎÅÍÀÇ ¸í½ÃµÈ ¿ä±¸°¡ ¾øÀ¸¸é ¾î¶² »çÀÌÆ®µµ ¸®½ºÆ®¿¡
Ãß°¡µÇÁö ¾ÊÀ» °ÍÀÌ´Ù.</em>
</itemize>

ÇöÀç ¸®½ºÆ®¿¡´Â 14°³ÀÇ Å¬·¯½ºÅ͵éÀÌ ÀÖÁö¸¸ ¿ì¸®´Â Àû¾îµµ ¼ö½Ê°³ÀÇ
Ŭ·¯½ºÆ®µéÀÌ Àü¼¼°è¿¡ ÀÖ´Ù´Â °ÍÀ» ¾È´Ù. ¹°·Ð ¸®½ºÆ®°¡ ¾Ï½Ã³ª º¸Áõ, ±âŸ
µîµîÀ» ÀǹÌÇÏÁö ¾Ê´Â´Ù; ¿ì¸®´Â ´ÜÁö ¸®´ª½º¸¦ »ç¿ëÇÑ º´·Ä 󸮸¦ Æ÷ÇÔÇÑ
ÀνÄ, ¿¬±¸, ±×¸®°í Çù·ÂÀ» ÁõÁøÇϱ⸦ ¹Ù¶ö»ÓÀÌ´Ù.

</article>


ID
Password
Join
If you make a mistake you right it immediately to the best of your ability.


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.0090 sec