Orca





Orca´Â loosely coupled ºÐ»ê ½Ã½ºÅÛ¿¡¼­ µ¹¾Æ°¡´Â º´·ÄÇÁ·Î±×·¥À» ±¸ÇöÇϱâÀ§ÇÑ ¾ð¾î·Î ³×µ¨¶õµåÀÇ Vrije ´ëÇÐÀÇ Henri E. Bal ÀÌ ÁÖÃàÀÌ µÇ¾î 1986³âºÎÅÍ °³¹ßµÇ°í ÀÖ´Ù. 

Orca°¡ °³¹ßµÈ µ¿±â´Â ºÐ»ê ½Ã½ºÅÛ±â¹Ý¿¡¼­ ±âÁ¸ÀÇ ¸Þ¼¼Áö Àü´Þ ¹æ½ÄÀ¸·Î È®ÀåµÈ ¼øÂ÷ó¸® ±â¹ÝÀÇ ¾ð¾î¸¦ °¡Áö°í º´·ÄÇÁ·Î±×·¥À» ¸¸µå´Âµ¥ ¹ß»ýÇÏ´Â ¹®Á¦Á¡µéÀ»  ±Øº¹Çϱâ À§ÇÑ °ÍÀ̸ç, Orca´Â ½Ã½ºÅÛ ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ °ÍÀÌ ¾Æ´Ï¶ó ºÐ»ê ÀÀ¿ë ÇÁ·Î±×·¡¹ÖÀ» À§ÇØ ¿¬±¸µÇ°í °³¹ßµÇ¾î ¿Ô´Ù.
 

1 ºÐ»ê °øÀ¯ ¸Þ¸ð¸®(Distributed Shared Memory)

´ëºÎºÐÀÇ ºÐ»ê ÇÁ·Î±×·¡¹ÖÀº ¸Þ¼¼Áö Àü´Þ ¹æ½Ä¿¡ ÀÇÁ¸Çϰí ÀÖ´Ù. ±â¹Ý Çϵå¿þ¾î°¡ ¸Þ¼¼Áö Àü´ÞÀ» ÀÌ¹Ì Áö¿øÇϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ¼±ÅÃÀº ¸Å¿ì ÀÚ¿¬½º·¯¿î °ÍÀÌ´Ù. ±×·¯³ª ¸ðµç °æ¿ì¿¡ À־ ÀÌ ¹æ¹ýÀÌ È¿°úÀûÀÏ ¼ö´Â ¾ø´Ù. ¿©·¯ ÇÁ·Î¼¼½º°¡ ±¤¿ªÀÇ »óÅ Á¤º¸¸¦ °øÀ¯ÇÏ¿© Åë½ÅÀ» ÇÏ´Â °æ¿ì¿¡´Â ¸Þ¼¼Áö Àü´Þ ¹æ¹ýÀÌ ÀûÀýÇÏÁö ¾Ê´Ù. 
 

ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­ ¼­·Î ´Ù¸¥ ½Ã½ºÅÛ°£¿¡ µû·Î Á¸ÀçÇÏ´Â ¹°¸®ÀûÀΠ ¸Þ¸ð¸®¸¦ ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ³í¸®ÀûÀ¸·Î  ÇϳªÀÇ °øÀ¯µÈ ¸Þ¸ð¸®·Î º¸ÀÌ°Ô ÇÏ´Â ¿¬±¸°¡ ÁøÇàµÇ¾î ¿ÔÀ¸¸ç À̸¦ ºÐ»ê °øÀ¯ ¸Þ¸ð¸®(Distributed shared memory)¶ó ºÎ¸¥´Ù. 

°øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ´ÙÁß ÇÁ·Î¼¼¼­ ½Ã½ºÅÛ¿¡¼­´Â °øÀ¯ µ¥ÀÌÅÍ ±¸Á¶°¡ °øÀ¯ ¸Þ¸ð¸®¿¡ ÀúÀåµÇ¸ç ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ±âº»ÀûÀ¸·Î Áö¿ª ¸Þ¸ð¸®¸¦ Á¢±ÙÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.  ÇÑ ÇÁ·Î¼¼½º°¡ °øÀ¯ µ¥ÀÌÅÍÀÇ ÇÑ ºÎºÐÀ» ¹Ù²Ù·Á°í Çϰí ÀÌ ¶§ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀÌ °øÀ¯ µ¥ÀÌÅÍ ±¸Á¶¿¡ ¾î¶°ÇÑ Á¢±Ùµµ ÇÏÁö ¾Ê°Ô Çϱâ À§Çؼ­ ÀÌ·¯ÇÑ ½Ã½ºÅÛÀÇ °æ¿ì¿¡´Â ±× ºÎºÐ¿¡ ´ëÇÏ¿© "Àá±Ý(lock)"À» ÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» °¡Áø´Ù.  ÀϹÝÀûÀ¸·Î  Áö¿ª ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °Íº¸´Ù ÀÌ·¯ÇÑ °øÀ¯ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °ÍÀÌ ´õ ¸¹Àº ¿À¹öÇìµå¸¦ ¹ß»ý½ÃŲ´Ù.

ºÐ»ê ½Ã½ºÅÛ¿¡¼­´Â °¢ ½Ã½ºÅÛÀÌ ÀÚ½ÅÀÇ Áö¿ª ¸Þ¸ð¸®¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ °øÀ¯ ¸Þ¸ð¸® ´ÙÁß ÇÁ·Î¼¼¼­ ½Ã½ºÅÛ¿¡¼­¿Í´Â ´Þ¸®  ¸Þ¸ð¸® Á¢±Ù¿¡ ´ëÇÑ ¿À¹öÇìµå°¡ ÇÊ¿äÇÑ µ¥ÀÌÅÍÀÇ À§Ä¡¿¡ ÀÇÁ¸ÇÑ´Ù. 

ºÐ»ê ½Ã½ºÅÛ¿¡ °øÀ¯ ¸Þ¸ð¸®¸¦ ±¸ÇöÇϱâ À§Çؼ­ °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ´ÙÁß ÇÁ·Î¼¼¼­ ½Ã½ºÅÛó·³ °øÀ¯ µ¥ÀÌÅÍ¿¡ ´ëÇÏ¿© ¾²°í, Àаí, Àá±ÝÇÏ´Â Àú ¼öÁØÀÇ ¸í·É¾î¸¦ ¾ð¾îÂ÷¿ø¿¡¼­ Áö¿øÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª Orca¿¡¼­´Â ÀÌ¿¡ ´ëÇÑ ÇØ°áÃ¥À¸·Î °øÀ¯ µ¥ÀÌÅÍ ±¸Á¶¸¦ "µ¥ÀÌÅÍ °´Ã¼(data-object)"¶ó´Â °÷¿¡ encapsulateÇÑ´Ù. 

µ¥ÀÌÅÍ °´Ã¼¿¡ encapsulateµÈ °øÀ¯ µ¥ÀÌÅÍ´Â »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ¿¬»ê¿¡ ÀÇÇØ¼­ °ü¸®µÈ´Ù.  Orca¿¡¼­ »ç¿ëÇÏ´Â µ¥ÀÌÅÍ °´Ã¼´Â Ãß»óÈ­ µ¥ÀÌÅÍ Çü(abstract data type)ÀÇ ÀνºÅϽº·Î º¼ ¼ö ÀÖ´Ù.
 
 
 
 

2 ÇÁ·Î¼¼½º
 

ÄÄÆÄÀÏ·¯°¡ º´·Ä¼ºÀ» È¿À²ÀûÀ¸·Î ¸¸µé¾î ÁÙ ¼ö ¾ø±â ¶§¹®¿¡ Orca¿¡¼­´Â ¸í½ÃÀûÀ¸·Î º´·Ä¼ºÀ» ±¸ÇöÇÑ´Ù. Áï, Orca¿¡¼­´Â ¼øÂ÷ ÇÁ·Î¼¼½º¸¦ ¸í½ÃÀûÀ¸·Î »ý¼ºÇÔÀ¸·Î½á º´·Ä¼ºÀ» ±¸ÇöÇϰí ÀÖ´Ù. Orca ¾ð¾î·Î ¸¸µé¾îÁø ÇÁ·Î±×·¥ÀÌ Ã³À½ ½ÃÀÛÇϸé ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸ ½ÇÇàÀÌ µÈ´Ù.  ±×·¯³ª »õ·Î¿î ÇÁ·Î¼¼½º¸¦ fork statement¸¦ »ç¿ëÇØ¼­ ¸í½ÃÀûÀ¸·Î »ý¼ºÇÑ´Ù.

fork name(actual parameters) [ on (cpu-number)];

À§ÀÇ ¹®ÀåÀº »õ·Î¿î anonymous ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲ´Ù. fork ¹®ÀåÀº on ¿¹¾à¾î¸¦ »ç¿ëÇÒ ¼ö Àִµ¥, on À» »ç¿ëÇÏ¿© cpu¸¦ ÁöÁ¤Çϸé ÀÚ½Ä ÇÁ·Î¼¼½º´Â ÁöÁ¤ÇÑ ÇÁ·Î¼¼¼­¿¡ »ý¼ºµÈ´Ù. onÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¸é ÀÚ½Ä ÇÁ·Î¼¼½º´Â °°Àº ÇÁ·Î¼¼¼­¿¡ »ý¼ºÀÌ µÈ´Ù. »ç¿ë°¡´ÉÇÑ cpu´Â NCPUS standard functionÀ» ÅëÇØ¼­ ¾Ë¼ö ÀÖ´Ù.

ÇÁ·Î¼¼½º´Â input°ú sharedÀÇ  µÎ °¡Áö Á¾·ùÀÇ ÆÄ¶ó¹ÌÅ͸¦ °¡Áú ¼ö ÀÖ´Ù. input ÆÄ¶ó¹ÌÅͷδ ¾î¶² Á¾·ùÀÇ µ¥ÀÌÅÍ ±¸Á¶µµ °¡Áú ¼ö ÀÖÀ¸¸ç ÇÁ·Î¼¼½º´Â ÀÌ ÆÄ¶ó¹ÌÅÍÀÇ º¹»çº»À» °¡Áö°Ô µÈ´Ù. ºÎ¸ð ÇÁ·Î¼¼½º´Â ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô °øÀ¯ ÆÄ¶ó¹ÌÅÍ·Î½á µ¥ÀÌÅÍ °´Ã¼¸¦ ³Ñ°Ü ÁÙ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì¿¡´Â ºÎ¸ð¿Í ÀÚ½Ä ÇÁ·Î¼¼½º°¡ µ¥ÀÌÅÍ °´Ã¼¸¦ °øÀ¯Çϸç ÀÌ °øÀ¯ °´Ã¼¸¦ ÅëÇØ¼­ ¼­·Î Åë½ÅÀ» ÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î child ¶ó´Â ÇÁ·Î¼¼½º°¡ ´ÙÀ½Ã³·³ ¼±¾ðµÇ¾ú´Ù°í °¡Á¤ÇÏÀÚ.

process child(Id: integer; X: shared AnObjectType); begin ... end;

±×·¯¸é »õ·Î¿î child ÇÁ·Î¼¼½º´Â ´ÙÀ½°ú °°ÀÌ »ý¼ºµÇ¾î Áú ¼ö ÀÖ´Ù.

MyObj: AnObjectType;   # °´Ã¼ ¼±¾ð
...
# »õ·Î¿î ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ »ý¼ºÇϰí value ÆÄ¶ó¹ÌÅͷδ 12¸¦ 
#°øÀ¯ ÆÄ¶ó¹ÌÅͷδ MyObj °´Ã¼¸¦ Àü´ÞÇÑ´Ù.
fork child(12, MyObj);

ÀÚ½Ä ÇÁ·Î¼¼½º´Â °øÀ¯ °´Ã¼¸¦ ÀÌ¿Í °°Àº ¹æ½ÄÀ¸·Î ÀÚ½ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô ³Ñ°ÜÁÙ ¼ö ÀÖÀ¸¸ç, ±× ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¶Ç ´Ù½Ã ÀÚ½ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô °°Àº °øÀ¯ °´Ã¼¸¦ ³Ñ°Ü ÁÙ ¼ö ÀÖ´Ù. ÀÌ·± ½ÄÀ¸·Î µ¥ÀÌÅÍ °´Ã¼°¡ °øÀ¯ µÇ´Â °ÍÀÌ´Ù. ¸¸¾à °øÀ¯ °´Ã¼¸¦ °øÀ¯Çϰí ÀÖ´Â ÇÁ·Î¼¼½º Áß¿¡ ¾î´À ÇÑ ÇÁ·Î¼¼½º°¡ ÀÌ °øÀ¯ °´Ã¼ÀÇ ¿¬»êÀ» °¡ÇÏ¸é ´Ù¸¥ ¸ðµç ÇÁ·Î¼¼½ºµéµµ °°Àº È¿°ú¸¦ º¸°Ô µÈ´Ù. ÀÌ´Â ¸¶Ä¡ ±× °´Ã¼°¡ ÇϳªÀÇ °øÀ¯ ¸Þ¸ð¸®¿¡ À־ Àá±è¿¡ ÀÇÇØ º¸È£ ¹Þ´Â µíÀÌ º¸ÀÌ°Ô µÇ´Â °ÍÀÌ´Ù. 
 
 

3 °øÀ¯ µ¥ÀÌÅÍ °´Ã¼¿Í Ãß»óÈ­ µ¥ÀÌÅÍ Çü(Shared data-objects and abstract data types)

°øÀ¯ µ¥ÀÌÅÍ °´Ã¼´Â Ãß»óÈ­ µ¥ÀÌÅÍ °´Ã¼(°´Ã¼ Çü)ÀÇ ÀνºÅϽºÀÌ´Ù.  Orca¿¡¼­ Ãß»óÈ­ µ¥ÀÌÅÍ ÇüÀÇ Á¤ÀÇ´Â »ó¼¼(specification)ºÎºÐ°ú ±¸Çö(implementation)ºÎºÐÀÇ µÎ ´Ü°è·Î ÀÌ·ç¾îÁø´Ù.

»ó¼¼ ºÎºÐ

object specification  IntObject;
  operation  Value(): integer;
  operation  Assign(val: integer);
  operation  Add(val: integer);
  operation  Min(val: integer);
end;
 

±¸Çö ºÎºÐ

object  specification  IntObject;
   x: integer;

   operation  Value():  integer;
   begin
      return  x;
   end;

   operation  Assign(v: integer);
   begin
      x := v;
   end;
   ¡¦
begin
   x := 0;    # °´Ã¼ÀÇ ÃʱâÈ­ ºÎºÐ
end;
 

ÀÏ´Ü °´Ã¼ Çü(object type)ÀÌ Á¤ÀǵǸé, Á¤ÀÇµÈ ÇüÀÇ ÀνºÅϽº´Â ´ÙÀ½°ú °°ÀÌ »ý¼ºµÇ°í »ç¿ëµÈ´Ù. 

X:  IntObject;
tmp:  integer;

X$Assign(3);             #  3À» X¿¡ ÇÒ´ç
X$Add(1);                 #  X °ªÀ» Áõ°¡
tmp := X$Value();      #  XÀÇ ÇöÀç °ª Àбâ
 

°´Ã¼°¡ »ý¼ºµÇ¸é ±× °´Ã¼ÀÇ Áö¿ª º¯¼ö¿¡ ´ëÇÑ ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í ÃʱâÈ­ Äڵ尡 ½ÇÇàµÈ´Ù. 

Orca´Â ÇϳªÀÇ Ãß»óÈ­ µ¥ÀÌÅÍ ÇüÀ» Áö¿øÇÑ´Ù. ´Ù½Ã ¸»Çؼ­ ¶È °°Àº Ãß»óÈ­ ÇüÀ» °¡Áö°í  Áö¿ª °´Ã¼(local object)¿Í °øÀ¯ °´Ã¼¸¦ »ý¼ºÇÑ´Ù.  ÀÌ Á¤º¸´Â °´Ã¼ ¼±¾ð ¶Ç´Â °´Ã¼ Çü ¼±¾ð ½Ã¿¡ ÁÖ¾îÁöÁö ¾Ê°í, fork ¹®ÀåÀ» ÀÌ¿ëÇØ¼­ »õ·Î¿î ÇÁ·Î¼¼½º »ý¼º½Ã °øÀ¯ ÆÄ¶ó¹ÌÅÍ·Î Àü´ÞµÇ´Â °´Ã¼´Â °øÀ¯ °´Ã¼·Î »ç¿ëµÇ°í ±×·¸Áö ¾ÊÀº °´Ã¼´Â Áö¿ª °´Ã¼·Î »ç¿ëµÈ´Ù. 

¹°¸®ÀûÀÎ Çϵå¿þ¾î ºÐ»êÀ» °¨Ãß°í °øÀ¯ µ¥ÀÌÅ͸¦ È¿°úÀûÀ¸·Î ½Ã¹Ä·¹À̼ÇÇϱâ À§Çؼ­ Orca¿¡¼­´Â º¹»ç(replication)¿Í ¾ÈÁ¤µÈ ºê·ÎµåÄɽºÆÃreliable broadcasting)¿¡ ±â¹ÝÇÑ ±¸ÇöÀ» Çϰí ÀÖ´Ù.  °¢ ÇÁ·Î¼¼¼­´Â °¢ °øÀ¯ °´Ã¼ÀÇ º¹»çº»À» °¡Áø´Ù.  ÀÌ °øÀ¯ °´Ã¼¿¡ ´ëÇØ¼­ ¾Æ¹«·± º¯È­¸¦ ÁÖÁö¾Ê´Â ¿¬»ê(read ¿¬»ê)Àº Áö¿ª¿¡ º¹»çµÇ¾î ÀÖ´Â °øÀ¯ °´Ã¼ÀÇ µ¥ÀÌÅ͸¦ Á÷Á¢ »ç¿ëÇϰí,  ÀÌ °øÀ¯ °´Ã¼¿¡ º¯È­¸¦ °¡ÇÏ´Â ¿¬»ê(write ¿¬»ê)Àº º¯È­µÈ »õ·Î¿î °ªÀ» ´Ù¸¥ ¸ðµç ÇÁ·Î¼¼¼­¿¡°Ô ºê·ÎµåÄɽºÆÃ ÇÏ´Â ¹æ¹ýÀ¸·Î °øÀ¯ °´Ã¼¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù. 
 

4 µ¿±âÈ­(Synchronization)

Orca¿¡¼­ÀÇ Ãß»óÈ­ µ¥ÀÌÅÍ ÇüÀº Áö¿ª °´Ã¼»Ó¸¸ ¾Æ´Ï¶ó °øÀ¯ °´Ã¼¸¦ »ý¼ºÇϴµ¥ ¸ðµÎ »ç¿ëµÉ ¼ö ÀÖ´Ù.  °øÀ¯ µ¥ÀÌÅÍ °´Ã¼ »ý¼ºÀÇ °æ¿ì´Â µ¿±âÈ­ÀÇ ¹®Á¦°¡ ¹ß»ýÇÏ¸ç µÎ °¡Áö Á¾·ùÀÇ µ¿±âÈ­°¡ ÀÖ´Ù.
 

4.1  »óÈ£ ¹èŸ µ¿±âÈ­(Mutual exclusion synchronization)

»óÈ£ ¹èŸ µ¿±âÈ­´Â °´Ã¼¿¡ ´ëÇÑ ¸ðµç ¿¬»êÀ» ³ª´©Áö ¾Ê°í ½ÇÇàÇÔÀ¸·Î½á ³»Æ÷ÀûÀ¸·Î ÀÌ·ç¾î Áø´Ù. °³³äÀûÀ¸·Î °¢ ¿¬»êÀº ÀÌ ¿¬»êÀÌ Àû¿ëµÇ´Â ¸ðµç °´Ã¼¿¡ ´ëÇÏ¿© Àá±Ý(lock)À» Çϰí, ±× ÈÄ¿¡ ÇØ´ç ÀÏÀ» ÇÑ´Ù.  ÇØ´ç ÀÏÀÌ ¸ðµÎ ³¡³­ ÈÄ¿¡´Â Àá±ÝÀ» ÇØÁ¦ ÇÑ´Ù. ¶ÇÇÑ ÀÌ ¸ðµ¨ÀÌ Áö¿øÇÏ´Â »óÈ£ ¹èŸ µ¿±âÈ­´Â serializabilityÀ» º¸ÀåÇÑ´Ù. Áï, µÎ °³ÀÇ ¿¬»êÀÌ µ¿½Ã¿¡ °°Àº °øÀ¯ °´Ã¼¿¡ Á¢±ÙÇÏ¸é °á°úÀûÀ¸·Î´Â ÇϳªÀÇ ¿¬»êÀÌ ´Ù¸¥ ¿¬»êÀÇ ´ÙÀ½¿¡ Àû¿ëµÇ´Â °Í°ú  °°Àº °ÍÀÌ µÈ´Ù. ±×·¯³ª,  ¿¬»ê¿¡ ´ëÇÑ ¼ø¼­´Â »çÀü¿¡ °áÁ¤µÇ¾îÁöÁö ¾Ê´Â´Ù
 

4.2  Á¶°Ç µ¿±âÈ­(Conditional synchronization)

Á¶°Ç µ¿±âÈ­ÀÇ °æ¿ì´Â ¾î¶² ƯÁ¤ Á¶°ÇÀÌ ¸¸Á·µÉ ¶§±îÁö ¸ðµç ÇÁ·Î¼¼½º°¡ ´ë±âÇÑ´Ù.  ÀÌ ¸ðµ¨¿¡¼­´Â Á¶°Ç µ¿±âÈ­´Â ¿¬»êµé¿¡ Àá±ÝÀ» Çã¿ëÇÔÀ¸·Î½á ¿¬»êÀÇ ¼öÇà°ú °áÇյǾî ÀÖ´Ù.

operation  op(formal parameters): ResultType;
begin
   guard  condition(1)  do  statement(1)  od;
   ¡¦
   guard  condition(n)  do  statement(n)  od;
end;

Á¶°ÇÀº boolean À̸ç guard·Î ºÒ¸°´Ù.  À§ÀÇ ¿¬»êÀº guard Áß¿¡ Çϳª°¡ ÂüÀÌ µÉ ¶§±îÁö Àá±èµÈ´Ù.  Çϳª°¡ ¼±ÅÃµÇ¸é ±× ±¸¹®ÀÌ ½ÇÇàµÇ´Â °ÍÀÌ´Ù.
 
 
 

5  °èÃþÀû °´Ã¼(Hierarchical objects)

Ãß»óÈ­ µ¥ÀÌÅÍ ÇüÀº °£´ÜÇÏ°Ô ¾ð¾î°¡ »õ·Î¿î ÇüÀ» °®µµ·Ï È®ÀåÇÒ ¼ö ÀÖ´Ù.  »õ·Î¿î ÇüÀ» ±¸ÃàÇÏ´Â ¹æ¹ýÀº »õ·Î¿î µ¥ÀÌÅÍ ÇüÀ» ¸¸µå´Âµ¥ ±âÁ¸ÀÇ Ãß»óÈ­ µ¥ÀÌÅÍ ÇüÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ±â  ¶§¹®¿¡ °èÃþÀûÀÌ´Ù.  µû¶ó¼­,  ÇÑ °´Ã¼ÀÇ ³»ºÎ µ¥ÀÌÅÍ´Â ±× ÀÚü°¡ °´Ã¼¶ó°í º¼ ¼ö ÀÖ´Ù.  ÇÏÁö¸¸ ÀÌ·¯ÇÑ °èÃþ±¸Á¶°¡ °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­Ã³·³ Çϳª°¡ ´Ù¸¥ Çϳª¸¦ »ó¼ÓÇÑ´Ù´Â °ÍÀº ¾Æ´Ï´Ù.  »õ·Î¿î µ¥ÀÌÅÍ °´Ã¼¿Í ¿¹ÀüÀÇ µ¥ÀÌÅÍ °´Ã¼ »çÀÌ¿¡´Â »ó¼ÓÀÇ °ü°è°¡ ¾Æ´Ñ ¡°»ç¿ë¡±ÀÇ °ü°è¸¦ °¡Áø´Ù. 

ÀÌ·¯ÇÑ °´Ã¼ÀÇ nestingÀº ½ÇÀç·Î µðÀÚÀÎÀ» ¾î·Æ°Ô ¸¸µå´Â ¹®Á¦¸¦ ³»Æ÷ÇÏ°í  ÀÖ´Ù. ¾Æ·¡¿Í °°ÀÌ OldTypeÀ̶ó´Â ±âÁ¸ÀÇ °´Ã¼°¡ ÀÖ´Ù°í ÇÏÀÚ.

object  specification  OldType;
   operation  OldOperation1() :  boolean;
   operation  OldOperation2();
end;

OldTypeÀº ´Ù¸¥ ÇüÀ» ±¸ÇöÇϴµ¥ »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Ù.

object  implementation  NewType;
  NestedObject: OldType;
  operation  NewOperation();
  begin
    guard  NestedObject$OldOperation1() do
     ¡¦
      NestedObject$OldOperation2();
    od;
  end;
end;

À§ÀÇ Äڵ忡¼­ »õ·Î¿î ÇüÀÇ °´Ã¼´Â OldTypeÇüÀÇ NestedObject¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.  ÈÄÀÚÀÇ °´Ã¼¸¦ nested °´Ã¼¶ó ºÎ¸£´Â ÀÌÀ¯´Â ÀÌ °´Ã¼°¡ ´Ù¸¥ °´Ã¼ÀÇ ÀϺκÐÀ̱⠶§¹®ÀÌ´Ù. 
 
 
 

6. ¼º ´É(Performance)*

Orca¾ð¾îÀÇ ¼º´ÉÀ» ¾Ë¾Æº¸±â À§ÇÏ¿© º´·Ä branch-and-bound ¾Ë°í¸®ÁòÀ¸·Î ±¸ÇöµÈ traveling saleman problem(TSP)À» °¡Áö°í Å×½ºÆ®ÇØ º¸¾Ò´Ù. [±×¸² 1]Àº »ç¿ëµÈ ¾Ë°í¸®ÁòÀ» º¸¿©ÁØ´Ù.  

ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÇ¸é ¸ÕÀú Manager ÇÁ·Î¼¼½º°¡ ÇϳªÀÇ ÇÁ·Î¼¼¼­¿¡¼­ ±¸µ¿µÈ´Ù. ±× ÈÄ ManagerÇÁ·Î¼¼½º´Â ÃʱâÈ­¸¦ À§ÇÏ¿© JobQueue °øÀ¯ °´Ã¼¿Í Minimum °øÀ¯ °´Ã¼¸¦ ¸¸µé°í, ÀÏÀ» ÇÒ Worker ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ÇÁ·Î¼¼¼­À§¿¡ Çϳª¾¿ ±¸µ¿µÇµµ·Ï »ý¼ºÇÑ´Ù.  ÃʱâÈ­°¡ ³¡³ª¸é ManagerÇÁ·Î¼¼½º´Â JobQueue °øÀ¯ °´Ã¼¿¡ JobÀ» Çϳª¾¿ Áý¾î ³Ö´Â´Ù. JobQueue °øÀ¯ °´Ã¼¿¡ µé¾î°¡´Â JobÀº °¢ µµ½Ã¸¦ À̾îÁÖ´Â ÀÓÀÇÀÇ °æ·ÎÀÌ´Ù. ±×·¯³ª Àüü µµ½Ã°¡ ´Ù ¿¬°áµÇ¾î ÀÖÁö´Â ¾Ê°í ÀϺÎÀÇ µµ½Ã¸¸ À̾îÁ® ÀÖ´Â JobÀÌ´Ù. °¢ Worker ÇÁ·Î¼¼½º´Â JobQueue °øÀ¯ °´Ã¼¿¡ µé¾îÀÖ´Â JobÀ» °¡Á®´Ù°¡ ÀÌ JobÀ» ±âÁØÀ¸·Î »ý¼º°¡´ÉÇÑ ¸ðµç °æ·Î¸¦ ¸¸µé¾î Minimun °øÀ¯ °´Ã¼¿¡ µé¾î ÀÖ´Â ÇöÀç±îÁöÀÇ ÃÖ¼Ò °æ·Î¿Í ºñ±³Çغ»´Ù. ºñ±³ °á°ú ´õ ªÀº °æ·Î¸é Minimun °øÀ¯ °´Ã¼¿¡ µé¾î ÀÖ´Â °æ·Î¸¦ ¾÷µ¥ÀÌÆ® ½ÃŰ°í ±×·¸Áö ¾ÊÀ¸¸é ´Ù½Ã ´Ù¸¥ JobÀ» JobQueue °øÀ¯ °´Ã¼·Î ºÎÅÍ ²¨³»¿Í °°Àº ÀÛ¾÷À» ¹Ýº¹ÇÑ´Ù. 
 

[±×¸² 1] TSP ¾Ë°í¸®Áò

 
 

ÀÌ ½ÇÇèÀÌ  ½ÃÇàµÈ ȯ°æÀº 10Mbit/s EthernetÀ¸·Î ¿¬°áµÇ¾î  16 °³ÀÇ MC68030 cpu(16MHz) ·Î ÀÌ·ç¾îÁø ºÐ»ê ½Ã½ºÅÛÀÌ¸ç ±× °á°ú´Â ´ÙÀ½ ±×¸²¿¡ ³ªÅ¸³ª Àִ  ±×·¡ÇÁ¿Í °°´Ù. 
 
 


 
 
 
 

*Bal. H.E., Kaashoek, M.F., and Tanenbaum A.S.: "Orca: A Language for Parallel Programming of Distributed Systems", IEEE Transactions on Software Engineering, vol. 18, No. 3, March 1992, pp. 190-205 (Copyright (c) 1992 by IEEE).