4Àå. ÇÁ·Î¼¼½º (Processes)

ÀÌ Àå¿¡¼­´Â ÇÁ·Î¼¼½º°¡ ¹«¾ùÀÌ¸ç ¸®´ª½º Ä¿³ÎÀÌ ¾î¶»°Ô ÇÁ·Î¼¼½º¸¦ ¸¸µé°í °ü¸®ÇÏ°í ¾ø¾Ö ´ÂÁö¸¦ ¼³¸íÇÑ´Ù.

ÇÁ·Î¼¼½º´Â ¿î¿µÃ¼Á¦ ¾È¿¡¼­ ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ÇÁ·Î±×·¥Àº µð½ºÅ©¿¡ ½ÇÇà °¡´ÉÇÑ ÇüÅ·ΠÀú ÀåµÇ¾î ÀÖ´Â ±â°è¾î ¸í·É°ú ÀÚ·áÀÇ ÁýÇÕÀε¥, ÀÌ ÀÚü´Â ¼öµ¿ÀûÀÎ Á¸ÀçÀÌ´Ù. ÇÑÆí ÇÁ·Î¼¼½º ´Â µ¿ÀÛÁßÀÎ ÇÁ·Î±×·¥À¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. Áï ÇÁ·Î¼¼¼­°¡ ±â°è¾î ¸í·ÉµéÀ» ½ÇÇàÇÔ¿¡ µû¶ó ²÷ÀÓ¾øÀÌ º¯È­ÇÏ´Â µ¿ÀûÀÎ Á¸ÀçÀÌ´Ù. ÇÁ·Î±×·¥ÀÇ ¸í·É¾î¿Í µ¥ÀÌÅÍ »Ó¸¸ ¾Æ´Ï¶ó, ÇÁ·Î¼¼½º´Â ÇÁ·Î±×·¥ Ä«¿îÅÍ, CPU ·¹Áö½ºÅÍ, ±×¸®°í ·çƾ ÀÎÀÚ, º¹±Í ÁÖ¼Ò, ÀúÀåµÈ º¯¼ö°°Àº ÀϽÃÀû µ¥ ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â ÇÁ·Î¼¼½º ½ºÅõµ ÇÔ²² °¡Áø´Ù. ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î±×·¥, Áï ÇÁ·Î¼¼½º´Â Çö Àç ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼­ ¾È¿¡¼­ ÀϾ´Â ¸ðµç µ¿ÀÛÀ» Æ÷ÇÔÇÑ´Ù. ¸®´ª½º´Â ¸ÖƼÇÁ·Î¼¼½Ì ¿î¿µ üÁ¦ÀÌ´Ù. ÇÁ·Î¼¼½º´Â °¢°¢ °íÀ¯ÀÇ ±ÇÇÑ¿Í Ã¥ÀÓÀ» °®´Â º°°³ÀÇ Å½ºÅ©ÀÌ´Ù. ¾î¶² ÇÁ·Î¼¼½º Çϳª°¡ ºñÁ¤»óÀûÀ¸·Î Á¾·áÇß´Ù°í Çؼ­ ÀÌ°ÍÀÌ ½Ã½ºÅÛ ³»ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½º±îÁö Á×°Ô ÇÏÁö´Â ¾Ê´Â´Ù. °³º° ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ °¡»ó ÁÖ¼Ò°ø°£¿¡¼­ ½ÇÇàµÇ¸ç, Ä¿³ÎÀÌ Á¦°øÇÏ´Â ¾ÈÀüÇÑ ¹æ¹ý À» ÅëÇÏÁö ¾Ê°í¼­´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿Í »óÈ£ÀÛ¿ëÇÒ ¼ö ¾ø´Ù.

ÇÁ·Î¼¼½º´Â »ì¾Æ ÀÖ´Â µ¿¾È ¸¹Àº ½Ã½ºÅÛ ÀÚ¿øÀ» »ç¿ëÇÑ´Ù. ¸í·ÉÀ» ¼öÇàÇϱâ À§Çؼ­ CPU¸¦, ¸í·É¾î¿Í µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§Çؼ­´Â ¹°¸®ÀûÀÎ ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ÆÄÀÏ ½Ã½ºÅÛÀÇ ÆÄÀϵé À» ¿­°í »ç¿ëÇÒ ¼öµµ ÀÖ°í, ½Ã½ºÅÛ ³»ÀÇ ¹°¸®ÀûÀÎ ÀåÄ¡µéÀ» Á÷Á¢ ¶Ç´Â °£Á¢ÀûÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¸®´ª½º´Â ¿©·¯ ½Ã½ºÅÛ ÀÚ¿øÀ» °ü¸®ÇÏ°í ÇÁ·Î¼¼½ºµéÀ» °øÆòÇÏ°Ô °ü¸®Çϱâ À§Çؼ­ ÇÁ·Î¼¼½º ÀڽŰú ÇÁ·Î¼¼½º°¡ °¡Áö°í ÀÖ´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇØ °è¼Ó ÃßÀûÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÇ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®³ª CPUÀÇ ´ëºÎºÐÀ» µ¶Á¡ÇÑ´Ù¸é, ´Ù¸¥ ÇÁ·Î¼¼ ½ºµé¿¡°Ô °øÆòÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

½Ã½ºÅÛ¿¡¼­ °¡Àå Áß¿äÇÑ ÀÚ¿øÀº CPU·Î, ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡´Â Çϳª¹Û¿¡ ¾ø´Ù. ¸®´ª½º´Â ¸ÖƼ ÇÁ·Î¼¼½Ì(multiprocessing) ¿î¿µÃ¼Á¦Àε¥, ±× ¸ñÀûÀº °¢°¢ÀÇ CPU°¡ ¾ðÁ¦³ª ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼ ½º¸¦ °®µµ·Ï ÇÏ¿© CPUÀÇ È°¿ëÀ» ±Ø´ëÈ­ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î¼¼½ºÀÇ ¼ö°¡ CPUº¸´Ù ¸¹Àº °æ¿ì (´ëºÎºÐÀÇ °æ¿ì°¡ ÀÌ·¸´Ù), ³ª¸ÓÁö ÇÁ·Î¼¼½ºµéÀº ½ÇÇàµÇ±â À§Çؼ­ CPU°¡ »ç¿ë °¡´ÉÇÒ ¶§±î Áö ±â´Ù·Á¾ß ÇÑ´Ù. ¸ÖƼÇÁ·Î¼¼½ÌÀ̶õ °£´ÜÇÑ °³³äÀÌ´Ù. Áï, ÇÁ·Î¼¼½º´Â ¹«¾ð°¡ ±â´Þ·Á¾ß ÇÏ ±â Àü±îÁö´Â (º¸ÅëÀº ½Ã½ºÅÛ ÀÚ¿øÀ» ±â´Ù¸°´Ù) °è¼Ó ½ÇÇàµÇ¸ç, ±â´Ù¸®°í ÀÖ´Ù°¡ ÀÚ¿øÀ» ¾ò°Ô µÇ¸é ÇÁ·Î¼¼½º´Â ´Ù½Ã ½ÇÇàµÉ ¼ö ÀÖ´Ù. DOS¿Í °°Àº À¯´ÏÇÁ·Î¼¼½Ì(uniprocessing) ½Ã½ºÅÛ¿¡¼­ ´Â CPU´Â ±×³É ¾Æ¹«°Íµµ ÇÏÁö ¾Ê°í ´ë±â ½Ã°£À» ³¶ºñÇÑ´Ù. ¸ÖƼÇÁ·Î¼¼½Ì ½Ã½ºÅÛ¿¡¼­´Â µ¿ ½Ã¿¡ ¸¹Àº ÇÁ·Î¼¼½ºµéÀÌ ¸Þ¸ð¸® ³»¿¡ Á¸ÀçÇÑ´Ù. ÇÁ·Î¼¼½º°¡ ¹«¾ð°¡ ±â´Ù·Á¾ß ÇÒ ¶§¸¶´Ù ¿î ¿µÃ¼Á¦´Â CPU¸¦ »©¾Ñ¾Æ ´Ù¸¥ Á» ´õ Àû´çÇÑ ÇÁ·Î¼¼½º°¡ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ¾î¶² ÇÁ·Î¼¼½º°¡ ´ÙÀ½¿¡ ½ÇÇàµÉ °¡Àå Àû´çÇÑ °ÍÀÎÁö ¼±ÅÃÇÏ´Â ÀÏÀº ½ºÄÉÁì·¯ÀÇ ¸òÀÌ°í, ¸®´ª½º´Â °øÁ¤À» ±â Çϱâ À§ÇØ ¿©·¯°¡ÁöÀÇ ½ºÄÉÁ층 Á¤Ã¥À» »ç¿ëÇÑ´Ù.

¸®´ª½º´Â ¿©·¯°¡Áö ÇüÅÂÀÇ ½ÇÇà ÆÄÀÏÀ» Áö¿øÇϴµ¥, ELF, JAVA µîÀÌ ±× Áß Çϳª´Ù. À̵éÀº ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛÀÇ °øÀ¯ ¶óÀ̺귯¸®(shared library)¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °Í°ú °°Àº ÀÏ À» À§ÇØ Åõ¸íÇÏ°Ô °ü¸®ÇØ¾ß ÇÑ´Ù.


4.1 ¸®´ª½º ÇÁ·Î¼¼½º

¸®´ª½º°¡ ½Ã½ºÅÛ ³»ÀÇ ÇÁ·Î¼¼½ºµéÀ» °ü¸®ÇÒ ¼ö ÀÖµµ·Ï, °¢°¢ÀÇ ÇÁ·Î¼¼½º´Â task_struct¶ó ´Â ÀڷᱸÁ¶·Î Ç¥ÇöµÈ´Ù (ŽºÅ©¿Í ÇÁ·Î¼¼½º´Â ¸®´ª½º¿¡¼­ °°Àº Àǹ̷Π»ç¿ëµÈ´Ù). task º¤ ÅÍ´Â ½Ã½ºÅÛ¿¡ ÀÖ´Â task_struct ±¸Á¶¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͵éÀÇ ¹è¿­ÀÌ´Ù. ÀÌ´Â ½Ã½ºÅÛÀÌ °¡Áú ¼ö ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ ¼ö°¡ task º¤ÅÍÀÇ Å©±â·Î Á¦ÇѵǾî ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ Å© ±âÀÇ ±âº»°ªÀº 512°³ÀÌ´Ù. ÇÁ·Î¼¼½º°¡ ¸¸µé¾îÁö¸é ½Ã½ºÅÛ ¸Þ¸ð¸®¿¡¼­ »õ·Î¿î task_struct °¡ ÇÒ´çµÇ¾î task º¤ÅÍ¿¡ Ãß°¡µÈ´Ù. ÇöÀç ½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î¼¼½º¸¦ ã±â ½±°Ô Çϱâ À§ÇØ ¼­, À̸¦ current Æ÷ÀÎÅÍ°¡ °¡¸®Å°°í ÀÖ´Ù.

ÀϹÝÀûÀÎ ÇÁ·Î¼¼½º »Ó ¾Æ´Ï¶ó ¸®´ª½º´Â ½Ç½Ã°£(real time) ÇÁ·Î¼¼½ºµµ Áö¿øÇÑ´Ù1. ÀÌ ÇÁ·Î¼¼½º µéÀº ¿ÜºÎ¿¡¼­ ¹ß»ýÇÏ´Â »ç°Ç(event)¿¡ ¸Å¿ì »¡¸® ¹ÝÀÀÇØ¾ß ÇϹǷΠ(´Ù½Ã ¸»ÇÏ¸é ½Ç½Ã°£À¸·Î), ½ºÄÉÁì·¯´Â À̵éÀ» ÀÏ¹Ý »ç¿ëÀÚ ÇÁ·Î¼¼½º¿Í´Â ´Ù¸£°Ô Ãë±ÞÇÑ´Ù. task_struct ÀڷᱸÁ¶´Â ¹æ´ëÇÏ°í º¹ÀâÇÏÁö¸¸, ³»ºÎ Ç׸ñµéÀ» ¿©·¯°³ÀÇ ±â´É ¿µ¿ªÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù.


4.2 ½Äº°ÀÚ(Identifiers)

¸®´ª½º´Â ´Ù¸¥ À¯´Ð½ºµé°ú °°ÀÌ ½Ã½ºÅÛ¿¡ ÀÖ´Â ÆÄÀÏ°ú À̹ÌÁö¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀ» °Ë»çÇϱâ À§Çؼ­ »ç¿ëÀÚ ½Äº°ÀÚ¿Í ±×·ì ½Äº°ÀÚ¸¦ »ç¿ëÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛÀÇ ¸ðµç ÆÄÀϵéÀº ¼ÒÀ¯±Ç°ú Á¢±Ù ±ÇÇÑÀ» °¡Áö¸ç, Á¢±Ù±ÇÇÑÀº »ç¿ëÀÚµéÀÌ ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ´ëÇÑ Á¢±Ù ¹æ½ÄÀ» ´Ù·é´Ù. ±âº»ÀûÀÎ ±ÇÇѵéÀº Àбâ, ¾²±â¿Í ½ÇÇàÀ¸·Î ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ, ƯÁ¤ ±×·ì¿¡ ¼ÓÇÏ´Â ÇÁ·Î¼¼½ºµé, ½Ã½ºÅÛÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀÇ ¼¼°¡Áö Á¾·ùÀÇ »ç¿ëÀÚ¿¡ ÇÒ´çµÈ´Ù. °¢°¢ÀÇ »ç¿ëÀÚ °èÃþÀº °¢±â ´Ù¸¥ ±ÇÇÑÀ» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ¾î¶² ÆÄÀÏ¿¡ ´ëÇؼ­ ¼ÒÀ¯ÀÚ´Â Àбâ¿Í ¾²±â¸¦ ÇÒ ¼ö ÀÖÁö¸¸, ±×·ìÀº Àб⸸ ÇÒ ¼ö ÀÖ°í, ½Ã½ºÅÛÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀº Á¢±ÙÇÏÁö ¸øÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù.

REVIEW NOTE : Ãß°¡ÇÏ¿© ºñÆ®¸¦ ÇÒ´çÇÏ´Â °ÍÀ» (777) ¼³¸íÇ϶ó.

±×·ìÀº ¸®´ª½º¿¡¼­ ÇѸíÀÇ °³º° »ç¿ëÀÚ³ª ½Ã½ºÅÛÀÇ ¸ðµç ÇÁ·Î¼¼½ºµéÀÌ ¾Æ´Ñ, »ç¿ëÀÚµéÀÇ ¸ð ÀÓ¿¡ ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ ±ÇÇÑÀ» ÁÖ´Â ¹æ¹ýÀÌ´Ù. ¿¹¸¦ µé¸é, ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÏ ´Â »ç¶÷µéÀ» ÇϳªÀÇ ±×·ìÀ¸·Î ¸¸µé°í ÀÌ »ç¶÷µé¸¸ ÇÁ·ÎÁ§Æ®ÀÇ ¼Ò½º Äڵ带 ÀÐ°í ¾µ ¼ö ÀÖµµ ·Ï ÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ ÇÁ·Î¼¼½º´Â ¿©·¯ ±×·ì¿¡ ¼ÓÇÒ ¼ö ÀÖ°í (±âº»°ªÀº ÃÖ´ë 32°³4) À̰͵é Àº °¢ ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ÀÖ´Â groups º¤ÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. ÇÁ·Î¼¼½º°¡ ¼ÓÇØ ÀÖ´Â ±×·ì ÁßÀÇ Çϳª°¡ ÆÄÀÏ¿¡ Á¢±Ù ±ÇÇÑÀ» °¡Áö°í ÀÖ´Ù¸é, ±× ÇÁ·Î¼¼½º´Â ±× ÆÄÀÏ¿¡ ´ëÇÑ ÇØ´ç ±×·ì Á¢±Ù ±ÇÇÑÀ» °¡Áö°Ô µÈ´Ù.

ÇÁ·Î¼¼½ºÀÇ task_struct¿¡´Â ³× ½ÖÀÇ »ç¿ëÀÚ ½Äº°ÀÚ¿Í ±×·ì ½Äº°ÀÚ°¡ ÀÖ´Ù.


4.3 ½ºÄÉÁ층(scheduling)

¸ðµç ÇÁ·Î¼¼½º´Â ¾î¶³ ¶§´Â »ç¿ëÀÚ ¸ðµå(user mode)·Î, ¶Ç ¾î¶³ ¶§´Â ½Ã½ºÅÛ ¸ðµå(system mode)·Î ½ÇÇàµÈ´Ù. Çϵå¿þ¾î°¡ ÀÌ·¯ÇÑ ¸ðµå¸¦ Áö¿øÇÏ´Â ¹æ¹ýÀº »ç¿ëÇÏ´Â Çϵå¿þ¾î¿¡ µû¶ó ´Ù¸£Áö¸¸, ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ ¸ðµå¿¡¼­ ½Ã½ºÅÛ ¸ðµå·Î ÀüȯÇϰųª ¹Ý´ë·Î ÀüȯÇÏ´Â ¾ÈÀüÇÑ ¸ÞÄ¿´ÏÁòÀÌ ÀÖ´Ù. »ç¿ëÀÚ ¸ðµå´Â ½Ã½ºÅÛ ¸ðµå¿¡ ºñÇÏ¿© ÈξÀ ÀûÀº ±ÇÇÑÀ» °®°í ÀÖ´Ù. ÇÁ·Î¼¼ ½º´Â ½Ã½ºÅÛ ÄÝÀ» ÇÒ ¶§¸¶´Ù »ç¿ëÀÚ ¸ðµå¿¡¼­ ½Ã½ºÅÛ ¸ðµå·Î ÀüȯµÇ¾î °è¼Ó ½ÇÇàµÇ°Ô µÈ´Ù. ÀÌ ½ÃÁ¡¿¡ Ä¿³ÎÀº ÇÁ·Î¼¼½ºÀÇ ´Ù¸¥ ÇÑÆí¿¡¼­ ½ÇÇàµÈ´Ù. ¸®´ª½º¿¡¼­ ÇÁ·Î¼¼½º´Â ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼½º¸¦ ¼±Á¡ÇÏÁö ¾Ê´Â´Ù (non-preemptive). Áï, ÀڱⰡ ½ÇÇàµÇ±â À§ÇÏ¿© ´Ù¸¥ ÇÁ·Î¼¼ ½º¸¦ ÁߴܽÃų ¼ö ¾ø´Ù6. °¢ ÇÁ·Î¼¼½º´Â ¾î¶² ½Ã½ºÅÛ À̺¥Æ®°¡ ¹ß»ýÇϱ⸦ ±â´Ù·Á¾ß¸¸ ÇÒ ¶§ CPU¸¦ ³»³õ¾Æ¾ß°Ú´Ù°í ÆÇ´ÜÇÑ´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î¼¼½º´Â ÆÄÀÏ¿¡¼­ ÇÑ ±ÛÀÚ¸¦ Àоî¿À±â À§ÇÏ¿© ±â´Ù·Á¾ß ÇÒ ¶§°¡ ÀÖ´Ù. ÀÌ ±â´Ù¸²Àº ½Ã½ºÅÛ ÄÝ µµÁß¿¡ Áï, ½Ã½ºÅÛ ¸ðµå¿¡¼­ ¹ß»ýÇÑ ´Ù. ÇÁ·Î¼¼½º´Â ÆÄÀÏÀ» ¿­°í Àбâ À§ÇÏ¿© ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇϸç, À̸¦ À§ÇÏ¿© Â÷·Ê·Î ¿­¸° ÆÄÀÏ¿¡¼­ ±ÛÀÚ¸¦ Àд ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÑ´Ù. ÀÌ °æ¿ì¿¡ ±â´Ù·Á¾ß ÇÏ´Â ÇÁ·Î¼¼½º´Â ÀÏ ½Ã Áß´ÜÀÌ µÇ°í ´Ù¸¥ ½ÇÇàµÉ ¸¸ÇÑ ÇÁ·Î¼¼½º°¡ ¼±ÅÃµÇ¾î ½ÇÇàµÈ´Ù.

ÇÁ·Î¼¼½º´Â Ç×»ó ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ¸ç µû¶ó¼­ Á¾Á¾ ±â´Ù¸®°Ô µÈ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¾î ¶² ÇÁ·Î¼¼½º´Â ±â´Ù¸®°Ô µÉ ¶§±îÁö ³Ê¹« ¸¹Àº CPU ½Ã°£À» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ·¯ÇÑ °æ¿ì ¿¡ ¸®´ª½º´Â ¼±Á¡Çü ½ºÄÉÁ층(pre-emptive scheduling)À» »ç¿ëÇÑ´Ù. ÀÌ Á¤Ã¥¿¡¼­´Â °¢°¢ÀÇ ÇÁ·Î ¼¼½º°¡ 200ms Á¤µµÀÇ ÂªÀº ½Ã°£µ¿¾È¸¸ ½ÇÇàµÇ¸ç7, ÀÌ ½Ã°£ÀÌ Áö³ª¸é ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼±Åà µÇ¾î ½ÇÇàµÇ¸ç, ¿ø·¡ÀÇ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ Â÷·Ê°¡ ¿Ã ¶§±îÁö ±â´Ù¸®°ÔµÈ´Ù. ÀÌ·± ÀÛÀº ½Ã°£ ÀÇ ´ÜÀ§¸¦ ŸÀÓ ½½¶óÀ̽º(time-slice)¶ó°í ÇÑ´Ù.

½ÇÇàÇÒ ¼ö ÀÖ´Â ÇÁ·Î¼¼½º Áß¿¡¼­ °¡Àå ½ÇÇàÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Â ÇÁ·Î¼¼½º¸¦ °ñ¶ó¼­ ½ÇÇàÇÏ´Â °ÍÀÌ ½ºÄÉÁì·¯(scheduler)ÀÇ ÀÏÀÌ´Ù. ½ÇÇà°¡´ÉÇÑ ÇÁ·Î¼¼½º´Â CPU°¡ ÀÚ½ÅÀ» ½ÇÇàÇÏ±æ ±â´Ù¸° ´Ù. ¸®´ª½º´Â °£´ÜÇÑ ¿ì¼±±Ç¿¡ ±â¹ÝÇÑ ½ºÄÉÁ층 ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿©, ÇöÀç ÇÁ·Î¼¼½º¿Í ´Ù¸¥ ÇÁ·Î¼¼½º »çÀÌ¿¡¼­ ½ÇÇàÇÒ ³ðÀ» °í¸¥´Ù. ¸®´ª½º°¡ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ½ÃÅ°±â·Î ÇÏ¿´´Ù¸é, Çö Àç ÇÁ·Î¼¼½ºÀÇ »óÅÂ¿Í ÇÁ·Î¼¼½º¿Í °ü·ÃÀÖ´Â ·¹Áö½ºÅ͵é, ´Ù¸¥ ÄÁÅؽºÆ®¸¦ task_struct ÀÚ ·á±¸Á¶¿¡ ÀúÀåÇÑ´Ù. ±×¸®°í ³ª¼­ ½ÇÇàÇÒ »õ ÇÁ·Î¼¼½ºÀÇ »óŸ¦ º¹¿ø(À̰͵µ ¶ÇÇÑ ÇÁ·Î¼¼¼­ ¿¡ µû¶ó ´Ù¸£´Ù)ÇÏ°í ½Ã½ºÅÛÀÇ Á¦¾î±ÇÀ» ±× ÇÁ·Î¼¼½º¿¡°Ô ³Ñ°ÜÁØ´Ù. ½ºÄÉÁì·¯°¡ ½Ã½ºÅÛ ³» ÀÇ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î¼¼½ºµé¿¡°Ô °øÁ¤ÇÏ°Ô CPU ½Ã°£À» ÇÒ´çÇϱâ À§Çؼ­ °¢°¢ÀÇ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ Á¤º¸¸¦ task_struct¿¡ À¯ÁöÇÑ´Ù.

½ºÄÉÁì·¯´Â Ä¿³Î¾È¿¡¼­ ¿©·¯ ¸î¸î °æ¿ì¿¡ ÀÛµ¿µÈ´Ù. ½ºÄÉÁì·¯´Â ÇöÀç ÇÁ·Î¼¼½º¸¦ ´ë±âÅ¥¿¡ ³ÖÀº ´ÙÀ½À̳ª, ½Ã½ºÅÛ ÄÝÀÌ ³¡³­ Á÷ÈÄ, ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛ ¸ðµå¿¡¼­ ÇÁ·Î¼¼½º ¸ðµå·Î µ¹¾Æ ¿À±â ¹Ù·Î Àü¿¡ ½ÇÇàµÈ´Ù. ¶Ç ´Ù¸¥ °æ¿ì´Â ½Ã½ºÅÛÀÇ Å¸À̸Ӱ¡ ÇöÀç ÇÁ·Î¼¼½ºÀÇ counterÀÇ °ªÀ» 0À¸·Î ¼³Á¤ÇÑ °æ¿ìÀÌ´Ù. ½ºÄÉÁì·¯´Â ½ÇÇàµÉ ¶§ ´ÙÀ½°ú °°Àº ÀϵéÀ» ¼öÇàÇÑ´Ù.


4.3.1 ¸ÖƼÇÁ·Î¼¼¼­ ½Ã½ºÅÛ¿¡¼­ÀÇ ½ºÄÉÁ층

¿©·¯°³ÀÇ CPU¸¦ °¡Áø ½Ã½ºÅÛÀº ¸®´ª½º ¼¼°è¿¡¼­ ±×¸® ÈçÇÏÁö ¾ÊÀº °ÍÀÌ´Ù. ±×·¯³ª ¸®´ª½º ¸¦ SMP(Symmetric Multi-Processing, ´ëĪÇü ¸ÖƼÇÁ·Î¼¼½Ì) ¿î¿µÃ¼Á¦·Î ¸¸µå·Á´Â ÀÛ¾÷ÀÌ »ó´ç È÷ ÁøôµÇ¾ú´Ù. ÀÌ´Â ½Ã½ºÅÛ³»ÀÇ ¿©·¯ CPU°£¿¡ ÀÛ¾÷·®À» °øÁ¤ÇÏ°Ô ºÐ¹èÇÏ´Â °ÍÀÌ´Ù. °øÁ¤ÇÑ ºÐ¹è°¡ °¡Àå ¶Ñ·ÈÀÌ ³ªÅ¸´Â °÷Àº ½ºÄÉÁì·¯ÀÌ´Ù.

¸ÖƼÇÁ·Î¼¼¼­ ½Ã½ºÅÛ¿¡¼­´Â ¸ðµç ÇÁ·Î¼¼¼­°¡ ¹Ù»Ú°Ô ¾î¶² ÇÁ·Î¼¼½ºµéÀ» ½ÇÇàÇÏ°í ÀÖ±æ ¹Ù¶õ ´Ù. °¢ ÇÁ·Î¼¼¼­´Â ÇöÀç ÇÁ·Î¼¼½º°¡ ŸÀÓ ½½¶óÀ̽º¸¦ ´Ù ¼Ò¸ðÇÏ¿´°Å³ª, ¾î¶² ½Ã½ºÅÛ ÀÚ¿øÀ» ±â´Ù·Á¾ß ÇÒ ¶§¸¶´Ù, µ¶¸³ÀûÀ¸·Î ½ºÄÉÁì·¯¸¦ ½ÇÇàÇÑ´Ù. 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¿¡ ÇöÀç ÇÁ·Î¼¼¼­ÀÇ ¹øÈ£°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº ÇÁ·Î¼¼½º´Â °í·ÁÇÏÁö ¾Ê ´Â´Ù. ½ºÄÉÁì·¯´Â ¸¶Áö¸·À¸·Î ÇöÀç ÇÁ·Î¼¼¼­¿¡¼­ ½ÇÇàµÇ¾ú´ø ÇÁ·Î¼¼½º¿¡°Ô ¾à°£ À¯¸®ÇÏ°Ô ÇØÁØ´Ù. ÀÌ´Â ÇÑ ÇÁ·Î¼¼½º¸¦ ´Ù¸¥ ÇÁ·Î¼¼¼­·Î ¿Å±æ ¶§ ¼º´É»óÀÇ ¿À¹öÇìµå°¡ ¹ß»ýÇÏ´Â °æ¿ì °¡ Á¾Á¾ Àֱ⠶§¹®ÀÌ´Ù.


±×¸² 4.1 : ÇÁ·Î¼¼½ºÀÇ ÆÄÀÏ

4.4 ÆÄÀÏ

±×¸² 4.1Àº °¢ ÇÁ·Î¼¼½ºÀÇ ÆÄÀÏ ½Ã½ºÅÛ °ü·Ã Á¤º¸¸¦ ÀúÀåÇÏ´Â µÎ°¡Áö ÀڷᱸÁ¶¸¦ º¸¿©ÁØ´Ù. ù¹ø°·Î, fs_struct´Â ÀÌ ÇÁ·Î¼¼½ºÀÇ VFS inode¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í umask¸¦ ÀúÀåÇÏ°í ÀÖ´Ù. umask´Â »õ·Î¿î ÆÄÀÏÀÌ ¸¸µé¾îÁú ¶§ÀÇ ±âº» ¸ðµåÀÌ¸ç ½Ã½ºÅÛ ÄÝ¿¡ ÀÇÇØ ¹Ù²ð ¼ö ÀÖ´Ù.

µÎ¹ø° ÀڷᱸÁ¶ÀÎ 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¸¦ °°ÀÌ »ç¿ëÇÑ´Ù.


±×¸² 4.2 : ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®

4.5 °¡»ó ¸Þ¸ð¸®(Virtual Memory)

ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¿¡´Â ¿©·¯ ¼Ò½º¿¡¼­ ³ª¿Â ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í µ¥ÀÌÅÍ°¡ µé¾î ÀÖ´Ù. ù¹ø°·Î, ·ÎµåµÈ ÇÁ·Î±×·¥ÀÇ À̹ÌÁö°¡ ÀÖ´Ù. ls °°Àº ¸í·ÉÀ» ¿¹·Î »ý°¢Çغ¸ÀÚ. ÀÌ ¸í·ÉÀº ´Ù ¸¥ ½ÇÇà À̹ÌÁö¿Í ¸¶Âù°¡Áö·Î ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í µ¥ÀÌÅÍ·Î ±¸¼ºµÇ¾î ÀÖ´Ù. À̹ÌÁö ÆÄÀÏ¿¡´Â ½ÇÇà°¡´ÉÇÑ ÄÚµå¿Í ÇØ´çµÇ´Â ÇÁ·Î±×·¥ µ¥ÀÌÅ͸¦ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¿¡ ·ÎµåÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸ðµç Á¤º¸°¡ µé¾î ÀÖ´Ù. µÎ¹ø°·Î, ÇÁ·Î¼¼½º´Â ó¸® °úÁ¤¿¡¼­ ÇÊ¿ä¿¡ ÀÇÇÏ¿© - ¿¹¸¦ µé¾î, Àаí ÀÖ´Â ÆÄÀÏÀÇ ³»¿ëÀ» ´ã±â À§ÇÏ¿© - (°¡»ó) ¸Þ¸ð¸®¸¦ ÇÒ´ç¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ·¸°Ô »õ ·Î ÇÒ´çµÈ °¡»ó ¸Þ¸ð¸®¸¦ ½ÇÁ¦·Î »ç¿ëµÇ±â À§Çؼ­´Â ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¿Í ¿¬°áµÇ¾î¾ß ÇÑ´Ù. ¼¼¹ø°·Î, ¸®´ª½º ÇÁ·Î¼¼½º´Â ÆÄÀÏ Ã³¸® ·çƾ°ú °°ÀÌ °øÅëÀûÀ¸·Î À¯¿ëÇÏ°Ô ¾²ÀÌ´Â ÄÚ µåÀÇ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. ¸ðµç ÇÁ·Î¼¼½º°¡ ¶È°°Àº ¶óÀ̺귯¸®ÀÇ º¹»çÆÇÀ» ÇÑ°³¾¿ °®°í Àִ´ٴ °ÍÀº ¸»ÀÌ ¾ÈµÇ¸ç, ¸®´ª½º´Â ½ÇÇàµÇ°í ÀÖ´Â ¿©·¯ ÇÁ·Î¼¼½º°¡ µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. ÀÌµé °øÀ¯ ¶óÀ̺귯¸®¿¡ ÀÖ´Â ÄÚµå¿Í µ¥ÀÌÅÍ´Â ÀÌ ÇÁ ·Î¼¼½ºÀÇ °¡»ó ÁÖ¼Ò °ø°£¿¡ ¿¬°áµÇ¾î¾ß ÇÒ »Ó¸¸ ¾Æ´Ï¶ó, ±× ¶óÀ̺귯¸®¸¦ °øÀ¯ÇÏ´Â ´Ù¸¥ ¸ð µç ÇÁ·Î¼¼½ºÀÇ °¡»ó ÁÖ¼Ò °ø°£°úµµ ¿¬°áµÇ¾î¾ß ÇÑ´Ù.

¾î¶² ÁÖ¾îÁø ½Ã°£ µ¿¾È ÇÑ ÇÁ·Î¼¼½º´Â °¡»ó ¸Þ¸ð¸®¿¡ µé¾î ÀÖ´Â ÄÚµå¿Í µ¥ÀÌÅ͸¦ ¸ðµÎ »ç¿ë ÇÏÁö´Â ¾Ê´Â´Ù. ÄÚµå Áß¿¡´Â ¾î¶² ƯÁ¤ÇÑ °æ¿ì, ¿¹¸¦ µé¾î ÇÁ·Î¼¼½º°¡ ½ÃÀÛµÉ ¶§ ¶Ç´Â ¾î¶² À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§¿¡¸¸ ÇÊ¿äÇÑ Äڵ尡 ÀÖ´Ù. ±×¸®°í °øÀ¯ ¶óÀ̺귯¸®ÀÇ ·çƾµµ ¸ðµÎ »ç¿ë ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀϺθ¸ »ç¿ëÇÑ´Ù. µû¶ó¼­ ¾È ¾²ÀÏ ¼öµµ ÀÖ´Â Äڵ带 ½ÇÁ¦ ¸Þ¸ð¸®¿¡ ¸ðµÎ ·ÎµåÇÏ´Â °ÍÀº ³¶ºñ°¡ µÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ³¶ºñ°¡ ½Ã½ºÅÛ³»ÀÇ ÇÁ·Î¼¼½º ¼ö¸¸Å­ ¹Ýº¹µÈ´Ù¸é ½Ã½ºÅÛÀº ¸Å¿ì ºñÈ¿À²ÀûÀ¸·Î ½ÇÇàµÉ °ÍÀÌ´Ù. ´ë½Å¿¡ ¸®´ª½º´Â ¿ä±¸ ÆäÀÌ¡(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¸¦ »ý¼ºÇÏ°í, ¹°¸®Àû ¸Þ¸ð¸® ÆäÀÌÁö¸¦ ÇÒ´çÇÑ´Ù. Äڵ峪 µ¥ÀÌÅÍ´Â ÆÄÀϽýºÅÛÀ̳ª ½º¿Ò µð½ºÅ©·ÎºÎÅÍ ¹°¸®Àû ÆäÀÌÁö·Î °¡Á®¿Í¾ß ÇÒ ¼öµµ ÀÖ´Ù. ÀÌÁ¦ ÇÁ·Î¼¼½º ´Â ÆäÀÌÁö ÆúÆ®¸¦ ¹ß»ýÇÑ ¸í·É¿¡¼­ºÎÅÍ ´Ù½Ã ½ÃÀÛÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌÁ¦ ¸Þ¸ð¸®°¡ ¹°¸®ÀûÀ¸·Î Á¸ÀçÇϹǷΠÀÛ¾÷À» °è¼ÓÇÒ ¼ö ÀÖ´Ù.


4.6 ÇÁ·Î¼¼½º »ý¼ºÇϱâ

½Ã½ºÅÛÀÌ Ã³À½ ½ÃÀÛµÉ ¶§ ½Ã½ºÅÛÀº Ä¿³Î ¸ðµå¿¡ ÀÖÀ¸¸ç, Ãʱâ ÇÁ·Î¼¼½º¶ó´Â ´Ü ÇϳªÀÇ ÇÁ·Î ¼¼½º¸¸ Á¸ÀçÇÑ´Ù. ´Ù¸¥ ÇÁ·Î¼¼½ºµé°ú °°ÀÌ Ãʱâ ÇÁ·Î¼¼½º´Â ½ºÅðú ·¹Áö½ºÅÍ µîÀ¸·Î ´ëÇ¥µÇ ´Â ±â°è »óŸ¦ °®°í ÀÖ´Ù. À̰͵éÀº ½Ã½ºÅÛÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ¸¸µé¾îÁö°í ½ÇÇàµÉ ¶§, ÃÊ ±â ÇÁ·Î¼¼½ºÀÇ task_struct ±¸Á¶¿¡ ÀúÀåµÈ´Ù. ½Ã½ºÅÛ ÃʱâÈ­ÀÇ ¸¶Áö¸· ´Ü°è¿¡¼­, Ãʱâ ÇÁ ·Î¼¼½º´Â init¶ó°í ÇÏ´Â Ä¿³Î ¾²·¹µå¸¦ ½ÃÀÛÇÏ°í ¾Æ¹«Àϵµ ÇÏÁö ¾Ê´Â ·çÇÁ·Î µé¾î°£´Ù. ¾ð Á¦³ª ´Ù¸¥ ÇÒ ÀÏÀÌ ¾øÀ¸¸é ½ºÄÉÁì·¯´Â ÀÌ idle ÇÁ·Î¼¼½º¸¦ ½ÇÇàÇÑ´Ù. idle ÇÁ·Î¼¼½ºÀÇ task_struct´Â À¯ÀÏÇÏ°Ô µ¿ÀûÀ¸·Î ÇÒ´çµÈ °ÍÀÌ ¾Æ´Ï°í Ä¿³ÎÀÌ »ý¼ºµÉ ¶§ Á¤ÀûÀ¸·Î Á¤ÀÇ µÈ °ÍÀ¸·Î, Á¶±Ý È¥¶õ½º·´°ÚÁö¸¸ init_task¶ó°í ÇÑ´Ù.

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 ÀڷᱸÁ¶¿¡´Â "±â·Ï½Ã º¹»ç"¶ó°í Ç¥½ÃÇÑ´Ù. ±×·¯¸é ÇÁ·Î¼¼½º Áß Çϳª°¡ ÀÌ °¡»ó ¸Þ¸ð¸®¿¡ ¾²·Á°í Çϸé ÆäÀÌÁö ÆúÆ®°¡ ¹ß»ýÇÑ´Ù. ÀÌ ¶§ ¸®´ª½º´Â ¸Þ¸ð¸®ÀÇ º¹»çº»À» ¸¸µé°í µÎ ÇÁ·Î¼¼½ºÀÇ ÆäÀÌÁö ¸ñ·Ï°ú °¡»ó ¸Þ¸ð¸® ±¸Á¶¸¦ Á¶Á¤ ÇÑ´Ù.


4.7 ½Ã°£°ú ŸÀ̸Ó

Ä¿³ÎÀº °¢ ÇÁ·Î¼¼½ºÀÇ »ý¼º ½Ã°£°ú, ÇÁ·Î¼¼½º°¡ »ç¿ëÇÑ CPU ½Ã°£À» °ü¸®ÇÑ´Ù. °¢ Ŭ·° ƽ¸¶ ´Ù Ä¿³ÎÀº ÇöÀç ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛ ¸ðµå¿Í »ç¿ëÀÚ ¸ðµå¿¡¼­ »ç¿ëÇÑ ½Ã°£ÀÇ ¾çÀ» jiffies ´ÜÀ§·Î °è»êÇÏ¿© °»½ÅÇÑ´Ù.

ÀÌµé ¿ä±Ý°è»ê¿ë ŸÀ̸ӿ¡ ¿Ü¿¡µµ, ¸®´ª½º´Â ÇÁ·Î¼¼½º°¡ ÁöÁ¤ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Â °£°Ý Ÿ À̸Ӹ¦ Áö¿øÇÑ´Ù. ÇÁ·Î¼¼½º´Â À̵é ŸÀ̸Ӹ¦ À̶² ½Ã°£ÀÌ Áö³µÀ» ¶§ Àڽſ¡¼­ ¿©·¯°¡Áö ½Ã ±×³ÎÀ» º¸³»´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ¼¼°¡Áö Á¾·ùÀÇ °£°Ý ŸÀ̸Ӹ¦ Áö¿øÇÑ´Ù.

Çϳª ¶Ç´Â ¸ðµç °£°Ý ŸÀ̸Ӱ¡ ½ÇÇàµÉ ¼ö ÀÖÀ¸¸ç, ¸®´ª½º´Â ÇÁ·Î¼¼½ºÀÇ task_struct ÀÚ·á ±¸Á¶¿¡ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ °£Á÷ÇÑ´Ù. ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÏ¿© ÀÌµé °£°Ý ŸÀ̸Ӹ¦ ¼³Á¤ÇÏ°í, ½ÃÀÛÇÏ°í, ¸ØÃß°í, ÇöÀç °ªÀ» ÀÐÀ» ¼ö ÀÖ´Ù. °¡»ó ŸÀÌ¸Ó¿Í À϶÷ ŸÀ̸Ӵ ¶È°°Àº ¹æ¹ýÀ¸·Î 󸮵ȴÙ. °¢ Ŭ·° ƽ¸¶´Ù ÇöÀç ÇÁ·Î¼¼½ºÀÇ °£°Ý ŸÀ̸Ӵ °¨¼ÒÇϸç, ¸¸·áµÇ¸é ÇØ´çÇÏ´Â ½Ã ±×³ÎÀ» ¹Þ´Â´Ù.

½ÇÁ¦ ½Ã°£ °£°Ý ŸÀ̸Ӵ ´Ù¸¥ ŸÀ̸ӵé°ú´Â ¾à°£ ´Ù¸£¸ç, ¸®´ª½º´Â À̵éÀ» À§ÇØ 11Àå¿¡¼­ ¼³¸íÇÏ°í Àִ ŸÀÌ¸Ó ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ timer_list ÀڷᱸÁ¶ ¸¦ °¡Áö°í ÀÖÀ¸¸ç, ½ÇÁ¦ °£°Ý ŸÀ̸Ӱ¡ ½ÇÇàµÇ°í ÀÖÀ¸¸é, À̸¦ ½Ã½ºÅÛ Å¸ÀÌ¸Ó ¸®½ºÆ® Å¥¿¡ ³Ö´Â´Ù. ŸÀ̸Ӱ¡ ¸¸·áµÇ¸é ŸÀÌ¸Ó ÇϹݺΠÇڵ鷯´Â À̸¦ Å¥¿¡¼­ Á¦°ÅÇÏ°í °£°Ý ŸÀÌ¸Ó ÇÚ µé·¯¸¦ ºÎ¸¥´Ù. ÀÌ Çڵ鷯´Â SIGALRM ½Ã±×³ÎÀ» ¹ß»ýÇÏ°í, »õ·Î °£°Ý ŸÀ̸Ӹ¦ ½ÃÀÛÇÏ¿© ÀÌ ¸¦ ´Ù½Ã ½Ã½ºÅÛ Å¸ÀÌ¸Ó Å¥¿¡ ³Ö´Â´Ù.


±×¸² 4.3 : µî·ÏµÈ ÀÌÁø Æ÷¸Ëµé

4.8 ÇÁ·Î±×·¥ ½ÇÇàÇϱâ

À¯´Ð½º¿Í ¸¶Âù°¡Áö·Î ¸®´ª½º¿¡¼­´Â ÇÁ·Î±×·¥°ú ¸í·É¾îµéÀº º¸Åë ¸í·É¾î Çؼ®±â(command interpreter)¿¡ ÀÇÇØ ¼öÇàµÈ´Ù. ¸í·É¾î Çؼ®±â´Â ´Ù¸¥ ÇÁ·Î¼¼½ºÃ³·³ »ç¿ëÀÚ ÇÁ·Î¼¼½ºÀ̸ç, ½© (shell)9À̶ó°í ºÒ¸°´Ù. ¸®´ª½º¿¡´Â ¿©·¯°¡Áö ½©ÀÌ Àִµ¥ °¡Àå ´ëÁßÀûÀÎ °ÍÀ¸·Î´Â sh, bash, tcsh°¡ ÀÖ´Ù. cd³ª pwd°°ÀÌ ÀûÀº ¼öÀÇ ³»ºÎ¿¡ Á÷Á¢ ±¸ÇöµÈ ¸í·É¾îµéÀ» Á¦¿ÜÇÏ°í, ¸í·É¾îµé Àº ½ÇÇàÇÒ ¼ö ÀÖ´Â ÀÌÁø ÆÄÀÏÀÌ´Ù. ¸í·É¾î°¡ ÀÔ·ÂµÇ¸é ½©Àº ȯ°æº¯¼ö PATH¿¡ ÀúÀåµÈ ÇÁ·Î ¼¼½ºÀÇ Ã£±â °æ·Î(search path)¿¡¼­ °°Àº À̸§À» °¡Áø ½ÇÇà À̹ÌÁö¸¦ ã´Â´Ù. ÆÄÀÏÀ» ãÀ¸¸é À̸¦ ·ÎµåÇÏ°í ½ÇÇàÇÑ´Ù. ½©Àº ¾Õ¿¡¼­ ¼³¸íÇÑ fork ¸ÞÄ¿´ÏÁòÀ» ÀÌ¿ëÇÏ¿© ÀÚ±âÀÚ½ÅÀ» º¹Á¦ÇÑ ÈÄ, ÀÌ·¸°Ô ¸¸µé¾îÁø »õ·Î ¸¸µé¾îÁø ÀÚ½Ä ÇÁ·Î¼¼½º´Â ÀÌÀü¿¡ ½ÇÇàÇÏ°í ÀÖ´ø ÀÌÁø À̹ÌÁö¸¦ (¿©±â¼­´Â ½©) ãÀº ÆÄÀÏÀÇ ½ÇÇà À̹ÌÁö·Î ±³Ã¼ÇÑ´Ù. º¸Åë ½©Àº ¸í·ÉÀÌ ¿Ï·áµÇ±æ, Áï ÀÚ½Ä ÇÁ·Î¼¼½º°¡ Á¾·áµÇ±â¸¦ ±â´Ù¸°´Ù. ¿©±â¼­ ½©ÀÌ ÀÌ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¹é±×¶ó¿îµå·Î µ¹·Á ½ÇÇà µÇ°Ô ÇÒ ¼ö Àִµ¥, ¸ÕÀú control-Z¸¦ ´­·¯¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô SIGSTOP ½Ã±×³ÎÀ» º¸³» ¸ØÃß°Ô ÇÑ´Ù. ±×¸®°í ½© ¸í·É¾îÀÎ bg¸¦ »ç¿ëÇϸé À̸¦ ¹é±×¶ó¿îµå·Î µ¹¸®°í SIGCONT ½Ã±× ³ÎÀ» º¸³» ´Ù½Ã ½ÃÀÛÇÏ°Ô ÇÑ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â Á¾·áÇϰųª Å͹̳ΠÀÔÃâ·ÂÀÌ ÇÊ¿äÇÒ ¶§±îÁö ±×´ë·Î ³²¾Æ ÀÖÀ» °ÍÀÌ´Ù.

½ÇÇà ÆÄÀÏÀº ¿©·¯°¡Áö Æ÷¸ËÀ¸·Î µÇ¾î ÀÖÀ» ¼ö ÀÖÀ¸¸ç, ½ÉÁö¾î ½ºÅ©¸³Æ® ÆÄÀϵµ °¡´ÉÇÏ´Ù. ½º Å©¸³Æ® ÆÄÀÏ·Î ÀνÄÇß´Ù¸é, À̸¦ ó¸®ÇÒ ¼ö ÀÖ´Â ¿Ã¹Ù¸¥ Çؼ®±â¸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î /bin/sh´Â ½© ½ºÅ©¸³Æ®¸¦ Çؼ®ÇÑ´Ù. ½ÇÇàÇÒ ¼ö ÀÖ´Â ¿ÀºêÁ§Æ® ÆÄÀÏÀº ½ÇÇà ÄÚµå¿Í µ¥ÀÌÅÍ ¿Í ÇÔ²², ¿î¿µÃ¼°è°¡ À̸¦ ¸Þ¸ð¸®¿¡ ¿Ã¸®°í ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÇÊ¿äÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. ¸®´ª½º¿¡¼­ °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ÆÄÀÏ Æ÷¸ËÀº ELFÀÌÁö¸¸, ¸®´ª½º´Â ¾î¶² ¿ÀºêÁ§ Æ® ÆÄÀÏ Æ÷¸Ëµµ ´Ù·ê ¼ö ÀÖÀ»¸¸Å­ À¯¿¬ÇÏ°Ô µÇ¾î ÀÖ´Ù.

ÆÄÀÏ ½Ã½ºÅÛó·³ ¸®´ª½º´Â Ä¿³ÎÀ» ÄÄÆÄÀÏÇÒ ¶§ ÀÌÁø Æ÷¸ËÀ» Áö¿øÇÏ´Â °ÍÀ» Ä¿³Î¿¡ Æ÷ÇÔÇÒ ¼öµµ ÀÖ°í ¸ðµâ·Î ·ÎµåÇÒ ¼öµµ ÀÖ´Ù. Ä¿³ÎÀº Áö¿øÇÏ´Â ÀÌÁø Æ÷¸ËÀÇ ¸ñ·ÏÀ» °ü¸®ÇÏ°í ÀÖ´Ù°¡ (±×¸² 4.3ÂüÁ¶), ÆÄÀÏÀ» ½ÇÇàÇÏ·Á°í ÇÏ¸é µ¿ÀÛÇÏ´Â °ÍÀ» ãÀ» ¶§±îÁö Çϳª¾¿ °¢ ÀÌÁø Æ÷¸ËÀ» ½ÃµµÇغ»´Ù. ÀϹÝÀûÀ¸·Î ¸®´ª½º¿¡¼­ Áö¿øÇÏ´Â ÀÌÁø Æ÷¸ËÀº a.out°ú ELFÀÌ´Ù. ÆÄÀÏÀ» ½ÇÇà ÇÒ ¶§ ÆÄÀÏÀ» ¸ðµÎ ´Ù ¸Þ¸ð¸®·Î ÀоîµéÀÏ ÇÊ¿ä´Â ¾øÀ¸¸ç, ¿ä±¸½Ã ·Îµù(demand loading) ±â¼ú À» »ç¿ëÇÏ¿©, ÇÁ·Î¼¼½º°¡ ½ÇÇà À̹ÌÁöÀÇ °¢ ºÎºÐÀ» »ç¿ëÇÒ ¶§ ÀÌ°ÍÀ» ¸Þ¸ð¸®·Î °¡Á®¿Â´Ù. ÀÌ ¹ÌÁö¿¡¼­ ¾È¾²ÀÌ´Â ºÎºÐÀº ¸Þ¸ð¸®¿¡¼­ Æó±âµÈ´Ù.


±×¸² 4.4 : ELF ½ÇÇà ÆÄÀÏ Æ÷¸Ë

4.8.1 ELF

ELF (½ÇÇà°¡´ÉÇÏ°í ¸µÅ©ÇÒ ¼ö ÀÖ´Â Æ÷¸Ë : Executable and Linkable Format) ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸Ë Àº À¯´Ð½º ½Ã½ºÅÛ ¿¬±¸¼Ò(Unix System Laboratories)¿¡¼­ µðÀÚÀÎÇÑ °ÍÀ¸·Î, ÀÌÁ¦´Â ¸®´ª½º¿¡¼­ °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â Æ÷¸ËÀÌ µÇ¾ú´Ù. ECOFF³ª a.out°°Àº ´Ù¸¥ ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸Ë°ú ºñ±³ÇÏ¸é ¾à°£ÀÇ ¼º´É»óÀÇ ¿À¹öÇìµå°¡ ÀÖÁö¸¸, ELF´Â Á» ´õ À¯¿¬ÇÏ´Ù. ELF ½ÇÇà ÆÄÀÏÀº ÅØ ½ºÆ®(text)¶ó°í ºÎ¸£´Â ½ÇÇà ÄÚµå¿Í µ¥ÀÌÅÍ(data)¸¦ °¡Áö°í ÀÖ´Ù. ½ÇÇà À̹ÌÁö ¾È¿¡ ÀÖ´Â Å×ÀÌ ºíÀº ¾î¶»°Ô ÇÁ·Î±×·¥ÀÌ ÇÁ·Î¼¼½ºÀÇ °¡»ó ¸Þ¸ð¸®¿¡ µé¾î°¡¾ß ÇÏ´ÂÁö¸¦ ±â¼úÇÑ´Ù. Á¤ÀûÀ¸·Î ¸µÅ©µÈ À̹ÌÁö´Â ¸µÄ¿(ld)³ª ¸µÅ© ÆíÁý±â(link editor)°°Àº °ÍÀ» ÀÌ¿ëÇÏ¿©, ÇϳªÀÇ À̹ÌÁö¿¡ ½Ç ÇàÇϴµ¥ ÇÊ¿äÇÑ ¸ðµç ÄÚµå¿Í µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´Ù. ÀÌ¿Í ÇÔ²² À̹ÌÁö´Â ÀÚ½ÅÀÇ ¸Þ¸ð¸®¿¡ ¼­ÀÇ ¹èÄ¡µµ¿Í óÀ½ ¼öÇàÇÒ ÄÚµåÀÇ À̹ÌÁö ³»ÀÇ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÏ°í ÀÖ´Ù.

±×¸² 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 : ½ÇÇà ¿¹Á¦¸¦ °¡Áö°í À̸¦ ´õ ÀÚ¼¼È÷ ¼³¸íÇÒ ÇÊ¿ä°¡ Àִ°¡?


4.8.2 ½ºÅ©¸³Æ® ÆÄÀÏ(Script File)

½ºÅ©¸³Æ® ÆÄÀÏÀº ½ÇÇàÇϴµ¥ ÀÎÅÍÇÁ¸®ÅÍ(interpreter)¸¦ ÇÊ¿ä·ÎÇÏ´Â ½ÇÇàÆÄÀÏÀÌ´Ù. ¸®´ª½º¿¡´Â ¾ÆÁÖ ´Ù¾çÇÑ ÀÎÅÍÇÁ¸®ÅÍ°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î wish, perlÀ̳ª tcsh°°Àº ¸í·É½©ÀÌ ¸ðµÎ ÀÎÅÍÇÁ ¸®ÅÍÀÌ´Ù. ¸®´ª½º´Â ÀÎÅÍÇÁ¸®ÅÍÀÇ À̸§À» ½ºÅ©¸³Æ® ÆÄÀÏÀÇ Ã¹¹ø° ÁÙ¿¡ °¡Áö°í Àִ ǥÁØ À¯´Ð½º Ç¥±â¹ýÀ» µû¸¥´Ù. µû¶ó¼­, ÀüÇüÀûÀÎ ½ºÅ©¸³Æ® ÆÄÀÏÀº ´ÙÀ½°ú °°ÀÌ ½ÃÀÛÇÑ´Ù.

#!/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) ¶¥ÄáÀ» »ý°¢Çغ¸¸é, Ä¿³ÎÀº °¡¿îµ¥ ¸ÔÀ» ¼ö ÀÖ´Â ºÎºÐÀÌ°í, ½©Àº À̸¦ µÑ·¯ ½Î°í ÀÖ´Â °Í À¸·Î ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.