|
¹«Á¦ ¹®¼
¼Ö¶ó¸®½º, ¸®´ª½º, FreeBSD Ä¿³ÎÀÇ ºñ±³
ÇÊÀÚ´Â ÇлýÀ» °¡¸£Ä¡´Â °ÀÇ¿¡¼ ´ëºÎºÐÀÇ ½Ã°£À» ¼Ö¶ó¸®½º ³»ºÎ±¸Á¶, µð¹ÙÀ̽º µå¶óÀ̹ö ¹× Ä¿³Î Å©·¡½¬ ´ýÇÁ ºÐ¼®°ú µð¹ö±ëÀ» °¡¸£Ä¡´Âµ¥ »ç¿ëÇÕ´Ï´Ù. Çлýµé¿¡°Ô ¾ó¸¶³ª ´Ù¾çÇÑ ¼ºê½Ã½ºÅÛÀÌ ¼Ö¶ó¸®½º¿¡ ±¸ÇöµÇ¾ú´ÂÁö ¼³¸íÇÒ¶§¸é ÇлýµéÀÌ Á¾Á¾ "±×°ÍÀº ¸®´ª½º¿¡¼ ¾î¶»°Ô µ¿ÀÛÇմϱî?" ȤÀº "FreeBSD¿¡¼´Â ÀÌ·¸°Ô µ¿ÀÛÇÏ´Â ¼Ö¶ó¸®½º¿¡¼´Â ¾î¶»½À´Ï±î?"¶ó´Â Áú¹®À» ÇÕ´Ï´Ù. ÀÌ ±ÛÀº Ä¿³ÎÀÇ 3°¡Áö ±âº»ÀûÀÎ ¼ºê½Ã½ºÅÛ¿¡ ´ëÇØ ¼³¸íÇÏ°í ¼Ö¶ó¸®½º10, ¸®´ª½º 2.6, FreeBSD 5.3¿¡¼ÀÇ ±¸ÇöÀÇ Â÷ÀÌÁ¡µéÀ» ºñ±³ÇÕ´Ï´Ù.
±¸Çö Â÷ÀÌÁ¡ÀÇ ºñ±³¸¦ À§ÇØ °Ë»çÇØº¼ 3°¡Áö ¼ºê½Ã½ºÅÛÀº ½ºÄÉÁÙ¸µ, ¸Þ¸ð¸® °ü¸®, ÆÄÀÏ ½Ã½ºÅÛ ±¸Á¶ÀÔ´Ï´Ù. ÀÌ ¼¼ °¡Áö°¡ ¸ðµç ¿î¿µÃ¼Á¦¿¡¼ °øÅëÀûÀÎ ºÎºÐÀ̸ç, ¿î¿µÃ¼Á¦¿¡¼ ÀÌÇØÇϱ⠰¡Àå ½¬¿î ºÎºÐÀ̹ǷΠ°Ë»ç ´ë»óÀ¸·Î ¼±ÅÃÇÏ¿´½À´Ï´Ù.
ÀÌ ±ÛÀº À§ÀÇ ¼ºê½Ã½ºÅ۵鿡 ±í°Ô µé¾î°¡Áö ¾Ê½À´Ï´Ù. ±í°Ô ÆÄ°í µé±â À§Çؼ´Â ¼Ò½ºÄÚµå¿Í ´Ù¾çÇÑ À¥»çÀÌÆ® ±×¸®°í Ã¥À» Âü°íÇØ¾ß ÇÕ´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î Ã¥À» ³ª¿ÇÏÀÚ¸é ´ÙÀ½°ú °°½À´Ï´Ù:
À¥¿¡¼ ¸®´ª½º, FreeBSD ±×¸®°í ¼Ö¶ó¸®½ºÀÇ ºñ±³¸¦ °Ë»öÇÏ¸é ´ëºÎºÐÀº ¸Å¿ì ¿À·¡µÈ ÀÚ·áµéÀÔ´Ï´Ù. (¸î¸î °æ¿ì ¼Ö¶ó¸®½º 2.5, Linux 2.2, ±âŸ µîµî) ´ëºÎºÐÀÇ "»ç½Ç"µéÀÌ »õ·Î¿î ¹öÁ¯¿¡¼´Â À߸øµÈ °Íµé ÀÔ´Ï´Ù. ¶ÇÇÑ ºñ±³ ¼³¸íÇÏ·ÁÇÑ ±× ¹öÁ¯¿¡¼ Á¶Â÷ À߸øµÈ Á¤º¸µµ ÀÖ½À´Ï´Ù. ¹°·Ð ´ëºÎºÐÀÇ ÀÚ·áµéÀÌ °¢°¢ÀÇ OS¿¡ °üÇÑ °¡Ä¡ÀÖ´Â ºñ±³¸¦ ÇØ ÁÝ´Ï´Ù. ¶ÇÇÑ Ä¿³ÎµéÀ» ºñ±³ÇÏ´Â Á¤º¸°¡ ¸Å¿ì ÀûÀº °Íµµ »ç½Ç ÀÔ´Ï´Ù. ´ÙÀ½ÀÇ ÀÚ·áµéÀÌ ±×³ª¸¶ °¡Àå ÃֽŠÀÚ·áµéÀÔ´Ï´Ù:
ÀÌ ¼¼°¡Áö OSµéÀÇ °¡Àå Èï¹Ì·Î¿î Á¡Àº ±×µé »çÀÌÀÇ À¯»ç¼ºÀÔ´Ï´Ù. ¼·Î´Ù¸¥ ¸í¸í ±ÔÄ¢µéÀ» °¡Á® ¿ÔÁö¸¸ °¢ OS´Â ¼·Î ´Ù¸¥ ÄÁ¼ÁµéÀ» ±¸ÇöÇϴµ¥ ¼·Î ºñ½ÁÇÑ ±æÀ» °É¾î ¿Ô½À´Ï´Ù. °¢ OS´Â ¾²·¹µå¸¦ À§ÇØ Å¸ÀÓ-°øÀ¯(time-sharing) ½ºÄÉÁÙ¸µÀ» »ç¿ëÇϰí, ÃÖ±Ù¿¡ »ç¿ëµÇÁö ¾ÊÀº ÆäÀÌÁö ±³Ã¼ ¾Ë°í¸®Áò(not recently-used page replacement algorithm) À» ÀÌ¿ëÇÑ ¿ä±¸ ÆäÀÌÁö(demand-paging), ±×¸®°í °¡»ó ÆÄÀÏ ½Ã½ºÅÛ ·¹À̾ ÅëÇÑ ¼·Î ´Ù¸¥ ÆÄÀÏ ½Ã½ºÅÛ ¾ÆÅ°ÅØÃÄÀÇ ±¸ÇöµîÀ» Áö¿øÇÕ´Ï´Ù. ÇÑ OS¿¡¼ ³ª¿Ô´ø ¾ÆÀ̵ð¾î°¡ ´Ù¸¥ ÂÊ¿¡¼ ±× ±æÀ» ã±âµµ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¸®´ª½º ¶ÇÇÑ ¼Ö¶ó¸®½ºÀÇ slab
memory allocator ÀÇ ¹è°æ ¿ø¸®¸¦ »ç¿ëÇÕ´Ï´Ù. FreeBSD ¼Ò½º¿¡¼ ³ªÅ¸³ ¸¹Àº ´Ü¾îµéÀº ¶ÇÇÑ ¼Ö¶ó¸®½º¿¡¼µµ Á¸ÀçÇÕ´Ï´Ù. ½ãÀÇ ¿ÀǼҽº ¼Ö¶ó¸®½º¸¦ ÇâÇÑ ³ë·ÂÀ¸·Î ÇÊÀÚ´Â ¾çÂÊ ¸ðµÎ¿¡¼ ¹ßÀüÇϰí ÀÖ´Â ±â´ÉµéÀ» Á» ´õ ¸¹ÀÌ º¼ ¼ö Àֱ⸦ ¹Ù¶ø´Ï´Ù. ÇöÀç LXR ÇÁ·ÎÁ§Æ®´Â FreeBSD, ¸®´ª½º, À¯´Ð±× °ü·Ã OSµéÀÇ ¼Ò½ºÀÇ Å©·Î½º·¹ÆÛ·±½º ºê¶ó¿ìÁ®¸¦ fxr.watson.org ¿¡¼ Á¦°øÇÕ´Ï´Ù. ÇÊÀÚ´Â ¿ÀǼֶ󸮽º°¡ »çÀÌÆ®¿¡ Ãß°¡ µÇ±æ ¹Ù¶ø´Ï´Ù.
½ºÄÉÁÙ¸µ°ú ½ºÄÉÁÙ·¯
¼Ö¶ó¸®½º¿¡¼ ½ºÄÉÁÙ¸µÀÇ ±âº»ÀûÀÎ ´ÜÀ§´Â kthread_t ÀÔ´Ï´Ù; FreeBSD¿¡¼´Â thread À̰í ; ¸®´ª½º¿¡¼´Â task_struct ÀÔ´Ï´Ù.
¼Ö¶ó¸®½º´Â °¢ ÇÁ·Î¼¼½º¸¦ proc_t ·Î Ç¥ÇöÇϰí ÇÁ·Î¼¼½º³»ÀÇ °¢ ¾²·¹µå´Â kthread_t ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ¸®´ª½º´Â ÇÁ·Î¼¼½º(±×¸®°í ¸ðµç ¾²·¹µåµé)À» task_struct ±¸Á¶Ã¼ ÇüÅ·ΠǥÇöÇÕ´Ï´Ù. ¸®´ª½º¿¡¼ ½Ì±Û¾²·¹µå ÇÁ·Î¼¼´À´Â ÇϳªÀÇ task_struct ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ¼Ö¶ó¸®½º¿¡¼ ½Ì±Û-¾²·¹µå ÇÁ·Î¼¼½º´Â ÇϳªÀÇ proc_t,¿Í ÇϳªÀÇ kthread_t, ±×¸®°í klwp_t ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. klwp_t ´Â À¯Àú¿Í Ä¿³Î ¸ðµå°£ÀÇ ½ºÀ§ÄªµÇ´Â ¾²·¹µåÀÇ Á¤º¸¸¦ ÀúÀåÇÏ´Â °ø°£ÀÔ´Ï´Ù. FreeBSD¿¡¼ ¾Å±Û ¾²·¹µå ÇÁ·Î¼¼½º´Â proc ±¸Á¶Ã¼¿Í thread ±¸Á¶Ã¼ ±×¸®°í ksegrp ±¸Á¶Ã¼¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ksegrp Àº "Ä¿³Î ½ºÄÉÁÙ¸µ ¿£Æ¼Æ¼ ±×·ì" ÀÔ´Ï´Ù. È¿°úÀûÀ¸·Î 3°³ÀÇ OSµéÀº ¾²·¹µå¸¦ ½ºÄÉÁÙ¸µÇϰí ÀÖ°í °¢ ¾²·¹µå´Â ¼Ö¶ó¸®½º¿¡¼ kthread_t , FreeBSD¿¡¼ thread, ¸®´ª½º¿¡¼ task_struct ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
½ºÄÉÁÙ¸µ °áÁ¤Àº ¿ì¼±¼øÀ§¿¡ ±â¹ÝÀ» µÎ°í ÀÖ½À´Ï´Ù. ¸®´ª½º¿Í FreeBSD¿¡¼ ³·Àº ¿ì¼±¼øÀ§ °ªÀÌ ´õ ³º½À´Ï´Ù. À̰ÍÀº Áï ¹Ý´ëÀÔ´Ï´Ù; 0ÀÌ Á¦ÀÏ ³ôÀº ¿ì¼±¼øÀ§¸¦ ³ªÅ¸ ³À´Ï´Ù. ¼Ö¶ó¸®½º¿¡¼´Â ³ôÀº °ªÀÌ ³ôÀº ¿ì¼± ¼øÀ§¸¦ ³ªÅ¸³À´Ï´Ù. Ç¥ 1 Àº °¢±â ´Ù¸¥ OSÀÇ ¿ì¼±¼øÀ§ °ªÀ» º¸¿©ÁÝ´Ï´Ù.
Ç¥ 1. ¼Ö¶ó¸®½º, ¸®´ª½º ±×¸®°í FreeBSD¿¡¼ÀÇ ½ºÄÉÁÙ¸µ ¿ì¼±¼øÀ§
| ¼Ö¶ó¸®½º |
| ¿ì¼±¼øÀ§ |
½ºÄÉÁÙ¸µ Ŭ·¡½º |
| 0-59 |
Time Shared, Interactive, Fixed, Fair Share Scheduler |
| 60-99 |
System Class |
| 100-159 |
Real-Time (note real-time higher than system
threads) |
| 160-169 |
Low level Interrupts |
| ¸®´ª½º |
¿ì¼±¼øÀ§ |
½ºÄÉÁÙ¸µ Ŭ·¡½º |
| 0-99 |
System Threads, Real time (SCHED_FIFO, SCHED_RR) |
| 100-139 |
User priorities (SCHED_NORMAL) |
| FreeBSD |
¿ì¼±¼øÀ§ |
½ºÄÉÁÙ¸µ Ŭ·¡½º |
| 0-63 |
Interrupt |
| 64-127 |
Top-half Kernel |
| 128-159 |
Real-time user (system threads are better
priority) |
| 160-223 |
Time-share user |
| 224-255 |
Idle user |
3°¡Áö OS ¸ðµÎ µ¿ÀûÀÎ ¾²·¹µå/ÇÁ·Î¼¼½º ¸ðµ¨À» °¡Áö°í ÀÖ½À´Ï´Ù. µ¿ÀûÀÎ ¾²·¹µå´Â °è»êÁß½ÉÀûÀÎ ¾²·¹µå¿¡ ºñÇØ Á» ´õ ³ºÀº ¿ì¼±¼øÀ§¿¡¼ ÀÛµ¿ÇÕ´Ï´Ù. ±×·¯³ª ¿ÀÁ÷ ªÀº ½Ã°£µ¿¾È¸¸ ¼öÇàµË´Ï´Ù. ¼Ö¶ó¸®½º, FreeBSD, ¸®´ª½º ¸ðµÎ CPU´ç "½ÇÇàÅ¥"¸¦ »ç¿ëÇÕ´Ï´Ù. FreeBSD¿Í ¸®´ª½º´Â "Ȱ¼º" Å¥¿Í "¸¸·á" Å¥¸¦ »ç¿ëÇÕ´Ï´Ù. ¾²·¹µåµéÀº "Ȱ¼º" Å¥¿¡¼ ½ºÄÉÁٵǾî Áý´Ï´Ù. ¾²·¹µå´Â ÇÒ´çµÈ ½Ã°£À» ´Ù »ç¿ëÇϸé Ȱ¼º Å¥¿¡¼ ¸¸·á Å¥¸¦ À̵¿µË´Ï´Ù.(±×¸®°í starvation Çö»óÀ» ȸÇÇÇϱâ À§ÇØ °¢±â ´Ù¸¥ ½Ã°£¿¡ À̵¿µÉ°ÍÀÔ´Ï´Ù) Ȱ¼ºÅ¥°¡ ºñ¾îÀÖ´Ù¸é Ä¿³ÎÀº Ȱ¼º Å¥¿Í ¸¸·á Å¥¸¦ ½º¿ÒÇÏ°Ô µË´Ï´Ù. FreeBSD´Â ¼¼¹ø? Å¥ÀÎ "Á¤Áö"(idle)" ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ¾²·¹µå¿¡ Àִ ť´Â ´Ù¸¥ µÎ Å¥°¡ ºñ¾î ÀÖÀ»¶§¿¡¸¸ ¼öÇà µË´Ï´Ù. ¼Ö¶ó¸®½º´Â °¢ CPU´ç "dispatch Å¥"¸¦ »ç¿ëÇÕ´Ï´Ù. ¸¸¾à ¾²·¹µå°¡ ÇÒ´çµÈ ½Ã°£À» ¸ðµÎ ¼ÒºñÇϸé Ä¿³ÎÀº »õ·Î¿î ¿ì¼±¼øÀ§¸¦ ÁÖ°í dispatch Å¥¿¡ µ¹·Á ³õ½À´Ï´Ù. °¢ OSÀÇ "½ÇÇàÅ¥"´Â ¸µÅ©µå ¸®½ºÆ® ÇüÅ·Π½ÇÇà°¡´ÉÇÑ ¼·Î´Ù¸¥ ¿ì¼±¼øÀ§¸¦ °¡Áø ¾²·¹µå¸¦ ºÐ¸®Çسõ°í ÀÖ½À´Ï´Ù.(FreeBSD´Â ÇϳªÀÇ ¸®½ºÆ®¸¦ 4°¡Áö ¿ì¼±¼øÀ§·Î »ç¿ëÇÏ°í ¼Ö¶ó¸®½º¿Í ¸®´ª½º´Â °¢ ¿ì¼±¼øÀ§ º°·Î ºÐ¸®µÈ ¸®½ºÆ®¸¦ »ç¿ë)
¸®´Á½º¿Í FreeBSD´Â ¾²·¹µåÀÇ ·±Å¸ÀÓ°ú sleep ŸÀÓ( "µ¿ÀûÀÓ" ¿¡ ´ëÇÑ ÁöÇ¥)ÀÇ Â÷¿¡ ±â¹ÝÇÑ ¼ýÀÚ °è»ê¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù. ¼Ö¶ó¸®½º´Â Å×À̺í ã±â¸¦ ¼öÇàÇÕ´Ï´Ù. 3°¡Áö ¿î¿µÃ¼Á¦ ¸ðµÎ "gang ½ºÄÉÁÙ¸µ"À» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. n ¾²·¹µå¸¦ ½ºÄÉÁÙ¸µ ÇÏ´Â ´ë½Å OS´Â È¿°úÀûÀ¸·Î ´ÙÀ½¿¡ ½ÇÇàµÉ ¾²·¹µå¸¦ ½ºÄÉÁÙ¸µÇÕ´Ï´Ù. 3°¡Áö ¿î¿µÃ¼Á¦ ¸ðµÎ ij½Ì(warm affinity)ÀÇ ÀåÁ¡À» »ì¸±¼ö ÀÖ´Â ¸ÞÄ«´ÏÁòÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ÇÏÀÌÆÛ¾²·¹µå CPU¸¦ À§ÇØ FreeBSD´Â ¾²·¹µå°¡ °°Àº CPU ³ëµå ¿¡ Á¸ÀçÇϵµ·Ï µµ¿Í ÁÝ´Ï´Ù.(´Ù¸¥ ÇÏÀÌÆÛ¾²·¹µå ÀÏ ¼öµµ ÀÖÀ½) ¼Ö¶ó¸®½º´Â ºñ½ÁÇÑ ¸ÞÄ«´ÏÁòÀ» °¡Áö°í ÀÖÁö¸¸ À¯Àú¿Í ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÅëÀ縦 ¹Þ°í ÀÖ°í ÇÏÀÌÆÛ ¾²·¹µå¿¡ ÀÇÇØ Á¦¾à ¹ÞÁö ¾Ê½À´Ï´Ù.(¼Ö¶ó¸®½ºÀÇ "ÇÁ·Î¼¼¼ ¼Â" °ú FreeBSDÀÇ "ÇÁ·Î¼¼¼ ±×·ì").
¼Ö¶ó¸®½º¿Í ´Ù¸¥ µÎ ¿î¿µÃ¼Á¦ÀÇ °¡Àå Å« Â÷ÀÌ´Â ½Ã½ºÅÛ »ó¿¡¼ µ¿½Ã¿¡ ¿©·¯°³ÀÇ "½ºÄÉÁÙ¸µ Ŭ·¡½º"¸¦ Áö¿øÇÏ´Â ±â´ÉÀÔ´Ï´Ù. 3°¡Áö ¿î¿µÃ¼Á¦ ¸ðµÎ Posix SCHED_FIFO, SCHED_RR, ±×¸®°í SCHED_OTHER (ȤÀº SCHED_NORMAL). SCHED_FIFO ±×¸®°í "½Ç½Ã°£" ¾²¸®µå¸¦ Áö¿øÇÏ´Â SCHED_RR ¸¦ Áö¿øÇÕ´Ï´Ù.(¾Ë¾ÆµÑ Á¡À¸·Î ¼Ö¶ó¸®½º¿Í ¸®´ª½º´Â Ä¿³Î ¼±Á¡À» ÅëÇÑ ½Ç½Ã°£ ¾²·¹µå¸¦ Áö¿øÇÔ) ¼Ö¶ó¸®½º´Â "°íÁ¤µÈ ¿ì¼±¼øÀ§" Ŭ·¡½º¸¦ °¡Áö°í Àִµ¥ ½Ã½ºÅÛ ¾²·¹µå¸¦ À§ÇÑ "½Ã½ºÅÛ Å¬·¡½º"(page-out ¾²·¹µå °°Àº), X serverÀÇ Á¦¾î¸¦ ¹Þ°í ÀÖ´Â À©µµ¿ì ȯ°æ¿¡¼ µ¹¾Æ°¡´Â ¾²·¹µå¸¦ À§ÇÑ "µ¿Àû" Ŭ·¡½º, ±×¸®°í ¸®¼Ò½º °ü¸®¸¦ À§ÇÑ ¸Å¿ì °øÆòÇÑ ½ºÄÉÁÙ·¯(Fair Share Scheduler) °¡ ¹Ù·Î ±×°Íµé ÀÔ´Ï´Ù. priocntl(1) ¸¦ ÅëÇØ °¢ Ŭ·¡½ºÀÇ ±â´Éµé°ú Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë¾Æº¸½Ç ¼ö ÀÖ½À´Ï´Ù. ¸Å¿ì °øÆòÇÑ ½ºÄÉÁÙ·¯(FSS) ´Â FSS(7) ¸¦ ÅëÇØ Á»´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù. FreeBSDÀÇ ½ºÄÉÁÙ·¯´Â ÄÄÆÄÀϽÿ¡ Á¤ÇØÁö°í ¸®´ª½º ½ºÄÉÁÙ·¯´Â ¸®´ª½º ¹öÁ¯¿¡ µû¶ó ´Ù¸¨´Ï´Ù.
½Ã½ºÅÛ¿¡ »õ·Î¿î ½ºÄÉÁÙ¸µ Ŭ·¡½º¸¦ Ãß°¡½ÃŰ´Â °ÍÀº ºñ¿ëÀÌ µå´Â ÀÏÀÔ´Ï´Ù.½ºÄÉÁÙ¸µ °áÁ¤ÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ´Â Ä¿³ÎÀÇ ¸ðµç °÷Àº(½ÇÁ¦ÀûÀ¸·Î ½ÇÇàÇÒ ¾²·¹µå¸¦ ¼±ÅÃÇÏ´Â ÀÛ¾÷Àº Á¦¿Ü) ½ºÄÉÁÙ¸µ Ŭ·¡½º-Ư¼öÇÑ Äڵ带 °£Á¢ÀûÀ¸·Î È£ÃâÇÏ´Â ÇÔ¼ö¿Í ¿¬°üÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ¾²·¹µå°¡ sleep »óÅ¿¡ µé¾î°¡¸é ±×°ÍÀº ½ºÄÉÁÙ¸µ-Ŭ·¡½º-ÀÇÁ¸ÀûÀÎ Äڵ带 È£ÃâÇØ¼ Ŭ·¡½º°¡ sleep À¸·Î ÀüȯµÇ´Âµ¥ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÕ´Ï´Ù. ¸®´ª½º¿Í FreeBSD¿¡¼ ½ºÄÉÁÙ¸µ ÄÚµå´Â ´Ü¼øÈ÷ ÇÊ¿äÇÑ ÀÛ¾÷¸¸À» ÇÕ´Ï´Ù. ¾î¶°ÇÑ Á¾·ùÀÇ °£Á¢ È£Ãâµµ ÇÊ¿ä ¾ø½À´Ï´Ù. Ãß°¡ÀûÀÎ ·¹À̾î´Â ¼Ö¶ó¸®½º¿¡¼ ½ºÄÉÁÙ¸µÀ» ó¸®ÇÏ´Â µ¥ ¾ÆÁÖ ¾à°£ÀÇ ¿À¹öÇìµå°¡ ¹ß»ýÇÒ¼ö ÀÖÀ½À» ÀÇ¹Ì ÇÕ´Ï´Ù.(±×·¯³ª ¸î°¡Áö ±â´ÉÀÌ ´õ Ãß°¡µÇ¾î ÀÖÀ½)
¸Þ¸ð¸® °ü¸®¿Í ÆäÀÌ¡
¼Ö¶ó¸®½º¿¡¼ ¸ðµç ÇÁ·Î¼¼½º´Â "¼¼±×¸ÕÆ®" ·Î ºÒ¸®´Â ³í¸®Àû ¼½¼Ç ºÐÇÒ °ø°£À¸·Î ³ª´©¾îÁø "ÁÖ¼Ò °ø°£" À» °¡Áö°í ÀÖ½À´Ï´Ù. ÇÁ·Î¼¼½º ÁÖ¼Ò °ø°£ÀÇ ¼¼±×¸ÕÆ®´Â pmap(1) À» ÅëÇØ È®ÀÎ °¡´ÉÇÕ´Ï´Ù. ¼Ö¶ó¸®½º´Â ¸Þ¸ð¸® °ü¸® ÄÚµå ¿Í µ¥ÀÌŸ ±¸Á¶¸¦ Ç÷§Æû-µ¶¸³Àû ±×¸®°í Ç÷§Æû-Ư¼öÇÑ ÆÄÆ®·Î ³ª´©¾ú½À´Ï´Ù. Ç÷§Æû-Ư¼öÇÑ ºÎºÐÀº HAT¿¡ Á¸ÀçÇϰųª Çϵå¿þ¾î ÁÖ¼Ò Ã³¸® ·¹À̾ Á¸Àç ÇÕ´Ï´Ù. FreeBSD ´Â ÇÁ·Î¼¼½º ÁÖ¼Ò °ø°£À»
vmspace ·Î Ç¥ÇöÇÏ°í ¹üÀ§(region)À̶ó°í ºÒ¸®´Â ³í¸®ÀûÀÎ ¼½¼ÇÀ¸·Î ³ª´¯´Ï´Ù. Çϵå¿þ¾î-ÀÇÁ¸ÀûÀÎ ºÎºÐÀº "pmap" (¹°¸®ÀûÀÎ ¸Ê) ¸ðµâ¿¡ ÀÖ°í "vmap" ·çƾÀº Çϵå¿þ¾î-µ¶¸³ÀûÀÎ ºÎºÐ°ú ÀÚ·á ±¸Á¶¸¦ ´Ù·ì´Ï´Ù. ¸®´ª½º´Â ¸Þ¸ð¸® µð½ºÅ©¸³ÅÍ(memory descriptor)¸¦ »ç¿ëÇØ¼ ÇÁ·Î¼¼½º ÁÖ¼Ò °ø°£À» "¸Þ¸ð¸® Áö¿ª(memory area)" ¶ó´Â ³í¸®Àû ¼½¼ÇÀ¸·Î ³ª´©¸ç ÀÌ °ø°£Àº ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò °ø°£À» ³ªÅ¸ ³À´Ï´Ù. ¸®´ª½º´Â ¶ÇÇÑ pmap Ä¿¸Çµå¸¦ °¡Áö°í ÀÖ¾î¼ ÇÁ·Î¼¼½º ÁÖ¼Ò °ø°£À» °Ë»çÇØº¼ ¼ö ÀÖ½À´Ï´Ù.
¸®´ª½º´Â ¼ÒÇÁÆ®¿þ¾î »ó¿¡¼ ¸Ó½Å-µ¶¸³ÀûÀÎ ·¹À̾ ¸Ó½Å-ÀÇÁ¸ÀûÀÎ ·¹À̾îµé·Î ÃÖ´ëÇÑ ³ª´©¾î ³ù½À´Ï´Ù. ¼Ö¶ó¸®½º¿Í FreeBSD´Â ´ëºÎºÐÀÇ Äڵ尡, ¿¹¸¦ µé¾î, page fault 󸮴 ¸Ó½Å-µ¶¸³ÀûÀÔ´Ï´Ù. ¸®´ª½º´Â page fault ¸¦ ´Ù·ç´Â Äڵ尡 ¸Å¿ì ¸Ó½Å-ÀÇÁ¸ÀûÀÔ´Ï´Ù. °á°úÀûÀ¸·Î ¸®´ª½º´Â page¸¦ ´Ù·ç´Â Äڵ尡 ¸Å¿ì ºü¸¨´Ï´Ù. ¿Ö³ÄÇϸé ÄÚµå ³»¿¡ Ãß»óÀûÀÎ µ¥ÀÌŸ ·¹À̾îÀÇ ¼öÁØÀÌ ´úÇϱ⠶§¹®ÀÔ´Ï´Ù. ¾î?µç ¹ÙÅÁ¿¡ ±ò¸° Çϵå¿þ¾î ȤÀº ¸ðµ¨ÀÇ ¿ä±¸»çÇ×ÀÌ ¸¹Àº ÄÚµå º¯°æÀ» ¿ä±¸ÇÒ °æ¿ì ºñ¿ëÀÌ µé¾î°£´Ù´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¼Ö¶ó¸®½º¿Í FreeBSD´Â ÀÌ·¯ÇÑ º¯ÈµéÀ» HAT¿Í pmap ·¹À̾î·Î µ¶¸³½ÃÄÑ ³ù½À´Ï´Ù.
¼¼±×¸ÕÆ®, Áö¿ª(regions), ±×¸®°í ¸Þ¸ð¸® Áö¿ªÀº ´ÙÀ½°ú °°Àº ºÎºÐÀ¸·Î ±¸ºÐµÇ¾î Áý´Ï´Ù:
- Áö¿ªÀÇ °¡»ó ÁÖ¼ÒÀÇ ½ÃÀÛ
- ¸ÊÀ̶ó°í ºÒ¸®´Â ¿ÀºêÁ§Æ®/ÆÄÀÏ ³»¿¡¼ÀÇ À§Ä¡
- Çã°¡±ÇÇÑ
- ¸ÅÇÎÀÇ »çÀÌÁî
¿¹¸¦ µé¾î ÇÁ·Î±×·¥ÀÇ ÅØ½ºÆ® ºÎºÐÀº ¼¼±×¸ÕÆ®/Áö¿ª/¸Þ¸ð¸® Áö¿ª³»¿¡ À§Ä¡ ÇÕ´Ï´Ù. 3°¡Áö ¿î¿µÃ¼Á¦ÀÇ ÁÖ¼Ò °ø°£À» °ü¸®ÇÏ´Â ¸ÞÄ«´ÏÁòÀº ¸Å¿ì À¯»çÇÏÁö¸¸ ÀÚ·á ±¸Á¶ÀÇ À̸§µéÀº ¿ÏÀüÈ÷ ´Ù¸¨´Ï´Ù. ´Ù½Ã¸»Çؼ ¸®´ª½ºÀÇ ÄÚµå´Â ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡ ºñÇØ ¸Å¿ì ¸Ó½Å-ÀÇÁ¸ÀûÀÔ´Ï´Ù.
ÆäÀÌ¡
3°¡Áö ¿î¿µÃ¼Á¦ ¸ðµÎ LRU(Least Recently Used) ¾Ë°í¸®ÁòÀ» ÆäÀÌÁö ±³Ã¼¸¦ À§ÇØ »ç¿ëÇÕ´Ï´Ù. 3°¡Áö ¸ðµÎ ÆäÀÌÁö ±³Ã¼¸¦ ÇÏ´Â µ¥¸ó ÇÁ·Î¼¼½º/¾²·¹µå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. FreeBSD¿¡¼ vm_pageout µ¥¸óÀº Á¤±âÀûÀ¸·Î ȤÀº free ¸Þ¸ð¸®°¡ ³·¾Æ Áú¶§ ±ú¾î³³´Ï´Ù. »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®°¡ ¾î¶² ƯÁ¤ÇÑ ÀÓ°è°ªº¸´Ù ³·¾ÆÁö¸é, vm_pageout Àº ·çƾÀ» ½ÇÇà½ÃÄѼ
(vm_pageout_scan) ¸î¸î ÆäÀÌÁö¸¦ ÇØÁ¦Çϵµ·Ï ¸Þ¸ð¸®¸¦ °Ë»öÇÕ´Ï´Ù. vm_pageout_scan ·çƾÀº ¼öÁ¤µÈ ÆäÀÌÁöµéÀ» ÇÒ´çÇØÁ¦½Ã۱âÀü¿¡ ºñµ¿±âÀûÀ¸·Î µð½ºÅ©¿¡ ¾µ°ÍÀ» ÇÊ¿ä·Î ÇÒ °ÍÀÔ´Ï´Ù. CPUÀÇ °¹¼ö¿¡ »ó°ü¾øÀÌ ÀÌ·¯ÇÑ Á¾·ùÀÇ µ¥¸óÀÌ Á¸Àç ÇÕ´Ï´Ù. ¼Ö¶ó¸®½º ¶ÇÇÑ pageout µ¥¸óÀ» °¡Áö°í ÀÖ°í °è¼ÓÀûÀ¸·Î ¸Þ¸ð¸® ºÎÁ·Çö»ó¿¡ ´ëÀÀÇϰí ÀÖ½À´Ï´Ù. ¼Ö¶ó¸®½ºÀÇ ÆäÀÌ¡ ÀÓ°è°ªÀº ½Ã½ºÅÛ ½ÃÀ۽à ÀÚµ¿ÀûÀ¸·Î °è»êµÇ¾î Áö¹Ç·Î ¤§µ¥¸óÀº CPU¸¦ °ú´Ù ¼Òºñ Çϰųª µð½ºÅ©¿¡ page-out ¿äûÀ» °ú´ÙÇÏ°Ô ¿äûÇÏÁö ¾Ê½À´Ï´Ù. FreeBSD µ¥¸óÀº ´ëºÎºÐÀÇ °æ¿ì Á÷Á¢ ÄÚµå µÈ È¤Àº Æ©´×ÀÌ °¡´ÉÇÑ °ªÀ» »ç¿ëÇÕ´Ï´Ù. ¸®´ª½º´Â ¶ÇÇÑ LRU ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î ½ÇÇàÁß¿¡ °ªÀ» Æ©´×ÇÕ´Ï´Ù. ¸®´ª½º¿¡¼´Â ¿©·¯°³ÀÇ(CPU´ç Çϳª) ÀÇ kswapd µ¥¸óÀÌ Á¸ÀçÇÒ ¼ö ÀÖ½À´Ï´Ù. 3°¡Áö ¿î¿µÃ¼Á¦´Â ¸ðµÎ ±Û·Î¹ú ÀÛ¾÷µéÀÇ Á¤Ã¥À» »ç¿ëÇÕ´Ï´Ù.(ÇÁ·Î¼¼½º´ç ÀÛ¾÷ ¼Â°ú´Â ¹Ý´ë)
FreeBSD ´Â ¸î°¡Áö page ¸®½ºÆ®¸¦ ÃÖ±Ù¿¡ »ç¿ëµÈ page¸¦ ÃßÀûÇϴµ¥ »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÃßÀûÀº "Ȱ¼º", "ºñȰ¼º", "ij½¬µÊ", "ÀÚÀ¯" ÆäÀÌÁöµîÀÇ Ä«Å×°í¸®·Î ³ª´²Áø ¸®½ºÆ®¸¦ »ç¿ëÇÕ´Ï´Ù. ÆäÀÌÁöµéÀº ÀÌ·¯ÇÑ ¸µÅ©µå ¸®½ºÆ®¸¦ ±×µéÀÇ ¸ñÀû¿¡ ¸Â°Ô À̵¿ÇÏ°Ô µË´Ï´Ù. ÀÚÁÖ Á¢±Ù µÇ´Â ÆäÀÌÁö´Â º¸Åë Ȱ¼º ¸®½ºÆ®¿¡ °è¼Ó ÇØ¼ Á¸ÀçÇÏ´Â °æÇ×À» º¸ÀÔ´Ï´Ù. Á¾·áµÈ ÇÁ·Î¼¼½ºÀÇ µ¥ÀÌŸ ÆäÀÌÁö´Â Áï½Ã "ÀÚÀ¯" ¸®½ºÆ®·Î ¿Å°Ü Áý´Ï´Ù. FreeBSD´Â
vm_pageout_scan °¡ ·Îµå¸¦ °ßµðÁö ¸øÇÒ °æ¿ì(¿¹¸¦ µé¾î ½Ã½ºÅÛÀÇ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °æ¿ì) ¸ðµç ÇÁ·Î¼¼½ºµéÀ» swapÇÏ·Á°í ÇÒ °ÍÀÔ´Ï´Ù. ¸¸¾à ¸Þ¸ð¸® ºÎÁ· Çö»óÀÌ ½É°¢ÇÏ´Ù¸é vm_pageout_scan Àº ½Ã½ºÅÛ¿¡¼ °¡Àå Å« ÇÁ·Î¼¼½º¸¦ Á¾·á ½Ãų °ÍÀÔ´Ï´Ù.
¸®´ª½º´Â LRU-½ºÅ¸ÀÏÀÇ ¾Ë°í¸®ÁòÀ» Á¦°øÇϱâ À§ÇØ ¶ÇÇÑ ´Ù¸¥ Á¾·ùÀÇ ÆäÀÌÁö ¸µÅ©µå ¸®½ºÆ®¸¦ »ç¿ëÇÕ´Ï´Ù. ¸®´ª½º´Â ¹°¸® ¸Þ¸ð¸®¸¦ (¿©·¯°³ ¼ÂÀÇ) 3°¡ÁöÀÇ Á¸À¸·Î ³ª´¯´Ï´Ù. Çϳª´Â DMA ÆäÀÌÁö¸¦ À§ÇÑ °ÍÀ̰í Çϳª´Â ÀÏ¹Ý ÆäÀÌÁö ±×¸®°í Çϳª´Â µ¿ÀûÀÎ ÇÒ´ç ¸Þ¸ð¸®¸¦ À§ÇÑ °ÍÀÔ´Ï´Ù. 3°¡Áö Á¸Àº x86ÀÇ ¾ÆÅ°ÅØÃÄ Æ¯¼º¿¡ ÀÇÇØ ±¸ÇöÀÌ »ó¼¼ÇÏµÈ °ÍÀ¸·Î º¸ÀÔ´Ï´Ù. ÆäÀÌÁö´Â "hot", "cold" ±×¸®°í "free" ¸®½ºÆ® »çÀ̸¦ À̵¿ÇÕ´Ï´Ù. ¸®½ºÆ®°£ À̵¿Àº FreeBSDÀÇ ¸ÞÄ«´ÏÁò°ú ¸Å¿ì ºñ½ÁÇÕ´Ï´Ù. ÀÚÁÖ Á¢±ÙµÈ ÆäÀÌÁö´Â "hot"¿¡ À§Ä¡ÇÒ°ÍÀÔ´Ï´Ù. ÇÒ´çÇØÁ¦µÈ ÆäÀÌÁö´Â "cold" ȤÀº "free" ¸®½ºÆ®¿¡ Á¸ÀçÇÏ°Ô µË´Ï´Ù.
¼Ö¶ó¸®½º´Â "free" ¸®½ºÆ®, "hashed" ¸®½ºÆ®, ±×¸®°í vnode ÆäÀÌÁö ¸®½ºÆ®¸¦ ÅëÇØ¼ LRU ±³Ã¼ ¾Ë°í¸®ÁòÀÇ º¯¼öµéÀ» À¯Áö ÇÕ´Ï´Ù. vnode ȤÀº ÇØ½¬ ÆäÀÌÁö ¸®½ºÆ®(FreeBSD/¸®´ª½ºÀÇ "active"/"hot" ¸®½ºÆ®¿Í °ÅÀÇ µ¿ÀÏÇÔ) ¸¦ °Ë»öÇÏ´Â ´ë½Å, ¼Ö¶ó¸®½º´Â ¸ðµç ÆäÀÌÁö¸¦ "two-handed clock" ¾Ë°í¸®ÁòÀ» Solaris Internals ¿¡ ¼³¸íµÇ¾î Àִ´ë·Î ÀÌ¿ëÇØ¼ °Ë»öÇÏ°Ô µË´Ï´Ù. two hand´Â °íÁ¤µÈ °Å¸®¸¦ °¡Áö°í ¾ÕÀÇ hand°¡ ÆäÀÌÁöÀÇ ÂüÁ¶ ºñÆ®¸¦ ÃʱâÈ ÇÔÀ¸·Î½á ÆäÀÌÁö¸¦ age ½Ãŵ´Ï´Ù. ¸¸¾à ¾ÕÀÇ hand°¡ ÆäÀÌÁö¿¡ Á¢±ÙÇßÀ»¶§ ÆäÀÌÁö¸¦ Âü°íÇϰí ÀÖ´Â ¾î¶°ÇÑ ÇÁ·Î¼¼½ºµµ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é µÚÀÇ hand´Â ÆäÀÌÁö¸¦ ÇÒ´çÇØÁ¦(¸¸¾à ¼öÁ¤µÇ¾ú´Ù¸é óÀ½¿¡ ºñµ¿±âÀûÀ¸·Î ÆäÀÌÁö¸¦ µð½ºÅ©¿¡ ¾¸)ÇÕ´Ï´Ù.
3°¡Áö ¿î¿µÃ¼Á¦ ¸ðµÎ NUMA Áö¿ª¼ºÀ» ÆäÀÌ¡¿¡¼ °í·ÁÇÕ´Ï´Ù. I/O ¹öÆÛ ij½¬¿Í °¡»ó ¸Þ¸ð¸® ÆäÀÌÁö Äɽ¬´Â ÇϳªÀÇ ½Ã½ºÅÛ ÆäÀÌÁö ij½¬·Î ÅëÇÕµÇ°Ô µË´Ï´Ù. ½Ã½ºÅÛ ÆÐÀÌÁö ij½¬´Â ÆÄÀÏÀÇ Àбâ/¾²±â ¿Í mmap µÈ ÆÄÀÏ ±×¸®°í ÅØ½ºÆ®¿Í ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¥ÀÌŸ¸¦ À§Çؼ »ç¿ëµË´Ï´Ù.
ÆÄÀÏ ½Ã½ºÅÛ
3°³ÀÇ ¿î¿µÃ¼Á¦ ¸ðµÎ ¾ÖÇø®ÄÉÀ̼ǿ¡°Ô ÆÄÀÏ ½Ã½ºÅÛÀÇ ±¸ÇöÀ» ¼û±â±â À§ÇØ Ãß»ó ·¹À̾ »ç¿ëÇÕ´Ï´Ù. 3°¡Áö OS ¸ðµÎ open, close, read, write, stat, µîÀÇ ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÕ´Ï´Ù. ½Ã½ºÅÛÄÝÀ» ÅëÇØ ÆÄÀÏ µ¥ÀÌŸÀÇ Á¶Á÷ ¹× ¹Ù´Ú¿¡ ±ò¸° ±¸Çö¿¡ »ó°ü ¾øÀÌ ÆÄÀÏÀ» Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. ¼Ö¶ó¸®½º¿Í FreeBSD´Â ÀÌ·¯ÇÑ ¸ÞÄ«´ÏÁòÀ» VFS(°¡»ó ÆÄÀÏ ½Ã½ºÅÛ, "virtual file system") À̶ó°í ºÎ¸¨´Ï´Ù. ±×¸®°í ±âº»ÀûÀÎ µ¥ÀÌŸ ±¸Á¶Ã¼´Â vnode, (°¡»ó ³ëµå, ȤÀº "virtual node") ¶ó°í ³ªÅ¸³À´Ï´Ù. ¼Ö¶ó¸®½º ȤÀº FreeBSD¿¡¼ Á¢±Ù µÇ´Â ¸ðµç ÆÄÀϵéÀº ±×°Í¿¡ ÁöÁ¤µÈ vnode ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀϹÝÀûÀÎ ÆÄÀÏ Á¤º¸¿¡ ¼ ºÎ°¡ÀûÀ¸·Î vnode ´Â ÆÄÀÏ-½Ã½ºÅÛ-Ư¼öÇÑ Á¤º¸¸¦ °¡¸£Å°´Â Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ¸®´ª½º ¶ÇÇÑ ºñ½ÁÇÑ ¸ÞÄ«´ÏÁòÀÎ VFS ("virtual file switch") ¸¦ »ç¿ëÇÕ´Ï´Ù. ¸®´ª½º¿¡¼ ÆÄÀÏ-½Ã½ºÅÛ-µ¶¸³Àû µ¥ÀÌŸ ±¸Á¶Ã¼´Â inode ÀÔ´Ï´Ù. ÀÌ ±¸Á¶Ã¼´Â ¼Ö¶ó¸®½º/FreeBSDÀÇ vnode ¿Í ºñ½ÁÇÕ´Ï´Ù. (¾Ë¾ÆµÑ Á¡Àº ¼Ö¶ó¸®½º¿Í FreeBSD¿¡µµ inode ±¸Á¶Ã¼°¡ Á¸ÇØÁö¸¸ À̰ÍÀº UFS ÆÄÀÏ ½Ã½ºÅÛÀ» À§ÇÑ ÆÄÀÏ-½Ã½ºÅÛ-ÀÇÁ¸ÀûÀÎ µ¥ÀÌŸ ±¸Á¶Ã¼ ÀÔ´Ï´Ù) ¸®´ª½º´Â µÎ°¡Áö ¼·Î ´Ù¸¥ ±¸Á¶Ã¼¸¦ °¡Áö°í Àִµ¥ Çϳª´Â ÆÄÀÏ ÀÛ¾÷À» À§ÇÑ °ÍÀ̰í Çϳª´Â inode ÀÛ¾÷À» À§ÇÑ °ÍÀÔ´Ï´Ù. ¼Ö¶ó¸®½º¿Í FreeBSD´Â À̰ÍÀ» "vnode ÀÛ¾÷À¸·Î ÅëÇÕÇß½À´Ï´Ù."
VFS´Â ½Ã½ºÅÛ»ó¿¡¼ ¸¹Àº ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔµéÀ» ±¸ÇöÇϵµ·Ï Çã¶ôÇØ ÁÝ´Ï´Ù. À̰ÍÀº ÇϳªÀÇ ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛÀ» ´Ù¸¥ ½Ã½ºÅÛ¿¡¼ Á¢±ÙÇÏÁö ¸øÇÒ ÀÌÀ¯°¡ ¾ø´Ù´Â °ÍÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. ¹°·Ð °ü·ÃµÈ ÆÄÀÏ ½Ã½ºÅÛ ·çƾ°ú µ¥ÀÌŸ ±¸Á¶Ã¼°¡ °¢°¢ÀÇ VFS¿¡ Æ÷ÆÃµÇ¾î¾ß ÇÔÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. °¢°¢ÀÇ ¿î¿µÃ¼Á¦´Â ÆÄÀÏ ½Ã½ºÅÛÀ» ¿©·¯ ÆÄÀÏ ½Ã½ºÅÛÀ» »ç¿ëÇÏ´Â °ÍÀ» Çã¿ë ÇÕ´Ï´Ù. Ç¥ 2 ´Â °¢°¢ÀÇ OS¿¡¼ ±¸ÇöµÈ ÆÄÀÏ ½Ã½ºÅÛÀÇ Å¸ÀÔµéÀ» ³ªÅ¸³»°í ÀÖÁö¸¸ ¸ðµç ½Ã½ºÅÛ Å¸ÀÔÀ» ³ªÅ¸³»°í ÀÖÁö´Â ¾Ê½À´Ï´Ù.
Ç¥ 2. ÆÄÀÏ ½Ã½ºÅÛ Å¸ÀÔÀÇ ºÎºÐÀûÀÎ ¸®½ºÆ®
| ¼Ö¶ó¸®½º |
ufs |
Default local file system (based on BSD Fast Filesystem) |
| nfs |
Remote Files |
| proc |
/proc files; see proc(4) |
| namefs |
Name file system; allows opening of doors/streams as files |
| ctfs |
Contract file system used with Service Management Facility |
| tmpfs |
Uses anonymous space (memory/swap) for temporary files |
| swapfs |
Keeps track of anonymous space (data, heap, stack, etc.) |
| objfs |
Keeps track of kernel modules, see objfs(7FS) |
| devfs |
Keeps track of /devices files; see devfs(7FS) |
| FreeBSD |
ufs |
Default local file system (ufs2, based on BSD Fast Filesystem) |
| defvs |
Keeps track of /dev files |
| ext2 |
Linux ext2 file system (GNU-based) |
| nfs |
Remote files |
| ntfs |
Windows NT file system |
| smbfs |
Samba file system |
| portalfs |
Mount a process onto a directory |
| kernfs |
Files containing various system information |
| ¸®´ª½º |
ext3 |
Journaling, extent-based file system from ext2 |
| ext2 |
Extent-based file system |
| afs |
AFS client support for remote file sharing |
| nfs |
Remote files |
| coda |
Another networked file system |
| procfs |
Processes, processors, buses, platform specifics |
| reiserfs |
Journaling file system |
°á·Ð
¼Ö¶ó¸®½º¿Í FreeBSD ±×¸®°í ¸®´ª½º´Â Àý´ëÀûÀ¸·Î ¼·Î¿¡°Ô µµ¿òÀ» ÁÖ°í ÀÖ½À´Ï´Ù. ÇÊÀÚ´Â ¼Ö¶ó¸®½º°¡ ¿ÀǼҽºÈ µÇ¸é¼ ÀÌ·¯ÇÑ °æÇâÀÌ Á»´õ ºü¸¥ ¼Óµµ·Î Áö¼ÓµÇ±â¸¦ ±â´ëÇϰí ÀÖ½À´Ï´Ù. °³ÀÎÀûÀÎ »ý°¢À¸·Î º¯È´Â ¸®´ª½º¿¡¼ °¡Àå ºü¸£°Ô ÀϾ°í ÀÖ½À´Ï´Ù. À̰ÍÀÇ ÀåÁ¡À¸·Î´Â »õ·Î¿î ±â¼úÀÌ ½Ã½ºÅÛ¿¡ ºü¸£°Ô Èí¼öµÈ´Ù´Â °Í¿¡ ÀÖ½À´Ï´Ù. ¿îÀÌ ³ª»Ú°Ôµµ ¹®¼È(¹®¼ÀÇ ¿ÏÀüÇÔ) ÀÌ Á¾Á¾ µÚÃÄÁú¶§µµ ÀÖ½À´Ï´Ù. ¸®´ª½º´Â ¸¹Àº °³¹ßÀÚ¸¦ °¡Áö°í ÀÖ°í Á¾Á¾ ±×·±¸éÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. FreeBSD´Â 3°¡Áö ¿î¿µÃ¼Á¦Áß¿¡¼µµ ³ª¿ÂÁö °¡Àå ¿À·¡µÆ½À´Ï´Ù. ¼Ö¶ó¸®½º´Â BSDÀÇ À¯´Ð½º¿Í AT&T º§ ¿¬±¸¼Ò Unix ¸¦ È¥ÇÕÇÑ ±â¹ÝÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¼Ö¶ó¸®½º´Â Á» ´õ ½ÉÈµÈ µ¥ÀÌŸ Ãß»ó ·¹À̾ »ç¿ëÇß°í ÀÌ·¯ÇÑ °á°ú·Î »õ·Î¿î ±â´ÉµéÀ» ½±°í ºü¸£°Ô Ãß°¡ÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ¾î?µç Ä¿³Î¿¡ ÀÖ´Â ´ëºÎºÐÀÇ ·¹À̾îÈµÈ °ÍµéÀº ¹®¼ÈµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù. ¾Æ¸¶ ¼Ò½º ÄÚµåÀÇ Á¢±ÙÀÌ °¡´ÉÇØ Áø°ÍÀÌ À̰ÍÀ» º¯È½Ã۸®¶ó°í »ý°¢µË´Ï´Ù.
°¢°¢ÀÇ Â÷À̸¦ °£´ÜÇÑ ¿¹Á¦·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â °÷Àº page fault Çڵ鸵ÀÔ´Ï´Ù. ¼Ö¶ó¸®½º¿¡¼ page fault °¡ ÀÏ¾î ³ª¸é ÄÚµå´Â Ç÷§Æû-Ư¼öÇÑ Æ®·¦ Çڵ鷯¸¦ ½ÃÀÛ ½Ãŵ´Ï´Ù. ±× ÈÄ¿¡ ÀϹÝÀûÀÎ as_fault() ·çƾÀ» ¼öÇà½Ãŵ´Ï´Ù. ÀÌ ·çƾÀº fault°¡ ¹ß»ýÇÑ ¼¼±×¸ÕÆ®¸¦ ã°í "segment driver"¸¦ È£ÃâÇØ¼ fault¸¦ ´Ù·çµµ·Ï ÇÕ´Ï´Ù. segment driver´Â ÆÄÀÏ ½Ã½ºÅÛ ÄÚµå ³»¿¡¼ È£ÃâµË´Ï´Ù. ÆÄÀÏ ½Ã½ºÅÛ ÄÚµå´Â µð¹ÙÀ̽º µå¶óÀ̹ö ³»¿¡¼ È£Ãâ µÇ¾î ÆäÀÌÁö¸¦ ºÒ·¯¿À°Ô ÇÕ´Ï´Ù. page-inÀÌ ¿Ï·áµÇ¸é segment driver´Â HAT ·¹À̾ È£ÃâÇÏ¿© page table Ç׸ñÀ» ¾÷µ¥ÀÌÆ® ÇÏ°Ô µË´Ï´Ù. ¸®´ª½º¿¡¼ page fault°¡ ÀϾ¸é Ä¿³ÎÀº fault¸¦ ´Ù·ê Äڵ带 È£Ãâ ÇÕ´Ï´Ù. Áï °ð¹Ù·Î Ç÷§Æû-Ư¼öÇÑ ÄÚµå·Î µé¾î°¡°Ô µË´Ï´Ù. À̰ÍÀº fault¸¦ ´Ù·ç´Â Äڵ尡 ¸®´ª½º¿¡¼ ´õ ºü¸§À» ÀǹÌÇÕ´Ï´Ù. ÇÏÁö¸¸ ¸®´ª½º ÄÚµå´Â ½±°Ô Æ÷ÆÃµÇ°Å³ª È®ÀåµÇÁö ¸øÇÕ´Ï´Ù.
Ä¿³ÎÀÇ °¡½Ã¼º ¹× µð¹ö±ë ÅøÀº ½Ã½ºÅÛÀÇ ÇൿÀ» Á¤È®ÇÏ°Ô ÀÌÇØÇϴµ¥ °¡Àå Áß¿äÇÑ ¿ä¼Òµé ÀÔ´Ï´Ù. ¹°·Ð µ¶ÀÚ´Â ¼Ò½º Äڵ带 Àаí ÀÌÇØÇÒ ¼ö ÀÖÁö¸¸ ÄÚµåÀÇ ¶æÀ» À߸øÀÌÇØÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀÇ °¡¼³À» Å×½ºÆ®Çغ¼ ¼ö ÀÖ´Â ÅøÀ» °®´Â ´Ù´Â °ÍÀº °¡Ä¡¸¦ µûÁú ¼ö ¾øÀ» Á¤µµ·Î Áß¿äÇÑ ÀÏÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Ãø¸é¿¡¼ kmdb, mdb, ±×¸®°í DTrace¸¦ °¡Áö°í ÀÖ´Â ¼Ö¶ó¸®½º°¡ ¸íÈ®È÷ ½ÂÀÚ¶ó°í »ý°¢ÇÕ´Ï´Ù. ÇÊÀÚ´Â ¼Ö¶ó¸®½º¸¦ ¼ö³âµ¿¾È "¸®¹ö½º ¿£Áö´Ï¾î¸µ" ÇØ ¿Ô½À´Ï´Ù. ±×¸®°í ¼Ò½º Äڵ带 ÀÐ¾î¼ ¹®Á¦¸¦ ÇØ°áÇÏ´Â°Í º¸´Ù ÈξÀ ºü¸£°Ô ÀÌ·¯ÇÑ ÅøµéÀ» ÀÌ¿ëÇØ¼ ´äÀ» ã¾Æ ³»¾ú½À´Ï´Ù. ¸®´ª½º¿¡¼´Â ÀÌ·¯ÇÑ °ÍµéÀ» À§ÇÑ ¸¹Àº ¼±ÅÃÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. FreeBSD´Â Ä¿³Î Å©·¡½¬ ´ýÇÁ¸¦ À§ÇØ gdb ¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. gdb ´Â ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÏ°í ½Ì±Û ½ºÅÜ, µ¥ÀÌŸ ¹× ÄÚµåÀÇ °Ë»ç ¹× ¼öÁ¤À» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ¸®´ª½º¿¡¼ À̰ÍÀº ÅøµéÀ» ´Ù¿î·Îµå ¹Þ¾Æ¼ ¼³Ä¡ÇßÀ»¶§¸¸ °¡´ÉÇÑ ÀÏÀÔ´Ï´Ù.
|