uClinux ÀÇ malloc ÀÌ ´Ù¸¥ ÀÌÀ¯
uClinux ÀÇ malloc ÀÌ ´Ù¸¥ ÀÌÀ¯
¸ÕÀú uClinux ¿¡¼´Â °¡»ó ¸Þ¸ð¸® (VM - Virtual Memory) ½Ã½ºÅÛÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº ´ç½ÅÀÌ ÀÌ¹Ì ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º¿¡ ´ëÇؼ ÀÓÀÇ·Î ¸Þ¸ð¸®¸¦ Ãß°¡ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. VM ÀÌ º¸Åë MMU (Memory Management Unit)¶ó ºÒ¸®¿ì´Â ó¸® ÀåÄ¡¸¦ ÀÌ¿ëÇØ ±¸ÇöµÇ¹Ç·Î ´ç½ÅÀº uClinux ÀÇ ¼¼°è¸¦ ¿©ÇàÇÏ´Â µ¿¾È NOMMU ¶ó´Â ´Ü¾î¸¦ ÀÚÁÖ Á¢ÇÏ°Ô µÉ °ÍÀÌ´Ù. ¸Å¿ì °í¼öÁØ(high-level)¿¡¼ MMU ³ª VM ÀÌ ¾ø´Â °ÍÀÌ malloc ¿¡ ¾î¶°ÇÑ ¿µÇâÀ» ¹ÌÄ¡´ÂÁö¿¡ ´ëÇؼ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
VM »ó¿¡¼´Â ¸ðµç ÇÁ·Î¼¼½º´Â (ºñ·Ï °¡»ó ÁÖ¼ÒÀ̱â´Â ÇÏÁö¸¸) µ¿ÀÏÇÑ ÁÖ¼Ò°ø°£¿¡¼ ½ÇÇàµÇ¸ç °¡»ó ¸Þ¸ð¸® ½Ã½ºÅÛÀº ÀÌ ¿µ¿ªÀÌ ½ÇÁ¦·Î ¾î´À ¹°¸® ¸Þ¸ð¸®¿¡ ¸ÅÇεǴÂÁö¸¦ °ü¸®ÇÑ´Ù. °Ô´Ù°¡ ÇÁ·Î¼¼½º°¡ º¸´Â °¡»ó ¸Þ¸ð¸®´Â ¿¬¼ÓÀûÀÎ °Í ÀÏÁö¶óµµ ½ÇÁ¦ ¹°¸® ¸Þ¸ð¸® »ó¿¡¼´Â µ¿¶³¾îÁø ¿µ¿ª¿¡ Èð¾îÁ® ÀÖÀ» ¼öµµ ÀÖ´Ù. ±× Áß¿¡´Â ¾Æ¸¶ µð½ºÅ© »ó¿¡ ½º¿Ò (swap) µÇ¾î ÀÖ´Â °Íµµ ÀÖÀ» °ÍÀÌ´Ù.
VMÀÌ ¾ø´Ù¸é °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â ¹Ýµå½Ã ±×µéÀÌ ½ÇÇàµÉ ¼ö ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ª ¾È¿¡ À§Ä¡ÇØ¾ß ÇÑ´Ù. ´Ü¼øÇÏ°Ô »ý°¢Çغ¸¸é, ÀÌ ¿µ¿ªÀº ¿¬¼ÓÀûÀÎ °ø°£À̾î¾ß Çϸç ÀÌ ¿µ¿ªÀÇ À§¾Æ·¡·Î ´Ù¸¥ ÇÁ·Î¼¼½º°¡ À§Ä¡ÇÏ°í ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î ÀϹÝÀûÀ¸·Î ¸Þ¸ð¸® ¿µ¿ªÀ» È®ÀåÇÒ ¼ö ¾ø´Ù.
¿ø·¡ÀÇ ÁÖÁ¦·Î µ¹¾Æ°¡º¸¸é, malloc Àº ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò °ø°£ÀÇ Å©±â¸¦ È®ÀåÇϰųª º¯°æÇÏ´Â ½Ã½ºÅÛ ÄÝÀÎ sbrk/brk ¸¦ ÀÌ¿ëÇÏ¿© ±¸ÇöµÈ´Ù. ±×¸®°í malloc ¶óÀ̺귯¸®´Â ÇÁ·Î¼¼½º¸¦ ´ë½ÅÇÏ¿© sbrk() ¿¡ ÀÇÇØ ¾ò¾îÁø ¿©ºÐÀÇ ¸Þ¸ð¸®¸¦ °ü¸®ÇÑ´Ù. ÀÌ ¿©ºÐÀÇ °ø°£ÀÌ ¾ø¾îÁö¸é ´Ù½Ã sbrk() ¸¦ È£ÃâÇÏ¿© ´õ ¸¹Àº °ø°£À» È®º¸ÇÏ°Ô µÇ°í, ¶ÇÇÑ brk() ¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ÁÙÀÏ ¼öµµ ÀÖÁö¸¸ ´ëºÎºÐÀÇ malloc ±¸ÇöÀº ÀÌ·¯ÇÑ ÀÏÀº ÇÏÁö ¾Ê´Â´Ù. sbrk() ´Â ÇÁ·Î¼¼½º ¸Þ¸ð¸® ¿µ¿ªÀÇ ³¡ºÎºÐ¿¡ ¸Þ¸ð¸®¸¦ Ãß°¡ÇÏ´Â ÀÏÀ» ÇÏ°í (ÇÁ·Î¼¼½º Å©±â Áõ°¡), brk() ´Â ÇÁ·Î¼¼½º ¸Þ¸ð¸® ¿µ¿ªÀÇ ³¡ºÎºÐÀ» ½ÃÀÛ ºÎºÐÀÇ °¡±î¿î ÀÓÀÇÀÇ ¿µ¿ªÀ¸·Î ¿Å±â°Å³ª (ÇÁ·Î¼¼½º Å©±â °¨¼Ò) µÚ·Î È®ÀåÇÏ´Â ÀÏÀ» ÇÑ´Ù (ÇÁ·Î¼¼½º Å©±â Áõ°¡). sbrk()/brk() ÀÇ Ç¥ÁØÀûÀÎ ÇൿÀº ÇÁ·Î¼¼½ºÀÇ Å©±â¸¦ È®Àå/°¨¼Ò ½ÃÅ°´Â °ÍÀÌ´Ù.
uClinux »ó¿¡¼´Â ÇÁ·Î¼¼½ºÀÇ Å©±â¸¦ Áõ°¡½Ãų ¼ö ¾ø±â ¶§¹®¿¡, malloc ÀÌ µ¿ÀÛÇϱâ À§Çؼ´Â Àú¼öÁØ(low-level)¿¡¼ ¸î°¡Áö º¯È°¡ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù.
ÀÌ¿¡ °ü·ÃµÈ ¸¹Àº ¹æ¹ýµéÀÌ ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¸î°¡Áö¸¦ »ìÆ캸¸é:
2¹øÀº ±× ³ª¸§ÀÇ ÀåÁ¡À» °¡Áö°í ÀÖ´Ù. ÀÌ ±â´ÉÀ» ÀÌ¿ëÇϸé ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®ÀÇ ¾çÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù (ÀåÁ¡ÀÌ µÉ ¼ö ÀÖ´Ù). ÇÏÁö¸¸ Èü ¿µ¿ªÀÌ ´ÜÁö ÀϽÃÀûÀÎ ¿ëµµ·Î¸¸ »ç¿ëµÇ´Â °æ¿ì¿¡µµ Ç×»ó ÇÒ´çµÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. Èü ¿µ¿ªÀº ÇÁ·Î¼¼½º°¡ »ý¼ºµÉ ¶§ ÇÒ´çµÇ¾îÁ® ÀÖÀ¸¹Ç·Î sbrk/brk ´Â Ç¥ÁØÀûÀÎ ÇൿÀ» ÃëÇÒ ¼ö ÀÖ°í ÀϹÝÀûÀÎ malloc ¶óÀ̺귯¸®°¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.
¸¶Áö¸·À¸·Î 3¹øÀ» »ìÆ캸ÀÚ. ¿©±â¿¡´Â ´ÜÁ¡ÀÌ Á¸ÀçÇÑ´Ù. À߸øµÈ ÇÁ·Î¼¼½º Çϳª°¡ ¸ðµç ¸Þ¸ð¸® ¿µ¿ªÀ» ´Ù Â÷ÁöÇØ ¹ö¸± ¼ö ÀÖ´Ù. ½Ã½ºÅÛÀÇ ¸Þ¸ð¸® Ç®¿¡¼ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ´Â °ÍÀº ÇÁ·Î¼¼½º ¸Þ¸ð¸® ¿µ¿ªÀÇ ¸¶Áö¸· ºÎºÐ¿¡ ´ëÇØ ¿¬»êÀ» ÇÏ´Â sbrk/brk ¿Í ȣȯµÇÁö ¾Ê´Â´Ù. µû¶ó¼ ±âÁ¸ÀÇ malloc ±¸ÇöÀ¸·Î´Â ºÒ°¡´ÉÇÏ°í »õ·Î¿î ±¸ÇöÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ ¹æ½ÄÀÇ ÀåÁ¡Àº ½ÇÁ¦·Î ÇÊ¿äÇÑ ¸¸ÅÀÇ ¸Þ¸ð¸® ¸¸ÀÌ »ç¿ëµÈ´Ù´Â °ÍÀÌ´Ù. »ç¿ëµÈ ¸Þ¸ð¸®´Â ¹Ù·Î Ä¿³ÎÀÇ Àü¿ª ¸Þ¸ð¸® Ç®·Î ¹ÝȯµÉ ¼ö ÀÖÀ¸¸ç ÀÌ ¸Þ¸ð¸® ¿µ¿ªÀ» °ü¸®ÇÏ´Â ±âÁ¸ÀÇ Ä¿³Î ÇÒ´çÀÚ¸¦ ÀÌ¿ëÇÏ¿© malloc À» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
ÇöÀç uClinux ¿¡¼´Â 3¹ø° ¹æ½ÄÀÌ »ç¿ëµÇ°í ÀÖ´Ù. °¡Àå ´Ü¼øÇÑ malloc ±¸Çö¿¡¼´Â Ä¿³ÎÀÇ ÀÌ¿ë°¡´ÉÇÑ ¸Þ¸ð¸® Ç®¿¡¼ ¸Þ¸ð¸®¸¦ ¾ò±â À§ÇØ mmap À» È£ÃâÇÏ°í ¹ÝȯÇϱâ À§Çؼ munmap À» È£ÃâÇÑ´Ù. ÀÌ°ÍÀ¸·Î ¸Å¿ì ÀÛÀº malloc ±¸ÇöÀÌ °¡´ÉÇÏ´Ù (´ÜÁö 1°³ÀÇ ½Ã½ºÅÛ ÄÝ ¸¸ÀÌ »ç¿ëµÈ´Ù).
ÀÌ·¯ÇÑ ´Ü¼øÇÑ malloc ±¸Çö¿¡¼´Â ´ÙÀ½°ú °°Àº ¹®Á¦Á¡ÀÌ ¹ß»ýµÈ´Ù:
Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ´Â ÃÖ´ë ÇÒ´ç Å©±â¸¦ ÃæºÐÈ÷ ´ÃÀÏ ¼ö ÀÖµµ·Ï ¼öÁ¤µÇ¾ú´Ù. ¸î¸î °æ¿ì¿¡¼ ÀÌ°ÍÀº Ä¿³Î ¼³Á¤ ¿É¼ÇÀ» Á¶Á¤ÇÏ´Â °Í¸¸À¸·Î °¡´ÉÇÏ´Ù. ÀÌ°ÍÀº ´õ Å« ¸Þ¸ð¸® ÇÒ´çÀ» °¡´ÉÇÏ°Ô ÇϹǷΠū ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
uClinux ¿¡´Â »õ·Î¿î Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ°¡ Ãß°¡µÇ¾î ´õÀÌ»ó 2ÀÇ ¹è¼ö ´ÜÀ§ ÇÒ´çÀÌ ÇÊ¿äÄ¡ ¾Ê°Ô µÇ¾ú°í ¸Þ¸ð¸® ÇÒ´ç ½ÃÀÇ ³¶ºñ°¡ ¸¹ÀÌ Á¦°ÅµÇ¾ú´Ù. ÀÌ ÇÒ´çÀÚ´Â ÀϹÝÀûÀ¸·Î Kmalloc2 ¶ó°í ºÎ¸£¸ç NOMMU ȯ°æ¿¡¼ ¸Þ¸ð¸® ÇÒ´çÀÇ ¿À¹öÇìµå¸¦ »ó´çÈ÷ °¨¼Ò½ÃÄ×°í ´Ù¸¥ ŽºÅ©¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®ÀÇ ¾çÀ» Áõ°¡½ÃÄ×´Ù.
±âÁ¸ÀÇ Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ´Â ¿ÀÁ÷ 2ÀÇ ¹è¼ö ´ÜÀ§·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿´´Ù. ¿¹¸¦ µé¾î 12000 ¹ÙÀÌÆ®°¡ ÇÊ¿äÇÑ °æ¿ì¿¡´Â 16KB ¸¦ ÇÒ´ç¹Þ°Ô µÇ¾î ³ª¸ÓÁö 4KB ¿¡ ´ëÇؼ´Â »ç¿ëÇÒ ¼ö°¡ ¾ø¾ú´Ù. ÀÌ°ÍÀº ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÃÀÛ½Ãų ¶§ ¸Å¿ì ³¶ºñ°¡ ½ÉÇØÁø´Ù. ¿¹¸¦ µé¾î ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Å©±â°¡ 130KB ¶ó¸é ÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â À§Çؼ± ½ÇÁ¦·Î 256KB °¡ ÇÊ¿äÇÏ°Ô µÈ´Ù.
Kmalloc2 ´Â 1 ÆäÀÌÁö Å©±â (4KB) ÀÇ ¿äû±îÁö´Â 2ÀÇ ¹è¼ö ´ÜÀ§·Î ÇÒ´çÇÏ´Â Á¤Ã¥À» ±×´ë·Î »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ 1 ÆäÀÌÁö Å©±â ÀÌ»óÀÇ ¿äû¿¡ ´ëÇؼ´Â °¡Àå °¡±î¿î ÆäÀÌÁö ´ÜÀ§·Î Á¶Á¤ÇÏ¿© ÇÒ´çÇϵµ·Ï ÇÑ´Ù. ¾ÕÀÇ ¿¹Á¦¿¡¼¶ó¸é 130KB ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇؼ 132KB ÀÇ ¸Þ¸ð¸®°¡ ÇÒ´çµÈ´Ù. ±âÁ¸ÀÇ Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ¿¡ ºñÇØ 124KB ¸¦ Àý¾àÇÑ ¼ÀÀÌ´Ù.
Kmalloc2 ´Â ¶ÇÇÑ ´ÜÆíÈµÈ ¸Þ¸ð¸®¸¦ ÇÇÇÏ´Â ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù. 2KB ȤÀº ±× ÀÌÇÏÀÇ ÇÒ´ç¿¡ ´ëÇؼ´Â ¸Þ¸ð¸® ¿µ¿ªÀÇ ³¡¿¡¼ºÎÅÍ ¾Æ·¡·Î ³»·Á¿À¸ç ó¸®ÇÏ°í, Å« ÇÒ´ç¿¡ ´ëÇؼ´Â ¸Þ¸ð¸®ÀÇ ½ÃÀÛ ºÎºÐ¿¡¼ºÎÅÍ À§·Î ¿Ã¶ó¿À¸ç ó¸®ÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ³×Æ®¿öÅ© ¹öÆÛ¿Í °°Àº ÀϽÃÀûÀÎ ÇÒ´ç¿¡ ÀÇÇØ ¸Þ¸ð¸®°¡ ´ÜÆíȵǾî Ä¿´Ù¶õ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇÁö ¾Ê´Â »óȲÀ» ¸·¾ÆÁØ´Ù.
Kmalloc2 °¡ ¿Ïº®ÇÑ °ÍÀº ¾Æ´Ï´Ù. ºñ·Ï ±âÁ¸ÀÇ Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ°¡ ´õ ¸¹Àº ¸Þ¸ð¸® ´ÜÆíȸ¦ ¸¸µé¾î ³½´Ù°í´Â ÇÏÁö¸¸ Kmalloc2 ¿¡¼µµ ¸Þ¸ð¸® ´ÜÆíÈ°¡ ²Ï ÀϾ ¼ö ÀÖ´Ù. Kmalloc2 ´Â uClinux °¡ µ¿ÀÛÇÏ´Â ÀÓº£µðµå ȯ°æ - ÁÖ·Î (»ó´ëÀûÀ¸·Î) °íÁ¤µÈ ±×·ìÀÇ ¿À·§ µ¿¾È ½ÇÇàµÇ´Â ÀÀ¿ë ÇÁ·Î±×·¥µéÀÌ Á¸ÀçÇϴ ȯ°æ - ¿¡¼ ½ÇÁ¦ÀûÀ¸·Î Àß µ¿ÀÛÇÑ´Ù.
ÀÌÁ¦±îÁö ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇÑ Ä¿³Î ¼öÁØÀÇ ¿É¼Ç¿¡ ´ëÇؼ ¾à°£ »ìÆ캸¾Ò´Ù, ÀÌÁ¦´Â »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿É¼Ç¿¡ ´ëÇؼ »ìÆ캸±â·Î ÇÑ´Ù. ¾Õ¼ »ìÆ캻 ¸î°¡Áö Á¦ÇÑ »çÇ×µéÀÌ Àֱ⠶§¹®¿¡ »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¼Ö·ç¼ÇÀº ¸¹Áö°¡ ¾Ê´Ù. ±×µéÀº °¢ÀÚ ÀÚ½ÅÀÇ ¿ªÇÒµéÀ» ¸íÈ®È÷ ¼öÇàÇÑ´Ù.
¸ÕÀú "libc" ÀÇ ¼±Åÿ¡ ´ëÇÑ ¹®Á¦°¡ ÀÖ´Ù. -- ÀÌ°ÍÀº ´Ù¸¥ ÅäÇÈÀ¸·Î ´Ù·ïÁú °ÍÀÌ´Ù. "malloc" ÀÇ ¼±ÅÃÀº º¸Åë ´ç½ÅÀÌ »ç¿ëÇÏ´Â "libc" ¿¡ ÀÇÁ¸ÇÑ´Ù: uC-libc ¿Í uClibc °¡ ÀÖ´Ù. µÑ ´Ù ¸ðµÎ ´Ü¼øÇÑ ¸Þ¸ð¸® ÇÒ´çÀÚÀÎ malloc-simple À» Á¦°øÇÑ´Ù.
malloc-simple Àº ½ÇÁ¦ÀûÀÎ ¸Þ¸ð¸® ¿äû¿¡ ´ëÇÑ Ã³¸®¸¦ Ä¿³Î¿¡¼ ¼öÇàÇϵµ·Ï mmap °ú munmap À» »ç¿ëÇÑ´Ù. malloc-simple ÀÇ ±¸ÇöÀº ¸Å¿ì ´Ü¼øÇÏ°í ÄÚµåÀÇ Å©±âµµ ¹«½ÃÇÒ ¸¸Å ÀÛÀ¸¹Ç·Î ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ À̸¦ Æ÷ÇÔÇÏ´Â µ¥ µå´Â ºñ¿ëÀº ¸Å¿ì Àû´Ù.
malloc-simple ÀÇ ´ÜÁ¡Àº - ¾Õ¼ »ìÆ캻´ë·Î - °¢°¢ÀÇ ÇÒ´ç¿¡ »ç¿ëµÇ´Â ¾à 56 ¹ÙÀÌÆ®ÀÇ Ä¿³Î ¿À¹öÇìµåÀÌ´Ù. ¸¸¾à ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÛÀº Å©±âÀÇ ¸Þ¸ð¸® ÇÒ´çÀ» ¸¹ÀÌ ¼öÇàÇÏ´Â °æ¿ì, ¸Þ¸ð¸® »ç¿ë·®Àº ¸Å¿ì Ä¿Áú °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ´ç½ÅÀÌ Â§ ÇÁ·Î±×·¥ÀÌ 10 ¹ÙÀÌÆ® Å©±âÀÇ ¸Þ¸ð¸®¸¦ 1000¹ø ÇÒ´ç¹Þ´Â °æ¿ì, ÇÊ¿äÇÑ Àüü ¸Þ¸ð¸® ¾çÀº 10000 ¹ÙÀÌÆ®°¡ µÈ´Ù. ÇÏÁö¸¸ 56 ¹ÙÀÌÆ®ÀÇ ¿À¹öÇìµå·Î ÀÎÇØ ½ÇÁ¦·Î ÇÒ´çµÇ´Â Àüü ¸Þ¸ð¸®´Â 66000 ¹ÙÀÌÆ®°¡ µÇ¸ç, ½ÇÁ¦·Î ÇÊ¿äÇÑ ¾çº¸´Ù 560% ³ª ¸¹Àº ¿À¹öÇìµå¸¦ °¨¼öÇØ¾ß ÇÑ´Ù. Zebra ¶ó´Â ¶ó¿ìÆà µ¥¸óÀº ½ÃÀÛµÉ ¶§ °¢°¢ÀÇ ¸í·É (command) ¿¡ ´ëÇÑ ÀÚ·á ±¸Á¶¸¦ ÇÒ´ç¹Þ±â ¶§¹®¿¡ - Zebra ¿¡´Â ¸Å¿ì ¸¹Àº ¼öÀÇ ¸í·É/Å°¿öµå°¡ Á¸ÀçÇÑ´Ù - ÀÌ·¯ÇÑ ºó¹øÇÑ ÀÛÀº ÇÒ´çÀÇ ¹®Á¦¿¡ ½É°¢ÇÑ ÇÇÇظ¦ º¸´Â ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù.
uC-libc ´Â libsmalloc ¶ó°í ÇÏ´Â Zebra ¿Í °°ÀÌ ºó¹øÇÑ ÀÛÀº ÇÒ´ç ¹®Á¦¸¦ °Þ´Â ÇÁ·Î±×·¥¿¡ Æ¯ÈµÈ ¹öÀüÀÇ malloc À» Á¦°øÇÑ´Ù. ÀÌ ¹öÀüÀº malloc-simple ÀÇ ¿ÜºÎ ÄÚµå·Î ÅëÇյǾî Á³À¸¹Ç·Î ´õÀÌ»ó uClinux ¿¡¼ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â µ¥ µå´Â ¸Å¿ì Å« ¿À¹öÇìµå¸¦ °¨¼öÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
uClibc ´Â ´ÙÀ½°ú °°Àº ¸î°¡Áö ¼±ÅþÈÀ» Á¦°øÇÑ´Ù:
ÀϹÝÀûÀ¸·Î ´õ º¹ÀâÇÑ malloc ÀÇ ±¸Çö¿¡¼´Â ´õ ºü¸¥ ¸Þ¸ð¸® ÇÒ´ç°ú ÀÛÀº ÇÒ´ç¿¡ ´ëÇÑ È¿À²ÀûÀΠ󸮰¡ ÀÌ·ç¾î ÁöÁö¸¸ uClinux ȯ°æ¿¡¼ ½ÇÇàµÇ´Â ÀÛÀº ÀÀ¿ë ÇÁ·Î±×·¥µé¿¡ Æ÷ÇԵDZ⠿¡´Â ºÎ´ã½º·¯¿î ÄÚµå Å©±â¸¦ °¡Áø´Ù. malloc ±¸Çö¿¡ ´ëÇÑ ¸î°¡Áö ¼±ÅþÈÀÌ Á¸ÀçÇÑ´Ù. ¾î¶² °ÍÀ» »ç¿ëÇØ¾ß ÇÒ±î? malloc-simple Àº ÀϹÝÀûÀ¸·Î »ç¿ëÇϱ⿡ ÁÁÀº ±âº» malloc ±¸ÇöÀÌ´Ù. ±×·± ´ÙÀ½¿¡´Â °¢ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¾Ë¸ÂÀº malloc À» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. À§¿¡¼ »ìÆ캻 ´ë·Î ´ç½ÅÀÌ ÇÏ°íÀÚ ÇÏ´Â ¸ñÀû¿¡ µû¶ó ¾à°£ÀÇ Á¦ÇÑÀÌ ÀÖÀ» ¼ö ÀÖ´Ù.
ºÎµæÀÌ ÇÏ°Ôµµ, ´ç½ÅÀÌ ¾î¶² ÇÒ´çÀÚ¸¦ ¼±ÅÃÇßµç °á±¹¿£ ¸ðµç ¸Þ¸ð¸®°¡ ¹Ù´Ú³ª°í ¸» °ÍÀÌ´Ù. »õ·Î¿î »ç¿ëÀÚ°¡ °øÅëÀûÀ¸·Î Á¢ÇÏ°Ô µÇ´Â ¹®Á¦Á¡À¸·Î´Â "missing memory" ¹®Á¦°¡ ÀÖ´Ù. ½Ã½ºÅÛÀº ¸¹Àº ¾çÀÇ »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®¸¦ °¡Áö°í À־ »ç¿ëÀÚÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ X ¶ó´Â Å©±âÀÇ ¹öÆÛ¸¦ ÇÒ´ç¹ÞÁö ¸øÇÏ´Â Çö»óÀÌ´Ù. ÀÌ°ÍÀº ¸Þ¸ð¸® ´ÜÆíÈ¿¡¼ ¿À´Â ¹®Á¦·Î¼ ÇöÀç¿¡´Â °¡´ÉÇÑ ÇØ°áÃ¥ÀÌ ¾ø´Â ½ÇÁ¤ÀÌ´Ù. uClinux ȯ°æ¿¡´Â VM ÀÌ ¾ø±â ¶§¹®¿¡ ¸Þ¸ð¸® ´ÜÆíÈ ¾øÀÌ ¸ðµç ¸Þ¸ð¸®¸¦ °í·ç »ç¿ëÇÏ´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇØ º¸ÀδÙ. ¿¹Á¦¸¦ Çϳª »ìÆ캸µµ·Ï ÇÏÀÚ. ½Ã½ºÅÛ¿¡´Â 500KB ÀÇ »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸®°¡ ÀÖ°í ´ç½ÅÀº 100KB ÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹ÞÀ¸·Á°í ÇÏ´Â »óȲÀÌ´Ù. ´ç¿¬È÷ ÀÌ°ÍÀÌ °¡´ÉÇÑ ÀÏÀ̶ó°í »ý°¢µÉ °ÍÀÌ´Ù. ÇÏÁö¸¸ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϱâ À§Çؼ´Â 100KB ÀÇ ¿¬¼ÓÀûÀÎ °ø°£ÀÌ ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ¸Þ¸ð¸® ¸ÊÀ» ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöÇØ º¸µµ·Ï ÇÏ°Ú´Ù. ÇϳªÀÇ ¹®ÀÚ´Â ¾à 20KB ÀÇ ¸Þ¸ð¸®¸¦ ³ªÅ¸³½´Ù. X ¹®ÀÚ´Â ¸Þ¸ð¸®°¡ ÇÒ´çµÇ¾ú°Å³ª »ç¿ëÀÚÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ ȤÀº Ä¿³Î¿¡¼ ÀÌ¹Ì »ç¿ë ÁßÀÎ ¿µ¿ªÀ» ³ªÅ¸³½´Ù.
0 100 200 300 400 500 600 700 800 900 1000 -+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-- |XXXXX|XXXXX|---XX|--X--|-X---|XX---|-X---|-XX--|-X---|XXXXX| À§¿¡¼ º¼ ¼ö ÀÖµíÀÌ ½Ã½ºÅÛÀÇ Àüü »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸® ¾çÀº 500KB ÀÌ´Ù. ÇÏÁö¸¸ ±×Áß¿¡¼ °¡Àå Å« ¿¬¼ÓÀûÀÎ ¿µ¿ªÀÇ Å©±â´Â ¿ÀÁ÷ 80KB »ÓÀÌ´Ù. ÀÌ·¯ÇÑ »óȲÀÌ µÉ ¼ö ÀÖ´Â °¡´É¼ºÀº ¸¹ÀÌ Á¸ÀçÇÑ´Ù. ¾î¶² ÇÁ·Î±×·¥¿¡¼ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹ÞÀº ÈÄ¿¡ ¸Þ¸ð¸®ÀÇ Áß°£ ºÎºÐÀ» Á¦¿ÜÇÑ ´Ù¸¥ ºÎºÐµé¸¸ ÇØÁ¦ÇÏ´Â °æ¿ì¶ó¸é ÀÌ·¯ÇÑ ¹®Á¦°¡ ½±°Ô ¹ß»ýµÉ ¼ö ÀÖ´Ù. ÀϽÃÀûÀ¸·Î ½ÇÇàµÇ´Â ÇÁ·Î±×·¥µé ¶ÇÇÑ ¸Þ¸ð¸®ÀÇ ÇÒ´ç¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù.
Á¾Á¾ µè°ÔµÇ´Â Áú¹®À¸·Î ¿Ö ¸Þ¸ð¸®ÀÇ ´ÜÆíȸ¦ Á¦°ÅÇÒ ¼ö ¾ø´À³Ä? ¶ó´Â Áú¹®ÀÌ ÀÖ´Ù. ¹®Á¦´Â uClinux ¿¡´Â VM ÀÌ Á¸ÀçÇÏÁö ¾Ê°í ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ¿Å±æ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥¿¡¼´Â ÇÒ´çµÈ ¸Þ¸ð¸® ¿µ¿ª ³»ÀÇ ÁÖ¼Ò¿¡ ´ëÇÑ ÂüÁ¶¸¦ °¡Áö°í ÀÖÀ¸¸ç VM ÀÌ ¾ø´Â ȯ°æ¿¡¼´Â ¸Þ¸ð¸®°¡ Ç×»ó ¿Ã¹Ù¸¥ ÁÖ¼Ò¿¡ Á¸ÀçÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ¸¸¾à ÀÓÀÇ·Î ÇØ´ç ¸Þ¸ð¸® ¿µ¿ªÀ» ´Ù¸¥ °÷À¸·Î ¿Å°Ü ¹ö¸°´Ù¸é ÇÁ·Î±×·¥Àº Á¤»óÀûÀ¸·Î µ¿ÀÛµÇÁö ¾ÊÀ» (crash) °ÍÀÌ´Ù. uClinux »ó¿¡¼ ÀÌ·¯ÇÑ »óȲ¿¡ ´ëÇÑ ÇØ°áÃ¥Àº ¾ø´Ù. uClinux ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ßÀÚµéÀº Ç×»ó ÀÌ·¯ÇÑ ¹®Á¦Á¡À» ÀνÄÇÏ°í ÀÛÀº ¸Þ¸ð¸® ºí·°µéÀ» È°¿ëÇϵµ·Ï ³ë·ÂÇØ¾ß ÇÑ´Ù.
uClinux ȯ°æ¿¡¼ÀÇ ¸Þ¸ð¸® ÇÒ´çÀº À§¿¡¼ »ìÆì º¸¾ÒµíÀÌ ÀϹÝÀûÀÎ ¸®´ª½º ȯ°æ¿¡¼ÀÇ ¸Þ¸ð¸® ÇÒ´ç°ú ºñ½ÁÇÏ´Ù. ÇÏÁö¸¸ uClinux ¸¸ÀÇ Æ¯Â¡°ú ´ÜÁ¡µéÀ» Æ÷ÇÔÇÑ´Ù. ¸Þ¸ð¸® ÇÒ´ç¿¡ °ü·ÃµÇ¾î ´ÙÀ½À¸·Î ÁøÇàµÇ¾î¾ß ÇÒ ÀÛ¾÷Àº ÀǽÉÇÒ ¿©Áö¾øÀÌ °øÀ¯ ¶óÀ̺귯¸® ±¸ÇöÀÏ °ÍÀÌ´Ù? (Further progress will no doubt be made on the memory allocation front now that uClinux is enjoying its first shared library implementations) ÀÌ°ÍÀÌ °¡´ÉÇØ Á®¼ malloc ÀÇ ±¸ÇöÀÌ °øÀ¯ ¶óÀ̺귯¸®¿¡ Á¸ÀçÇϸé malloc ÀÇ ±¸ÇöÀ» °¡´ÉÇÑ ÇÑ ÀÛ°Ô ¸¸µé¾î¾ß ÇÑ´Ù´Â Á¦ÇÑ »çÇ×ÀÌ Àû¾îÁø´Ù. ±×·¯¹Ç·Î Å©±â´Â ´õ Ä¿Á®µµ, ¸Þ¸ð¸® ´ÜÆíÈ ¹®Á¦¿Í ÇÒ´ç½ÃÀÇ ¿À¹öÇìµå ¹®Á¦¸¦ °¨¼Ò½Ãų ¼ö ÀÖ´Â È¿À²ÀûÀÎ »ç¿ëÀÚ ·¹º§ÀÇ malloc ±¸ÇöÀÌ °¡´ÉÇØ Áú °ÍÀÌ´Ù.
¸î°¡Áö Áú¹®¿¡ ´ëÇØ ´äº¯ÇØ ÁØ Phil Wilshire philwil@earthlink.net ¿¡°Ô °¨»çÇÑ´Ù.
Âü°í¹®Çå (http://www.uclinux.org/pub/uClinux/dist ¿¡¼ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Â uClinux ¹èÆ÷ÆÇÀÇ ¼Ò½º)
Ä¿³Î ÇÒ´çÀÚ¿Í mmap ±¸Çö:
|
It's not reality that's important, but how you percieve things. |