ÀÌ Àå¿¡¼´Â ÇÁ·Î¼¼½º°¡ ¹«¾ùÀÌ¸ç ¸®´ª½º Ä¿³ÎÀÌ ¾î¶»°Ô ÇÁ·Î¼¼½º¸¦ ¸¸µé°í °ü¸®ÇÏ°í ¾ø¾Ö ´ÂÁö¸¦ ¼³¸íÇÑ´Ù.
ÇÁ·Î¼¼½º´Â ¿î¿µÃ¼Á¦ ¾È¿¡¼ ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ÇÁ·Î±×·¥Àº µð½ºÅ©¿¡ ½ÇÇà °¡´ÉÇÑ ÇüÅ·ΠÀú ÀåµÇ¾î ÀÖ´Â ±â°è¾î ¸í·É°ú ÀÚ·áÀÇ ÁýÇÕÀε¥, ÀÌ ÀÚü´Â ¼öµ¿ÀûÀÎ Á¸ÀçÀÌ´Ù. ÇÑÆí ÇÁ·Î¼¼½º ´Â µ¿ÀÛÁßÀÎ ÇÁ·Î±×·¥À¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. Áï ÇÁ·Î¼¼¼°¡ ±â°è¾î ¸í·ÉµéÀ» ½ÇÇàÇÔ¿¡ µû¶ó ²÷ÀÓ¾øÀÌ º¯ÈÇÏ´Â µ¿ÀûÀÎ Á¸ÀçÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ ¸í·É¾î¿Í µ¥ÀÌÅÍ »Ó¸¸ ¾Æ´Ï¶ó, ÇÁ·Î¼¼½º´Â ÇÁ·Î±×·¥ Ä«¿îÅÍ, CPU ·¹Áö½ºÅÍ, ±×¸®°í ·çƾ ÀÎÀÚ, º¹±Í ÁÖ¼Ò, ÀúÀåµÈ º¯¼ö°°Àº ÀϽÃÀû µ¥ ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â ÇÁ·Î¼¼½º ½ºÅõµ ÇÔ²² °¡Áø´Ù. ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î±×·¥, Áï ÇÁ·Î¼¼½º´Â Çö Àç ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼ ¾È¿¡¼ ÀϾ´Â ¸ðµç µ¿ÀÛÀ» Æ÷ÇÔÇÑ´Ù. ¸®´ª½º´Â ¸ÖƼÇÁ·Î¼¼½Ì ¿î¿µ üÁ¦ÀÌ´Ù. ÇÁ·Î¼¼½º´Â °¢°¢ °íÀ¯ÀÇ ±ÇÇÑ¿Í Ã¥ÀÓÀ» °®´Â º°°³ÀÇ Å½ºÅ©ÀÌ´Ù. ¾î¶² ÇÁ·Î¼¼½º Çϳª°¡ ºñÁ¤»óÀûÀ¸·Î Á¾·áÇß´Ù°í Çؼ ÀÌ°ÍÀÌ ½Ã½ºÅÛ ³»ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½º±îÁö Á×°Ô ÇÏÁö´Â ¾Ê´Â´Ù. °³º° ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ °¡»ó ÁÖ¼Ò°ø°£¿¡¼ ½ÇÇàµÇ¸ç, Ä¿³ÎÀÌ Á¦°øÇÏ´Â ¾ÈÀüÇÑ ¹æ¹ý À» ÅëÇÏÁö ¾Ê°í¼´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿Í »óÈ£ÀÛ¿ëÇÒ ¼ö ¾ø´Ù.
ÇÁ·Î¼¼½º´Â »ì¾Æ ÀÖ´Â µ¿¾È ¸¹Àº ½Ã½ºÅÛ ÀÚ¿øÀ» »ç¿ëÇÑ´Ù. ¸í·ÉÀ» ¼öÇàÇϱâ À§Çؼ CPU¸¦, ¸í·É¾î¿Í µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§Çؼ´Â ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ÆÄÀÏ ½Ã½ºÅÛÀÇ ÆÄÀϵé À» ¿°í »ç¿ëÇÒ ¼öµµ ÀÖ°í, ½Ã½ºÅÛ ³»ÀÇ ¹°¸®ÀûÀÎ ÀåÄ¡µéÀ» Á÷Á¢ ¶Ç´Â °£Á¢ÀûÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¸®´ª½º´Â ¿©·¯ ½Ã½ºÅÛ ÀÚ¿øÀ» °ü¸®ÇÏ°í ÇÁ·Î¼¼½ºµéÀ» °øÆòÇÏ°Ô °ü¸®Çϱâ À§Çؼ ÇÁ·Î¼¼½º ÀڽŰú ÇÁ·Î¼¼½º°¡ °¡Áö°í ÀÖ´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇØ °è¼Ó ÃßÀûÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÇ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®³ª CPUÀÇ ´ëºÎºÐÀ» µ¶Á¡ÇÑ´Ù¸é, ´Ù¸¥ ÇÁ·Î¼¼ ½ºµé¿¡°Ô °øÆòÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
½Ã½ºÅÛ¿¡¼ °¡Àå Áß¿äÇÑ ÀÚ¿øÀº CPU·Î, ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡´Â Çϳª¹Û¿¡ ¾ø´Ù. ¸®´ª½º´Â ¸ÖƼ ÇÁ·Î¼¼½Ì(multiprocessing) ¿î¿µÃ¼Á¦Àε¥, ±× ¸ñÀûÀº °¢°¢ÀÇ CPU°¡ ¾ðÁ¦³ª ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼ ½º¸¦ °®µµ·Ï ÇÏ¿© CPUÀÇ È°¿ëÀ» ±Ø´ëÈÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î¼¼½ºÀÇ ¼ö°¡ CPUº¸´Ù ¸¹Àº °æ¿ì (´ëºÎºÐÀÇ °æ¿ì°¡ ÀÌ·¸´Ù), ³ª¸ÓÁö ÇÁ·Î¼¼½ºµéÀº ½ÇÇàµÇ±â À§Çؼ CPU°¡ »ç¿ë °¡´ÉÇÒ ¶§±î Áö ±â´Ù·Á¾ß ÇÑ´Ù. ¸ÖƼÇÁ·Î¼¼½ÌÀ̶õ °£´ÜÇÑ °³³äÀÌ´Ù. Áï, ÇÁ·Î¼¼½º´Â ¹«¾ð°¡ ±â´Þ·Á¾ß ÇÏ ±â Àü±îÁö´Â (º¸ÅëÀº ½Ã½ºÅÛ ÀÚ¿øÀ» ±â´Ù¸°´Ù) °è¼Ó ½ÇÇàµÇ¸ç, ±â´Ù¸®°í ÀÖ´Ù°¡ ÀÚ¿øÀ» ¾ò°Ô µÇ¸é ÇÁ·Î¼¼½º´Â ´Ù½Ã ½ÇÇàµÉ ¼ö ÀÖ´Ù. DOS¿Í °°Àº À¯´ÏÇÁ·Î¼¼½Ì(uniprocessing) ½Ã½ºÅÛ¿¡¼ ´Â CPU´Â ±×³É ¾Æ¹«°Íµµ ÇÏÁö ¾Ê°í ´ë±â ½Ã°£À» ³¶ºñÇÑ´Ù. ¸ÖƼÇÁ·Î¼¼½Ì ½Ã½ºÅÛ¿¡¼´Â µ¿ ½Ã¿¡ ¸¹Àº ÇÁ·Î¼¼½ºµéÀÌ ¸Þ¸ð¸® ³»¿¡ Á¸ÀçÇÑ´Ù. ÇÁ·Î¼¼½º°¡ ¹«¾ð°¡ ±â´Ù·Á¾ß ÇÒ ¶§¸¶´Ù ¿î ¿µÃ¼Á¦´Â CPU¸¦ »©¾Ñ¾Æ ´Ù¸¥ Á» ´õ Àû´çÇÑ ÇÁ·Î¼¼½º°¡ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ¾î¶² ÇÁ·Î¼¼½º°¡ ´ÙÀ½¿¡ ½ÇÇàµÉ °¡Àå Àû´çÇÑ °ÍÀÎÁö ¼±ÅÃÇÏ´Â ÀÏÀº ½ºÄÉÁì·¯ÀÇ ¸òÀÌ°í, ¸®´ª½º´Â °øÁ¤À» ±â Çϱâ À§ÇØ ¿©·¯°¡ÁöÀÇ ½ºÄÉÁ층 Á¤Ã¥À» »ç¿ëÇÑ´Ù.
¸®´ª½º´Â ¿©·¯°¡Áö ÇüÅÂÀÇ ½ÇÇà ÆÄÀÏÀ» Áö¿øÇϴµ¥, ELF, JAVA µîÀÌ ±× Áß Çϳª´Ù. À̵éÀº ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÇ °øÀ¯ ¶óÀ̺귯¸®(shared library)¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °Í°ú °°Àº ÀÏ À» À§ÇØ Åõ¸íÇÏ°Ô °ü¸®ÇØ¾ß ÇÑ´Ù.
ÀϹÝÀûÀÎ ÇÁ·Î¼¼½º »Ó ¾Æ´Ï¶ó ¸®´ª½º´Â ½Ç½Ã°£(real time) ÇÁ·Î¼¼½ºµµ Áö¿øÇÑ´Ù1. ÀÌ ÇÁ·Î¼¼½º µéÀº ¿ÜºÎ¿¡¼ ¹ß»ýÇÏ´Â »ç°Ç(event)¿¡ ¸Å¿ì »¡¸® ¹ÝÀÀÇØ¾ß ÇϹǷΠ(´Ù½Ã ¸»ÇÏ¸é ½Ç½Ã°£À¸·Î), ½ºÄÉÁì·¯´Â À̵éÀ» ÀÏ¹Ý »ç¿ëÀÚ ÇÁ·Î¼¼½º¿Í´Â ´Ù¸£°Ô Ãë±ÞÇÑ´Ù. task_struct ÀڷᱸÁ¶´Â ¹æ´ëÇÏ°í º¹ÀâÇÏÁö¸¸, ³»ºÎ Ç׸ñµéÀ» ¿©·¯°³ÀÇ ±â´É ¿µ¿ªÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù.
init(1)-+-crond(98) |-emacs(387) |-gpm(146) |-inetd(110) |-kerneld(18) |-kflushd(2) |-klogd(87) |-kswapd(3) |-login(160)---bash(192)---emacs(225) |-lpd(121) |-mingetty(161) |-mingetty(162) |-mingetty(163) |-mingetty(164) |-login(403)---bash(404)---pstree(594) |-sendmail(134) |-syslogd(78) `-update(166)
´õºÒ¾î, ½Ã½ºÅÛ ³»ÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀº init ÇÁ·Î¼¼½ºÀÇ task_struct ÀڷᱸÁ¶¿¡¼ ½ÃÀÛÇÏ´Â ÀÌÁß ¿¬°á ¸®½ºÆ®·Î ¿¬°áµÇ¾î ÀÖ´Ù. ÀÌ ¸®½ºÆ®´Â ¸®´ª½º Ä¿³ÎÀÌ ½Ã½ºÅÛ ³»ÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀ» µé¿©´Ùº¼ ¼ö ÀÖ°Ô ÇÑ´Ù. ps³ª kill µîÀÇ ¸í·ÉÀ» Áö¿øÇÏ·Á¸é ÀÌ·¸°Ô ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
REVIEW NOTE : Ãß°¡ÇÏ¿© ºñÆ®¸¦ ÇÒ´çÇÏ´Â °ÍÀ» (777) ¼³¸íÇ϶ó.
±×·ìÀº ¸®´ª½º¿¡¼ ÇѸíÀÇ °³º° »ç¿ëÀÚ³ª ½Ã½ºÅÛÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀÌ ¾Æ´Ñ, »ç¿ëÀÚµéÀÇ ¸ð ÀÓ¿¡ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ ±ÇÇÑÀ» ÁÖ´Â ¹æ¹ýÀÌ´Ù. ¿¹¸¦ µé¸é, ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÏ ´Â »ç¶÷µéÀ» ÇϳªÀÇ ±×·ìÀ¸·Î ¸¸µé°í ÀÌ »ç¶÷µé¸¸ ÇÁ·ÎÁ§Æ®ÀÇ ¼Ò½º Äڵ带 ÀÐ°í ¾µ ¼ö ÀÖµµ ·Ï ÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ ÇÁ·Î¼¼½º´Â ¿©·¯ ±×·ì¿¡ ¼ÓÇÒ ¼ö ÀÖ°í (±âº»°ªÀº ÃÖ´ë 32°³4) À̰͵é Àº °¢ ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ÀÖ´Â groups º¤ÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. ÇÁ·Î¼¼½º°¡ ¼ÓÇØ ÀÖ´Â ±×·ì ÁßÀÇ Çϳª°¡ ÆÄÀÏ¿¡ Á¢±Ù ±ÇÇÑÀ» °¡Áö°í ÀÖ´Ù¸é, ±× ÇÁ·Î¼¼½º´Â ±× ÆÄÀÏ¿¡ ´ëÇÑ ÇØ´ç ±×·ì Á¢±Ù ±ÇÇÑÀ» °¡Áö°Ô µÈ´Ù.
ÇÁ·Î¼¼½ºÀÇ task_struct¿¡´Â ³× ½ÖÀÇ »ç¿ëÀÚ ½Äº°ÀÚ¿Í ±×·ì ½Äº°ÀÚ°¡ ÀÖ´Ù.
ÇÁ·Î¼¼½º´Â Ç×»ó ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ¸ç µû¶ó¼ Á¾Á¾ ±â´Ù¸®°Ô µÈ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¾î ¶² ÇÁ·Î¼¼½º´Â ±â´Ù¸®°Ô µÉ ¶§±îÁö ³Ê¹« ¸¹Àº CPU ½Ã°£À» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ·¯ÇÑ °æ¿ì ¿¡ ¸®´ª½º´Â ¼±Á¡Çü ½ºÄÉÁ층(pre-emptive scheduling)À» »ç¿ëÇÑ´Ù. ÀÌ Á¤Ã¥¿¡¼´Â °¢°¢ÀÇ ÇÁ·Î ¼¼½º°¡ 200ms Á¤µµÀÇ ÂªÀº ½Ã°£µ¿¾È¸¸ ½ÇÇàµÇ¸ç7, ÀÌ ½Ã°£ÀÌ Áö³ª¸é ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼±Åà µÇ¾î ½ÇÇàµÇ¸ç, ¿ø·¡ÀÇ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ Â÷·Ê°¡ ¿Ã ¶§±îÁö ±â´Ù¸®°ÔµÈ´Ù. ÀÌ·± ÀÛÀº ½Ã°£ ÀÇ ´ÜÀ§¸¦ ŸÀÓ ½½¶óÀ̽º(time-slice)¶ó°í ÇÑ´Ù.
½ÇÇàÇÒ ¼ö ÀÖ´Â ÇÁ·Î¼¼½º Áß¿¡¼ °¡Àå ½ÇÇàÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Â ÇÁ·Î¼¼½º¸¦ °ñ¶ó¼ ½ÇÇàÇÏ´Â °ÍÀÌ ½ºÄÉÁì·¯(scheduler)ÀÇ ÀÏÀÌ´Ù. ½ÇÇà°¡´ÉÇÑ ÇÁ·Î¼¼½º´Â CPU°¡ ÀÚ½ÅÀ» ½ÇÇàÇÏ±æ ±â´Ù¸° ´Ù. ¸®´ª½º´Â °£´ÜÇÑ ¿ì¼±±Ç¿¡ ±â¹ÝÇÑ ½ºÄÉÁ층 ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿©, ÇöÀç ÇÁ·Î¼¼½º¿Í ´Ù¸¥ ÇÁ·Î¼¼½º »çÀÌ¿¡¼ ½ÇÇàÇÒ ³ðÀ» °í¸¥´Ù. ¸®´ª½º°¡ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÃÅ°±â·Î ÇÏ¿´´Ù¸é, Çö Àç ÇÁ·Î¼¼½ºÀÇ »óÅÂ¿Í ÇÁ·Î¼¼½º¿Í °ü·ÃÀÖ´Â ·¹Áö½ºÅ͵é, ´Ù¸¥ ÄÁÅؽºÆ®¸¦ task_struct ÀÚ ·á±¸Á¶¿¡ ÀúÀåÇÑ´Ù. ±×¸®°í ³ª¼ ½ÇÇàÇÒ »õ ÇÁ·Î¼¼½ºÀÇ »óŸ¦ º¹¿ø(À̰͵µ ¶ÇÇÑ ÇÁ·Î¼¼¼ ¿¡ µû¶ó ´Ù¸£´Ù)ÇÏ°í ½Ã½ºÅÛÀÇ Á¦¾î±ÇÀ» ±× ÇÁ·Î¼¼½º¿¡°Ô ³Ñ°ÜÁØ´Ù. ½ºÄÉÁì·¯°¡ ½Ã½ºÅÛ ³» ÀÇ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î¼¼½ºµé¿¡°Ô °øÁ¤ÇÏ°Ô CPU ½Ã°£À» ÇÒ´çÇϱâ À§Çؼ °¢°¢ÀÇ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ Á¤º¸¸¦ task_struct¿¡ À¯ÁöÇÑ´Ù.
½ºÄÉÁì·¯´Â Ä¿³Î¾È¿¡¼ ¿©·¯ ¸î¸î °æ¿ì¿¡ ÀÛµ¿µÈ´Ù. ½ºÄÉÁì·¯´Â ÇöÀç ÇÁ·Î¼¼½º¸¦ ´ë±âÅ¥¿¡ ³ÖÀº ´ÙÀ½À̳ª, ½Ã½ºÅÛ ÄÝÀÌ ³¡³ Á÷ÈÄ, ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛ ¸ðµå¿¡¼ ÇÁ·Î¼¼½º ¸ðµå·Î µ¹¾Æ ¿À±â ¹Ù·Î Àü¿¡ ½ÇÇàµÈ´Ù. ¶Ç ´Ù¸¥ °æ¿ì´Â ½Ã½ºÅÛÀÇ Å¸À̸Ӱ¡ ÇöÀç ÇÁ·Î¼¼½ºÀÇ counterÀÇ °ªÀ» 0À¸·Î ¼³Á¤ÇÑ °æ¿ìÀÌ´Ù. ½ºÄÉÁì·¯´Â ½ÇÇàµÉ ¶§ ´ÙÀ½°ú °°Àº ÀϵéÀ» ¼öÇàÇÑ´Ù.
ÇöÀç ÇÁ·Î¼¼½ºÀÇ ½ºÄÉÁ층 Á¤Ã¥ÀÌ ¶ó¿îµå ·ÎºóÀ̸é ÇÁ·Î¼¼½º´Â ½ÇÇàÅ¥·Î µÇµ¹¾Æ°£´Ù. ¸¸¾à ŽºÅ©°¡ ÀÎÅÍ·´Æ®¸¦ Çã¿ë(INTERRUPTIBLE)ÇÏ°í ÀÌÀü¿¡ ½ºÄÉÁìµÈ ÀÌÈÄ¿¡ ½Ã±×³Î (signal)À» ¹Þ¾ÒÀ¸¸é ½ÇÇàÁß(RUNNING) »óÅ·Π¹Ù²ï´Ù. ÇöÀç ÇÁ·Î¼¼½º°¡ ŸÀӾƿôµÇ¸é, ÀÌ°ÍÀº ½ÇÇàÁß(RUNNING) »óÅ°¡ µÈ´Ù. ¸¸¾à ÇöÀç ÇÁ·Î¼¼½º°¡ ½ÇÇàÁß(RUNNING) »óÅÂÀ̸é, ±× »óÅ°¡ À¯ÁöµÈ´Ù. ÇÁ·Î¼¼½ºµé Áß¿¡¼ »óÅ°¡ ½ÇÇàÁß(RUNNING)À̰ųª ÀÎÅÍ·´Æ® Çã¿ë(INTERRUPTIBLE)ÀÌ ¾Æ´Ñ °ÍµéÀº ½ÇÇàÅ¥¿¡¼ »èÁ¦µÈ´Ù. ÀÌ°ÍÀº ½ºÄÉÁì·¯°¡ ¼öÇàÇÒ ÇÁ·Î¼¼½º¸¦ ã´Â °úÁ¤¿¡¼ À̵éÀ» Á¦¿ÜÇÑ´Ù´Â ÀǹÌÀÌ´Ù.
ÀÌ ÇÁ·Î¼¼½º ÄÁÅؽºÆ® ±³Ã¼´Â ½ºÄÉÁì·¯°¡ ¸¶Áö¸·À¸·Î ÇÏ´Â ÀÛ¾÷ÀÌ´Ù. µû¶ó¼, ÀÌÀü ÇÁ·Î ¼¼½ºÀÇ ÀúÀåµÈ ÄÁÅؽºÆ®´Â ÀÌ ÇÁ·Î¼¼½º°¡ ½ºÄÉÁì·¯ÀÇ ¸¶Áö¸·¿¡ ÀÖ´Â Çϵå¿þ¾î ÄÁÅؽºÆ® ¿¡ ´ëÇÑ ¼ø°£»çÁøÀÌ´Ù. ¸¶Âù°¡Áö·Î, »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ ÄÁÅؽºÆ®°¡ ·Îµå µÇ¾úÀ» ¶§, ±×°Í Àº ±× ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î±×·¥ Ä«¿îÅÍ¿Í ·¹Áö½ºÅÍ ³»¿ëÀ» Æ÷ÇÔÇÏ¿© ½ºÄÉÁì·¯ÀÇ ¸¶Áö¸· »óÅ ¸¦ º¸¿©ÁÖ´Â ¼ø°£»çÁøÀÏ °ÍÀÌ´Ù.
¸¸¾à, ÀÌÀü ÇÁ·Î¼¼½º³ª »õ·Î¿î ÇöÀç ÇÁ·Î¼¼½º°¡ °¡»ó ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù¸é, ½Ã½ºÅÛÀÇ Æä ÀÌÁö Å×ÀÌºí ¿£Æ®¸®¸¦ °»½ÅÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¹°·Ð ÀÌ Çൿµµ ¾ÆÅ°ÅØÃÄ¿¡ µû¶ó ´Ù¸£´Ù. ¾Ë ÆÄ AXP¿Í °°Àº ÇÁ·Î¼¼¼´Â, º¯È¯ ÂüÁ¶ Å×À̺í(translation look-aside table) Áï ij½ÃµÈ ÆäÀÌ Áö Å×ÀÌºí ¿£Æ®¸®¸¦ »ç¿ëÇϹǷÎ, ÀÌÀü ÇÁ·Î¼¼½º¿¡ ¼ÓÇϴ ij½ÃµÈ Å×ÀÌºí ¿£Æ®¸®¸¦ Áö¿ö ¾ß¸¸ ÇÑ´Ù.
¸ÖƼÇÁ·Î¼¼¼ ½Ã½ºÅÛ¿¡¼´Â ¸ðµç ÇÁ·Î¼¼¼°¡ ¹Ù»Ú°Ô ¾î¶² ÇÁ·Î¼¼½ºµéÀ» ½ÇÇàÇÏ°í ÀÖ±æ ¹Ù¶õ ´Ù. °¢ ÇÁ·Î¼¼¼´Â ÇöÀç ÇÁ·Î¼¼½º°¡ ŸÀÓ ½½¶óÀ̽º¸¦ ´Ù ¼Ò¸ðÇÏ¿´°Å³ª, ¾î¶² ½Ã½ºÅÛ ÀÚ¿øÀ» ±â´Ù·Á¾ß ÇÒ ¶§¸¶´Ù, µ¶¸³ÀûÀ¸·Î ½ºÄÉÁì·¯¸¦ ½ÇÇàÇÑ´Ù. SMP ½Ã½ºÅÛ¿¡¼ ¸Ç ¸ÕÀú ÁÖ¸ñÇÒ Á¡ Àº ½Ã½ºÅÛ¿¡ ÀÖ´Â idle ÇÁ·Î¼¼½º8°¡ ´Ü Çϳª°¡ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. ÇϳªÀÇ ÇÁ·Î¼¼¼°¡ ÀÖ´Â ½Ã ½ºÅÛ¿¡¼´Â task º¤ÅÍÀÇ Ã¹¹ø° ŽºÅ©°¡ idle ÇÁ·Î¼¼½ºÀÌ´Ù. ¹Ý¸é¿¡ SMP ½Ã½ºÅÛ¿¡¼´Â CPU¸¶´Ù ÇϳªÀÇ idle ÇÁ·Î¼¼½º°¡ ÀÖÀ¸¸ç, µû¶ó¼ Çϳª ÀÌ»óÀÇ idle CPU°¡ ÀÖÀ» ¼ö ÀÖ´Ù. °Ô ´Ù°¡ CPU¸¶´Ù Çϳª¾¿ÀÇ ÇöÀç ÇÁ·Î¼¼½º°¡ ÀÖÀ¸¹Ç·Î, SMP ½Ã½ºÅÛ¿¡¼´Â °¢ ÇÁ·Î¼¼¼º°·Î Çö Àç ÇÁ·Î¼¼½º¿Í idle ÇÁ·Î¼¼½º¸¦ °ü¸®ÇÏ¿©¾ß ÇÑ´Ù.
SMP ½Ã½ºÅÛ¿¡¼ °¢ ÇÁ·Î¼¼½ºÀÇ task_struct¿¡´Â ÀÚ½ÅÀÌ ÇöÀç ½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î¼¼¼ ¹øÈ£(processor)¿Í ¸¶Áö¸·À¸·Î ½ÇÇàÇÏ¿´´ø ÇÁ·Î¼¼¼ÀÇ ¹øÈ£(last_processor)°¡ µé¾îÀÖ ´Ù. ¾î¶² ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇϵµ·Ï ¼±ÅÃÇÒ ¶§¸¶´Ù ´Ù¸¥ CPU¿¡¼ ½ÇÇàÇÏÁö ¸øÇÒ ÀÌÀ¯´Â ¾øÁö ¸¸, ¸®´ª½º´Â processor_mask¸¦ ÀÌ¿ëÇÏ¿© ±× ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÇ Æ¯Á¤ ÇÁ·Î¼¼¼ ¶Ç´Â ¸î°³ÀÇ ÇÁ·Î¼¼¼¿¡¼¸¸ ½ÇÇàµÇµµ·Ï Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ¸¸¾à NºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é ±× ÇÁ·Î ¼¼½º´Â ÇÁ·Î¼¼¼ N¿¡¼¸¸ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ½ºÄÉÁì·¯°¡ ½ÇÇàÇÒ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ °í¸¦ ¶§ processor_mask¿¡ ÇöÀç ÇÁ·Î¼¼¼ÀÇ ¹øÈ£°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº ÇÁ·Î¼¼½º´Â °í·ÁÇÏÁö ¾Ê ´Â´Ù. ½ºÄÉÁì·¯´Â ¸¶Áö¸·À¸·Î ÇöÀç ÇÁ·Î¼¼¼¿¡¼ ½ÇÇàµÇ¾ú´ø ÇÁ·Î¼¼½º¿¡°Ô ¾à°£ À¯¸®ÇÏ°Ô ÇØÁØ´Ù. ÀÌ´Â ÇÑ ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ÇÁ·Î¼¼¼·Î ¿Å±æ ¶§ ¼º´É»óÀÇ ¿À¹öÇìµå°¡ ¹ß»ýÇÏ´Â °æ¿ì °¡ Á¾Á¾ Àֱ⠶§¹®ÀÌ´Ù.
µÎ¹ø° ÀڷᱸÁ¶ÀÎ files_struct´Â ÇöÀç ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ°í ÀÖ´Â ¸ðµç ÆÄÀϵ鿡 ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ÇÁ·Î±×·¥Àº Ç¥ÁØ ÀÔ·Â(standard input)¿¡¼ Àаí, Ç¥ÁØ Ãâ·Â(standard output)À¸·Î ¾´´Ù. ¿¡·¯ ¸Þ½ÃÁö´Â ¸ðµÎ Ç¥ÁØ ¿¡·¯(standard error)·Î °¡°Ô µÈ´Ù. À̵éÀº ÆÄÀÏÀÏ ¼öµµ ÀÖ°í, ´Ü¸» ÀÔ/Ãâ·ÂÀ̳ª, ½ÇÁ¦ ÀåÄ¡Àϼöµµ ÀÖÀ¸³ª, ÇÁ·Î±×·¥¿¡ ÀÖ¾î¼ ÀÌµé ¸ðµÎ´Â ÆÄ ÀϷΠ󸮵ȴÙ. °¢ ÆÄÀÏÀº ÀÚ½ÅÀ» ³ªÅ¸³»´Â ±â¼úÀÚ(descriptor)¸¦ °¡Áö¸ç, files_struct´Â ÀÌ ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ´Â ÆÄÀÏÀ» ±â¼úÇÏ´Â file ÀڷᱸÁ¶¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ 256°³±îÁö °¡Áø ´Ù. f_mode Ç׸ñÀº ÆÄÀÏÀÌ ¸¸µé¾îÁú ¶§ÀÇ ¸ðµå(Àбâ Àü¿ë, ÀÐ°í ¾²±â, ¾²±â Àü¿ë)¸¦ ³ªÅ¸³½ ´Ù. f_pos¿¡´Â ´ÙÀ½ ¹ø¿¡ Àаųª ¾µ À§Ä¡°¡ µé¾î ÀÖ´Ù. f_inode´Â ±× ÆÄÀÏ¿¡ ÇØ´çÇÏ´Â VFS inode¸¦ °¡¸®Å°°í ÀÖÀ¸¸ç, f_ops´Â ±× ÆÄÀÏ¿¡ ´ëÇÏ¿© ¹«¾ð°¡ ÇÏ·Á°í ÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â ·çƾµéÀÇ ÁÖ¼ÒÀÇ º¤Å͸¦ °¡¸®Å²´Ù. ÀÌ·± ÇÔ¼ö·Î µ¥ÀÌÅÍ ¾²±â ÇÔ¼ö¸¦ µé ¼ö ÀÖ´Ù. ÀÌ·¸ °Ô ÀÎÅÍÆäÀ̽º¸¦ Ãß»óÈÇÏ´Â °ÍÀº ¸Å¿ì °·ÂÇÏ¸ç ¸®´ª½º°¡ ¹æ´ëÇÑ Á¾·ùÀÇ ÆÄÀÏ À¯ÇüÀ» Áö¿ø ÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. µÚ¿¡¼ »ìÆ캸°ÚÁö¸¸ ¸®´ª½º¿¡¼ ÆÄÀÌÇÁ´Â ÀÌ·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» ÅëÇÏ¿© ±¸ÇöµÇ¾ú´Ù.
ÇϳªÀÇ ÆÄÀÏÀÌ ¿ ¶§¸¶´Ù files_struct¿¡ ÀÖ´Â ºó file Æ÷ÀÎÅÍ Áß Çϳª°¡ »õ·Î¿î file ÀڷᱸÁ¶¸¦ °¡¸®Å°±â À§ÇØ »ç¿ëµÈ´Ù. ¸®´ª½º ÇÁ·Î¼¼½º´Â óÀ½ ½ÃÀÛÇÒ ¶§ ¼¼°³ÀÇ ÆÄÀÏ ±â¼ú ÀÚ°¡ ¿·Á ÀÖ´Ù°í »ý°¢ÇÑ´Ù. Ç¥ÁØ ÀÔ·Â, Ç¥ÁØ Ãâ·Â, Ç¥ÁØ ¿¡·¯°¡ ±× ¼¼°¡Áö·Î, À̵éÀº ´ë°³ ±× ÇÁ·Î¼¼½º¸¦ ¸¸µç ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ »ó¼ÓµÈ´Ù. ÆÄÀÏ¿¡ ´ëÇÑ ¸ðµç Á¢±ÙÀº Ç¥ÁØ ½Ã½ºÅÛ ÄÝÀ» ÅëÇϸç, ¿©±â¿¡ ÆÄÀÏ ±â¼úÀÚ¸¦ ³Ñ°ÜÁְųª µÇµ¹·Á ¹Þ°Ô µÈ´Ù. ÀÌµé ±â¼úÀÚ´Â ÇÁ·Î¼¼½º ÀÇ fd º¤ÅÍ¿¡ ´ëÇÑ À妽º °ªÀ¸·Î, Ç¥ÁØ ÀÔ·Â, Ç¥ÁØ Ãâ·Â, Ç¥ÁØ ¿¡·¯´Â °¢°¢ 0, 1, 2 ÀÇ ±â¼ú ÀÚ¸¦ °®°í ÀÖ´Ù. ÆÄÀÏ¿¡ ´ëÇÑ Á¢±ÙÀº file ÀڷᱸÁ¶ÀÇ ÆÄÀÏ ¿¬»ê ·çƾ°ú VFS inode¸¦ °°ÀÌ »ç¿ëÇÑ´Ù.
¾î¶² ÁÖ¾îÁø ½Ã°£ µ¿¾È ÇÑ ÇÁ·Î¼¼½º´Â °¡»ó ¸Þ¸ð¸®¿¡ µé¾î ÀÖ´Â ÄÚµå¿Í µ¥ÀÌÅ͸¦ ¸ðµÎ »ç¿ë ÇÏÁö´Â ¾Ê´Â´Ù. ÄÚµå Áß¿¡´Â ¾î¶² ƯÁ¤ÇÑ °æ¿ì, ¿¹¸¦ µé¾î ÇÁ·Î¼¼½º°¡ ½ÃÀÛµÉ ¶§ ¶Ç´Â ¾î¶² À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§¿¡¸¸ ÇÊ¿äÇÑ Äڵ尡 ÀÖ´Ù. ±×¸®°í °øÀ¯ ¶óÀ̺귯¸®ÀÇ ·çƾµµ ¸ðµÎ »ç¿ë ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀϺθ¸ »ç¿ëÇÑ´Ù. µû¶ó¼ ¾È ¾²ÀÏ ¼öµµ ÀÖ´Â Äڵ带 ½ÇÁ¦ ¸Þ¸ð¸®¿¡ ¸ðµÎ ·ÎµåÇÏ´Â °ÍÀº ³¶ºñ°¡ µÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ³¶ºñ°¡ ½Ã½ºÅÛ³»ÀÇ ÇÁ·Î¼¼½º ¼ö¸¸Å ¹Ýº¹µÈ´Ù¸é ½Ã½ºÅÛÀº ¸Å¿ì ºñÈ¿À²ÀûÀ¸·Î ½ÇÇàµÉ °ÍÀÌ´Ù. ´ë½Å¿¡ ¸®´ª½º´Â ¿ä±¸ ÆäÀÌ¡(demand paging)ÀÌ ¶ó´Â ±â¹ýÀ» »ç¿ëÇÑ´Ù. ¿ä±¸ ÆäÀÌ¡¿¡¼´Â ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â ¼ø°£ ¿¡, °¡»ó ¸Þ¸ð¸®¸¦ ½ÇÁ¦ ¸Þ¸ð¸®·Î °¡Á®¿Â´Ù. µû¶ó¼ ¸®´ª½º Ä¿³ÎÀº ÇÁ·Î¼¼½ºÀÇ ÄÚµå¿Í µ¥ÀÌ Å͸¦ °ð¹Ù·Î ½ÇÁ¦ ¸Þ¸ð¸®¿¡ ·ÎµåÇÏ´Â ´ë½Å, ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺íÀ» ¼öÁ¤ÇÏ¿© °¡»ó ¿µ ¿ª¿¡´Â Á¸ÀçÇÏ°í ÀÖÁö¸¸ ½ÇÁ¦·Î´Â ¸Þ¸ð¸®¿¡ ÀÖÁö´Â ¾Ê´Ù°í Ç¥½ÃÇÑ´Ù. ¸¸¾à ÇÁ·Î¼¼½º°¡ ÄÚµå ³ª µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÏ·Á°í Çϸé, ½Ã½ºÅÛÀº ÆäÀÌÁö ÆúÆ®¸¦ ¹ß»ýÇÏ°í, ¸®´ª½º Ä¿³Î·Î ÇÏ¿©±Ý ±× »óȲÀ» ÇØ°áÇ϶ó°í Á¦¾î±ÇÀ» ³Ñ°ÜÁØ´Ù. ÀÌ·¯ÇÑ ÆäÀÌÁö ÆúÆ®¸¦ ÇØ°áÇÏ·Á¸é, ¸®´ª½º´Â ÇÁ·Î¼¼ ½ºÀÇ ÁÖ¼Ò °ø°£¿¡ ÀÖ´Â ¸ðµç °¡»ó ¸Þ¸ð¸® ¿µ¿ª¿¡ ´ëÇØ, ±× °¡»ó ¸Þ¸ð¸®°¡ ¾îµð¿¡¼ ¿ÔÀ¸¸ç ¾î¶»°Ô ¸Þ¸ð¸®¿¡ ·ÎµåÇÒ ¼ö ÀÖ´Â Áö¸¦ ¾Ë¾Æ¾ß¸¸ ÇÑ´Ù.
¸®´ª½º Ä¿³ÎÀº ÀÌµé °¡»ó ¸Þ¸ð¸®ÀÇ ¸ðµç ¿µ¿ªÀ» °ü¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. °¢ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®ÀÇ ³»¿ëÀº task_struct¿¡¼ °¡¸®Å°°í ÀÖ´Â mm_struct¶ó´Â ÀڷᱸÁ¶¿¡ ¼³¸íµÇ¾î ÀÖ´Ù. ÇÁ·Î¼¼½ºÀÇ mm_struct ÀڷᱸÁ¶´Â ·ÎµåµÈ ½ÇÇà À̹ÌÁö¿¡ ´ëÇÑ Á¤º¸¿Í ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×ÀÌºí¿¡ ´ëÇÑ Æ÷ÀÎÅ͵µ °®°í ÀÖ´Ù. ¿©±â¿¡´Â ±× ÇÁ·Î¼¼½ºÀÇ °¢ °¡»ó ¸Þ¸ð¸® ¿µ¿ªÀ» ³ªÅ¸³»´Â vm_area_struct ÀڷᱸÁ¶ÀÇ ¸®½ºÆ®¿¡ ´ëÇÑ Æ÷ÀÎÅ͵µ µé¾î ÀÖ´Ù.
ÀÌ ¿¬°á ¸®½ºÆ®´Â °¡»ó ¸Þ¸ð¸®¿¡¼ ¿À¸§Â÷¼øÀ¸·Î µÇ¾î ÀÖÀ¸¸ç, ±×¸² 4.2´Â °£´ÜÇÑ ÇÁ·Î¼¼½º ¿¡¼ °¡»ó ¸Þ¸ð¸®ÀÇ ¹èÄ¡»óȲ°ú ±×°ÍÀ» °ü¸®Çϱâ À§ÇÑ Ä¿³Î ÀڷᱸÁ¶¸¦ º¸¿©ÁØ´Ù. °¡»ó ¸Þ ¸ð¸®ÀÇ ¿µ¿ªµéÀº ¿©·¯ ¼Ò½º·ÎºÎÅÍ ³ª¿À¹Ç·Î, ¸®´ª½º´Â ¿©·¯°³ÀÇ °¡»ó ¸Þ¸ð¸® ó¸® ·çƾÀ» vm_area_struct¿¡ ÀÖ´Â vm_ops¸¦ ÅëÇÏ¿© °¡¸®Å°°Ô ÇÔÀ¸·Î½á ÀÎÅÍÆäÀ̽º¸¦ Ãß»óÈ ÇÏ¿´ ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇϺΠ¼ºñ½º°¡ ¸Þ¸ð¸®¸¦ ¿©·¯°¡Áö ´Ù¸¥ ¹æ½ÄÀ¸·Î °ü¸®ÇÏ´Â °Í°ú »ó°ü ¾øÀÌ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¸¦ ÀÏ°ü¼ºÀÖ°Ô Ã³¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¿¹¸¦ µé¾î, ¿©±â¿¡´Â ¾î¶² ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®¿¡ Á¢±ÙÇϴµ¥ ±× ¸Þ¸ð¸®°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§ ºÒ¸®´Â ·çƾÀÌ µé¾î ÀÖ´Ù. ÆäÀÌÁö ÆúÆ®´Â ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î 󸮵ȴÙ.
¸®´ª½º Ä¿³ÎÀº ÀÌ ÇÁ·Î¼¼½º ¿ëÀ¸·Î °¡»ó ¸Þ¸ð¸®¿¡ »õ·Î¿î ¿µ¿ªÀ» ¸¸µé°Å³ª, ¹°¸®Àû ¸Þ¸ð¸® »ó¿¡ ÀÖÁö ¾ÊÀº °¡»ó ¸Þ¸ð¸®¿¡ ´ëÇÑ ÂüÁ¶¸¦ ÇØ°áÇÒ ¶§, ÀÌ ÇÁ·Î¼¼½ºÀÇ vm_area_struct ÀڷᱸÁ¶ ÁýÇÕÀ» ÀÚÁÖ ¾×¼¼½ºÇÏ°Ô µÈ´Ù. µû¶ó¼ ¿Ã¹Ù¸¥ vm_area_struct¸¦ ã´Â µ¥ °É¸® ´Â ½Ã°£Àº ½Ã½ºÅÛÀÇ ¼º´É¿¡ Å« ¿µÇâÀ» ¹ÌÄ£´Ù. ÀÌ ¾×¼¼½º¸¦ ºü¸£°Ô Çϱâ À§ÇÏ¿© ¸®´ª½º´Â vm_area_struct ÀڷᱸÁ¶¸¦ AVL(Adelson-Velskii and Landis) Æ®¸®ÀÇ ÇüÅ·ΠÁ¤¸®ÇصдÙ. ÀÌ Æ®¸®¿¡¼´Â °¢°¢ÀÇ vm_area_struct(Áï, ³ëµå)ÀÇ ¿ÞÂÊ Æ÷ÀÎÅÍ¿Í ¿À¸¥ÂÊ Æ÷ÀÎÅÍ´Â ÀÎÁ¢ ÇÏ´Â vm_area_struct¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. ¿ÞÂÊ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ³ëµå´Â ´õ ³·Àº ½ÃÀÛ °¡»ó ÁÖ¼Ò¸¦ °®°í ÀÖÀ¸¸ç, ¿À¸¥ÂÊ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ³ëµå´Â ´õ ³ôÀº ½ÃÀÛ °¡»ó ÁÖ¼Ò¸¦ °® °í ÀÖ´Ù. ¸Â´Â ³ëµå¸¦ ãÀ» ¶§´Â Æ®¸®ÀÇ ·çÆ®·ÎºÎÅÍ ½ÃÀÛÇÏ¿© ãÀ¸·Á´Â vm_area_struct ¸¦ ãÀ» ¶§±îÁö ¿ÞÂÊ ¶Ç´Â ¿À¸¥ÂÊ Æ÷ÀÎÅ͸¦ µû¶ó°£´Ù. ¹°·Ð ¼¼»ó¿¡´Â °øÂ¥°¡ ¾ø±â ¶§¹®¿¡ »õ·Î¿î vm_area_struct¸¦ ÀÌ Æ®¸®¿¡ Áý¾î ³Ö´Âµ¥¿¡´Â Ãß°¡ÀûÀΠó¸® ½Ã°£ÀÌ ÇÊ¿äÇÏ´Ù.
¾î¶² ÇÁ·Î¼¼½º°¡ °¡»ó ¸Þ¸ð¸®¸¦ ÇÒ´ç¹ÞÀ» ¶§ ¸®´ª½º´Â ½ÇÁ¦ ¸Þ¸ð¸®¸¦ ÁøÂ¥·Î È®º¸ÇØ µÎÁö´Â ¾Ê´Â´Ù. ´ë½Å »õ·Î¿î vm_area_struct ÀڷᱸÁ¶¸¦ ¸¸µé¾î °¡»ó ¸Þ¸ð¸®¸¦ ³ªÅ¸³½´Ù. ÀÌ ÀÚ ·á±¸Á¶´Â ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸® ¸®½ºÆ®¿¡ ¿¬°áµÈ´Ù. ÇÁ·Î¼¼½º°¡ »õ·Î¿î °¡»ó ¸Þ¸ð¸® ¿µ¿ª ¾ÈÀÇ ¾î¶² ÁÖ¼Ò¿¡ °ªÀ» ¾²·Á°í Çϸé ÆäÀÌÁö ÆúÆ®°¡ ¹ß»ýÇÏ°Ô µÈ´Ù. ÇÁ·Î¼¼¼´Â °¡»ó ÁÖ¼Ò¸¦ Çؼ®ÇÏ·Á°í ÇÏÁö¸¸, ÀÌ ¸Þ¸ð¸®¿¡ ´ëÇؼ ÆäÀÌÁö Å×ÀÌºí ¿£Æ®¸®°¡ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, ÇÁ ·Î¼¼¼´Â À̸¦ Æ÷±âÇÏ°í ÆäÀÌÁö ÆúÆ® ¿¹¿Ü¸¦ ¹ß»ýÇϸç, ¸®´ª½º Ä¿³ÎÀÌ À̸¦ ¼öÁ¤Çϵµ·Ï ÇÑ ´Ù. ¸®´ª½º´Â ÂüÁ¶µÈ °¡»ó ÁÖ¼Ò°¡ ÇöÀç ÇÁ·Î¼¼½ºÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ ÀÖ´ÂÁö ã´Â´Ù. ±×·¸´Ù ¸é ¸®´ª½º´Â ÇØ´çÇÏ´Â PTE¸¦ »ý¼ºÇÏ°í, ¹°¸®Àû ¸Þ¸ð¸® ÆäÀÌÁö¸¦ ÇÒ´çÇÑ´Ù. Äڵ峪 µ¥ÀÌÅÍ´Â ÆÄÀϽýºÅÛÀ̳ª ½º¿Ò µð½ºÅ©·ÎºÎÅÍ ¹°¸®Àû ÆäÀÌÁö·Î °¡Á®¿Í¾ß ÇÒ ¼öµµ ÀÖ´Ù. ÀÌÁ¦ ÇÁ·Î¼¼½º ´Â ÆäÀÌÁö ÆúÆ®¸¦ ¹ß»ýÇÑ ¸í·É¿¡¼ºÎÅÍ ´Ù½Ã ½ÃÀÛÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌÁ¦ ¸Þ¸ð¸®°¡ ¹°¸®ÀûÀ¸·Î Á¸ÀçÇϹǷΠÀÛ¾÷À» °è¼ÓÇÒ ¼ö ÀÖ´Ù.
init Ä¿³Î ¾²·¹µå(¶Ç´Â ÇÁ·Î¼¼½º)´Â ½Ã½ºÅÛÀÇ Ã¹¹ø° ÁøÂ¥ ÇÁ·Î¼¼½º·Î, ÇÁ·Î¼¼½º ½Äº°ÀÚ·Î 1À» °®´Â´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛ ÃʱâÈÀÇ ÀϺθ¦ ´ã´çÇÏ°í (½Ã½ºÅÛ ÄܼÖÀ» ¿°í, ·çÆ® ÆÄ ÀÏ ½Ã½ºÅÛÀ» ¸¶¿îÆ®ÇÏ´Â °Í µî), ½Ã½ºÅÛ ÃʱâÈ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ½Ã½ºÅÛ¿¡ µû¶ó¼ ´Ù¸£ Áö¸¸ /etc/init, /bin/init, /sbin/init ÁßÀÇ ÇϳªÀÌ´Ù. init ÇÁ·Î±×·¥Àº ½Ã½ºÅÛ¿¡ ¼ »õ ÇÁ·Î¼¼½ºµéÀ» ¸¸µé±â À§Çؼ /etc/inittabÀ̶ó´Â ½ºÅ©¸³Æ® ÆÄÀÏÀ» »ç¿ëÇÑ´Ù. ÀÌ »õ ÇÁ·Î¼¼½ºµéÀº ¶Ç ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀ» ¸¸µé±âµµ ÇÑ´Ù. ¿¹¸¦ µé¸é, getty ÇÁ·Î¼¼½º´Â »ç¿ëÀÚ°¡ ·Î±×ÀÎÀ» ½ÃµµÇÒ ¶§ login ÇÁ·Î¼¼½º¸¦ ¸¸µé±âµµ ÇÑ´Ù. ½Ã½ºÅÛ³»ÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀº init Ä¿³Î ¾²·¹µåÀÇ ÀÚ¼ÕÀÌ´Ù.
»õ ÇÁ·Î¼¼½ºµéÀº ¿¹ÀüÀÇ ÇÁ·Î¼¼½ºµéÀ» º¹Á¦Çϰųª ÇöÀçÀÇ ÇÁ·Î¼¼½º¸¦ º¹Á¦ÇÏ¸é¼ »ý¼ºµÈ´Ù. »õ ŽºÅ©´Â ½Ã½ºÅÛ ÄÝ(fork³ª clone)¿¡ ÀÇÇؼ ¸¸µé¾î Áö¸ç, º¹Á¦´Â Ä¿³ÎÀÌ Ä¿³Î ¸ðµå¿¡¼ ÇÑ´Ù. ½Ã½ºÅÛ ÄÝÀÇ ¸¶Áö¸·¿¡´Â ½ºÄÉÁì·¯°¡ ÀÚ½ÅÀ» ¼±ÅÃÇÏ¿© ½ÇÇàÇÏ±æ ±â´Ù¸®´Â »õ·Î¿î ÇÁ·Î ¼¼½º°¡ ÀÖ°Ô µÈ´Ù. »õ task_struct ÀڷᱸÁ¶°¡ ½Ã½ºÅÛÀÇ ½ÇÁ¦ ¸Þ¸ð¸®¿¡¼ ÇÒ´çµÇ°í, Çϳª ¶Ç´Â ¸î °³ÀÇ ÆäÀÌÁö°¡ º¹Á¦µÈ ÇÁ·Î¼¼½ºÀÇ ½ºÅÃ(»ç¿ëÀÚ¿Í Ä¿³Î) ¿ëÀ¸·Î ÇÒ´çµÈ´Ù. ½Ã½ºÅÛ¿¡ ÀÖ´Â ½Äº°ÀÚµé Áß¿¡¼ À¯ÀÏÇÑ »õ·Î¿î ½Äº°ÀÚ°¡ ¸¸µé¾îÁø´Ù. ±×¸®°í º¹Á¦µÈ ÇÁ·Î¼¼½º´Â ´ç¿¬ ÇÏ°Ôµµ ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ ½Äº°ÀÚ¸¦ °¡Áö°í ÀÖ´Ù. »õ task_struct°¡ task º¤ÅÍ¿¡ ÇÒ´çµÇ°í, ¿¹Àü (current) ÇÁ·Î¼¼½ºÀÇ task_structÀÇ ³»¿ëÀÌ º¹Á¦µÈ task_struct¿¡ º¹»çµÈ´Ù.
ÇÁ·Î¼¼½º¸¦ º¹Á¦ÇÒ ¶§, ¸®´ª½º´Â µÎ ÇÁ·Î¼¼½º°¡ º°µµÀÇ º¹»çº»À» »ç¿ëÇÏ´Â°Ô ¾Æ´Ï¶ó ÀÚ¿øÀ» °øÀ¯Çϵµ·Ï ÇÑ´Ù. ÇÁ·Î¼¼½ºÀÇ ÆÄÀϵé, ½Ã±×³Î Çڵ鷯¿Í °¡»ó ¸Þ¸ð¸®°¡ ¿©±â¿¡ ÇØ´çµÈ´Ù. ÀÚ ¿øÀ» °øÀ¯ÇÒ ¶§ À̵éÀÇ count °ªÀ» Áõ°¡½ÃÄÑ µÎ°³ÀÇ ÇÁ·Î¼¼½º ¸ðµÎ°¡ ÀÚ¿ø »ç¿ëÀ» ¸¶Ä¡±â Àü¿¡´Â ÇÒ´çÀ» ÇØÁ¦ÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. ±×·¡¼, ¿¹¸¦ µé¾î º¹Á¦µÈ ÇÁ·Î¼¼½º¿Í °¡»ó ¸Þ¸ð¸® ¸¦ °øÀ¯ÇÒ ¶§, ÀÌ ÇÁ·Î¼¼½ºÀÇ task_struct´Â ¿ø·¡ ÇÁ·Î¼¼½ºÀÇ mm_struct¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ¸¦ °®°í, mm_structÀÇ count °ªÀº Áõ°¡µÇ¾î¼ À̸¦ °øÀ¯ÇÏ°í ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °³¼ö¸¦ ³ª Ÿ³½´Ù.
ÇÁ·Î¼¼½ºÀÇ °¡»ó¸Þ¸ð¸®¸¦ º¹Á¦ÇÏ´Â µ¥¿¡´Â Á» ´õ Æ®¸¯À» »ç¿ëÇÑ´Ù. »õ vm_area_struct ÀڷᱸÁ¶µéÀº À̵éÀ» Æ÷ÇÔÇÏ´Â mm_struct ÀڷᱸÁ¶¿Í º¹Á¦µÈ ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺í°ú ÇÔ²² ¸¸µé¾î Á®¾ß ÇÑ´Ù. ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®´Â ÀÌ ½ÃÁ¡±îÁö´Â ÀüÇô º¹»çµÇÁö ¾Ê´Â´Ù. °¡ »ó ¸Þ¸ð¸®ÀÇ ÀϺδ ½ÇÁ¦ ¸Þ¸ð¸®¿¡ ÀÖ°í, ¶Ç ´Ù¸¥ ºÎºÐÀº ÇöÀç ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½ºÀÇ ½ÇÇà À̹ÌÁö¿¡ ÀÖÀ¸¸ç, ¾î¶² ºÎºÐÀº ½º¿Ò ÆÄÀÏ¿¡ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î, ÀÌ°ÍÀº »ó´çÈ÷ ¾î·Æ°í ½Ã°£À» ¼Ò¿äÇÏ´Â ÀÏÀÌ´Ù. ´ë½Å¿¡ ¸®´ª½º´Â "±â·Ï½Ã º¹»ç(copy on write)"¶ó´Â ±â¼úÀ» »ç¿ëÇϴµ¥, ÀÌ°Í Àº µÎ ÇÁ·Î¼¼½º Áß Çϳª°¡ ±â·ÏÀ» ½ÃµµÇÒ ¶§¸¸ °¡»ó ¸Þ¸ð¸®¸¦ º¹»çÇÏ´Â °ÍÀÌ´Ù. °¡»ó ¸Þ¸ð ¸® Áß¿¡¼ ±â·ÏµÇÁö ¾ÊÀº ºÎºÐÀº (¼³»ç ±×°ÍÀÌ ¾µ ¼ö ÀÖ´Â ¿µ¿ªÀ̶ó°í ÇÏ´õ¶óµµ) ¾Æ¹« ¹®Á¦ ¾øÀÌ µÎ ÇÁ·Î¼¼½º »çÀÌ¿¡¼ °øÀ¯µÈ´Ù. ½ÇÇà ÄÚµå¿Í °°Àº Àбâ Àü¿ë ¸Þ¸ð¸®´Â Ç×»ó °øÀ¯µÈ´Ù. "±â·Ï½Ã º¹»ç"°¡ µ¿ÀÛÇϱâ À§Çؼ, ¾µ ¼ö ÀÖ´Â ¿µ¿ªµéÀÇ ÆäÀÌÁö Å×ÀÌºí ¿£Æ®¸®´Â Àбâ Àü¿ë À¸·Î Ç¥½ÃµÇ°í, À̸¦ ³ªÅ¸³»´Â vm_area_struct ÀڷᱸÁ¶¿¡´Â "±â·Ï½Ã º¹»ç"¶ó°í Ç¥½ÃÇÑ´Ù. ±×·¯¸é ÇÁ·Î¼¼½º Áß Çϳª°¡ ÀÌ °¡»ó ¸Þ¸ð¸®¿¡ ¾²·Á°í Çϸé ÆäÀÌÁö ÆúÆ®°¡ ¹ß»ýÇÑ´Ù. ÀÌ ¶§ ¸®´ª½º´Â ¸Þ¸ð¸®ÀÇ º¹»çº»À» ¸¸µé°í µÎ ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö ¸ñ·Ï°ú °¡»ó ¸Þ¸ð¸® ±¸Á¶¸¦ Á¶Á¤ ÇÑ´Ù.
ÀÌµé ¿ä±Ý°è»ê¿ë ŸÀ̸ӿ¡ ¿Ü¿¡µµ, ¸®´ª½º´Â ÇÁ·Î¼¼½º°¡ ÁöÁ¤ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Â °£°Ý Ÿ À̸Ӹ¦ Áö¿øÇÑ´Ù. ÇÁ·Î¼¼½º´Â À̵é ŸÀ̸Ӹ¦ À̶² ½Ã°£ÀÌ Áö³µÀ» ¶§ Àڽſ¡¼ ¿©·¯°¡Áö ½Ã ±×³ÎÀ» º¸³»´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ¼¼°¡Áö Á¾·ùÀÇ °£°Ý ŸÀ̸Ӹ¦ Áö¿øÇÑ´Ù.
Çϳª ¶Ç´Â ¸ðµç °£°Ý ŸÀ̸Ӱ¡ ½ÇÇàµÉ ¼ö ÀÖÀ¸¸ç, ¸®´ª½º´Â ÇÁ·Î¼¼½ºÀÇ task_struct ÀÚ·á ±¸Á¶¿¡ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ °£Á÷ÇÑ´Ù. ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÏ¿© ÀÌµé °£°Ý ŸÀ̸Ӹ¦ ¼³Á¤ÇÏ°í, ½ÃÀÛÇÏ°í, ¸ØÃß°í, ÇöÀç °ªÀ» ÀÐÀ» ¼ö ÀÖ´Ù. °¡»ó ŸÀÌ¸Ó¿Í À϶÷ ŸÀ̸Ӵ ¶È°°Àº ¹æ¹ýÀ¸·Î 󸮵ȴÙ. °¢ Ŭ·° ƽ¸¶´Ù ÇöÀç ÇÁ·Î¼¼½ºÀÇ °£°Ý ŸÀ̸Ӵ °¨¼ÒÇϸç, ¸¸·áµÇ¸é ÇØ´çÇÏ´Â ½Ã ±×³ÎÀ» ¹Þ´Â´Ù.
½ÇÁ¦ ½Ã°£ °£°Ý ŸÀ̸Ӵ ´Ù¸¥ ŸÀ̸ӵé°ú´Â ¾à°£ ´Ù¸£¸ç, ¸®´ª½º´Â À̵éÀ» À§ÇØ 11Àå¿¡¼ ¼³¸íÇÏ°í Àִ ŸÀÌ¸Ó ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ timer_list ÀڷᱸÁ¶ ¸¦ °¡Áö°í ÀÖÀ¸¸ç, ½ÇÁ¦ °£°Ý ŸÀ̸Ӱ¡ ½ÇÇàµÇ°í ÀÖÀ¸¸é, À̸¦ ½Ã½ºÅÛ Å¸ÀÌ¸Ó ¸®½ºÆ® Å¥¿¡ ³Ö´Â´Ù. ŸÀ̸Ӱ¡ ¸¸·áµÇ¸é ŸÀÌ¸Ó ÇϹݺΠÇڵ鷯´Â À̸¦ Å¥¿¡¼ Á¦°ÅÇÏ°í °£°Ý ŸÀÌ¸Ó ÇÚ µé·¯¸¦ ºÎ¸¥´Ù. ÀÌ Çڵ鷯´Â SIGALRM ½Ã±×³ÎÀ» ¹ß»ýÇÏ°í, »õ·Î °£°Ý ŸÀ̸Ӹ¦ ½ÃÀÛÇÏ¿© ÀÌ ¸¦ ´Ù½Ã ½Ã½ºÅÛ Å¸ÀÌ¸Ó Å¥¿¡ ³Ö´Â´Ù.
½ÇÇà ÆÄÀÏÀº ¿©·¯°¡Áö Æ÷¸ËÀ¸·Î µÇ¾î ÀÖÀ» ¼ö ÀÖÀ¸¸ç, ½ÉÁö¾î ½ºÅ©¸³Æ® ÆÄÀϵµ °¡´ÉÇÏ´Ù. ½º Å©¸³Æ® ÆÄÀÏ·Î ÀνÄÇß´Ù¸é, À̸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ¿Ã¹Ù¸¥ Çؼ®±â¸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î /bin/sh´Â ½© ½ºÅ©¸³Æ®¸¦ Çؼ®ÇÑ´Ù. ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀº ½ÇÇà ÄÚµå¿Í µ¥ÀÌÅÍ ¿Í ÇÔ²², ¿î¿µÃ¼°è°¡ À̸¦ ¸Þ¸ð¸®¿¡ ¿Ã¸®°í ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÇÊ¿äÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ¸®´ª½º¿¡¼ °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ÆÄÀÏ Æ÷¸ËÀº ELFÀÌÁö¸¸, ¸®´ª½º´Â ¾î¶² ¿ÀºêÁ§ Æ® ÆÄÀÏ Æ÷¸Ëµµ ´Ù·ê ¼ö ÀÖÀ»¸¸Å À¯¿¬ÇÏ°Ô µÇ¾î ÀÖ´Ù.
ÆÄÀÏ ½Ã½ºÅÛó·³ ¸®´ª½º´Â Ä¿³ÎÀ» ÄÄÆÄÀÏÇÒ ¶§ ÀÌÁø Æ÷¸ËÀ» Áö¿øÇÏ´Â °ÍÀ» Ä¿³Î¿¡ Æ÷ÇÔÇÒ ¼öµµ ÀÖ°í ¸ðµâ·Î ·ÎµåÇÒ ¼öµµ ÀÖ´Ù. Ä¿³ÎÀº Áö¿øÇÏ´Â ÀÌÁø Æ÷¸ËÀÇ ¸ñ·ÏÀ» °ü¸®ÇÏ°í ÀÖ´Ù°¡ (±×¸² 4.3ÂüÁ¶), ÆÄÀÏÀ» ½ÇÇàÇÏ·Á°í ÇÏ¸é µ¿ÀÛÇÏ´Â °ÍÀ» ãÀ» ¶§±îÁö Çϳª¾¿ °¢ ÀÌÁø Æ÷¸ËÀ» ½ÃµµÇغ»´Ù. ÀϹÝÀûÀ¸·Î ¸®´ª½º¿¡¼ Áö¿øÇÏ´Â ÀÌÁø Æ÷¸ËÀº a.out°ú ELFÀÌ´Ù. ÆÄÀÏÀ» ½ÇÇà ÇÒ ¶§ ÆÄÀÏÀ» ¸ðµÎ ´Ù ¸Þ¸ð¸®·Î ÀоîµéÀÏ ÇÊ¿ä´Â ¾øÀ¸¸ç, ¿ä±¸½Ã ·Îµù(demand loading) ±â¼ú À» »ç¿ëÇÏ¿©, ÇÁ·Î¼¼½º°¡ ½ÇÇà À̹ÌÁöÀÇ °¢ ºÎºÐÀ» »ç¿ëÇÒ ¶§ ÀÌ°ÍÀ» ¸Þ¸ð¸®·Î °¡Á®¿Â´Ù. ÀÌ ¹ÌÁö¿¡¼ ¾È¾²ÀÌ´Â ºÎºÐÀº ¸Þ¸ð¸®¿¡¼ Æó±âµÈ´Ù.
±×¸² 4.4´Â Á¤ÀûÀ¸·Î ¸µÅ©µÈ ELF ½ÇÇà À̹ÌÁöÀÇ ¹èÄ¡µµ¸¦ º¸¿©ÁØ´Ù. ÀÌ°ÍÀº "hello world"¸¦ Ãâ·ÂÇÏ°í Á¾·áÇÏ´Â °£´ÜÇÑ C ÇÁ·Î±×·¥ÀÌ´Ù. Çì´õ´Â ÀÌ°ÍÀÌ µÎ°³ÀÇ ¹°¸®Àû Çì´õ(e_phnumÀÌ 2ÀÌ´Ù)°¡ À̹ÌÁö ÆÄÀÏÀÇ Ã³À½À» ±âÁØÀ¸·Î 52¹ÙÀÌÆ®(e_phoff)¿¡ À§Ä¡ÇÏ´Â ELF À̹ÌÁö¶ó´Â °ÍÀ» À̾߱âÇÑ´Ù. ù¹ø° ¹°¸®Àû Çì´õ´Â À̹ÌÁö¿¡¼ ½ÇÇà Äڵ带 ±â¼úÇÑ´Ù. ÀÌ´Â °¡»ó ÁÖ¼Ò 0x8048000¿¡¼ ½ÃÀÛÇÏ°í 65532 ¹ÙÀÌÆ®¸¦ °®´Â´Ù. ÀÌ·¸°Ô Å« ÀÌÀ¯´Â ÀÌ°ÍÀÌ Á¤ÀûÀ¸·Î ¸µÅ©µÈ À̹ÌÁö¿©¼, "hello world"¸¦ Ãâ·ÂÇÏ´Â printf() ÇÔ¼ö¿¡ ´ëÇÑ ¶óÀ̺귯¸® Äڵ带 ¸ðµÎ °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. À̹ÌÁöÀÇ ÁøÀÔÁ¡(entry point), Áï ÇÁ·Î±×·¥¿¡¼ óÀ½ ½ÇÇàÇÏ´Â ¸í·ÉÀº À̹ÌÁö ÀÇ ½ÃÀÛÁÖ¼Ò°¡ ¾Æ´Ï¶ó °¡»ó ÁÖ¼Ò 0x8048090 (e_entry)ÀÌ´Ù. ÀÌ ÄÚµå´Â µÎ¹ø° ¹°¸®Àû Çì´õ ¸¦ ·ÎµåÇÑ Á÷ÈÄ¿¡ ¹Ù·Î ½ÃÀ۵ȴÙ. ÀÌ µÎ¹ø° ¹°¸®Àû Çì´õ´Â ÇÁ·Î±×·¥¿¡¼ÀÇ µ¥ÀÌÅ͸¦ ³ªÅ¸ ³»°í, °¡»ó ¸Þ¸ð¸®ÀÇ 0x8059BB8 À§Ä¡¿¡ ·ÎµåµÈ´Ù. ÀÌ µ¥ÀÌÅÍ´Â Àаųª ¾µ ¼ö ÀÖ´Ù. ¿©±â¼ ÆÄÀÏ¿¡¼ µ¥ÀÌÅÍÀÇ Å©±â´Â 2200¹ÙÀÌÆ®(p_filesz)Àε¥ ¹ÝÇØ, ¸Þ¸ð¸®¿¡¼ÀÇ Å©±â´Â 4248¹ÙÀÌ Æ®ÀÎ °ÍÀ» ´«Ä¡Ã¦ »ç¶÷µµ ÀÖÀ» °ÍÀÌ´Ù. À̴ óÀ½ 2200¹ÙÀÌÆ®´Â ¹Ì¸® ÃʱâÈµÈ µ¥ÀÌÅ͸¦ °¡ Áö°í ÀÖÁö¸¸, ´ÙÀ½¿¡ ÀÖ´Â 2048¹ÙÀÌÆ®´Â ½ÇÇà Äڵ尡 ÃʱâÈÇÒ µ¥ÀÌÅ͸¦ °¡Áö°í Àֱ⠶§¹® ÀÌ´Ù.
¸®´ª½º°¡ ÇÁ·Î¼¼½ºÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ ELF ½ÇÇà À̹ÌÁö¸¦ ·ÎµåÇÒ ¶§, ½ÇÁ¦·Î À̹ÌÁö¸¦ ¿Ã ¸®´Â °ÍÀº ¾Æ´Ï´Ù. ¸®´ª½º´Â ´ÜÁö °¡»ó ¸Þ¸ð¸® ÀڷᱸÁ¶ÀÎ ÇÁ·Î¼¼½ºÀÇ vm_area_struct Æ®¸®¿Í ¿©±â¿¡ ¼ÓÇÑ ÆäÀÌÁö Å×À̺íµéÀ» ¼Â¾÷ÇÏ´Â °ÍÀÌ´Ù. ±×¸®°í ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¸é¼ Æä ÀÌÁö ÆúÆ®°¡ ¹ß»ýÇϸé ÇÁ·Î±×·¥ÀÇ ÄÚµå¿Í µ¥ÀÌÅ͸¦ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®·Î °¡Á®¿Â´Ù. ÇÁ·Î±×·¥ ¿¡¼ ¾È¾²ÀÌ´Â ºÎºÐÀº Àý´ë ¸Þ¸ð¸®¿¡ ·ÎµåµÇÁö ¾Ê´Â´Ù. ELF ÀÌÁø Æ÷¸Ë ·Î´õ´Â ÀÚ½ÅÀÌ ½ÇÇà ÇÒ À̹ÌÁö°¡ ELF ½ÇÇà À̹ÌÁö°¡ ¸Â´Ù´Â °ÍÀ» È®ÀÎÇϸé, ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¿¡¼ ÇöÀç ½ÇÇà À̹ÌÁö¸¦ ÂѾƳ½´Ù. ÀÌ ÇÁ·Î¼¼½º´Â º¹Á¦µÈ À̹ÌÁöÀ̹ǷΠ(¸ðµç ÇÁ·Î¼¼½º°¡ ¸¶Âù°¡ÁöÁö ¸¸), ÀÌ ¿¾³¯ À̹ÌÁö´Â ºÎ¸ð ÇÁ·Î¼¼½º°¡ ½ÇÇàÇß´ø ÇÁ·Î±×·¥ - ¿¹¸¦ µé¾î bash°°Àº ¸í·É¾î Çؼ® ½© - ÀÏ °ÍÀÌ´Ù. ÀÌ·¸°Ô ¿¾³¯ ½ÇÇà À̹ÌÁö¸¦ ÂѾƳ»´Â °ÍÀº ¿¾³¯ °¡»ó ¸Þ¸ð¸® Àڷᱸ Á¶¸¦ ¾ø¾Ö°í ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺íµéÀ» ¸®¼ÂÇÑ´Ù. ¶ÇÇÑ ¼³Á¤µÇ¾î ÀÖ´Â ¸ðµç ½Ã±×³Î ÇÚ µé·¯¸¦ Áö¿ì°í, ¿·ÁÁø ÆÄÀϵéÀ» ¸ðµÎ ´Ý´Â´Ù. ÀÌ ÂѾƳ»±â °úÁ¤ÀÌ ³¡³ª¸é ÇÁ·Î¼¼½º´Â »õ·Î ¿î ½ÇÇà À̹ÌÁö¸¦ ¹Þ¾ÆµéÀÏ Áغñ°¡ µÈ´Ù. ½ÇÇà À̹ÌÁö°¡ ¾î¶² Æ÷¸ËÀ̳Ŀ¡ °ü°è¾øÀÌ ÇÁ·Î¼¼ ½ºÀÇ mm_struct´Â ¶È°°Àº Á¤º¸·Î ¼Â¾÷ÀÌ µÈ´Ù. ¿©±â¿¡´Â À̹ÌÁöÀÇ ÄÚµå¿Í µ¥ÀÌÅÍÀÇ ½ÃÀÛ °ú ³¡À» ³ªÅ¸³»´Â Æ÷ÀÎÅÍ°¡ ÀÖ´Ù. ÀÌ °ªµéÀº ELF ½ÇÇà À̹ÌÁö ¹°¸®Àû Çì´õ¸¦ Àд Áß¿¡ ¹ß °ßÇÏ°Ô µÇ°í, ÀÌ Çì´õ¿¡¼ ±â¼úÇÏ´Â ÇÁ·Î±×·¥ ¼½¼ÇµéÀº ÇÁ·Î¼¼½ºÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ ¸ÊÇÎ ÀÌ µÈ´Ù. ÀÌ´Â vm_area_struct ÀڷᱸÁ¶¸¦ ¼Â¾÷ÇÏ°í ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö Å×À̺íµéÀ» ¼öÁ¤ ÇÒ ¶§µµ ¸¶Âù°¡Áö´Ù. mm_struct ÀڷᱸÁ¶ ¶ÇÇÑ ÇÁ·Î±×·¥¿¡ Àü´ÞµÉ ÀÎÀڵ鿡 ´ëÇÑ Æ÷ÀÎÅÍ¿Í ÇÁ·Î¼¼½ºÀÇ È¯°æ º¯¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͵µ °¡Áö°í ÀÖ´Ù.
ELF °øÀ¯ ¶óÀ̺귯¸®
ÇÑÆí, µ¿ÀûÀ¸·Î ¸µÅ©µÇ´Â À̹ÌÁö´Â ½ÇÇàÇϴµ¥ ÇÊ¿äÇÑ ¸ðµç ÄÚµå¿Í µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖÁø ¾Ê´Â´Ù. À̵é Áß ÀϺδ ½ÇÇà½Ã¿¡ À̹ÌÁö¿Í ¸µÅ©µÇ´Â °øÀ¯ ¶óÀ̺귯¸®(shared library)¿¡ µé¾î ÀÖ´Ù. ELF °øÀ¯ ¶óÀ̺귯¸®ÀÇ Å×À̺íµéÀº ½ÇÇà½Ã¿¡ µ¿Àû ¸µÄ¿°¡ °øÀ¯ ¶óÀ̺귯¸®¸¦ À̹ÌÁö ¿Í ¿¬°áÇÒ ¶§ »ç¿ëÇÑ´Ù. ¸®´ª½º´Â ¿©·¯°³ÀÇ µ¿Àû ¸µÄ¿¸¦ »ç¿ëÇÑ´Ù. ld.so.1, libc.so.1, ld-linux.so.1. ÀÌµé ¸ðµÎ´Â /lib¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸®´Â ¾ð¾î ¼ºê·çƾ °° ÀÌ °øÅëÀ¸·Î »ç¿ëÇÏ´Â Äڵ带 °¡Áø´Ù. µ¿Àû ¸µÅ©¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¸ðµç ÇÁ·Î±×·¥Àº ÀÌ µé ¶óÀ̺귯ÀÇ º¹»çº»À» °¡Áö°í ÀÖ¾î¾ß ÇÒ °ÍÀ̸ç, ÈξÀ ¸¹Àº µð½ºÅ© °ø°£°ú °¡»ó ¸Þ¸ð¸®¸¦ ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. µ¿Àû ¸µÅ©¿¡¼ Á¤º¸µéÀº ELF À̹ÌÁö¿¡ ÀÖ´Â ÂüÁ¶ÇÏ´Â ¸ðµç ¶óÀ̺귯¸® ÇÔ¼öµéÀÇ Å×ÀÌºí¿¡ µé¾î ÀÖ´Ù. ÀÌ Á¤º¸´Â µ¿Àû ¸µÄ¿¿¡°Ô ¾î¶»°Ô ¶óÀ̺귯¸® ·çƾÀ» À§Ä¡½Ã Å°°í ÇÁ·Î±×·¥ÀÇ ÁÖ¼Ò °ø°£¿¡ ¸µÅ©½ÃųÁö¸¦ ¾Ë·ÁÁØ´Ù.
REVIEW NOTE : ½ÇÇà ¿¹Á¦¸¦ °¡Áö°í À̸¦ ´õ ÀÚ¼¼È÷ ¼³¸íÇÒ ÇÊ¿ä°¡ Àִ°¡?
#!/usr/bin/wish
½ºÅ©¸³Æ® ÀÌÁø ·Î´õ´Â ÀÌ ½ºÅ©¸³Æ®¸¦ ó¸®ÇÒ ÀÎÅÍÇÁ¸®Å͸¦ ãÀ¸·Á°í ÇÑ´Ù. ÀÌ°ÍÀº ½ºÅ©¸³Æ® ÀÇ Ã¹¹ø° ÁÙ¿¡¼ ¸»ÇÑ ½ÇÇàÆÄÀÏÀ» ¿·Á°í ÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à À̸¦ ¿ ¼ö ÀÖ´Ù¸é, ÀÌ ÇÁ·Î±× ·¥ÀÇ VFS inode¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áö°í ½ºÅ©¸³Æ® ÆÄÀÏ Çؼ®À» ½ÃÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ½º Å©¸³Æ® ÆÄÀÏÀÇ À̸§Àº ÀÎÀÚ 0¹ø(ÇÁ·Î±×·¥¿¡ Àü´ÞµÇ´Â ù¹ø° ÀÎÀÚ)¿¡ ¼³Á¤µÇ°í, ´Ù¸¥ ¸ðµç ÀÎÀڵ鵵 ÇÑ Ä¾¿ À̵¿ÇÏ°Ô µÈ´Ù (¿ø·¡ ù¹ø° ÀÎÀÚ¿´´ø °ÍÀÌ µÎ¹ø° ÀÎÀÚ°¡ µÇ´Â ½ÄÀÌ´Ù). ÀÎÅÍÇÁ¸®Å͸¦ ·ÎµåÇÏ´Â °ÍÀº ¸®´ª½º°¡ ¸ðµç ½ÇÇà ÆÄÀÏÀ» ·ÎµåÇÏ´Â °Í°ú °°Àº ¹æ¹ýÀ¸·Î ÇÑ´Ù. ¸®´ª½º´Â °¢ ÀÌÁø Æ÷¸ËÀ» Â÷·Ê·Î ½ÃµµÇÏ¿© µ¿ÀÛÇÏ´Â °ÍÀ» ã´Â´Ù. ÀÌ´Â ÀÌ·ÐÀûÀ¸·Î ¿©·¯°³ ÀÇ ÀÎÅÍÇÁ¸®ÅÍ¿Í ÀÌÁø Æ÷¸ËµéÀ» ½×¾Æ ¿Ã¸± ¼ö ÀÖ°Ô Çϸç, ¸®´ª½º ÀÌÁø Æ÷¸Ë Çڵ鷯¸¦ ¸Å¿ì À¯¿¬ÇÑ ¼ÒÇÁÆ®¿þ¾î·Î ¸¸µç´Ù.
¹ø¿ª : À±°æÀÏ, °í¾ç¿ì, ¼Ã¢¹è, ÀÌÈ£, Á¤Á÷ÇÑ, ±è±â¿ë
Á¤¸® : ÀÌÈ£
¿ªÁÖ 1) ½Ç½Ã°£À̶ó´Â Àǹ̴ ¾î¶² »ç°ÇÀÌ ¹ß»ýÇÏ¿´À» ¶§ ÀÌ°ÍÀÌ ¾î´À ½Ã°£ À̳»¿¡ ó¸®µÇ ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Áï ´õ Áß¿äÇÑ »ç°ÇÀÌ ¹ß»ýÇÏ¸é ´ú Áß¿äÇÑ ÀÏÀº ±×¸¸µÎ°í À̸¦ ºü¸¥ ½Ã°£ ³»¿¡ ó¸®ÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ ½Ç½Ã°£ 󸮸¦ ÇÏ´Â ¿î¿µÃ¼Á¦(real time operating system, RTOS)´Â ¿ì¼±¼øÀ§(priority)¸¦ »ç¿ëÇÏ¿©, ¾î¶² ÇÁ·Î¼¼½º¸¦ ¼öÇàÇÏ°í ÀÖ´õ¶óµµ ¿ì¼± ¼øÀ§°¡ ´õ ³ôÀº ÇÁ·Î¼¼½º°¡ µîÀåÇϸé ÇÏ´ø ÀÏÀ» ¸ØÃß°í ÇØ´ç ÇÁ·Î¼¼½º¸¦ ¼öÇàÇÏ°Ô µÇ¸ç, ÀÌ ÇÁ·Î¼¼½º°¡ Á¾·áµÇ°Å³ª ¿ì¼±¼øÀ§°¡ ³·¾ÆÁö°Å³ª ´õ ³ôÀº ¿ì¼±¼øÀ§¸¦ °®´Â ÇÁ·Î¼¼½º°¡ µîÀåÇÏÁö ¾Ê´Â ÀÌ»ó °è¼Ó ÀÌ ÇÁ·Î¼¼½º¸¦ ¼öÇàÇÏ°Ô µÈ´Ù. ÀÌ·± Á¡¿¡ ÀÖ¾î¼ ¸®´ª½º´Â ½Ç ½Ã°£ ÇÁ·Î¼¼½º°¡ ÀÏ¹Ý ÇÁ·Î¼¼½ºº¸´Ù ¸ÕÀú ¼öÇàµÇ±ä ÇÏÁö¸¸, ½Ç½Ã°£ ÇÁ·Î¼¼½º¸¦ À§ÇØ ÇÁ ·Î¼¼½º¸¦ Áß´ÜÇÏÁö ¾Ê°í, ´õ ³ôÀº ¿ì¼±¼øÀ§ÀÇ ÇÁ·Î¼¼½º¶óµµ ÇÒ´çµÈ ½Ã°£ÀÌ Áö³ª¸é ½ºÄÉ Á층ÀÌ µÇ¹Ç·Î RTOS¶ó°í ÇÒ ¼ö´Â ¾ø´Ù. (flyduck)
2) REVIEW NOTE : SWAPPING »óÅ´ »ç¿ëµÇÁö ¾Ê´Â °Í °°¾Æ Á¦¿ÜÇß´Ù.
¿ªÁÖ 3) ¼¼¸¶Æ÷¾î¸¦ ±â´Ù¸®°Å³ª ÆÄÀÏÀ» ÀÐÀ» ¼ö ÀÖ°Ô µÇ±æ ±â´Ù¸®´Â °Íó·³ ÀÚ¿øÀ» ±â´Ù¸® ´Â ÀϹÝÀûÀÎ ´ë±â»óÅ´ ´ë°³ ÀÎÅÍ·´Æ® °¡´ÉÇÑ »óÅÂÀÌ´Ù. ÀÎÅÍ·´Æ®°¡ ±ÝÁöµÇ´Â ´ë±â»óÅ ´Â ½º¿ÒÆÄÀÏ¿¡¼ ¸Þ¸ð¸®·Î ÆäÀÌÁö¸¦ ÀоîµéÀÌ´Â °Í°ú °°ÀÌ ÀÓ°èÁö¿ª¿¡¼ ÀÏÀÌ ³¡¸¶Ä¡±æ ±â´Ù¸®°í ÀÖ´Â »óÅÂÀÌ´Ù. (flyduck)
¿ªÁÖ 4) ÀÌ °ªÀº ¾Æ·¡³ª¿À´Â groups º¤ÅÍ Å©±â¿¡ ÀÇÇØ Á¦ÇѵȴÙ. ÀÌ °ªÀº NGROUPS·Î Á¤ÀÇ µÇ¾î ÀÖ´Ù. include/linux/sched.h ÂüÁ¶ (flyduck)
¿ªÁÖ 5) setuid´Â passwd°°Àº ÇÁ·Î±×·¥ÀÌ ÀÏ¹Ý »ç¿ëÀÚ°¡ ½ÇÇàÇÏ¿´´õ¶óµµ rootÀÇ ±ÇÇÑÀ» ȹµæ ÇÏ¿© /etc/passwd ¶Ç´Â /etc/shadow ÆÄÀÏÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ°Ôµµ ÇÏÁö¸¸, ¹Ý´ë·Î À¥¼ ¹ö(httpd)°°Àº ÇÁ·Î±×·¥À» root°¡ ½ÇÇàÇÏ¿´´õ¶óµµ nobodyÀÇ ±ÇÇÑÀ¸·Î ¹Ù²Ù¾î ´Ù¸¥ ½Ã½ºÅÛ ÆÄÀÏ¿¡ Á¢±ÙÇÏÁö ¸øÇÏ°Ô Çϱ⵵ ÇÑ´Ù. (flyduck)
¿ªÁÖ 6) ÀÌ ¸»Àº ¿ÀÇظ¦ ³ºÀ» ¼ö ÀÖ´Â ¸»ÀÌ´Ù. ÀÌ ¸»Àº ¸®´ª½º°¡ ºñ¼±Á¡Çü ½ºÄÉÁ층À» ÇÑ´Ù ´Â °ÍÀÌ ¾Æ´Ï´Ù. µÚ¿¡ ³ª¿ÀµíÀÌ ÇÑ ÇÁ·Î¼¼½º°¡ Á¤ÇØÁø ŸÀÓ ½½¶óÀ̽º¸¦ ÃÊ°úÇؼ »ç¿ëÇÏ ¸é, ±× ÇÁ·Î¼¼½º¸¦ ÁߴܽÃÄÑ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÏ´Â ¼±Á¡Çü ½ºÄÉÁ층À» ÇÑ´Ù. ¿©±â¼ ¼±Á¡ÇÏÁö ¾Ê´Â´Ù´Â Àǹ̴ ±â´Ù·Á¾ß ÇÏ´Â »óȲÀÌ ¹ß»ýÇÏ¿© ¸ØÃß¾î¾ß ÇÏ´Â °æ¿ì°¡ ¹ß»ýÇÏ ¿© ÀÚ¹ßÀûÀ¸·Î CPU¸¦ ³»³õÁö ¾ÊÀº ÀÌ»ó Á¤ÇØÁø ŸÀÓ ½½¶óÀ̽ºµ¿¾È °è¼Ó ½ÇÇàµÈ´Ù´Â °Í ÀÌ´Ù. ¶ÇÇÑ ¸®´ª½º´Â Ä¿³Î ¸ðµå¿¡¼´Â ºñ¼±Á¡ÇüÀÌ´Ù. ÀÌ´Â Ä¿³Î Äڵ尡 ÀçÁøÀÔ°¡´ÉÇÏÁö ¾Ê°Ô ¸¸µé¾îÁ³±â ¶§¹®ÀÌ´Ù. ÀÏ´Ü ½Ã½ºÅÛ ÄÝÀÌ ºÒ¸®¸é ½Ã½ºÅÛ ÄÝÀÌ ÀÚ¹ßÀûÀ¸·Î CPU¸¦ ³» ³õÁö ¾ÊÀº ÀÌ»ó (schedule(), sleep_on(), interruptible_sleep_on() µîÀÇ ÇÔ¼ö¸¦ ºÒ·¯ ½ºÄÉÁ층ÀÌ ÀϾ°Ô ÇÏÁö ¾Ê´Â ÀÌ»ó), ½Ã½ºÅÛ ÄÝÀÌ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ÁߴܵÇÁö ¾Ê´Â´Ù. (flyduck)
¿ªÁÖ 7) 200ms´Â 0.2ÃÊ·Î CPU ÀÔÀå¿¡¼ °áÄÚ ÂªÀº ½Ã°£ÀÌ ¾Æ´Ï´Ù. ÇÏÁö¸¸ ´ë°³ÀÇ °æ¿ì ÇÁ·Î ¼¼½º°¡ ½ÇÇàµÇ´Â µ¿¾È ¿©·¯ I/O¿¡¼»Ó¸¸ ¾Æ´Ï¶ó, ½º¿ÒÆÄÀÏ¿¡¼ ÆäÀÌÁö¸¦ Àд °ÍÀ̳ª, ¸Þ ¸ð¸® ¸ÊµÈ ÆÄÀÏÀ» µð½ºÅ©¿¡¼ ¸Þ¸ð¸®·Î ÀоîµéÀÌ´Â °Íó·³ ±â´Ù·Á¾ß ÇÏ´Â °æ¿ì°¡ ¸¹ÀÌ ¹ß»ýÇÏ¿© ÀÌ ½Ã°£À» ´Ù ¾²´Â °æ¿ì´Â ¸¹Áö ¾Ê´Ù. (flyduck)
¿ªÁÖ 8) idle ÇÁ·Î¼¼½º´Â CPU°¡ ÇÒ ÀÏÀÌ ¾Æ¹«°Íµµ ¾øÀ» ¶§ ½ÇÇàÇÏ´Â ÇÁ·Î¼¼½ºÀÌ´Ù. idle ÇÁ·Î ¼¼½º´Â ¸» ±×´ë·Î ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°í, CPU¿¡¼ °¡Àå Àü·ÂÀ» Àû°Ô ¼Ò¸ðÇÏ´Â ¸í·ÉÀ» ÇÏ¿° ¾øÀÌ ¼öÇàÇÑ´Ù. (flyduck)
9) ¶¥ÄáÀ» »ý°¢Çغ¸¸é, Ä¿³ÎÀº °¡¿îµ¥ ¸ÔÀ» ¼ö ÀÖ´Â ºÎºÐÀÌ°í, ½©Àº À̸¦ µÑ·¯ ½Î°í ÀÖ´Â °Í À¸·Î ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.