· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
uClinuxÀÇ mallocÀÌ ´Ù¸¥ ÀÌÀ¯

RenameThisPage MallocInUClinux µî°ú °°Àº À̸§À¸·Î ¹Ù²Ù±â¸¦ Á¦¾ÈÇÕ´Ï´Ù.
¿øÁ¦°¡ Why is Malloc Different Under uClinux?Àε¥ WhyIsMallocDifferentUnderuClinux´Â ¾î¶³±î¿ä? --°ËÀºÇØ

DifferentMallocUnderUCLinux¸¦ Á¦¾ÈÇÕ´Ï´Ù. ¿øÁ¦´Â #title·Î ¾µ ¼ö ÀÖÀ» °Ì´Ï´Ù. --kz


uClinux ÀÇ malloc ÀÌ ´Ù¸¥ ÀÌÀ¯

ÀúÀÚ: David McCullough Mdavidm@snapgear.com
¹ø¿ª: ±è³²Çü Mnamhyung@gmail.com


¸ÕÀú 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)¿¡¼­ ¸î°¡Áö º¯È­°¡ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù.

ÀÌ¿¡ °ü·ÃµÈ ¸¹Àº ¹æ¹ýµéÀÌ ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¸î°¡Áö¸¦ »ìÆ캸¸é:

  1. ÇÁ·Î¼¼½º°¡ µ¿Àû ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏÁö ¸øÇÏ°Ô ÇÑ´Ù.
  2. ÇÁ·Î¼¼½º¸¶´Ù sbrk/brk °¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Èü(heap) ¿µ¿ªÀ» ÇÒ´çÇÑ´Ù. ÇÁ·Î¼¼½º´Â ÈüÀÇ Å©±â¸¦ º¯°æÇÒ ¼ö ¾øÀ¸¸ç ÈüÀÇ Å©±â´Â ÇÁ·Î¼¼½º°¡ »ý¼ºµÉ ¶§ Á¤ÇØÁø´Ù.
  3. ÇÁ·Î¼¼½º°¡ (½Ã½ºÅÛ Àüü¿¡ °ÉÄ£) ÀÌ¿ë °¡´ÉÇÑ Àü¿ª ¸Þ¸ð¸® Ç®(global pool of free memory)¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹ÞÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù.

¿ì¼± 1¹øÀº ¹®Á¦°¡ ÀÖ´Ù. ´ëºÎºÐÀÇ ÀÀ¿ë ÇÁ·Î±×·¥µéÀº µ¿Àû ¸Þ¸ð¸® ÇÒ´ç ±â´ÉÀ» »ç¿ëÇÏ°í Àֱ⠶§¹®¿¡ ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö ¸øÇÏ°Ô µÈ´Ù¸é ¼ö¸¹Àº ¿ÀÇ ¼Ò½º ÀÀ¿ë ÇÁ·Î±×·¥µéÀÌ uClinux »ó¿¡¼­ Á¦´ë·Î µ¿ÀÛÇϵµ·Ï ¼öÁ¤ÇÏ´Â µ¥ ¸·´ëÇÑ ³ë·ÂÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.

2¹øÀº ±× ³ª¸§ÀÇ ÀåÁ¡À» °¡Áö°í ÀÖ´Ù. ÀÌ ±â´ÉÀ» ÀÌ¿ëÇϸé ÇÁ·Î¼¼½º°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®ÀÇ ¾çÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù (ÀåÁ¡ÀÌ µÉ ¼ö ÀÖ´Ù). ÇÏÁö¸¸ Èü ¿µ¿ªÀÌ ´ÜÁö ÀϽÃÀûÀÎ ¿ëµµ·Î¸¸ »ç¿ëµÇ´Â °æ¿ì¿¡µµ Ç×»ó ÇÒ´çµÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. Èü ¿µ¿ªÀº ÇÁ·Î¼¼½º°¡ »ý¼ºµÉ ¶§ ÇÒ´çµÇ¾îÁ® ÀÖÀ¸¹Ç·Î sbrk/brk ´Â Ç¥ÁØÀûÀÎ ÇൿÀ» ÃëÇÒ ¼ö ÀÖ°í ÀϹÝÀûÀÎ malloc ¶óÀ̺귯¸®°¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.

¸¶Áö¸·À¸·Î 3¹øÀ» »ìÆ캸ÀÚ. ¿©±â¿¡´Â ´ÜÁ¡ÀÌ Á¸ÀçÇÑ´Ù. À߸øµÈ ÇÁ·Î¼¼½º Çϳª°¡ ¸ðµç ¸Þ¸ð¸® ¿µ¿ªÀ» ´Ù Â÷ÁöÇØ ¹ö¸± ¼ö ÀÖ´Ù. ½Ã½ºÅÛÀÇ ¸Þ¸ð¸® Ç®¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ´Â °ÍÀº ÇÁ·Î¼¼½º ¸Þ¸ð¸® ¿µ¿ªÀÇ ¸¶Áö¸· ºÎºÐ¿¡ ´ëÇØ ¿¬»êÀ» ÇÏ´Â sbrk/brk ¿Í ȣȯµÇÁö ¾Ê´Â´Ù. µû¶ó¼­ ±âÁ¸ÀÇ malloc ±¸ÇöÀ¸·Î´Â ºÒ°¡´ÉÇÏ°í »õ·Î¿î ±¸ÇöÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ ¹æ½ÄÀÇ ÀåÁ¡Àº ½ÇÁ¦·Î ÇÊ¿äÇÑ ¸¸Å­ÀÇ ¸Þ¸ð¸® ¸¸ÀÌ »ç¿ëµÈ´Ù´Â °ÍÀÌ´Ù. »ç¿ëµÈ ¸Þ¸ð¸®´Â ¹Ù·Î Ä¿³ÎÀÇ Àü¿ª ¸Þ¸ð¸® Ç®·Î ¹ÝȯµÉ ¼ö ÀÖÀ¸¸ç ÀÌ ¸Þ¸ð¸® ¿µ¿ªÀ» °ü¸®ÇÏ´Â ±âÁ¸ÀÇ Ä¿³Î ÇÒ´çÀÚ¸¦ ÀÌ¿ëÇÏ¿© malloc À» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

ÇöÀç uClinux ¿¡¼­´Â 3¹ø° ¹æ½ÄÀÌ »ç¿ëµÇ°í ÀÖ´Ù. °¡Àå ´Ü¼øÇÑ malloc ±¸Çö¿¡¼­´Â Ä¿³ÎÀÇ ÀÌ¿ë°¡´ÉÇÑ ¸Þ¸ð¸® Ç®¿¡¼­ ¸Þ¸ð¸®¸¦ ¾ò±â À§ÇØ mmap À» È£ÃâÇÏ°í ¹ÝȯÇϱâ À§Çؼ­ munmap À» È£ÃâÇÑ´Ù. ÀÌ°ÍÀ¸·Î ¸Å¿ì ÀÛÀº malloc ±¸ÇöÀÌ °¡´ÉÇÏ´Ù (´ÜÁö 1°³ÀÇ ½Ã½ºÅÛ ÄÝ ¸¸ÀÌ »ç¿ëµÈ´Ù).

ÀÌ·¯ÇÑ ´Ü¼øÇÑ malloc ±¸Çö¿¡¼­´Â ´ÙÀ½°ú °°Àº ¹®Á¦Á¡ÀÌ ¹ß»ýµÈ´Ù:

  1. uClinux »ó¿¡¼­ mmap À» »ç¿ëÇÏ´Â ¿À¹öÇìµå´Â °¢°¢ÀÇ ÇÒ´ç¿¡ ´ëÇØ 56 ¹ÙÀÌÆ® Á¤µµÀÌ´Ù. ÀÌ´Â (Zebra ¶ó¿ìÆà µ¥¸ó°ú °°ÀÌ) ÀÛÀº Å©±âÀÇ ¸Þ¸ð¸® ÇÒ´çÀ» ¸Å¿ì ¸¹ÀÌ ¿äûÇÏ´Â °æ¿ì¿¡ ±ØÈ÷ ³ªºüÁú ¼ö ÀÖ´Ù. uClinux »óÀÇ »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼­ mmap À» È£ÃâÇϸé Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚÀÎ kmalloc À» »ç¿ëÇÏ¿© ´Ü¼øÈ÷ Àü¿ª ¸Þ¸ð¸® Ç®¿¡¼­ ÇÒ´çµÈ ÈÄ¿¡ ÇÁ·Î¼¼½º¿¡ ¿¬°üµÈ ¿¬°á ¸®½ºÆ®·Î ¿¬°áµÈ´Ù. À§¿¡¼­ ¸»ÇÑ 56 ¹ÙÀÌÆ®´Â kmalloc ÀÇ ¿À¹öÇìµå¿¡ ¿¬°á ¸®½ºÆ®ÀÇ ¿À¹öÇìµå¸¦ ÇÕÇÑ °ÍÀÌ´Ù. ´ÜÁö 56 ¹ÙÀÌÆ®ÀÇ ¿À¹öÇìµå ¸¸ÀÌ ¹®Á¦°¡ ¾Æ´Ï¶ó ¸¹Àº ¼öÀÇ ÀÛÀº ÇÒ´çÀÌ ÀϾ °æ¿ì¿¡´Â ¸®½ºÆ®ÀÇ ±æÀÌ°¡ ±æ¾îÁö°Ô µÇ¹Ç·Î ¸Þ¸ð¸®ÀÇ ÇØÁ¦³ª ÀçÇÒ´çÀ» ´À¸®°Ô ¸¸µç´Ù (ÇÒ´ç ½Ã¿¡´Â ´ÜÁö ¿¬°á ¸®½ºÆ®ÀÇ Ã¹ºÎºÐ¿¡ Ãß°¡ÇÏ¸é µÈ´Ù).

  2. Ç¥ÁØ Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ´Â ¿ÀÁ÷ 2ÀÇ ¹è¼ö ´ÜÀ§·Î¸¸ ÇÒ´çÇϹǷΠ(ÃÖ´ë 1MB ·Î Á¦ÇÑ) ºñÈ¿À²ÀûÀ̸ç Á¦ÇÑÀûÀÌ´Ù. ÀÌ°ÍÀº ƯÈ÷ Å« ´ÜÀ§ÀÇ ÇÒ´ç¿¡¼­ ¹®Á¦°¡ µÈ´Ù. 33KB ¸¦ ÇÒ´ç¹Þ°íÀÚ ÇÏ´Â °æ¿ì¿¡´Â °ÅÀÇ 2¹è¿¡ °¡±î¿î 64KB °¡ ÇÒ´çµÇ¾î¾ß ÇÑ´Ù.

¸î°¡Áö ÀÛÀº malloc ±¸ÇöµéÀº 1¹ø ¹®Á¦Á¡À» ÇØ°áÇϱâ À§ÇØ ´õ Å« ºí·°À» ÇÒ´ç¹ÞÀº ÈÄ ³»ºÎÀûÀ¸·Î À̸¦ °ü¸®ÇÏ°Ô ÇÏ¿© 56 ¹ÙÀÌÆ®ÀÇ ¿À¹öÇìµå¸¦ ÁÙÀ̵µ·Ï ÇÏ¿´´Ù.

Ä¿³Î ¸Þ¸ð¸® ÇÒ´çÀÚ´Â ÃÖ´ë ÇÒ´ç Å©±â¸¦ ÃæºÐÈ÷ ´ÃÀÏ ¼ö ÀÖµµ·Ï ¼öÁ¤µÇ¾ú´Ù. ¸î¸î °æ¿ì¿¡¼­ ÀÌ°ÍÀº Ä¿³Î ¼³Á¤ ¿É¼ÇÀ» Á¶Á¤ÇÏ´Â °Í¸¸À¸·Î °¡´ÉÇÏ´Ù. ÀÌ°ÍÀº ´õ Å« ¸Þ¸ð¸® ÇÒ´çÀ» °¡´ÉÇÏ°Ô ÇϹǷΠū ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

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 ¿¡¼­ [http]°øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â µ¥ µå´Â ¸Å¿ì Å« ¿À¹öÇìµå¸¦ °¨¼öÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

uClibc ´Â ´ÙÀ½°ú °°Àº ¸î°¡Áö ¼±ÅþÈÀ» Á¦°øÇÑ´Ù:
malloc NOMMU ¿¡¼­ Áö¿øÇÏÁö ¾Ê´Â mmap ÀÇ ±â´ÉÀ» »ç¿ëÇϱâ´Â ÇÏÁö¸¸ NOMMU ȯ°æÀ» Áö¿øÇÏ´Â °Íó·³ º¸ÀÌ´Â? µ¢¾î¸® (hunk) ´ÜÀ§ÀÇ ÇÒ´çÀÚ. Çö ½ÃÁ¡¿¡¼­ ÀÌ ÇÒ´çÀÚ´Â NOMMU ½Ã½ºÅÛ¿¡¼­ µ¿ÀÛÇÏÁö ¾Ê´Â °Í °°´Ù. ÀÌ ¹®Á¦Á¡À» ¼öÁ¤ÇÏ´Â °ÍÀº »ó´ëÀûÀ¸·Î ½¬¿ï °ÍÀÌ´Ù. ¸¸¾à ¹®Á¦Á¡ÀÌ ¼öÁ¤µÈ´Ù¸é ÀÌ ÇÒ´çÀÚ´Â ¸î°¡Áö ÀáÀçÀûÀÎ ÀåÁ¡À» °¡Áø´Ù.
malloc-930716 ÀÌ ÇÒ´çÀÚ´Â ¿ÀÁ÷ MMU ¸¦ °¡Áø ½Ã½ºÅÛ¿¡¼­¸¸ µ¿ÀÛÇÑ´Ù. ÀÌ ÇÒ´çÀÚ´Â sbrk/brk ¿¡ ±â¹ÝÇÏ¿© µ¿ÀÛÇÑ´Ù. ºñ·Ï ÀÌ ÇÔ¼öµéÀÌ uClinux ½Ã½ºÅÛ¿¡¼­ ÀÛÀº ¾çÀÇ ¸Þ¸ð¸®¸¦ ¹ÝȯÇÏ°ÚÁö¸¸ ±×°ÍÀº ¸Þ¸ð¸® ÇÒ´çÀÚ°¡ »ç¿ëÇϱâ À§ÇÑ ¸Þ¸ð¸® Ç®·Î´Â Àǹ̰¡ ¾ø´Ù.
malloc-simple °¡Àå ´Ü¼øÇÑ ÇÒ´çÀÚ·Î MMU ¿Í NOMMU ½Ã½ºÅÛ¿¡¼­ ¸ðµÎ µ¿ÀÛÇÑ´Ù.


ÀϹÝÀûÀ¸·Î ´õ º¹ÀâÇÑ 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 Mphilwil@earthlink.net ¿¡°Ô °¨»çÇÑ´Ù.

Âü°í¹®Çå (http://www.uclinux.org/pub/uClinux/dist ¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Â uClinux ¹èÆ÷ÆÇÀÇ ¼Ò½º)

Ä¿³Î ÇÒ´çÀÚ¿Í mmap ±¸Çö:
  • linux-2.4.x/mmnommu/slab.c
  • linux-2.4.x/mmnommu/page_alloc.c
  • linux-2.4.x/mmnommu/page_alloc2.c
  • linux-2.4.x/mmnommu/mmap.c
  • linux-2.0.x/mmnommu/kmalloc.c
  • linux-2.0.x/mmnommu/page_alloc.c
  • linux-2.0.x/mmnommu/kmalloc2.c
  • linux-2.0.x/mmnommu/page_alloc2.c
  • linux-2.0.x/mmnommu/mmap.c

uC-libc ÀÇ malloc ±¸Çö:
  • lib/libc/malloc/alloc.c
  • lib/libc/malloc-simple/alloc.c

uClibc ÀÇ malloc ±¸Çö:
  • uClibc/libc/stdlib/malloc
  • uClibc/libc/stdlib/malloc-930716
  • uClibc/libc/stdlib/malloc-simple





sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-10-25 21:05:47
Processing time 0.0075 sec