1.2. process 0 : swapper

¿©±â¼­ swapper °¡ ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö °£´ÜÇÏ°Ô À̾߱âÇØ º¸°Ú½À´Ï´Ù. [1]

À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ½ÇÇàµÇ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀº "ÀÏ»ý(lifetime)(?)"À» °¡Áö°í ÀÖ½À´Ï´Ù. ÇÁ·Î¼¼½º »ý¼º¿¡¼­ºÎÆ® Á¾·á½Ã±îÁö... ±×µ¿¾È cpu ¸¦ Á¡À¯Çϸ鼭 ½ÇÇàµÇ´Â ½Ã°£µµ ÀÖÀ» °ÍÀ̰í, ÇÒ ÀÏ ¾øÀÌ »ç¿ëÀڷκÎÅÍÀÇ ÀÔ·ÂÀ» ±â´Ù¸°´ÙµçÁöÀÇ ÀÌÀ¯·Î "Àáµé¾î" ÀÖ´Â ½Ã°£µµ ÀÖ½À´Ï´Ù. swapper ÇÁ·Î¼¼½º¿¡ ´ëÇØ ¼³¸íÇϸ鼭 ÀÌ À̾߱⸦ ÇÏ´Â ÀÌÀ¯´Â swapper °¡ ÇÏ´Â ÀÏÀÌ ¹Ù·Î, "Àáµé¾î" ÀÖ´Â ÇÁ·Î¼¼½º¸¦ ¸Þ¸ð¸®¿¡¼­ ³»·Á¼­ µð½ºÅ© °ø°£¿¡ Àá½Ã "½º¿Ò"½ÃÄ×´Ù°¡, ±× ÇÁ·Î¼¼½º°¡ ±ú¾î³ª¾ß¸¸ ÇÒ ½Ã±â°¡ ¿À¸é, µð½ºÅ©ÀÇ ÇÁ·Î¼¼½º¸¦ ´Ù½Ã ¸Þ¸ð¸®·Î ÀûÀçÇØ ÁÖ´Â µîÀÇ ÀÏÀ» Çϱ⠶§¹®ÀÔ´Ï´Ù.

¿¹¸¦ µé¾î¼­, Áö±Ý ½Ã½ºÅÛ¿¡ ³Ê¹« ¸¹Àº ÇÁ·Î¼¼½º°¡ ½ÇÇàµÇ°í À־ ±×³ÑµéÀÌ ´Ù µé¾î°¥ ¸¸Å­ ¸Þ¸ð¸®°¡ Å©Áö ¾Ê´Ù°í °¡Á¤ÇսôÙ. ±×·²¶§, ½Ã°£ÀÌ Á» ¸¹ÀÌ °É¸®´Â I/O ¿äûÀ» ÇÑ ÇÁ·Î¼¼½º¶óµçÁö, »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ±â´Ù¸®´Â ÇÁ·Î¼¼½º ¶óµçÁö.. Áö±Ý sleep »óÅ·ΠÀÖ´Â ÇÁ·Î¼¼½º (¿¹¸¦ µé¸é, httpd °°Àº°Ç ´ëºÎºÐÀÇ ½Ã°£À».. - ±×¸® Á¢¼ÓÀÌ ¸¹Áö ¾ÊÀº À¥ ¼­¹ö¶ó¸é - port ¿¡¼­ ¿äûÀÌ µé¾î¿À±æ ±â´Ù¸®¸é¼­ Àáµé¾î ÀÖ´Â (asleep) »óÅÂÀ̰ÚÁÒ?) ¿Í °°Àº ³ÑµéÀº Áö±Ý ´çÀå ¸Þ¸ð¸®¿¡ ÀÖÀ» Çʿ䰡 ¾ø´Â °ÍÀÔ´Ï´Ù. ±×·¯¸é, Áö±Ý ¸Þ¸ð¸®°¡ ¸ðÀÚ¶ó´Ï±î µð½ºÅ©·Î "½º¿Ò" À» ÇØ¼­ ´çÀå ½ÇÇàµÇ¾î¾ß ÇÏ´Â ÇÁ·Î¼¼½º¸¦ À§ÇÑ ¸Þ¸ð¸® °ø°£À» ´Ã¸®¸é µÇ°ÚÁÒ? À̶§ swapper °¡ ÀÛµ¿À» ÇØ¼­ ¸Þ¸ð¸®¿¡ ÀÖ´Â ÇÁ·Î¼¼½º¸¦ µð½ºÅ©·Î Àá½Ã ¿Å°Ü µÎ´Â (swap out) °ÍÀÔ´Ï´Ù. ¶Ç, swapper ´Â ¹Ý´ë·Î µð½ºÅ©¿¡ ½º¿ÒµÇ¾î ÀÖ´Â ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®·Î ÀûÀçµÇ¾î¼­ ½ÇÇàµÇ¾î¾ß ÇÒ Çʿ䰡 ÀÖÀ»¶§¿¡µµ ½º¿ÒµÈ ÇÁ·Î¼¼½º¸¦ ¸Þ¸ð¸®·Î ´Ù½Ã ¿Ã¸®´Â(swap in) ÀÏÀ» Çϱ⵵ ÇÕ´Ï´Ù.

¸®´ª½ºÀÇ ¸ðµç ÇÁ·Î¼¼½º´Â ¸ðµÎ "ºÎ¸ð" ÇÁ·Î¼¼½º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. Áï, ±× ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲ ³ÑÀÌ Á¸ÀçÇÑ´Ù´Â ¾ê±âÀÔ´Ï´Ù. ±×·¯³ª, ´Ü Çϳª. pid °¡ 0 ÀÎ swapper ÇÁ·Î¼¼½º¸¸Àº(ÀÌ°Ç ÇÁ·Î¼¼½º¶ó±â º¸´Ù´Â ¿î¿µÃ¼Á¦ ÀÚü¶ó°í ÇØµµ ÁÁÀ» °Å °°½À´Ï´Ù.) ºÎ¸ð°¡ Á¸ÀçÇÏÁö ¾Ê°í, lilo µî¿¡ ÀÇÇØ¼­ "¼öµ¿"À¸·Î ½ÇÇàÀÌ µË´Ï´Ù. ³ª¸ÓÁö ÇÁ·Î¼¼½º´Â ¸ðµÎ fork() ½Ã½ºÅÛ Äݰú exec() ½Ã½ºÅÛ ÄÝÀ» ÀÌ¿ëÇØ¼­ »ý¼ºÀÌ µË´Ï´Ù.

¶Ç ¿©±â¼­, fork() ½Ã½ºÅÛ Äݰú exec() ½Ã½ºÅÛ ÄÝ¿¡ ´ëÇØ °£´ÜÈ÷ À̾߱âÇÏ°í ³Ñ¾î°¡°Ú½À´Ï´Ù. UNIX ½Ã½ºÅÛ ÇÁ·Î±×·¡¹ÖÀ» °øºÎÇØ º¸½Å ºÐµéÀ» ´Ù Àß ¾Æ½Ã´Â ³»¿ëÀÏ °ÍÀÔ´Ï´Ù.

fork() ³ª exec() ¸ðµÎ ÇÑ ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇà½Ã۱â À§ÇØ »ç¿ëÇÏ´Â ½Ã½ºÅÛ È£ÃâÀÔ´Ï´Ù. µÎ ÇÔ¼öÀÇ Â÷ÀÌÁ¡À» À§ÁÖ·Î ¼³¸íÇϸé, ¿ì¼± fork() ½Ã½ºÅÛ È£ÃâÀº »õ·Î¿î ÇÁ·Î¼¼½º¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÕ´Ï´Ù. ±×¸®°í, fork() ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º¸¦ »õ·Î¿î °ø°£À¸·Î ½Î±×¸® º¹»çÇÕ´Ï´Ù. ±×¸®°í ³ª¼­ ¿ø·¡ ÇÁ·Î¼¼½º´Â ¿ø·¡ ÇÁ·Î¼¼½º´ë·Î ½ÇÇàµÇ°í, fork() ¸¦ ÀÌ¿ëÇØ¼­ »ý¼ºµÈ ÇÁ·Î¼¼½ºµµ ±× ³ª¸§´ë·Î fork() ½Ã½ºÅÛ ÄÝÀÌ ¼öÇàµÈ ¶óÀÎÀÇ ´ÙÀ½ ¶óÀκÎÅÍ ½ÇÇàÀÌ µË´Ï´Ù. (»õ·Î »ý¼ºµÈ ÇÁ·Î¼¼½º´Â ¿ø·¡ÀÇ ÇÁ·Î¼¼½º¶û ¶È°°Àº Äڵ带°¡Áö°í ÀÖ½À´Ï´Ù.) ¹Ý¸é, exec() ½Ã½ºÅÛ ÄÝÀº fork() ó·³ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏÁö ¾Ê°í, exec() ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸®¿¡ »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ Äڵ带 µ¤¾î¾º¿ö ¹ö¸³´Ï´Ù. µû¶ó¼­ exec() ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º°¡ ¾Æ´Ñ exec() ¿¡ ÀÇÇØ È£ÃâµÈ ÇÁ·Î¼¼½º¸¸ ¸Þ¸ð¸®¿¡ ³²°Ô µË´Ï´Ù.

´Ù½Ã °£´ÜÇÏ°Ô ¸»Çϸé, fork() ÀÇ °á°ú´Â ÇÁ·Î¼¼½º°¡ Çϳª ´õ »ý±â´Â °ÍÀÔ´Ï´Ù. ¹°·Ð, ÇÁ·Î¼¼½º id (pid) µµ ¿ÏÀüÈ÷ ´Ù¸¥ ¶Ç ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ »ý±â´Â °ÍÀÌÁÒ. ¹Ý¸é, exec() ½ÇÇàÀÇ °á°ú·Î »ý¼ºµÇ´Â »õ·Î¿î ÇÁ·Î¼¼½º´Â ¾ø½À´Ï´Ù. exec() ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ pid °¡ ±×´ë·Î »õ·Î¿î ÇÁ·Î¼¼½º¿¡ Àû¿ëÀÌ µÇ¸ç, exec() ¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º´Â »õ·Î¿î ÇÁ·Î¼¼½º¿¡ ÀÇÇØ µ¤¾î¾²¿©Áö°Ô µË´Ï´Ù.

ÁÖ¼®

[1]

½ÇÁ¦ ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â Ä¿³Î ½º·¹µåµé Áß, kswapd, bdflush, kupdated, kreclaimd µîÀÌ º»¹®¿¡¼­ ¼³¸íÇÏ´Â ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù.