Ä¿ÇÇÇâÀÌ ³ª´Â *NIX
Ä¿ÇǴнº
½Ã½ºÅÛ/³×Æ®¿÷/º¸¾ÈÀ» ´Ù·ç´Â °÷
*
HanIRCÀÇ #coffeenix ¹æ
[
Àåºñ ¹× ȸ¼± ÈÄ¿ø
]
> Forum <
IT ÀÏÁ¤
N
e
w
!
ÀÚµ¿È ÇÁ·ÎÁ§Æ®
HOME
>
ÇÁ·Î±×·¡¹Ö / °³¹ß
>
ÀÓº£µðµå(embedded)
µµ¿ò¸»
°Ë»ö :
»çÀÌÆ®
WHOIS
À¥¼¹ö Á¾·ù
embedded system faq (±Û ohhara)
ÀÛ¼ºÀÏ : 2003/10/07 01:58
±Û¾´ÀÌ : ÁÁÀºÁøÈ£ (
http://coffeenix.net/
)
Á¶È¸¼ö : 6094
[
ÀÌÀüȸé
/
¼öÁ¤
] ºñ¹Ð¹øÈ£ :
Ãâó : KLDP BBS,
http://bbs.kldp.org/viewtopic.php?t=24986
-----------------------------------------------------------------------
¿Ã·ÁÁü: 2003³â9¿ù23ÀÏ 17:16 ÁÖÁ¦: embedded system faq ¡¡¡¡¡¡
ÀÌ 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 <stdio.h>
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 <stdarg.h>
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
Ä¿ÇǴнº Ä«Æä ÃÖ±Ù ±Û
[04/25]
±¹°¡
[04/24]
º¸Çè
[04/22]
Re: OpenSSL Ãë¾àÁ¡ Á¤¸®, Logjam(·Î±×Àë)¿¡¼ Heartbleed±îÁö
[04/21]
LET¡¯S START WITH ON
[04/21]
º¸Çè
[04/20]
Á¦ÁÖ
[04/20]
±¹³»
[04/19]
Á¦ÁÖ
[04/18]
??? ?????
[04/17]
???? onion ?????? -
[04/11]
±¹°¡
[04/10]
Stride Into Dream:
[03/20]
Re: ¿Â¶óÀΰÔÀÓÀÇ Á¾ÁÖ±¹ ´ëÇѹα¹
[10/20]
Cross Compiler ±ò
[07/14]
SSL ¬¡¬°
N
e
w
! ÃÖ±Ù¿¡ µî·ÏÇÑ ÆäÀÌÁö
KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
¿ÀÇÂij½ºÄÉÀ̵å ijµå (OpenCASCADE CAD)
QCad for Windows --- GNU GPL (Free Software)
The Hello World Collection
IPMI¸¦ È°¿ëÇÑ ¸®´ª½º ¼¹ö°ü¸®
DNS ¼³Á¤ °Ë»ç
nagiosgraph ¼³Ä¡ ¹æ¹ý
Slony-I ¼³Ä¡ ¹æ¹ý (postgresql replication tool)
Qmail±â¹ÝÀÇ Anti spam ½Ã½ºÅÛ ±¸ÃàÇϱâ
clusterssh
[ ÇÔ²²ÇÏ´Â »çÀÌÆ® ]
¿î¿µÁø :
ÁÁÀºÁøÈ£(truefeel)
, ¾ß¼ö(yasu), ¹ü³ÃÀÌ, sCag
2003³â 8¿ù 4ÀÏ~