ÀÌ FAQ´Â ÄÄÇ»ÅÍ ÇÁ·Î±×·¥À» °³¹ßÇØ º» °æÇèÀÌ ÀÖ´Â »ç¶÷À» ´ë»óÀ¸·Î ÀÓº£µðµå ȯ°æ¿¡ ´ëÇØ °¡Áö°Ô µÇ´Â ±Ã±ÝÁõÀ» Ç®¾îÁÖ±â À§ÇØ ÀÛ¼ºµÇ¾ú½À´Ï´Ù. ¾î¶² ƯÁ¤ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÌÁö ¾Ê°í ÀϹÝÀûÀÎ ÀÓº£µðµå ȯ°æÀ» ´ë»óÀ¸·Î Çß½À´Ï´Ù. ÇÊÀÚ´Â ¾ËƼij½ºÆ®(Alticast)¿¡ ÀçÁ÷ÇßÀ» ´ç½Ã Sun Personal Java, Sun CVM°ú °°Àº ÀÚ¹Ù°¡»ó¸Ó½Å(Java Virtual Machine)À» ¿©·¯ Settop Box¿¡ À̽Ä(Porting)ÇÏ´Â ÀÛ¾÷À» ÇÑ °æÇèÀÌ ÀÖÀ¸¸ç (Skylife Settop Box ÇöÀç žÀçµÇ¾î ÆǸÅÁß) ÇöÀç´Â Æ÷Ç×°ø°ú´ëÇб³ ÄÄÇ»ÅÍ°øÇаú 4Çг⿡ ÀçÇÐÁßÀÔ´Ï´Ù. ------------------------------------------------------------------------------ Taeho Oh ( ohhara@postech.edu, ohhara@plus.or.kr ) http://ohhara.sarang.net Postech ( Pohang University of Science and Technology ) http://www.postech.edu PLUS ( Postech Laboratory for Unix Security ) http://www.plus.or.kr ------------------------------------------------------------------------------ Q. ÀÓº£µðµå ȯ°æÀ» Áö±Ý±îÁö Á¢Çغ» ÀûÀÌ ¾ø¾î¼­ ¾î¶² ȯ°æÀÎÁöµµ ÀüÇô °¨ÀÌ ÀâÈ÷Áö ¾Ê½À´Ï´Ù. ¾î¶² °ÍÀ̶ó°í »ý°¢ÇÏ¸é µÇ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. A. ÀÓº£µðµå ȯ°æÀº ¾ÆÁÖ °£´ÜÇÏ°Ô ¼³¸íÇÏÀÚ¸é ¾ÆÁÖ ¿­¾ÇÇÑ È¯°æÀ» °¡Áø PC¶ó°í »ó»óÀ» ÇÏ½Ã¸é µË´Ï´Ù. Å°º¸µå, ¸¶¿ì½º, ¸ð´ÏÅÍ, Çϵåµð½ºÅ©, ½Ãµð·Òµå¶óÀ̺갡 ¾ø°í ¸Å¿ì ÀûÀº ¾çÀÇ ·¥(RAM)ÀÌ ÀåÂøµÇ¾î ÀÖ´Â PC¶ó°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. ¿äÁòÀº ÀÓº£µðµå ȯ°æÀÌ °í±ÞÈ­°¡ µÇ¸é¼­ ÀÌ·± °æ°èµµ ¸ðÈ£ÇØÁö°í ÀÖ´Â Ãß¼¼ÀÔ´Ï´Ù. ÀÓº£µðµå ȯ°æ¿¡ Çϵåµð½ºÅ©°¡ ÀåÂøµÇ´Â °æ¿ìµµ »ý°Ü³ª°í ÀÖÀ¸¸ç Å°º¸µåµµ ÀåÂøµÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. Q. ÀÓº£µðµå ¿î¿µÃ¼Á¦´Â ¾î¶² Ư¼ºÀ» °¡Áö°í PC¿ë ¿î¿µÃ¼Á¦¿Í ¾î¶² Á¡¿¡¼­ Â÷ÀÌ°¡ ÀÖ½À´Ï±î? A. ÀÓº£µðµå ¿î¿µÃ¼Á¦´Â ¿ì¸®°¡ PC¿¡¼­ »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦¿¡¼­ ²À ÇÊ¿äÇÑ ±â´É¸¸ Áö¿øÀ» Çϸç ANSI C LibraryÀÇ ÀϺεµ ÀÓº£µðµå ¿î¿µÃ¼Á¦ÀÇ ÀϺηΠÆ÷ÇÔ½ÃÅ°±âµµ ÇÕ´Ï´Ù. ±×¸®°í ÀüÅëÀûÀ¸·Î ÀÓº£µðµå ¿î¿µÃ¼Á¦´Â ½Ç½Ã°£¼ºÀ» »ó´çÈ÷ Áß¿ä½ÃÇÕ´Ï´Ù. ¾î¶² ½ÅÈ£¸¦ ±â´Ù¸®´Ù°¡ ¸îÃÊ°£ ½ÅÈ£°¡ ¿ÀÁö ¾ÊÀ¸¸é ´Ù¸¥ ÇൿÀ» Çϵµ·Ï ¸¸µé°í ½ÍÀ» ¶§ PC¿ë ¿î¿µÃ¼Á¦¿¡¼­´Â ½±Áö ¾ÊÀº °æ¿ì°¡ ¸¹ÀÌ ÀÖ½À´Ï´Ù. PC¿¡¼­´Â ¸îÃÊ°£ ½ÅÈ£¸¦ ±â´Ù¸®´Ù°¡ ½ÅÈ£°¡ ¿ÀÁö ¾ÊÀ» ¶§ ´Ù¸¥ ÇൿÀ» ÇÏ·Á°í Çϸé schedulerÀÇ »óȲ¿¡ µû¶ó ¾à°£ÀÇ Áö¿¬ÀÌ ¹ß»ýÇÏ´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÓº£µðµå ȯ°æ¿¡¼­´Â ÀÌ·± »óȲÀ» ÀϹÝÀûÀ¸·Î ¾ö°ÝÇÏ°Ô Ã³¸®ÇÕ´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§´Â ¾î¶² ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇմϱî? A. ÀϹÝÀûÀ¸·Î´Â C¾ð¾î¸¦ ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù. ¿äÁòÀº ȯ°æÀÌ °í±ÞÈ­°¡ µÇ¸é¼­ C++À̳ª ÀÚ¹Ù(Java)¸¦ »ç¿ëÇÏ´Â °æ¿ìµµ ÀÖÁö¸¸ C¸¦ °¡Àå ¸¹ÀÌ »ç¿ëÇÑ´Ù°í »ý°¢ÇÏ¸é µË´Ï´Ù. ÀÓº£µðµå ȯ°æÀº Ư¼º»ó ÀÏ¹Ý PC¿¡ ºñÇØ CPU°¡ ´À¸®°í ·¥ÀÌ ÀûÀº °æÇâÀÌ ÀÖ½À´Ï´Ù. ÀÌ·± ȯ°æ¿¡¼­´Â ÇÁ·Î±×·¥ÀÇ ¼Óµµ¿Í Å©±â¸é¿¡¼­ À¯¸®ÇÑ C¾ð¾î°¡ °¡Àå ¸¹ÀÌ »ç¿ëµË´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­´Â ¾î¶² ¿î¿µÃ¼Á¦(OS)¸¦ »ç¿ëÇմϱî? A. ¾ÆÁÖ ¿©·¯°¡ÁöÀÇ ¿î¿µÃ¼Á¦¸¦ »ç¿ëÇÕ´Ï´Ù. ¾÷°è¿¡ µû¶ó ÁÖ·Î ¸¹ÀÌ »ç¿ëµÇ´Â ¿î¿µÃ¼Á¦°¡ ÀÖÀ» ¼öµµ ÀÖ½À´Ï´Ù. ÇÊÀÚ°¡ »ç¿ëÇØ º» ¿î¿µÃ¼Á¦´Â pSOS, VxWorks, Windows CE, Linux, NucleusµîÀÌ ÀÖÀ¸¸ç ½ÇÁ¦ ã¾Æº¸¸é ÈξÀ ¸¹Àº ÀÓº£µðµå¿ë ¿î¿µÃ¼Á¦¸¦ Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­´Â ¾î¶² CPU¸¦ »ç¿ëÇմϱî? A. PC¿¡¼­´Â intel°è¿­ CPU¸¦ ¸¹ÀÌ »ç¿ëÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ¿¡³ÊÁö ¼Ò¸ð¸¦ ÃÖ¼ÒÈ­ÇØ¾ß µÇ´Â ÀÓº£µðµå ȯ°æ¿¡¼­´Â »ç¿ëÀÌ °ÅÀÇ ºÒ°¡´ÉÇÕ´Ï´Ù. ÇÊÀÚ°¡ Á¢Çغ» ÀÓº£µðµå ȯ°æ¿¡¼­ »ç¿ëµÇ´Â CPU´Â ARM, MIPS, PPC, MINI-SPARCµîÀÌ ÀÖÀ¸¸ç ½ÇÁ¦ ã¾Æº¸¸é ÈξÀ ¸¹Àº ÀÓº£µðµå¿ë CPU¸¦ Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­´Â ¾î¶² ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇմϱî? A. Windows CE¸¦ »ç¿ëÇÒ ¶§´Â Visual C++¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í Linux¸¦ »ç¿ëÇÒ ¶§´Â gcc¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í gcc´Â ÇöÁ¸ÇÏ´Â À̽ļº(portable)ÀÌ °¡Àå ÁÁÀº ÄÄÆÄÀÏ·¯À̱⠶§¹®¿¡ Linux¸¦ »ç¿ëÇÏÁö ¾Ê´Â ȯ°æ¿¡¼­µµ »ç¿ëÀÌ °¡´ÉÇϵµ·Ï À̽ÄÀÌ µÇ¾î ÀÖ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ½ÇÁ¦ ¿©·¯ ÀÓº£µðµå ȯ°æ¿¡¼­ ÀÛ¾÷À» ÇØ º¸¸é gcc°¡ »ç¿ëÀÌ °¡´ÉÇÑ °æ¿ìº¸´Ù °¡´ÉÇÏÁö ¾Ê°í ƯÁ¤ ȸ»ç¿¡¼­ ³ª¿Â ƯÁ¤ ¹öÀüÀÇ ÄÄÆÄÀÏ·¯¸¦ ½á¾ß µÇ´Â °æ¿ì¸¦ Á¾Á¾ ¸¸³ª°Ô µË´Ï´Ù. ÇÊÀÚ°¡ »ç¿ëÇØ º» ÀÓº£µðµå ȯ°æ¿¡¼­ »ç¿ëµÇ´Â ÄÄÆÄÀÏ·¯´Â visual c++, gcc, armcc, dcc, st20ccµîÀÌ ÀÖÀ¸¸ç ½ÇÁ¦ ã¾Æº¸¸é ÈξÀ ¸¹Àº ÀÓº£µðµå¿ë ÄÄÆÄÀÏ·¯¸¦ Á¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­µµ ¾î¼Àºí¸®¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï±î? A. »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·Î PC¿¡¼­¸¸ °³¹ßÇغ» °³¹ßÀÚµéÀº CPU´Â intel CPU¸¸ÀÌ Á¸ÀçÇÏ°í ´Ù¸¥ CPU´Â °í·ÁÇÏÁöµµ ¾Ê´Â °æ¿ì°¡ °£È¤ ÀÖ½À´Ï´Ù. ¾î¼Àºí¸®¾î´Â CPU¿¡ µû¶ó ´Ù¸£¸ç ÀÓº£µðµå ȯ°æ¿¡¼­´Â ȯ°æ¿¡ µû¶ó ´Ù¸¥ CPU¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ¾î¼Àºí¸®¾î¸¦ ÀÓº£µðµå ȯ°æ¿¡¼­ »ç¿ëÇϱâ À§Çؼ­´Â ÀÓº£µðµå ȯ°æ¿¡ µû¶ó ´Ù¸¥ ¾î¼Àºí¸®¾î¸¦ »ç¿ëÇØ¾ß µË´Ï´Ù. ¶ÇÇÑ »óȲ¿¡ µû¶ó¼­´Â °°Àº CPU¶óµµ ¾î¼Àºí·¯°¡ ´Ù¸£¸é ´Ù¸¥ ¹®¹ýÀ» »ç¿ëÇؼ­ ¾î¼Àºí¸®¾î¸¦ ±â¼úÇØ Áà¾ß µÇ´Â °æ¿ìµµ ¹ß»ýÇÕ´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î ¾î¼Àºí¸®¾î´Â ²À ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¶ó¸é ÀÓº£µðµå ȯ°æ¿¡¼­´Â »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ C¾ð¾î Ã¥¿¡ ³ª¿À´Â "Hello World"¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇؼ­ µ¹·Áº¸°í ½Í½À´Ï´Ù. ¾î¶»°Ô ÇØ¾ß Çմϱî? A. ÀϹÝÀûÀÎ C¾ð¾î Ã¥À» º¸¸é ´ÙÀ½°ú °°Àº "Hello World"¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ ³ª¿Í ÀÖ½À´Ï´Ù. helloworld.c ---------------------------------------- #include int main() { printf("Hello World\n"); return 0; } ---------------------------------------- PCÀÇ ÀϹÝÀûÀÎ °³¹ßȯ°æ¿¡¼­´Â À§¿Í °°ÀÌ ÀÛ¼ºÇؼ­ gcc³ª visual c++°°Àº ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ ÄÄÆÄÀÏÀ» ÇÑ ÈÄ¿¡ ½ÇÇàÀ» ½ÃÅ°¸é ¾Æ¹«·± ¹«¸®¾øÀÌ ½ÇÇàÀÌ µË´Ï´Ù. ÇÏÁö¸¸ ÀÓº£µðµå ȯ°æ¿¡¼­´Â À§¿Í°°ÀÌ ´Ü¼øÇÑ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇؼ­ ½ÇÇàÇÏ´Â °Íµµ ¸¹Àº ¾î·Á¿òÀÌ µû¸¨´Ï´Ù. ÀÏ´Ü stdio.h°¡ ¿¥º£µðµå ȯ°æ¿¡¼­ Á¸ÀçÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ±×¸®°í ¿©±â¼­´Â ÇÁ·Î±×·¥ÀÇ ½ÃÀÛÀÌ main ÇÔ¼ö¿¡¼­ ½ÃÀÛÇÑ´Ù°í °¡Á¤ÇÏ¿´Áö¸¸ ÀÓº£µðµå ȯ°æ¿¡ µû¶ó¼­ main ÇÔ¼ö°¡ ½ÃÀÛÁöÁ¡ÀÌ ¾Æ´Ò ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ÀÌÀ¯·Î ÀÓº£µðµå ȯ°æ¿¡¼­ ÀÛ¾÷Çϱâ À§Çؼ­´Â ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ °ÍÀº ¸ðµÎ ºÐ¸®¸¦ ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ±×³É ÀÛ¾÷ÇÏ°íÀÚ ÇÏ´Â ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸µÇµµ·Ï ÀÛ¼ºÇÏ¸é µÇÁö ¾Ê´À³Ä°í »ý°¢ÇÒ ¼öµµ Àִµ¥ ±×·¸°Ô ÇÏ°Ô µÇ¸é °³¹ß°úÁ¤¿¡¼­ ¸¹Àº ¾î·Á¿ò¿¡ ºÎµúÈ÷°Ô µË´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÕ´Ï´Ù. helloworld.c ---------------------------------------- extern int em_printf(); int em_init() { return em_printf("Hello World\n"); } ---------------------------------------- embedded.c ---------------------------------------- extern int Print(char *str); extern int em_printf(); extern int em_init(); int root() { return em_init(); } int em_printf(char *str) { return Print(str); } ---------------------------------------- ÇÁ·Î±×·¥À» »ìÆ캸¸é helloworld.c´Â ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸µÇÁö ¾Êµµ·Ï ÀÛ¼ºÀÌ µÇ¾ú°í embedded.c´Â ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸µÇµµ·Ï ÀÛ¼ºÀÌ µÇ¾ú½À´Ï´Ù. embedded.c´Â °¢ ÀÓº£µðµå ȯ°æ¿¡ ¸Âµµ·Ï À̽Ä(porting)µÇ¾î¾ß ÇÕ´Ï´Ù. ¿¹Á¦¿¡¼­´Â ½ÃÀÛ ÇÔ¼ö°¡ rootÀÌ°í print¸¦ À§Çؼ­ Print¶ó´Â functionÀ» ½á¾ß µÇ´Â ȯ°æ¿¡¼­ ½ÇÇà½ÃŲ´Ù´Â °¡Á¤À» ÇÏ¿´½À´Ï´Ù. Áö¸é°ü°è»ó headerÆÄÀÏÀº »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù. Q. ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ÀϹÝÀûÀ¸·Î ¾î¶² °úÁ¤À» ÅëÇØ ÀÓº£µðµå ȯ°æ¿¡¼­ ÄÄÆÄÀÏµÇ°í ½ÇÇàµÇ°Ô µË´Ï±î? A. 1) PC¿¡¼­ Å©·Î½ºÄÄÆÄÀÏÀ̶ó´Â °úÁ¤À» ÅëÇØ ÇØ´ç ÀÓº£µðµå ȯ°æ¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Â ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. ÄÄÆÄÀÏÀ» ÇÏ°Ô µÇ¸é ÄÄÆÄÀÏÀ» ÇÑ È¯°æ¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Â ÆÄÀÏÀÌ »ý¼ºµÇÁö¸¸ Å©·Î½ºÄÄÆÄÀÏÀ» ÇÏ°Ô µÇ¸é ÄÄÆÄÀÏÀ» ÇÑ È¯°æ°ú ´Ù¸¥ ȯ°æ¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Â ÆÄÀÏÀ» »ý¼º½Ãų ¼ö ÀÖ½À´Ï´Ù. 2) ÀÌ ÆÄÀÏÀ» ÀÓº£µðµå ȯ°æÀ¸·Î Àü¼ÛÇÕ´Ï´Ù. Àü¼ÛÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ ¿©·¯°¡Áö°¡ ÀÖ½À´Ï´Ù. serial cableÀ» »ç¿ëÇؼ­ Àü¼ÛÇÒ ¼öµµ ÀÖÀ¸¸ç parallel cableÀ» »ç¿ëÇؼ­ Àü¼ÛÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ethernet cableÀ̳ª usb cableÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ÀÓº£µðµå ȯ°æ¿¡ µû¶ó °áÁ¤µÇ°Ô µË´Ï´Ù. ÀϹÝÀûÀ¸·Î serial cableÀ̳ª parallel cableÀ» ÀÌ¿ëÇÑ Àü¼ÛÀº ethernet cableÀ̳ª usb cableÀ» ÀÌ¿ëÇÑ Àü¼Ûº¸´Ù ¸Å¿ì ´À¸³´Ï´Ù. »óȲ¿¡ µû¶ó¼­´Â Çѹø Àü¼ÛÀ» Çϱâ À§ÇØ 1½Ã°£ ÀÌ»ó ±â´Ù·Á¾ß µË´Ï´Ù. 3) Àü¼ÛµÈ ÆÄÀÏÀ» ÀÓº£µðµå ȯ°æ¿¡ ÀúÀåÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î Flash Memory¿¡ ÀúÀåÀ» ÇÏÁö¸¸ °í±Þ ȯ°æ¿¡¼­´Â Çϵåµð½ºÅ©¿¡ ÀúÀåÀ» Çϱ⵵ ÇÕ´Ï´Ù. 4) ÀúÀåµÈ ÆÄÀÏÀ» ½ÇÇàÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÓº£µðµå ÀåÄ¡¸¦ reset(reboot)À» Çؼ­ ½ÇÇàÀ» ÇÕ´Ï´Ù. 5) ½ÇÇà°á°ú¸¦ È®ÀÎÇÕ´Ï´Ù. ½ÇÇà°á°ú´Â ÆÄÀÏÀ» Àü¼ÛÇÒ ¶§¿Í ¸¶Âù°¡Áö·Î serial, parallel, ethernet, usb cableµîÀ» »ç¿ëÇؼ­ °á°ú¸¦ È®ÀÎÇÕ´Ï´Ù. °æ¿ì¿¡ µû¶ó¼­´Â ÀÓº£µðµå ȯ°æ¿¡ ºÎÂøµÈ LCDÈ­¸éÀ» »ç¿ëÇϱ⵵ ÇÕ´Ï´Ù. Q. XYZ¶ó´Â ÀÓº£µðµå ȯ°æÀ» °¡Áö°í ÀÖÁö¸¸ °³¹ßÀ» À§ÇÑ °ü·Ã Á¤º¸°¡ ÀüÇô ¾ø½À´Ï´Ù. ¾î¶»°Ô °³¹ßÀ» ½ÃÀÛÇØ¾ß µË´Ï±î? A. ÀÏ´Ü ÀÓº£µðµå ȯ°æÀ»(!) °³¹ßÇÏ´Â °³¹ßÀÚ°¡ ¾Æ´Ï°í ÀÓº£µðµå ȯ°æ¿¡¼­(!) °³¹ßÇÏ´Â °³¹ßÀÚ¶ó¸é °ü·Ã Á¤º¸¸¦ °ü·Ã ¾÷ü¿¡ ¹®ÀǸ¦ ÇÏ´Â°Ô °¡Àå ÁÁ½À´Ï´Ù. ÀÓº£µðµå ȯ°æÀº »óȲ¿¡ µû¶ó ¸Å¿ì ´Ù¸£±â ¶§¹®¿¡ °ü·Ã ¾÷üÀÇ ÇùÁ¶°¡ ¾øÀÌ´Â °³¹ßÀÌ ½±Áö ¾Ê½À´Ï´Ù. ÀÏ´Ü °¡Àå ±âº»ÀûÀ¸·Î "Hello World"¸¦ Ãâ·ÂÇÏ´Â C ¼Ò½ºÆÄÀÏÀÌ ÀÖÀ» ¶§ ÀÌ°ÍÀ» ¾î¶»°Ô ÇØ¾ß ÄÄÆÄÀÏÀ» ÇÒ ¼ö°¡ ÀÖ°í ¾î¶»°Ô ÇØ¾ß Àü¼ÛÇÒ ¼ö ÀÖÀ¸¸ç ¾î¶»°Ô ÇØ¾ß ½ÇÇàÀ» ÇÒ ¼ö°¡ ÀÖ°í ¾î¶»°Ô ÇØ¾ß ½ÇÇà°á°ú¸¦ º¼ ¼ö ÀÖ´ÂÁö ±¸Ã¼ÀûÀÎ ¹æ¹ýÀ» ¾Ë·Á´Þ¶ó°í ¾÷ü¿¡ ¿äûÇÕ´Ï´Ù. Å×½ºÆ®¸¦ ÅëÇØ °ü·Ã Á¤º¸¸¦ È®ÀÎÇÑ ÈÄ¿¡´Â OS, CPU, Compiler, Deviceµî¿¡ ´ëÇÑ ¹®¼­¸¦ ¿äûÇÏ°í °ü·Ã ³»¿ëÀ» »ìÆ캻 ÈÄ¿¡ °³¹ßÀ» ½ÃÀÛÇÕ´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ °³¹ßÀ» ÇÏ°í Àִµ¥ Äڵ带 Çѹø °íÄ¡°í ÄÄÆÄÀÏÀ» ´Ù½Ã ÇÏ°í Àü¼ÛÇÏ´Â °úÁ¤ÀÇ ½Ã°£ÀÌ ³Ê¹« ±æ¾î¼­ °³¹ßÀÌ ¸Å¿ì Èûµì´Ï´Ù. ¾î¶»°Ô ÁÁÀº ¹æ¹ýÀÌ ¾ø½À´Ï±î? A. ÀÓº£µðµå ȯ°æ¿¡ ÇÁ·Î±×·¥À» Àü¼ÛÇÏ´Â ½Ã°£ÀÌ ÀϹÝÀûÀ¸·Î ¸Å¿ì ±é´Ï´Ù. ÀÌ·Î ÀÎÇØ °³¹ß ÀÏÁ¤¿¡ ÁöÀåÀ» ¹Þ´Â °æ¿ì°¡ ¸¹ÀÌ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ´ÜÃàÇϱâ À§Çؼ­ ÇØ´ç ÀÓº£µðµå ȯ°æ°ú °ÅÀÇ µ¿ÀÏÇÑ ¿¡¹Ä·¹ÀÌÅÍ(Emulator)¸¦ °¡Áö°í °³¹ßÀ» ÇÏ°í ¿¡¹Ä·¹ÀÌÅÍ¿¡¼­ ¾Æ¹«·± ¹®Á¦°¡ ¾øÀÌ ÀÛµ¿ÇÑ´Ù´Â È®½ÅÀÌ µé ¶§ ½ÇÁ¦ ÀÓº£µðµå ȯ°æ¿¡¼­ ÃÖÁ¾ Å×½ºÆ®¸¦ ÇÕ´Ï´Ù. ¿¡¹Ä·¹ÀÌÅ͸¦ °³¹ßÇϴµ¥µµ ½Ã°£ÀÌ ¸¸¸¸Ä¡ ¾Ê°Ô ¼Ò¸ðµÇ±âµµ ÇÏÁö¸¸ ¿¡¹Ä·¹ÀÌÅ͸¦ Á÷Á¢ °³¹ß¿¡ »ç¿ëÇÏ°Ô µÇ¸é À̶§ ¼Ò¸ðµÈ ½Ã°£Àº ÀüÇô ¾Æ±õ°Ô ´À²¸ÁöÁö ¾Ê½À´Ï´Ù. ÀÓº£µðµå ȯ°æÀÇ ¿¡¹Ä·¹ÀÌÅÍ´Â °æ¿ì¿¡ µû¶ó¼­´Â Á÷Á¢ ¸¸µé ÇÊ¿ä°¡ ¾øÀÌ ´Ù¸¥ °÷¿¡¼­ ¸¸µç °ÍÀ» ±¸ÇÒ ¼ö ÀÖ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î Sony Playstation¿ë °ÔÀÓÀ» °³¹ßÇÑ´Ù°í Çϸé ÀÏ´Ü Sony Playstation¿ë ¿¡¹Ä·¹ÀÌÅ͸¦ °¡Áö°í °³¹ßÀ» ÇÏ°í ÃÖÁ¾ Å×½ºÆ®´Ü°è¿¡¼­ ½ÇÁ¦ Sony Playstation¿¡¼­ Å×½ºÆ®¸¦ ÇÏ¸é °³¹ß½Ã°£À» ´ÜÃà½Ãų ¼ö ÀÖ½À´Ï´Ù. ¿¡¹Ä·¹ÀÌÅÍ´Â ½ÇÁ¦ ÀÓº£µðµå ȯ°æ°ú ºñ½ÁÇϱâ´Â ÇÏÁö¸¸ 100%µ¿ÀÏÇÏÁö´Â ¾Ê±â ¶§¹®¿¡ ¿¡¹Ä·¹ÀÌÅÍ¿¡¼­ ¹ß»ýÇÏÁö ¾Ê´ø ¹®Á¦°¡ ½ÇÁ¦ ÀÓº£µðµå ȯ°æ¿¡¼­ ¹ß»ýÇϱ⵵ ÇÕ´Ï´Ù. °³¹ßÀ» È¿À²ÀûÀ¸·Î Çϱâ À§ÇØ ¿¡¹Ä·¹ÀÌÅÍ¿Í ÀÓº£µðµå ȯ°æÀ» ÃÖ´ëÇÑ ºñ½ÁÇÏ°Ô ¸¸µé¾î ÁÖ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Q. Flash Memory´Â ÀÏ¹Ý DRAM°ú ºñ±³ÇØ ºÃÀ» ¶§ ¾î¶² Â÷ÀÌ°¡ ÀÖ½À´Ï±î? A. ÀÓº£µðµå ȯ°æ¿¡¼­ ÀÛ¾÷À» ÇØ º¸¸é Flash Memory¸¦ ÀÚÁÖ Á¢ÇÏ°Ô µË´Ï´Ù. ¹°·Ð Memory´Â Flash Memory¿Í DRAM¸¸ ÀÖ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ÀÌ µÎ°¡Áö¸¦ °¡Àå ÀÚÁÖ Á¢ÇÏ°Ô µË´Ï´Ù. Flash Memory´Â DRAMº¸´Ù °¡°ÝÀÌ ºñ½Î°í Àб⠼ӵµ´Â DRAM¿¡ ºñÇØ ¾à°£ ´À¸®°í ¾²±â ¼Óµµ´Â DRAM¿¡ ºñÇØ ¸Å¿ì ´À¸®¸ç Àü¿øÀÌ ²¨Á®µµ MemoryÀÇ ³»¿ëÀÌ Áö¿öÁöÁö ¾Ê½À´Ï´Ù. ±×¸®°í ¾²±â¸¦ ÇÒ ¶§´Â DRAMó·³ byte´ÜÀ§·Î´Â ºÒ°¡´ÉÇÏ°í sector´ÜÀ§·Î ¸¸ °¡´ÉÇÕ´Ï´Ù. ÇÑ sectorÀÇ Å©±â´Â Flash Memory¿¡ µû¶ó ´Ù¸£¸ç º¸Åë 64¿¡¼­ 512byteÁ¤µµ µË´Ï´Ù. Flash Memory´Â ÇÑÂÊ ¿µ¿ªÀ» °è¼Ó ¹Ýº¹ÀûÀ¸·Î ¾²±â¸¦ ¹Ýº¹ÇÏ±â µÇ¸é ¼ö¸íÀ» ´ÜÃà½Ãų ¼ö ÀÖ½À´Ï´Ù. ±×·¡¼­ ¾²±â¸¦ ÇÒ ¶§´Â ¿©·¯ ¿µ¿ªÀ» ¹ø°¥¾Æ°¡¸é¼­ ¾²±â¸¦ ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¿äÁò ÆǸŵǴ PC¿ë Çϵå¿þ¾îµéÀ̳ª MP3 Player¸¦ »ìÆ캸¸é Æß¿þ¾î ¾÷±×·¹À̵å±â´ÉÀ» Áö¿øÇÕ´Ï´Ù. Æß¿þ¾î´Â Flash Memory¿¡ ÀúÀåÀÌ µÇ¸ç Æß¿þ¾î ¾÷±×·¹À̵å´Â ÀÌ Flash Memory¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÇÁ·Î±×·¥À» ¾÷±×·¹À̵åÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹Àü¿¡ ROMÀ¸·Î µÇ¾î À־ ĨÀ» ¹Ù²ÙÁö ¾Ê´Â À̻󿡴 º¯°æÀÌ ºÒ°¡´ÉÇß´ø ºÎºÐÀ» ¿äÁòÀº Flash Memory·Î ´ëüÇؼ­ ³ªÁß¿¡ °£´ÜÈ÷ ¾÷±×·¹À̵尡 °¡´ÉÇϵµ·Ï ÇÏ´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. Q. ÇÁ·Î±×·¥ ÄÚµå´Â Flash Memory¿¡ ÀÖ´Â »óÅ¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â°Ô ÁÁ½À´Ï±î? ¾Æ´Ï¸é DRAM¿¡ ÀÖ´Â »óÅ¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â°Ô ÁÁ½À´Ï±î? A. µÑ ´Ù Àå´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù. ÇØ´ç ÀÓº£µðµå ȯ°æ¿¡ ÀûÇÕÇÑ °áÁ¤À» ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. DRAMÀÌ ºÎÁ·ÇÏ°í ¼º´ÉÀÌ ¸Å¿ì ºü¸£Áö ¾Ê¾Æµµ µÇ°í óÀ½¿¡ ½ÃÀÛÀ» »¡¸® ÇØ¾ß µÇ´Â °æ¿ì¶ó¸é Flash Memory¿¡ ÇÁ·Î±×·¥ Äڵ带 µÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. DRAM¿¡ ÇÁ·Î±×·¥ Äڵ带 µÎ´Â °æ¿ì¶ó¸é ÇÁ·Î±×·¥À» óÀ½ ½ÃÀÛÇÒ ¶§ Flash Memory¿¡¼­ DRAMÀ¸·Î ÇÁ·Î±×·¥ Äڵ带 º¹»çÇÏ°Ô µÇ´Âµ¥ À̶§ ½Ã°£ÀÌ ´Ù¼Ò °É¸± ¼ö°¡ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ Flash Memory¿¡ ÇÁ·Î±×·¥À» ÀúÀåÇØ µÑ ¶§ ¾ÐÃàÇؼ­ ÀúÀåÀ» ÇÒ ¼ö°¡ Àֱ⠶§¹®¿¡ Flash Memory¸¦ ¾Æ³¥ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×¸®°í DRAMÀÌ Flash Memoryº¸´Ù Àбâ¼Óµµ°¡ ¾à°£ ºü¸£±â ¶§¹®¿¡ ÇÁ·Î±×·¥ÀÇ ÀüüÀûÀÎ ½ÇÇà¼Óµµ Çâ»ó¿¡µµ µµ¿òÀ» ÁÝ´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ µð¹ö±ë(debugging)À» ¾î¶»°Ô Çմϱî? A. ÀÓº£µðµå ȯ°æ¿¡ µû¶ó Â÷ÀÌ°¡ ÀÖÁö¸¸ ÀÏ´Ü ÀÓº£µðµå ȯ°æ¿¡¼­ µð¹ö±ëÀº °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù°í »ý°¢ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. gdb¿Í °°Àº µð¹ö°Å¸¦ JTAGÀ» ÀÌ¿ëÇؼ­ ºÙ¿©¼­ »ç¿ëÇÒ ¼ö Àִ ȯ°æÀ» Á¢ÇÏ°Ô µÇ´Â °æ¿ìµµ Àִµ¥ ÀÌ°ÍÀº °ÅÀÇ ÃÖ»óÀÇ µð¹ö±ë ȯ°æÀÔ´Ï´Ù. ½ÇÁ¦·Î´Â µð¹ö°Å¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ°í console io¸¸ °¡´ÉÇÑ »óÅÂÀÎ °æ¿ì°¡ ´ëºÎºÐÀÌ¸ç ´õ ¿­¾ÇÇÑ °æ¿ì¿¡´Â console ioµµ ºÒ°¡´ÉÇÕ´Ï´Ù. console io°¡ °¡´ÉÇÑ È¯°æ¿¡¼­ µð¹ö±ëÀ» ÇÒ ¶§´Â ÇÁ·Î±×·¥ Áß°£Áß°£¿¡ Áß¿äÇÑ ÁöÁ¡¿¡ console·Î print¸¦ ÇØ Á༭ ÇöÀç »óȲÀ» È¿°úÀûÀ¸·Î °³¹ßÀÚ¿¡°Ô ¾Ë·ÁÁÖ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÓº£µðµå ȯ°æ¿¡¼­ Áö¿øÇÏ´Â console io´Â ¼Óµµ°¡ ´À¸®±â ¶§¹®¿¡ °úµµÇÏ°Ô print¸¦ ÇÏ°Ô µÇ¸é Áß°£¿¡ ³»¿ëÀÌ »ç¶óÁö°Å³ª ¸®ºÎÆÃÀÌ µÇ±âµµ ÇÕ´Ï´Ù. °³¹ßÇÏ´Â ÇÁ·Î±×·¥ ³»¿¡¼­ µð¹ö±ëÀ» ÇÏ°íÀÚ ÇÏ´Â ºÎºÐ°ú °ü·ÃµÇ´Â °Í¸¸ print¸¦ ÇÒ ¼ö ÀÖµµ·Ï print¸¦ Àß Á¤¸®ÇØ ³õ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. °æ¿ì¿¡ µû¶ó¼­´Â print°¡ Áß°£¿¡ bufferingÀ» ÇÏ´Â °æ¿ìµµ Àִµ¥ ÀÌ·± °æ¿ì¿¡´Â crash°¡ ¹ß»ýÇßÀ» ¶§ buffer¸¦ flushÇÏÁö ¾Ê°í crash°¡ ¹ß»ýÇϱ⵵ ÇÕ´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â crashÁ÷ÀüÀÇ print³»¿ëÀ» º¼ ¼ö°¡ ¾ø±â ¶§¹®¿¡ µð¹ö±ë¿¡ ¸Å¿ì ¾î·Á¿òÀ» °Þ°Ô µË´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ °³¹ßÇÑ ÇÁ·Î±×·¥ÀÌ ÀÛµ¿µµÁß¿¡ crash°¡ ¹ß»ýÇß½À´Ï´Ù. crash°¡ ¹ß»ýÇÑ ÁöÁ¡À» print¸¦ ÅëÇØ Ã£±â°¡ ¸Å¿ì Èûµì´Ï´Ù. ÁÁÀº ¹æ¹ýÀÌ ¾ø½À´Ï±î? A. ¸¸¾à¿¡ ÀÓº£µðµå ȯ°æ¿¡¼­ µð¹ö°Å°¡ »ç¿ëÀÌ °¡´ÉÇÏ´Ù¸é µð¹ö°Å¸¦ »ç¿ëÇÏ¸é ¸Å¿ì ½±°Ô crash°¡ ¹ß»ýÇÑ ÁöÁ¡À» ãÀ» ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀÌ ºÒ°¡´ÉÇÑ °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÓº£µðµå ȯ°æÀº crash°¡ ¹ß»ýÇßÀ» ¶§ CPU¾È¿¡ ÀÖ´Â ¸ðµç registerÀÇ °ªÀ» printÇÕ´Ï´Ù. ¿©±â¼­ Program Counter(Instruction Pointer¶ó°íµµ ºÒ¸²)ÀÇ ³»¿ëÀ» º¸°í ÇØ´ç ÁÖ¼Ò°¡ ÇÁ·Î±×·¥ ÄÚµåÀÇ ¾î´À function¿¡ ¼ÓÇÑ °ÍÀÎÁö »ìÆ캸¸é crash°¡ ¹ß»ýÇÑ °÷ÀÇ À§Ä¡¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù. °æ¿ì¿¡ µû¶ó¼­´Â call stackÀ» ¾òÁö ¸øÇϸé crash°¡ ¹ß»ýÇÑ °÷ÀÇ À§Ä¡¸¦ ¾Ë¾Æµµ º°·Î µµ¿òÀÌ µÇÁö ¾Ê´Â °æ¿ìµµ ¹ß»ýÇϴµ¥ À̶§´Â crash°¡ ¹ß»ýÇßÀ» ¶§ ½ÇÇàµÇ´Â exception handler¸¦ ã¾Æ¼­ exceptionÀÌ ¹ß»ýÇÏ´Â ¼ø°£¿¡ stack¿µ¿ªÀ» Åë°·Î dump¸¦ Çϵµ·Ï ÇÑ ´ÙÀ½¿¡ dumpµÈ ³»¿ë¿¡¼­ return addressµéÀÌ °¢°¢ ÇÁ·Î±×·¥ÀÇ ¾î´À function¿¡ ¼ÓÇÑ °ÍÀÎÁö »ìÆì º¸¸é call stackµµ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. Q. ÀüÇô ´Ù¸¥ ¿©·¯ ÀÓº£µðµå ȯ°æ¿¡ ÇÁ·Î±×·¥ Çϳª¸¦ À̽ĽÃÄѼ­ ¸ðµÎ µ¿ÀÏÇÏ°Ô ÀÛµ¿Çϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. ¾î¶»°Ô ÀÛ¾÷ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï±î? A. ÀÓº£µðµå ȯ°æ¿¡¼­ ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ(dependent) ºÎºÐ°ú ºñÀÇÁ¸ÀûÀÎ(independent) ºÎºÐÀ¸·Î ³ª´²¼­ °³¹ßÇÏ°í ´Ù¸¥ °÷¿¡ À̽ÄÀ» ½Ãų ¶§ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ ºÎºÐ¸¸ À̽ÄÀ» ½ÃÄÑÁÝ´Ï´Ù. »óȲ¿¡ µû¶ó¼­´Â ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ ºÎºÐÀ» ¾ÆÁÖ ÀÚ¼¼ÇÏ°Ô ¹®¼­È­¸¦ Çؼ­ ´Ù¸¥ ¾÷ü¿¡ ¿ÜÁÖ¸¦ ÁÖ°í ÀÚ½ÅÀº ÀÓº£µðµå ȯ°æ¿¡ ºñÀÇÁ¸ÀûÀÎ ºÎºÐ¸¸ °³¹ßÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. À̶§ÀÇ ÀåÁ¡Àº ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ ºÎºÐ¸¸ µû·Î ÁßÁ¡ÀûÀ¸·Î Å×½ºÆ®¸¦ ÇÏ´Â °ÍÀÌ ¼Õ½±°Ô °¡´ÉÇϱ⠶§¹®¿¡ À̽ÄÀÌ Á¦´ë·Î µÇ¾ú´ÂÁö Å×½ºÆ®¸¦ Çϱâ À§Çؼ­ Àüü ÇÁ·Î±×·¥ÀÌ ¹Ýµå½Ã ÇÊ¿äÇÏÁö´Â ¾Ê´Ù´Â Á¡ÀÔ´Ï´Ù. ¶ÇÇÑ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÎ ºÎºÐÀ» PC¿¡ À̽ĽÃÄÑ ÁÖ¸é PC¿¡¼­ ÀÓº£µðµå ȯ°æ¿¡ ºñÀÇÁ¸ÀûÀÎ ºÎºÐÀ» ¸Å¿ì ¿øÈ°ÇÏ°Ô °³¹ßÇÏ°í Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç ¿©·¯°¡Áö ÀáÀçÀûÀÎ ¹ö±×µéÀ» °¢Á¾ »ó¿ë µð¹ö°Å¸¦ »ç¿ëÇؼ­ °íÄ¥ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº À§¿¡¼­ ¾ð±ÞµÈ ¿¡¹Ä·¹ÀÌÅͺ¸´Ù´Â ¾à°£ ¸øÇÏÁö¸¸ °³¹ß½Ã¿¡ »ó´çÈ÷ ¿¡¹Ä·¹ÀÌÅÍ¿¡ °¡±î¿î È¿°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù. À̶§´Â OS¿Í CPU´Â ¿¡¹Ä·¹ÀÌÆ®(emulate)µÇÁö ¾Ê±â ¶§¹®¿¡ OS¿Í CPU¿¡ ÀÇÁ¸ÀûÀ¸·Î ÀÛ¼ºµÈ ºÎºÐÀÌ ÇÁ·Î±×·¥ÀÇ ºñÀÇÁ¸ÀûÀÎ ºÎºÐ¿¡ Æ÷ÇÔ¿¡ µÇ¾î ÀÖ´Ù¸é PC¿¡¼­´Â Àß ÀÛµ¿Çϴµ¥ ½ÇÁ¦ ÀÓº£µðµå ȯ°æ¿¡¼­´Â Àß ÀÛµ¿ÇÏÁö ¾Ê´Â ÀÏÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î ÀÌ Á¤µµ ¼öÁØÀÇ °Íµµ ¿¡¹Ä·¹ÀÌÅͶó°í ºÎ¸¨´Ï´Ù. Q. C·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ CPUÀÇÁ¸ÀûÀÎ °ÍÀº ¾î¶² °ÍÀÌ ÀÖ½À´Ï±î? A. PC¿¡¼­ intel°è¿­ CPU¸¸ »ç¿ëÇÏ´Ù°¡ ´Ù¸¥ CPU¸¦ »ç¿ëÇÏ°Ô µÉ ¶§ ÈçÈ÷ °Þ´Â ¹®Á¦´Â endian¹®Á¦¿Í align¹®Á¦ÀÔ´Ï´Ù. endian.c ---------------------------------------- void endian_test(void) { int a = 0x01020304; char *ch = (char *)&a; int i; for (i = 0; i < 4; i++) { printf("%02x ", ch[i]); } } ---------------------------------------- ÀÌ¿Í °°ÀÌ ÇÁ·Î±×·¥À» ÀÛ¼ºÇؼ­ ½ÇÇàÇØ º¸¸é big endian cpuÀÇ °æ¿ì¿¡´Â 01 02 03 04 °¡ Ãâ·ÂµÇ°í little endian cpuÀÇ °æ¿ì¿¡´Â 04 03 02 01ÀÌ Ãâ·ÂµË´Ï´Ù. ±×·±µ¥ ÀÌ°ÍÀº ÀÌ·¸°Ô 2°¡Áö °æ¿ì¸¸ »ý°¢ÇÏ¸é µÉ Á¤µµ·Î ´Ü¼øÇÑ ¹®Á¦°¡ ¾Æ´Õ´Ï´Ù. ÇÊÀÚ°¡ Á¢ÇÑ ÀÓº£µðµå ȯ°æ Áß¿¡¼­´Â 0x0102030405060708À» ÀúÀåÇßÀ» ¶§ 04 03 02 01 08 07 06 05¿Í °°ÀÌ ´Ù¼Ò Ȳ´çÇÏ°Ô ÀúÀåµÇ´Â °æ¿ìµµ ÀÖ¾ú½À´Ï´Ù. ±×¸®°í int¿Í floatÀÇ endianÀÌ µ¿ÀÏÇÏÁö ¾ÊÀº °æ¿ìµµ º» ÀûÀÌ ÀÖ½À´Ï´Ù. align.c ---------------------------------------- void align_test(void) { char *a = { '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', \x07', '\x08' }; int *i = (int *)(a + 1); printf("%08x\n", *i); printf("%08x\n", *i); } ---------------------------------------- ÀÌ¿Í °°ÀÌ ÇÁ·Î±×·¥À» ÀÛ¼ºÇؼ­ ½ÇÇàÇØ º¸¸é cpu°¡ big endianÀ̶ó°í °¡Á¤ÇßÀ» ¶§ 02030405·Î Ãâ·ÂµÇ´Â °æ¿ìµµ ÀÖ°í 01020304·Î Ãâ·ÂµÇ´Â °æ¿ìµµ ÀÖÀ¸¸ç °æ¿ì¿¡ µû¶ó¼­´Â ±×³É crash°¡ ¹ß»ýÇÕ´Ï´Ù. ƯÀÌÇÏ°Ô Ã³À½ print¿¡¼­´Â Ãâ·ÂÀÌ µÇ°í ±× ´ÙÀ½ print¸¦ ÇÒ ¶§ crash°¡ ¹ß»ýÇϱ⵵ ÇÕ´Ï´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥À» align¿¡ ÀÇÁ¸ÀûÀ¸·Î ÀÛ¼ºÇؼ­ ¹ß»ýÇÑ ¹®Á¦ÀÔ´Ï´Ù. ±×·¡¼­ ¸Þ¸ð¸®¿¡ ÀÖ´Â °ªÀ» Àаųª ¾µ ¶§´Â align¿¡ ¸ÂÃç¼­ ÇØ ÁÖ´Â °ÍÀÌ Áß¿äÇѵ¥ ±âº»ÀûÀ¸·Î alignÀ» ¸ÂÃá´Ù´Â °ÍÀº ¼±¾ðÇÑ º¯¼öÀÇ Å©±âÀÇ ¹è¼ö¸¦ ÁÖ¼Ò·Î »ç¿ëÇؼ­ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. À§ÀÇ °æ¿ì¿¡¼­ ÇѹøÀº Àß Ãâ·ÂÀÌ µÇ°í ±× ´ÙÀ½¿¡ crash°¡ ¹ß»ýÇÏ´Â °æ¿ì´Â ¸Þ¸ð¸®¿¡¼­´Â alignÀ» ¸ÂÃßÁö ¾Ê¾Æµµ ±¦ÂúÁö¸¸ ij½¬(cache)¿¡¼­´Â alignÀ» ¸ÂÃßÁö ¾ÊÀ¸¸é crash°¡ ¹ß»ýÇÏ´Â °æ¿ìÀÔ´Ï´Ù. »óȲ¿¡ µû¶ó¼­´Â int¿Í float°¡ Çϳª´Â alignÀ» ¸ÂÃßÁö ¾Ê¾Æµµ ±¦Âú°í ³ª¸ÓÁö Çϳª´Â alignÀ» ¸ÂÃç¾ß µÇ´Â °æ¿ìµµ ¹ß»ýÇϸç 64bit µ¥ÀÌÅÍÇüÀÇ °æ¿ì¿¡ 32bit alignÀ» Çصµ ±¦ÂúÀº °æ¿ìµµ Á¸ÀçÇÕ´Ï´Ù. À§¿Í °°Àº °æ¿ì¸¦ °í·ÁÇؼ­ endian°ú align¿¡ ÀÇÁ¸ÀûÀÎ ÇÁ·Î±×·¥Àº ÀÛ¼ºÇÏÁö ¾Ê´Â°Ô ÁÁ½À´Ï´Ù. Q. C·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ÄÄÆÄÀÏ·¯ ÀÇÁ¸ÀûÀÎ °ÍÀº ¾î¶² °ÍÀÌ ÀÖ½À´Ï±î? A. ¿©·¯ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇØ º¸¸é ÄÄÆÄÀÏ·¯¸¶´Ù ANSI C Ç¥ÁØÀÌ ¾Æ´Ñ Ư¼öÇÑ È®ÀåÀ» Áö¿øÇÏ´Â °æ¿ì°¡ Á¾Á¾ ÀÖ½À´Ï´Ù. ±×·¡¼­ ANSI C Ç¥ÁØÀÌ ¾Æ´Ñ °ÍÀ» ANSI C Ç¥ÁØÀÎ °ÍÀ¸·Î Âø°¢ÇÏ°í ¾²´Ù°¡ ³ªÁß¿¡ »ó´çÈ÷ ¾ö°ÝÇÑ ÄÄÆÄÀÏ·¯¿¡¼­ ÀÛ¾÷À» ÇÏ°Ô µÇ¸é ´çȲÇÏ°Ô µÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. °æ¿ì¿¡ µû¶ó¼­´Â ´Ù¸¥ ÄÄÆÄÀÏ·¯¿¡¼­´Â °æ°í¸¸ Ãâ·ÂÇÏ°í ³Ñ¾î°¡´Â »ç¼ÒÇÑ ¹®Á¦¸¦ ¿¡·¯·Î ó¸®ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ÀÌ·± ¹®Á¦¸¦ ¹Ì¿¬¿¡ ¹æÁöÇϱâ À§Çؼ­´Â ÄÄÆÄÀÏ·¯ optionÀ» ¾ö°ÝÇÏ°Ô Á༭ ´Ù¸¥ ÄÄÆÄÀÏ·¯¿¡¼­ ÀÛ¾÷À» ÇÒ ¶§ ¹®Á¦°¡ °ÅÀÇ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ÇÊÀÚ¿Í °°Àº °æ¿ì¿¡´Â gcc¸¦ »ç¿ëÇÒ ¶§ ¾Æ·¡¿Í °°Àº optionÀ» Ãß°¡ÇØ ÁÝ´Ï´Ù. ---------------------------------------- -pedantic -W -Wall -Wshadow -Wpointer-arith -Wcast-align -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror -Wno-unused ---------------------------------------- À§¿Í °°Àº optionÀ» ÁÖ°í ÀÚ½ÅÀÌ Áö±Ý±îÁö °³¹ßÀ» ÇØ ¿Ô´ø C ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÀ» ½ÃµµÇØ º¸¸é ¸¹Àº ¹®Á¦°¡ ÀÖ´Ù´Â °ÍÀ» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×¸®°í ÀÇ¿Ü·Î »ç¼ÒÇØ º¸ÀÌ´Â °ÍµéÀÌ ¹®Á¦¸¦ ÀÏÀ¸Å°±âµµ ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î comment¸¦ C++ Çü½ÄÀÎ // ¸¦ »ç¿ëÇߴµ¥ ÀÌ°Ô ¾î¶² ÄÄÆÄÀÏ·¯¿¡¼­ ÀνÄÀÌ ¾ÈµÇ´Â °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ°í C ¼Ò½º ÆÄÀÏÀÇ ³¡Àº ¹Ýµå½Ã °³Ç๮ÀÚ·Î ³¡³ª¾ß µÇ´Âµ¥ °³Ç๮ÀÚ·Î ³¡³ªÁö ¾Ê¾Æ¼­ ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÆÄÀÏÀ» dosÇü½Ä txt·Î ÀúÀåÀ» Çؼ­ ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ÀÌ¿Í°°Àº ¹®Á¦µéÀÌ ¸Å¿ì ¸¹ÀÌ Á¸ÀçÇϴµ¥ ÀϹÝÀûÀ¸·Î °³¹ßÀÚµéÀº ±×°ÍÀÌ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼öµµ ÀÖ´Ù´Â »ç½ÇÀ» ¸ð¸£°í Áö³ªÄ¡°Ô µÇ´Âµ¥ ÀÌ·± ¹®Á¦µéÀº ÄÄÆÄÀÏ·¯ optionÀ» Á¶Á¤Çؼ­ ŽÁö°¡ °¡´ÉÇϵµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. À§¿Í °°ÀÌ ÇßÀ½¿¡µµ ºÒ±¸ÇÏ°í ÄÄÆÄÀÏ·¯¿¡ ÀÇÁ¸ÀûÀÎ ÄÚµå ¶§¹®¿¡ ¾î·Á¿òÀ» °Þ´Â °æ¿ì°¡ Àִµ¥ ±×Áß¿¡ °¡Àå ¸¹ÀÌ °Þ´Â °æ¿ì°¡ C ±¸¹®ÀÇ evaluation ¼ø¼­¿¡ ÀÇÁ¸ÀûÀÎ Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. eval.c ---------------------------------------- int a; int f(void) { return (a *= 2); } int g(void) { return (a += 2); } int h(void) { a = 5; a = f() + g(); printf("%d\n", a); } ---------------------------------------- ÀÌ Äڵ带 »ìÆ캸¸é a = f() + g(); ºÎºÐ¿¡¼­ f°¡ ¸ÕÀú callÀÌ µÇ°í g°¡ callÀÌ µÇ´ÂÁö g°¡ ¸ÕÀú callÀÌ µÇ°í f°¡ callÀÌ µÇ´ÂÁö´Â ÄÄÆÄÀÏ·¯¿¡ µû¶ó ´Ù¸¨´Ï´Ù. À§ÀÇ ¿¹Á¦ÀÇ °æ¿ì¿¡´Â f°¡ ¸ÕÀú callÀÌ µÇ¸é 22°¡ Ãâ·ÂµÇ°í g°¡ ¸ÕÀú callÀÌ µÇ¸é 21ÀÌ Ãâ·ÂµË´Ï´Ù. ¿ÞÂʺÎÅÍ ¿À¸¥ÂÊÀ¸·Î evaluationÇÏ´Â ÄÄÆÄÀÏ·¯µµ ÀÖ°í ¿À¸¥ÂʺÎÅÍ ¿ÞÂÊÀ¸·Î evaluationÇÏ´Â ÄÄÆÄÀÏ·¯µµ ÀÖÀ» ¼ö ÀÖÁö¸¸ ANSI C »óÀ¸·Î´Â ¾î¶² ¼ø¼­¸¦ µû¶óµµ »ó°üÀÌ ¾ø½À´Ï´Ù. ¶Ç Çϳª ÀÚÁÖ ¸¸³ª°Ô µÇ´Â ¹®Á¦´Â stdarg.h¿¡ ÀÖ´Â va_list, va_arg, va_start, va_end¹®Á¦ÀÔ´Ï´Ù. °¡Àå ÀÚÁÖ Á¢ÇÏ°Ô µÇ´Â ¹®Á¦´Â va_list°¡ ¾î¶² ÄÄÆÄÀÏ·¯¿¡¼­´Â array·Î ±¸ÇöµÇ¾î ÀÖ°í ¾î¶² ÄÄÆÄÀÏ·¯¿¡¼­´Â pointer·Î ±¸ÇöÀÌ µÇ¾î À־ va_list a; va_list b; a = b; ¿Í °°ÀÌ Äڵ带 ÀÛ¼ºÇϸé array·Î ±¸ÇöµÇ¾î ÀÖÀ» °æ¿ì¿¡´Â ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ìÀÔ´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡´Â ¾Æ·¡¿Í °°ÀÌ Äڵ带 ÀÛ¼ºÇßÀ» ¶§ a¿Í *ap°¡ ¾î¶² ÄÄÆÄÀÏ·¯¿¡¼­´Â °°Àº °ªÀ» Ãâ·ÂÇÏ°í ¾î¶² ÄÄÆÄÀÏ·¯¿¡¼­´Â ´Ù¸¥ °ªÀ» Ãâ·ÂÇؼ­ »ó´çÈ÷ ´çȲÇß´ø ±â¾ïÀÌ ÀÖ½À´Ï´Ù. va.c ---------------------------------------- #include void f(void) { va_list a; va_list *ap = &a; printf("%p %p\n", a, *ap); } ---------------------------------------- ±×¸®°í ANSI C Ç¥ÁØ¿¡´Â ±âº»ÀûÀÎ ÀÚ·áÇüÀÇ Å©±â¿¡ ´ëÇØ Á¤È®ÇÑ ¸í½Ã°¡ µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù. void * (pointer), char, short, int, long, float, doubleÀÌ °¢°¢ ¸î bit·Î ÀÌ·ç¾îÁ® ÀÖ´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ÇÁ·Î±×·¥ ÀÛ¼º ½Ã¿¡ Àú·± ÄÄÆÄÀÏ·¯¿¡¼­ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â °ÍÀ» ¾µ ¶§´Â Å©±â¿¡ ÀÇÁ¸ÀûÀ¸·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇؼ­´Â ¾ÈµË´Ï´Ù. ¸¸¾à¿¡ Å©±â¿¡ ÀÇÁ¸ÀûÀ¸·Î ÀÛ¼ºÇÏ°íÀÚ ÇÑ´Ù¸é int16, int32ó·³ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀÌÁö ¾ÊÀº ÀÚ·áÇüÀ» Çϳª ¸¸µé°í À̰͵鿡 ´ëÇÑ Á¤ÀǸ¦ ÀÓº£µðµå ȯ°æ¿¡ ÀÇÁ¸ÀûÀ¸·Î °¢°¢ ÇØÁÖ´Â ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÄÄÆÄÀÏ·¯¿¡ Á¤ÀÇµÈ int ÀÚ·áÇüÀÌ °¡Àå ºü¸¥ ¼º´ÉÀ» º¸ÀåÇØ ÁÖ´Â °æÇâÀÌ Àֱ⠶§¹®¿¡ int16À̳ª int32ó·³ Å©±â¸¦ °íÁ¤½ÃÄѼ­ »ç¿ëÇÏ´Â °ÍÀº À̽ļºÀ» ³ô¿©ÁÙ ¼ö´Â ÀÖÁö¸¸ ¼º´ÉÀúÇϸ¦ À¯¹ß½Ãų ¼öµµ Àֱ⠶§¹®¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. À½¼öÀÇ int¸¦ ¿À¸¥ÂÊÀ¸·Î shift ( >> ) ÇÒ ¶§ ÄÄÆÄÀÏ·¯¿¡ µû¶ó »ê¼ú shift¸¦ ÇÏ´Â °æ¿ìµµ ÀÖ°í ³í¸® shift¸¦ ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. À½¼öÀÇ int¸¦ ¿À¸¥ÂÊÀ¸·Î shiftÇÏ´Â ÇൿÀº »ï°¡ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¿­¾ÇÇÑ ÀÓº£µðµå ȯ°æ¿¡¼­´Â float³ª doubleÀ» ¾Æ¿¹ Áö¿øÇÏÁö ¾Ê´Â °æ¿ìµµ °¡²û ÀÖ½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ À̽ļºÀ» ³ôÀ̱â À§Çؼ­´Â ²À ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¸é float³ª doubleÀÇ »ç¿ëÀ» »ï°¡ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Q. ANSI C Ç¥ÁØ¿¡ Á¤ÀǵǾî ÀÖ´Â functionµéÀº ÀÓº£µðµå ȯ°æ¿¡¼­ ¾È½ÉÇÏ°í »ç¿ëÇصµ µË´Ï±î? A. ÀÏ´Ü ÀÓº£µðµå ȯ°æ¿¡¼­ Á¦°øÇÏ´Â ¸ðµç functionÀº ANSI C Ç¥ÁØ¿¡ Á¤ÀǵǾî ÀÖ´õ¶óµµ ÀÇÁ¸ÀûÀÎ ºÎºÐÀ¸·Î ºÐ·ùÇÕ´Ï´Ù. ½É°¢ÇÑ °æ¿ì¿¡´Â ANSI C Ç¥ÁØ¿¡ Á¤ÀǵǾî ÀÖ´Â functionÀÌ Çϳªµµ ¾ø´Â ȯ°æ¿¡¼­ ÀÛ¾÷ÇÏ°Ô µÇ´Â °æ¿ìµµ Àֱ⠶§¹®ÀÔ´Ï´Ù. ±×¸®°í ºñ·Ï ÀÚ½ÅÀÌ ¿øÇÏ´Â function°ú ¶È°°Àº ±â´ÉÀ» °¡Áö´Â functionÀ» ÇØ´ç ÀÓº£µðµå ȯ°æ¿¡¼­ Á¦°øÀ» ÇÏ´õ¶óµµ ±× functionÀ» 100%½Å·ÚÇؼ­´Â ¾ÈµË´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡´Â ÀÓº£µðµå ȯ°æ¿¡¼­ Á¦°øÇÏ´Â malloc°ú free functionÀ» »ç¿ëÇß´Ù°¡ mallocÀÌ ¹ö±×¸¦ °¡Áö°í À־ mallocÀ» Á÷Á¢ ±¸ÇöÇؼ­ »ç¿ëÇÑ ÀûÀÌ ÀÖ¾ú°í ANSI C Ç¥ÁØ¿¡ Á¤ÀǵǾî ÀÖ´Â isalnum functionÀ» »ç¿ëÇߴµ¥ ÀÌ°ÍÀÌ ¾î¶² ȯ°æ¿¡¼­´Â ºñ¾îÀÖ´Â functionÀ¸·Î ±¸ÇöµÇ¾î À־ °á±¹ Á÷Á¢ ±¸ÇöÀ» Çؼ­ ³ÖÀº °æÇèÀÌ ÀÖ½À´Ï´Ù. ³ªÁß¿¡ ³»¸° °á·ÐÀº ³»°¡ Á÷Á¢ ÀÛ¼ºÇÑ ºÎºÐÀ̳ª ¾Æ´Ï¸é ´Ù¸¥ °÷¿¡¼­ ¼Ò½ºÄÚµå ÇüÅ·Π¹Þ¾Æ¿Í¼­ »ç¿ëÇÏ°í ÀÖ´Â ºÎºÐÀ» Á¦¿ÜÇÑ ¸ðµç ºÎºÐÀº ½Å·ÚÇؼ­´Â ¾ÈµÈ´Ù´Â °á·ÐÀ» ³»·È½À´Ï´Ù. Q. ÀÓº£µðµå ȯ°æ¿¡¼­ ÆÄÀÏÀº ¾î¶² ¹æ½ÄÀ¸·Î Á¢±ÙÇÏ´Â °ÍÀÌ ÁÁ½À´Ï±î? A. ÆÄÀÏ ÀúÀåÀº Àü¿øÀÌ ²¨Á®µµ ³»¿ëÀÌ »ì¾ÆÀÖ¾î¾ß µÇ±â ¶§¹®¿¡ Flash Memory¿¡ ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ÇÏÁö¸¸ ÀÓº£µðµå ȯ°æ¿¡¼­´Â File SystemÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù. Flash Memory¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â File SystemÀ» ±¸Çؼ­ »ç¿ëÇÏ´ø°¡ Flash Memory¿ë File SystemÀ» Á÷Á¢ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ¸¸¾à¿¡ ÀúÀåÇÒ ÇÊ¿ä´Â ¾ø°í Àб⸸ µÇµµ µÈ´Ù¸é ÆÄÀÏ ³»¿ëÀ» CÀÇ character array·Î ¸¸µé¾î¼­ ±× array¸¦ ÄÄÆÄÀÏÀ» ÅëÇؼ­ ÇÁ·Î±×·¥¿¡ »ðÀÔÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ZIPÆÄÀÏ·Î ¸¸µé¾î¼­ CÀÇ character array·Î ¸¸µé¾î¼­ »ðÀÔÀ» ÇÑ´Ù¸é ÀÏÁ¾ÀÇ Àб⸸ µÇ´Â µð·ºÅ丮µµ Áö¿øÇÏ´Â File SystemÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº Visual C++ÀÇ resource¿Í ºñ½ÁÇÑ °³³äÀ¸·Î ÀÌÇØÇÏ¸é µË´Ï´Ù. Q. ÄÄÆÄÀÏÀ» ÇÒ ¶§ ÃÖÀûÈ­ optionÀ» ¸ðµÎ ²ô¸é Á¤»óÀûÀ¸·Î ÀÛµ¿Çϴµ¥ ÃÖÀûÈ­ optionÀ» ÁÖ¸é Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. ÄÄÆÄÀÏ·¯ ¹ö±×ÀԴϱî? A. ÀÌ°ÍÀº ÄÄÆÄÀÏ·¯ ¹ö±×ÀÏ ¼öµµ ÀÖÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì´Â ÇÁ·Î±×·¥À» À߸ø ÀÛ¼ºÇؼ­ ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ­¸¦ ÇÏÁö ¸»¾Æ¾ß µÇ´Â ºÎºÐÀ» ÃÖÀûÈ­¸¦ Çؼ­ ¹ß»ýÇÕ´Ï´Ù. °¡Àå ÈçÈ÷ ¹ß»ýÇÏ´Â ¹®Á¦´Â ÄÄÆÄÀÏ·¯´Â Multi Thread³ª Signal(Exception) Handler¿Í °°Àº °Í¿¡ ´ëÇÑ °³³äÀÌ ¾ø°í Æ÷ÀÎÅÍ(Pointer)°¡ °¡¸®Å°´Â °÷Àº Ç×»ó Memory¶ó°í »ý°¢ÇÏ´Â µ¥¼­ ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù. pt.c ---------------------------------------- void f(void) { volatile int *led = (int *)0x00100000; *led = 1; *led = 0; *led = 1; } ---------------------------------------- ¿¹¸¦ µé¾î ÀÓº£µðµå ȯ°æ¿¡¼­ ÁÖ¼Ò 0x00100000¿¡ 1À» ¾²¸é LED°¡ ÄÑÁö°í 0À» ¾²¸é LED°¡ ²¨Áø´Ù°í ÇÒ ¶§ À§¿Í °°Àº ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é LED°¡ ÄÑÁ³´Ù°¡ ²¨Á³´Ù°¡ ÄÑÁý´Ï´Ù. ÇÏÁö¸¸ ¸¸¾à¿¡ À§ÀÇ ÇÁ·Î±×·¥¿¡¼­ volatileÀ» »©°í ÃÖÀûÈ­ optionÀ» Á༭ ÄÄÆÄÀÏÀ» ÇÏ°Ô µÇ¸é ÄÄÆÄÀÏ·¯´Â led°¡ °¡¸®Å°´Â °÷ÀÌ ´Ü¼øÇÑ ¸Þ¸ð¸®¶ó°í »ý°¢Çؼ­ ¾ÕÀÇ *led = 1; *led = 0; ºÎºÐÀ» Á¦°ÅÇÕ´Ï´Ù. Áï LED´Â ²¨ÁöÁö ¾Ê°í °è¼Ó ÄÑÁö°Ô µË´Ï´Ù. ÀÌ·± ¹®Á¦·Î ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ­¸¦ ÇÏÁö ¸»¾Æ¾ß µÉ ºÎºÐÀ» °³¹ßÀÚ°¡ Àß »ìÆìºÁ¼­ volatile keyword¸¦ ÀûÀýÇÏ°Ô Ãß°¡ÇØ Áà¾ß ÃÖÀûÈ­ optionÀ» Á൵ Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù. Q. PCȯ°æ¿¡¼­ ¼ö¸¹Àº Å×½ºÆ®¿Í µð¹ö°Å¸¦ ÅëÇؼ­ ÀáÀçÀûÀÎ ¹ö±×µµ ¸ðµÎ °íÃÆ°í ÄÄÆÄÀÏ·¯ cpuÀÇÁ¸ÀûÀÎ ºÎºÐµµ ¸ðµÎ Á¦°ÅÇß½À´Ï´Ù. ±×·±µ¥ ½ÇÁ¦ ÀÓº£µðµå ȯ°æ¿¡¼­´Â Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. ¿øÀÎÀÌ ¹«¾úÀԴϱî? A. ÀÌ·± °æ¿ì¸¦ ´çÇÏ°Ô µÇ¸é »ó´çÈ÷ ³­°¨ÇÕ´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡´Â ÀÌ·± °æ¿ì¿¡´Â ¾Æ·¡¿Í °°Àº ¼ø¼­·Î Á¶»ç¸¦ ÇÕ´Ï´Ù. 1) function¿¡ Å« local variable(ƯÈ÷ array)À» ¼±¾ðÇÑ ºÎºÐÀÌ ¾ø´ÂÁö Ȥ½Ã ±×·± ºÎºÐÀÌ ÀÖ´Ù¸é ±×°ÍÀÌ Àç±ÍÀûÀ¸·Î callµÇÁö´Â ¾Ê´ÂÁö »ìÆ캾´Ï´Ù. ÀÓº£µðµå ȯ°æÀº ½ºÅÃ(stack)ÀÌ PC¿¡¼­ ó·³ Å©Áö ¾Ê±â ¶§¹®¿¡ ´Ù¼Ò Å« local variableÀ» »ç¿ëÇÏ°Ô µÇ¸é memory overwrite°¡ ÀϾ¸é¼­ crash°¡ ¹ß»ýÇÕ´Ï´Ù. 2) OS¿¡ ÀÇÁ¸ÀûÀ¸·Î ÀÛ¼ºµÈ ºÎºÐÀÌ ¾ø´ÂÁö »ìÆ캾´Ï´Ù. ƯÈ÷ Multi Threadȯ°æ¿¡¼­ ÀÛ¾÷À» ÇÏ°Ô µÇ¸é OS¸¶´Ù scheduleÀ» ´Ù¸£°Ô Çؼ­ ¾î´À OS¿¡¼­´Â ƯÁ¤ Thread°¡ ¿¹»óº¸´Ù ºü¸£°Ô ½ÇÇàµÇ´Â °æ¿ì°¡ Á¾Á¾ ÀÖ½À´Ï´Ù. ÀÓº£µðµå ¿î¿µÃ¼Á¦¿¡¼­´Â Thread Priority°¡ PC¿ë ¿î¿µÃ¼Á¦º¸´Ù »ó´çÈ÷ ¾ö°ÝÇÏ°Ô Àû¿ëµÇ±â ¶§¹®¿¡ ÀÌ·Î ÀÎÇØ PC¿¡¼­´Â deadlockÀÌ ÀϾÁö ¾Ê´Â »óȲÀε¥ ÀÓº£µðµå ȯ°æ¿¡¼­´Â deadlockÀÌ ÀϾ±âµµ ÇÕ´Ï´Ù. 3) ÄÄÆÄÀÏ·¯ÀÇ ¹ö±×¸¦ ÀǽÉÇØ º¾´Ï´Ù. ÀÏ´Ü ÇÁ·Î±×·¥À» ÃÖÀûÈ­ optionÀ» ¸ðµÎ ²ô°í ÄÄÆÄÀÏÀ» Çؼ­ ½ÇÇàÇØ º¾´Ï´Ù. ÀϹÝÀûÀ¸·Î ÄÄÆÄÀÏ·¯ ¹ö±×´Â ÃÖÀûÈ­ optionÀ» Ä×À» ¶§ ÁÖ·Î ¸¹ÀÌ ¹ß»ýÇÕ´Ï´Ù. ¹°·Ð °æ¿ì¿¡ µû¶ó¼­´Â ÃÖÀûÈ­ optionÀ» ¸ðµÎ ²¨µµ ÄÄÆÄÀÏ·¯ ¹ö±×°¡ ³ªÅ¸³³´Ï´Ù. 4) ¿î¿µÃ¼Á¦ÀÇ ¹ö±×¸¦ ÀǽÉÇØ º¾´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡´Â OS¿¡¼­ ¿©·¯ task°¡ µ¿½Ã¿¡ exitµÉ ¶§ OS°¡ crash°¡ ¹ß»ýÇÏ´Â ¹ö±×¸¦ °¡Áö°í ÀÖ´Â OS¸¦ º» °æ¿ì°¡ ÀÖ½À´Ï´Ù. 5) Çϵå¿þ¾î¸¦ ÀǽÉÇØ º¾´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì¿¡´Â DRAMÀÇ Refresh Rate°¡ À߸ø ¼³Á¤µÇ¾î À־ DRAM¿¡ 1·Î ¼³Á¤µÇ¾î ÀÖ´ø ºÎºÐÀÌ °¡²û 0À¸·Î º¯ÇÏ´Â Çϵå¿þ¾î¸¦ º» °æ¿ì°¡ ÀÖ½À´Ï´Ù. °¡²ûÀº ¹ö±×°¡ ÀÖ´Â CPU¸¦ °¡Áö°í ÀÛ¾÷ÇØ¾ß µÇ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ------------------------------------------------------------------------------ Taeho Oh ( ohhara@postech.edu, ohhara@plus.or.kr ) http://ohhara.sarang.net Postech ( Pohang University of Science and Technology ) http://www.postech.edu PLUS ( Postech Laboratory for Unix Security ) http://www.plus.or.kr ------------------------------------------------------------------------------