· 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



ID
Password
Join
With clothes the new are best, with friends the old are best.


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