´ÙÀ½ ÀÌÀü Â÷·Ê

4. ÇÁ·Î±×·¡¹Ö

¾öû³­ Çϵå¿þ¾îÀÇ ¼º´É ¹ßÀüÀ» ¼ÒÇÁÆ®¿þ¾î ±â¼úÀÌ µû¶ó°¡Áö ¸øÇÏ°í ÀÖ´Ù´Â ÁöÀûÀÌ ¸¹´Ù. ´« ±ô¦ÇÒ »çÀÌ¿¡ ÀÌ¹Ì ÆæƼ¾ö ÇÁ·Î 200À» ³Ñ¾î¼­°í ÀÖ°í ¸ÖƼ¹Ìµð¾î °ü·Ã MMX´Ù ¹¹´Ù Çؼ­ ÀÎÅÚ»ç´Â »õ·Î¿î ±¸¸Å ¿å±¸¿¡ Ã浿ÁúÀ» ÇÏ°í ÀÖ´Ù. ÇÊÀÚ°¡ ¿øÇÏµç ¿øÇÏÁö ¾Êµç ¶Ç ÇÑ ¹ø Çϵå¿þ¾î °¥¾ÆÄ¡¿ì±â ÀüÀïÀÌ ÀϾ µí ÇÏ´Ù.

Çϵå¿þ¾îÀû ¹ßÀü Áß¿¡¼­µµ À̹ø¿¡´Â SMP(Symmetrical MultiProcessing) ±×¸®°í º´·Ä ó¸® °³³äÀ» »ç¿ëÇÏ´Â ¾²·¹µå(thread) ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ¾ê±â¸¦ Àá±ñ Çغ¸°íÀÚ ÇÑ´Ù. À̹ø¿¡ ´Ù·ç´Â ³»¿ëÀº ¼Ò°³ ¼öÁØ ¹Û¿¡ ¾ÈµÈ´Ù´Â °ÍÀ» ¹Ì¸® ÀÏ·¯µÎ°íÀÚ ÇÑ´Ù.

º´·Äó¸® °³³äÀ» »ç¿ëÇϸé ÀÌÀÍÀ» ¾òÀ» ¼ö ÀÖ´Â ºÐ¾ß´Â ¿ª½Ã ÀÎÅÍ³Ý ¼­¹ö¶ó°í ÇÒ ¼ö ÀÖ´Ù. Áö±Ý ÇöÀç´Â À¥ ¼­¹öÀÇ °æ¿ì HTTP ¼­ºñ½º¸¦ ¿ä±¸Çϴ Ŭ¶óÀ̾ðÆ®ÀÇ ¿ä±¸°¡ ÀÖÀ» ¶§¸¶´Ù Àڱ⠽º½º·Î¸¦ º¹Á¦(fork)ÇÏ¿© ±× º¹Á¦ ÇÁ·Î¼¼½º·Î ÇÏ¿©±Ý Ŭ¶óÀ̾ðÆ®¿¡°Ô ¼­ºñ½º¸¦ Á¦°øÇÏ°í ¸ÞÀÎ ÇÁ·Î¼¼½º´Â °è¼ÓÀûÀ¸·Î ƯÁ¤ Æ÷Æ®(ÀϹÝÀûÀ¸·Î À¥ ¼­¹ö´Â 80¹ø Æ÷Æ® ¶Ç´Â 8080¹ø Æ÷Æ®)¿¡ ±Í±â¿ïÀÌ´Â ÇüŸ¦ Áö´Ñ´Ù. ÀÌ¹Ì À¯´Ð½º ½Ã½ºÅÛ¿¡´Â À¥ ¼­¹ö¿Í °°ÀÌ Å¬¶óÀ̾ðÆ®µéÀÇ µ¿½Ã Á¢¼Ó, µ¿½Ã ¼­ºñ½º Á¦°øÀ» ÇØ°áÇÒ ´É·ÂÀ» °¡Áö°í ÀÖ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀº Á» ´õ ³ª¾Æ°¡·Á°í ÇÑ´Ù. ±â¼úÀûÀÎ ¾ê±â·Î´Â À¯´Ð½ºÀÇ ÇÁ·Î¼¼½º º¹Á¦¿¡ °É¸®´Â ½Ã½ºÅÛÀÇ ºÎÇÏ°¡ ¸¹±â ¶§¹®¿¡ ±×º¸´Ù´Â °³¼±µÈ ÇüÅ Áï ¾²·¹µå (thread)¶ó°í ºÒ¸®¿ì´Â °æ·®±Þ(light-weight) ÇÁ·Î¼¼½º ¸ðµ¨À» »ç¿ëÇÏ¿© ºó¹øÇÑ ¼­¹ö ó¸® ¾÷¹«¿¡ È¿À²¼ºÀ» ±âÇÏÀÚ´Â ³»¿ëÀÌ´Ù. ´õ±º´Ù³ª ATM ±³È¯±â µî ÃÊ °í¼Ó ³×Æ®¿öÅ©°¡ °Ç¼³µÇ¸é ¾à°£ÀÇ ½Ã°£ Â÷À̶ó ÇÒÁö¶óµµ ¼­¹öÀÇ Ã³¸® ´É·ÂÀº Ä¿´Ù¶õ ¹®Á¦·Î ¶°¿À¸£Áö ¾ÊÀ» ¼ö ¾ø´Ù. ATM ±³È¯±â¸¦ ÅëÇؼ­ ½ñ¾ÆÁ® ¿À´Â ÆÐŶÀ» Á¦´ë·Î ó¸®ÇÏÁö ¸øÇÑ´Ù¸é ºñ½Ñ µ· µé¿© °Ç¼³ÇÑ ³×Æ®¿öÅ© Çϵå¿þ¾î°¡ ¹«½¼ ¼Ò¿ë Àְڴ°¡?

¾²·¹µå°¡ »õ·Ó°Ô ¸¸µé¾îÁö´Â °Í°ú ÇÁ·Î¼¼½º°¡ »õ·Ó°Ô ¸¸µé¾îÁø °Í »çÀÌ¿¡´Â ¾à°£ÀÇ Â÷ÀÌ°¡ ÀÖ´Ù°í ÇÑ´Ù. ÇÁ·Î¼¼½º°¡ º¹Á¦µÉ ¶§´Â º¹Á¦¸¦ ÇàÇÏ´Â ºÎ¸ð ÇÁ·Î¼¼½º¿Í »ó´ëÀûÀ¸·Î ÀûÀº ¾çÀÇ Á¤º¸¸¦ °øÀ¯ÇÑ´Ù°í ÇÑ´Ù. ÇÏÁö¸¸ ¾²·¹µåÀÇ °æ¿ì¿¡´Â ¿¹¸¦ µé¾î Àü¿ª º¯¼ö(global variable), Á¤Àû Áö¿ª º¯¼ö(static local variable), ±×¸®°í ¿­·ÁÁø ÆÄÀÏ ±â¼úÀÚ, ÇÁ·Î¼¼½º ID µî ´õ ¸¹Àº Á¤º¸¸¦ °øÀ¯ÇÑ´Ù°í ÇÑ´Ù. ÇÁ·Î¼¼½ºÀÇ °æ¿ì °³º°ÀûÀÎ º¹Á¦¹°À» ¸¸µé¾î³»´Âµ¥ ¾²·¹µå¿¡ ºñÇØ »ó´ëÀûÀ¸·Î ºÎÇÏ°¡ ¸¹ÀÌ °É¸®¸ç ÇÑ ÇÁ·Î¼¼½º¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½º·Î Á¦¾î±ÇÀ» ³Ñ±â´Âµ¥ (context switch¶ó°í ÇÑ´Ù) °É¸®´Â ½Ã°£ÀÌ ÇÑ ¾²·¹µå¿¡¼­ ´Ù¸¥ ¾²·¹µå·Î À̵¿ÇÏ´Â ½Ã°£º¸´Ù »ó´ëÀûÀ¸·Î ´õ ¸¹ÀÌ °É¸°´Ù°í ÇÑ´Ù.

À¯Áî³Ý ´º½º±×·ì¿¡ °¡º¸¸é ¾²·¹µå ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ Âù¹ÝÀÌ ¾ù°¥¸®Áö¸¸ ¾îÂî µÇ¾úµç ¾²·¹µå ¹æ½ÄÀÇ ÇÁ·Î±×·¡¹ÖÀº Ç¥ÁØÀûÀÎ ÇÁ·Î±×·¡¹Ö ¶óÀ̺귯¸®ÀÇ À§Ä¡·Î µé¾î¿À±â ½ÃÀÛÇß´Ù. ¸®´ª½º Ä¿³ÎÀº 2.0 ¹öÀüÀÌ µÇ¸é¼­ºÎÅÍ ¸ÖƼ-¾²·¹µå ÇÁ·Î¼¼½º¸¦ ´Ù·ê ¼ö ÀÖ°Ô µÇ¾ú°í µû¶ó¼­ ¾²·¹µå ÇÁ·Î±×·¡¹Ö¿¡ ±æÀ» ¿­¾îÁÖ°í ÀÖ´Ù.

4.1 ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§ÇØ ÇÊ¿äÇÑ °ÍÀº?

¸®´ª½º C ¶óÀ̺귯¸® ¹öÀü 5.x ´ëÀÇ ¶óÀ̺귯¸®¿¡¼­´Â »ç¿ëÀÚ ·¹º§ (User-Level)ÀÇ ¾²·¹µå ¶óÀ̺귯¸®°¡ µé¾îÀÖÀ¸³ª ±×·¸°Ô ¾µ¸¸ ÇÑ °ÍÀº ¾Æ´Ï¶ó ´Â ¸»µéÀÌ ¸¹´Ù. ¸î ¹ø ½ÃÇèÇغ» °á°ú ±¸ÇöµÇÁö ¾ÊÀº °Íµéµµ ¸î °¡Áö À־ ¾Æ¿¹ ÄÄÆÄÀÏ ÀÚü°¡ ¾ÈµÇ´Â °æ¿ìµµ Çã´ÙÇß´Ù.

¿©·¯ºÐÀÌ ±¸ÇØ¾ß ÇÒ °ÍÀº Xavier Leroy¾¾ÀÇ Ä¿³Î ¼öÁØ(Kernel-Level) ¾²·¹µå ¶óÀ̺귯¸®ÀÌ´Ù. Ä¿³Î ¼öÁØÀÇ ¾²·¹µå¶õ ¸®´©½º¾¾°¡ Ä¿³Î ¹öÀü 2.0 ÀÌÇÏ¿¡¼­ Á¦°øÇÏ°í ÀÖ´Â clone()À̶ó°í ÇÏ´Â »õ·Î¿î ±â´É¿¡ ÀÇ°ÅÇÑ ¾²·¹µå¸¦ ¸»ÇÑ´Ù. ÇöÀç ¼Ò°³ ¼öÁØ¿¡ ±×Ä¡´Â ÀÌ ±Û¿¡¼­ »ç¿ëÀÚ ·¹º§ÀÇ ¾²·¹µå¿Í Ä¿³Î ¼öÁØÀÇ ¾²·¹µå´Â Å©°Ô ±¸ºÐÇÒ ÇÊ¿ä ¾øÀ¸¸ç API´Â °°À¸¹Ç·Î »ó°üÇÏÁö ¾Ê¾Æµµ ÁÁ´Ù.

¼Ò½º¸¦ ±¸ÇÏ¿© ¼öµ¿À¸·Î ¼³Ä¡ÇØ¾ß Çϴµ¥ ±× À§Ä¡´Â ´ÙÀ½°ú °°´Ù. pauillac.inria.fr/~xleroy/linuxthreads/ ·¹µåÇÞ ¹èÆ÷ÆÇ »ç¿ëÀÚ´Â ¼Õ½±°Ô Ä¿³Î ¾²·¹µå ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. ·¹µåÇÞ ¹èÆ÷ÆÇ ¹öÀü 4.1¿¡ ÆÐÅ°Áö°¡ Ãß°¡µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ¿©·¯ºÐÀÌ ¼³Ä¡ÇØ¾ß ÇÒ ÆÐÅ°Áö¸íÀº linuxthreads, linuxthreads-devel ÀÌ·¸°Ô 2 °³ÀÇ ÆÐÅ°ÁöÀÌ´Ù. ¸¶Âù°¡Áö·Î Leroy¾¾ÀÇ Ä¿³Î ¾²·¹µå ¶óÀ̺귯¸®ÀÌ´Ù.

´ÙÀ½ ¿¹Á¦¸¦ ÄÄÆÄÀÏÇغ¸ÀÚ. (ÀÌ ¼Ò½º´Â ¸®´ª½º Àú³Î 97³â 2¿ùÈ£ ISSUE 34È£, Martin McCarthy¾¾ÀÇ ¿ø°í¿¡¼­ Listing 6.¿¡¼­ ÀοëÇÑ °ÍÀÔ´Ï´Ù)

{{{{#define _REENTRANT
#include <stdio.h>
#include <pthread.h>

#define MATSIZE     4

/* ÇÔ¼ö ¿øÇü */
void* matMult ( void* );

/* Àü¿ª Çà·Ä ÀÚ·á */

int mat2[MATSIZE][MATSIZE] =
  {  {1, 2, 3, 4 },
     {4, 5, 6, 7 },
     {7, 8, 9, 10 },
    {10, 11, 12, 13 } };
int mat1[MATSIZE][MATSIZE] =
  {  { 9, 8, 7, 6 },
    { 6, 5, 4, 3 },
    { 3, 2, 1, 0 },
    { 0, -1, -2, -3 } };
int result[MATSIZE][MATSIZE];

int
main( void )
{
    pthread_t thr[MATSIZE];

    int i, j;

    for ( i = 0 ; i < MATSIZE ; ++i )    {
        pthread_create ( &thr[i], NULL, matMult, (void*)i );
    }
    for ( i = 0 ; i < MATSIZE ; ++i )    {
        pthread_join ( thr[i], NULL);
    }
/* ¼Ò½º ´ÙÀ½¿¡ °è¼Ó */
/* ¼Ò½º ¾Õ¿¡¼­ À̾îÁü */

    for ( i = 0 ; i < MATSIZE ; ++i )    {
        printf ("|");
        for ( j = 0 ; j < MATSIZE ; ++j )
            printf ("%3d ", mat1[i][j] );
        printf ("|%c|", ( i==MATSIZE/2 ? 'x' : ' ') );
        for ( j = 0 ; j < MATSIZE ; ++j )
            printf ("%3d ", mat2[i][j] );
        printf ("|%c|", ( i==MATSIZE/2 ? '=' : ' ') );
        for ( j = 0 ; j < MATSIZE ; ++j )
            printf ("%3d ", result[i][j]);
        printf ("|\n");
    }

    return 0;
}

void*
matMult ( void* col )
{
    int i, j;
    int val;

    for ( i = 0 ; i < MATSIZE ; ++i )
    {
        result[i][(int)col] = 0;
        for ( j = 0 ; j < MATSIZE ; ++j )
            result[i][(int)col] += mat1[i][j] *
                mat2[j][(int)col];
    }

    return NULL;
}

¾Æ·¡´Â ½ÇÇà °á°ú¸¦ º¸¿©ÁØ´Ù.

$ gcc thread_ex1.c -o thr_ex1 -lpthread
$ ./thr_ex1
| 9  8  7  6 |   | 1  2  3  4  |   | 150 180 210 240 |
| 6  5  4  3 |   | 4  5  6  7  |   |  84 102 120 138 |
| 3  2  1  0 | x | 7  8  9 10  | = |  18 24 30 36    |
| 0 -1 -2 -3 |   | 10 11 12 13 |   | -48 -54 -60 -66 |

¾²·¹µå ÇÁ·Î±×·¡¹Ö ¹æ½ÄÀ¸·Î Çà·ÄÀ» °è»êÇÑ ¿¹ÀÌ´Ù. »ç½Ç ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» ¹è¿ì±â ¾î·Æ´Ù±â º¸´Ù´Â ¾îµð¿¡ È°¿ëÇÒ °ÍÀΰ¡¸¦ ã´Â °ÍÀÌ ´õ ¾î·Æ´Ù°í ¸»ÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ¾²·¹µåÀÇ È°¿ë ¿µ¿ªÀº ¾Õ¼­ ¾ê±âÇÑ ´ÙÁß Å¬¶óÀ̾ðÆ® Áö¿ø ¼­¹ö ÇÁ·Î±×·¡¹Ö ±×¸®°í ¿©±â¼­ º¸´Â °Íó·³ Çà·Ä ¿¬»ê ±×¸®°í µÒ°ú °°ÀÌ µ¶¸³ÀûÀ¸·Î ¿òÁ÷ÀÌ´Â ÀûµéÀÌ ¸¹ÀÌ µîÀåÇØ¾ß ÇÏ´Â °ÔÀÓÀ» µé ¼ö ÀÖ´Ù. °¡±î¿î ¿¹·Î´Â Áö³­´Þ¿¡ ¼Ò°³Çß´ø MPEG Layer3 µðÄÚ´õ/Ç÷¹À̾îÀÎ splay°¡ ¹Ù·Î pthread ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ°í ÀÖ´Ù.

Çà·Ä ¿¬»ê¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ. À§¿¡¼­´Â 4x4 Á¤¹æÇà·Ä 2 °³ÀÇ Çà·Ä °öÀ» ó¸®ÇÏ´Â °úÁ¤À» º¸¿©ÁÖ°í ÀÖ´Ù. ¿©·¯ºÐÀÌ °íµîÇб³ ¼öÇÐÀ» ¸¶ÃÆ´Ù¸é Çà·Ä °öÀÌ ¾î¶² ½ÄÀ¸·Î ÀÌ·ïÁö´ÂÁö ±× ±ÔÄ¢À» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¾Õ Çà·ÄÀÇ m ¹ø° Çà°ú µÚ Çà·ÄÀÇ n ¹ø° ¿­À» °è»êÇÏ¿© °á°ú Çà·ÄÀÇ m Çà n ¿­ÀÇ ¿ø¼Ò°¡ µÈ´Ù. Çà·Ä °ö ±ÔÄ¢À» Àß »ìÆ캸¸é Çà°ú ¿­ÀÇ °öÀº ¼­·ÎÀÇ °á°ú¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê°í µ¶¸³ÀûÀ¸·Î ÇàÇØÁö´Â ¿¬»êÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. µû¶ó¼­ °¢ Çà°ú ¿­ÀÇ °öÀº º´·Ä ó¸®ÇϱⰡ ¾ÆÁÖ ÁÁ´Ù.

ÇÊÀÚ´Â ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» º¸°í ÀÖ³ë¶ó¸é ¼Õ¿À°øÀÌ ÀûÀ» ¹°¸®Ä¡±â À§ÇÏ¿© ÀÚ½ÅÀÇ ¸Ó¸®ÅÐÀ» »Ì¾Æ Àڱ׸¶ÇÑ ºÐ½ÅµéÀ» ¸¸µé¾î °ø°ÝÇÏ´Â ¸ð½ÀÀ» ¿¬»óÇÏ°ï ÇÑ´Ù.

4.2 POSIX ¾²·¹µå

¸ÖƼ¾²·¹µù¿¡ °üÇÏ¿© POSIX Ç¥ÁØÀÌ ÀÌ¹Ì ¸¶·ÃµÇ¾î ÀÖ´Ù. µû¶ó¼­ POSIX ¾²·¹µå Ç¥ÁØ¿¡ µû¸¥ ÇÁ·Î±×·¡¹ÖÀ» ÇÑ´Ù¸é ¼Ò½º ÄÚµå ¼öÁØ¿¡¼­ ¸®´ª½º¿¡¼­»Ó ¾Æ´Ï¶ó ´Ù¸¥ ºñ½ÁÇÑ À¯´Ð½º¿¡¼­ °°Àº ÇÁ·Î±×·¥À» ¿î¿µÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º ¾²·¹µå ¶óÀ̺귯¸®µéÀº POSIX Ç¥ÁØÀ» µû¸£¹Ç·Î °ÆÁ¤ÇÒ ÇÊ¿ä¾ø´Ù.

4.3 °ü·ÃµÈ À̾߱â

¾²·¹µå¿¡ ´ëÇÏ¿© À̾߱âÇϸ鼭 ºü¶ß¸± ¼ö ¾ø´Â ÁÖÁ¦µéÀÌ ÀÖ´Ù. ¹Ù·Î º´·Ä ´ÙÁß ÇÁ·Î¼¼¼­ SMP¿Í ¸¶Å©(Mach) Ä¿³ÎÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. ¿äÁò ¿ì¸®´Â ½É½ÉÁö ¾Ê°Ô 2 °³ÀÇ ÇÁ·Î¼¼¼­¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Â º¸µå¸¦ º¼ ¼ö ÀÖ´Ù. ±×¸®°í ±âÁ¸ÀÇ À¯´Ð½º Ä¿³Î°ú´Â ´Ù¸¥ ¼³°è ¹æ½ÄÀÇ ¸¶Å©(Mach) Ä¿³Î¿¡ ´ëÇÑ ¾ê±â¸¦ ½É½ÉÄ¡ ¾Ê°Ô µè°Ô µÈ´Ù. ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀº ¹Ù·Î ÀÌ·± ȯ°æ¿¡¼­ °¡Àå ¶Ù¾î³­ È¿À²À» ¹ßÈÖÇÑ´Ù°í ÇÑ´Ù.

Ä«³×±â ¸á·± ´ëÇÐ(CMU)¿¡¼­ ½ÃÀÛÇÑ »õ·Î¿î ¿î¿µÃ¼°è ¿¬±¸ ÇÁ·ÎÁ§Æ®ÀÇ ÀÇ ÇϳªÀÎ ¸¶Å© ÇÁ·ÎÁ§Æ®´Â 1985³âºÎÅÍ ½ÃÀ۵Ǿú´Ù°í ÇÏ´Ï ²Ï ¿À·£ ½Ã°£À» °ÅÄ£ ½Ã½ºÅÛÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. 1994³â CMUÀÇ ¸¶Å© Ä¿³Î °³¹ßÀº ÁߴܵǾú°í ¸¶Å© Ä¿³ÎÀÇ °³¹ßÀº Open Software Foundation, À¯Å¸ ´ëÇÐÀÇ Flexmach, Çï½ÌÅ° ´ëÇÐÀÇ LITES ½Ã½ºÅÛ, ±×¸®°í FSFÀÇ Hurd ½Ã½ºÅÛÀ¸·Î °³¹ßÀÌ ÁøÇà ÁßÀÌ´Ù. ¸¶Å© Ä¿³Î¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ´ÙÀ½ »çÀÌÆ®¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù. www.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html

¾ÈŸ±õ°Ôµµ ¸®´ª½º´Â ¸¶Å© Ä¿³Î À§¿¡ ¸¸µé¾îÁø °ÍÀÌ ¾Æ´Ï¸ç ÀüÅëÀûÀÎ À¯´Ð½º ½ºÅ¸ÀÏ·Î ¸¸µé¾îÁø °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ¹Ì ¾ÖÇà »ç¿¡ ÀÇÇØ ¸¸µé¾îÁø MkLinux´Â ¸¶Å© Ä¿³Î À§¿¡ ¸®´ª½º¸¦ ¿Ã·Á³õ´Âµ¥ ¼º°øÇÏ¿´´Ù. ¾ÆÁ÷ Çö½ÇÀûÀÎ ÈûÀ» ¹ßÈÖÇϱ⿡´Â ¸¹Àº ½Ã°£À» ±â´Ù·Á¾ß ÇÒ °ÍÀ¸·Î ¿¹»óµÇ´Â ¿î¿µÃ¼°è GNU´Â ¸¶Å© Ä¿³Î ¹æ½ÄÀ̸ç Hurd¶ó´Â Ä¿³ÎÀ» »ç¿ëÇÑ´Ù. ÃÖ±Ù µé¾î GNU Ãø¿¡¼­µµ ¸¶Å© Ä¿³ÎÀ» ³»³õ¾Ò´Ù°í ÇÑ´Ù. ¸¶Å© Ä¿³Î¿¡ ´ëÇÑ °ü½ÉÀº ¹«¾ùº¸´Ùµµ ¾ÖÇà »ç·Î ÀμöµÈ ³Ø½ºÆ®½ºÅÜÀÇ ÇϺΠ±â¼úÀ̱⿡ ´õ¿í Ä¿Áö¸®¶ó º»´Ù. GNU Hurd¿¡ °üÇÑ Á¤º¸´Â ´ÙÀ½ »çÀÌÆ®¸¦ ¹æ¹®Çغ¸±â ¹Ù¶õ´Ù. www.gnu.ai.mit.edu/software/hurd/hurd.html


´ÙÀ½ ÀÌÀü Â÷·Ê