12Àå. Ä¿³Î ¸ÞÄ¿´ÏÁò ¸ðµâ (Modules)

ÀÌ Àå¿¡¼­´Â ¸®´ª½º Ä¿³ÎÀÌ ÆÄÀÏ ½Ã½ºÅÛ°°Àº ÇÔ¼öµéÀ» ÀÚ½ÅÀÌ ÇÊ¿ä·Î ÇÒ ¶§ µ¿ÀûÀ¸·Î ·Îµå ÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.

¸®´ª½º´Â ´ÜÀÏ(monolithic) Ä¿³ÎÀÌ´Ù. Áï Ä¿³ÎÀÇ ¸ðµç ±â´ÉÀûÀÎ ¿ä¼ÒµéÀÌ ÀÚ½ÅÀÇ ³»ºÎ Àڷᱸ Á¶¿Í ÇÔ¼öµé¿¡ ¸ðµÎ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÇϳªÀÇ °Å´ëÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ¿î¿µÃ¼Á¦ ¼³°èÀÇ ´Ù¸¥ ¹æ ¹ýÀ¸·Î´Â Ä¿³ÎÀÇ °¢ ±â´ÉÀûÀÎ ºÎºÐµéÀÌ º°µµÀÇ ´ÜÀ§·Î ÂÉ°³Áö°í, ±× »çÀÌ¿¡ ¾ö°ÝÇÑ Åë½Å ¸Å Ä¿´ÏÁòÀ¸·Î ¿¬°áµÇ´Â ¸¶ÀÌÅ©·ÎÄ¿³Î(micro-kernel) ±¸Á¶°¡ ÀÖ´Ù. ÀÌ´Â ½Ã°£ÀÌ ¼Ò¸ðµÇ´Â ÇÁ·Î¼¼ ½º1°¡ ¾Æ´Ñ ȯ°æ ¼³Á¤ ÇÁ·Î¼¼½º¸¦ ÅëÇÏ¿© »õ·Î¿î ÄÄÆ÷³ÍÆ®¸¦ Ä¿³Î¿¡ Ãß°¡ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. °¡·É »ç¿ëÀÚ°¡ NCR 810 SCSI¿ë µå¶óÀ̹ö¸¦ »ç¿ëÇÏ·Á°í Çϴµ¥ ÀÌ°ÍÀÌ Ä¿³Î¿¡ Æ÷ÇԵǾî ÀÖ Áö ¾Ê´Ù°í ÇÏÀÚ. ±×·¯¸é Ä¿³ÎÀÇ ¼³Á¤À» ¹Ù²Ù°í ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß NCR 810 SCSI¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù. ±×·¯³ª ¿©±â¿¡ ´Ù¸¥ ´ë¾ÈÀÌ ÀÖ´Ù. ¸®´ª½º´Â ¿î¿µÃ¼Á¦¸¦ ±¸¼ºÇÏ´Â ÄÄÆ÷³ÍÆ® µéÀ» ÇÊ¿ä·Î ÇÒ ¶§ µ¿ÀûÀ¸·Î ·Îµå ¶Ç´Â ¾ð·ÎµåÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ¸®´ª½º ¸ðµâÀº ½Ã½ºÅÛÀÌ ºÎ ÆÃµÈ ÈÄ ¾ðÁ¦¶óµµ Ä¿³Î¿¡ µ¿ÀûÀ¸·Î ¸µÅ©µÉ ¼ö ÀÖ´Â ÄÚµå µ¢¾î¸®ÀÌ´Ù. ¶ÇÇÑ ¸ðµâÀÌ ´õÀÌ»ó ÇÊ¿äÇÏÁö ¾ÊÀ» ¶§´Â Ä¿³Î°úÀÇ ¿¬°áÀ» ÇØÁ¦ÇÏ°í Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º Ä¿³ÎÀÇ »ó´ç¼ö´Â µð ¹ÙÀ̽º µå¶óÀ̹ö¿Í, ³×Æ®¿÷ µå¶óÀ̹ö³ª ÆÄÀϽýºÅÛ °°Àº À¯»ç µð¹ÙÀ̽º µå¶óÀ̹ö(pseudo device driver)ÀÌ´Ù.

»ç¿ëÀÚ´Â insmod³ª rmmod°°Àº ¸í·ÉÀ¸·Î ¸®´ª½º Ä¿³Î ¸ðµâÀ» ¸íÈ®ÇÏ°Ô ·Îµå ¶Ç´Â ¾ð·Î µå¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç, ¶Ç´Â Ä¿³Î ÀÚ½ÅÀÌ ÀÚ½ÅÀÌ ÇÊ¿ä·Î ÇÒ ¶§ Ä¿³Î µ¥¸ó(kerneld)¿¡°Ô ¸ðµâ À» ·Îµå/¾ð·Îµå ÇÒ °ÍÀ» ¿ä±¸ÇÒ ¼ö ÀÖ´Ù. ÇÊ¿ä·Î ÇÒ ¶§ Äڵ带 µ¿ÀûÀ¸·Î ·ÎµåÇÏ´Â °ÍÀº Ä¿ ³Î Å©±â¸¦ ÃÖ¼ÒÈ­ÇÒ ¼ö ÀÖ°í, Ä¿³ÎÀ» ¸Å¿ì À¯¿¬ÇÏ°Ô ÇÒ ¼ö ÀÖ¾î ¸Å·ÂÀûÀÌ´Ù. ÇÊÀÚ°¡ »ç¿ëÇÏ ´Â ÀÎÅÚ Ä¿³ÎÀº ¸ðµâÀ» ±¤¹üÀ§ÇÏ°Ô »ç¿ëÇÏ¿© Å©±â°¡ °Ü¿ì 406 Kbyte ¹Û¿¡ µÇÁö ¾Ê´Â´Ù. ³ª´Â VFAT ÆÄÀÏ ½Ã½ºÅÛÀ» °¡²û¾¿ »ç¿ëÇÒ »ÓÀ̹ǷÎ, ³»°¡ VFAT ÆÄƼ¼ÇÀ» ¸¶¿îÆ® ÇÒ ¶§¸¸ ¸®´ª½º Ä¿³ÎÀÌ VFAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâÀ» ÀÚµ¿À¸·Î ¿Ã¸®µµ·Ï Çß´Ù. ±×¸®°í ±× VFAT ÆÄƼ¼ÇÀÇ ¸¶¿î Æ®¸¦ ÇØÁ¦ÇÏ¸é ½Ã½ºÅÛÀÌ ´õÀÌ»ó VFAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù´Â °ÍÀ» ¾Ë¾ÆÂ÷¸® °í ½Ã½ºÅÛ¿¡¼­ Á¦°ÅÇϵµ·Ï Çß´Ù. ¸ðµâÀº ¶ÇÇÑ »õ·Î¿î Ä¿³Î Äڵ带 ´Ù½Ã ÄÄÆÄÀÏÇÏ°í Ä¿³ÎÀ» ÀçºÎÆÃÇÏÁö ¾Ê°í Å×½ºÆ®¸¦ Çغ¸°íÀÚ ÇÒ ¶§ À¯¿ëÇÏ´Ù. ¹°·Ð ¾Æ¹«·± ´ñ°¡µµ ¾ø´Â °ÍÀº ¾Æ´ÏÁö ¸¸, Ä¿³Î ¸ðµâ°ú °ü·ÃÇÏ¿© ¼º´É°ú ¸Þ¸ð¸®¿¡¼­ ¾à°£ÀÇ ¼ÕÇØ°¡ ÀÖÀ» »ÓÀÌ´Ù. ÀÌ°ÍÀº ·ÎµåÇÒ ¼ö ÀÖµµ·Ï ¸ðµâÀÌ Á¦°øÇØ¾ß ÇÏ´Â ¾à°£ÀÇ Äڵ尡 ÀÖ°í, º°µµÀÇ ÀڷᱸÁ¶°¡ ¸Þ¸ð¸®¸¦ Á¶±Ý Â÷Áö Çϱ⠶§¹®ÀÌ´Ù. ¶ÇÇÑ Ä¿³Î ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¶§ ÇÑ ´Ü°è¸¦ °ÅÃÄ¾ß ÇϹǷΠ¸ðµâÀÇ È¿À²¼ºÀÌ ¾Æ ÁÖ Á¶±Ý ¶³¾îÁö°Ô µÈ´Ù.

·ÎµåµÈ ¸®´ª½º ¸ðµâÀº ´Ù¸¥ º¸Åë Ä¿³Î ÄÚµåó·³ Ä¿³ÎÀÇ ÇÑ ºÎºÐÀÌ µÈ´Ù. ¸ðµâÀº Ä¿³Î ÄÚµå ¿Í ¶È°°Àº ±ÇÇÑ°ú Ã¥ÀÓÀ» Áø´Ù. ´Ù¸£°Ô ¸»Çϸé, ¸®´ª½º Ä¿³Î ¸ðµâÀº ¸ðµç Ä¿³Î Äڵ峪 µð¹Ù À̽º µå¶óÀ̹öó·³ Ä¿³ÎÀ» ¸Á°¡¶ß¸± ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù.

¸ðµâÀÌ ÀÚ½ÅÀÌ ÇÊ¿ä·Î ÇÒ ¶§ Ä¿³ÎÀÇ ÀÚ¿øÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸·Á¸é, ±×°ÍÀÌ ¾îµð ÀÖ´ÂÁö ãÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. °¡·É ¸ðµâÀÌ Ä¿³Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ÇÔ¼öÀÎ kmalloc()À» È£ÃâÇØ¾ß ÇÑ´Ù °í ÇÏÀÚ. ¸ðµâÀ» ÄÄÆÄÀÏÇÒ ¶§¿¡´Â ¸Þ¸ð¸®ÀÇ ¾î´À À§Ä¡¿¡ kmalloc()ÀÌ ÀÖ´ÂÁö ¸ð¸£¹Ç·Î, ¸ð µâÀÌ ·ÎµåµÉ ¶§ Ä¿³ÎÀº ¸ðµâÀÌ Á¦´ë·Î µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï kmalloc()¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¸ÂÃçÁÖ ¾î¾ß ÇÑ´Ù. Ä¿³ÎÀº Ä¿³ÎÀÇ ¸ðµç ÀÚ¿øÀÇ ¸ñ·ÏÀ» Ä¿³ÎÀÇ ½Éº¼ Å×À̺í(symbol table)·Î °ü¸®Çϸç, À̸¦ ÀÌ¿ëÇØ ¸ðµâÀÌ ·ÎµåµÉ ¶§ À̵é ÀÚ¿ø¿¡ ´ëÇÑ ÂüÁ¶¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ÇÑ ¸ðµâ ÀÌ ´Ù¸¥ ¸ðµâÀÇ ¼­ºñ½º¸¦ ÇÊ¿ä·Î ÇÏ´Â °æ¿ì, ¸ðµâÀÌ ÃþÃþÀÌ ½×¾ÆÁú ¼ö ÀÖµµ·Ï ÇÑ´Ù2. ¿¹¸¦ µé¾î, VFAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâÀº FAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâÀÇ ¼­ºñ½º¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ´Â VFAT ÆÄÀÏ ½Ã½ºÅÛÀÌ FAT ÆÄÀÏ ½Ã½ºÅÛÀ» ´Ù¼Ò È®ÀåÇÑ °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ·¸°Ô ÇÑ ¸ðµâÀÌ ´Ù¸¥ ¸ð µâÀÌ Á¦°øÇÏ´Â ¼­ºñ½º³ª ÀÚ¿øÀ» ÇÊ¿ä·Î ÇÏ´Â °ÍÀº, ¸ðµâÀÌ Ä¿³Î ÀÚüÀÇ ¼­ºñ½º¿Í ÀÚ¿øÀ» ÇÊ ¿ä·Î ÇÏ´Â °æ¿ì¿Í ¸Å¿ì ºñ½ÁÇÏ´Ù. ´ÜÁö ¿©±â¼­ ÇÊ¿ä·Î ÇÏ´Â ¼­ºñ½º°¡ ´Ù¸¥, ÀÌÀü¿¡ ·ÎµåµÈ ¸ðµâ¿¡ ÀÖ´Â °ÍÀÏ »ÓÀÌ´Ù. °¢ ¸ðµâÀÌ ·ÎµåµÉ ¶§, Ä¿³ÎÀº »õ·Î ·ÎµåµÇ´Â ¸ðµâ¿¡¼­ ¿ÜºÎ·Î º¸ ¿©ÁÖ´Â ÀÚ¿ø°ú ½Éº¼À» ¸ðµÎ Ä¿³Î ½Éº¼ Å×ÀÌºí¿¡ Ãß°¡ÇÑ´Ù. ÀÌ´Â ´ÙÀ½¿¡ ·ÎµåµÇ´Â ¸ðµâÀÌ ÀÌ ¹Ì ·ÎµåµÈ ¸ðµâÀÇ ¼­ºñ½º¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù.

¸ðµâÀ» ¾ð·ÎµåÇÏ·Á ÇÒ ¶§ Ä¿³ÎÀº ¸ðµâÀÌ ÇöÀç »ç¿ëµÇ°í ¾Ê°í ÀÖ´ÂÁö ¾Ë¾Æ¾ß Çϸç, ¸ðµâ¿¡°Ô ÀÚ½ÅÀÌ ¾ð·ÎµåµÇ·Á°í ÇÑ´Ù´Â °ÍÀ» ¾Ë·ÁÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô Çؼ­ ¸ðµâÀº Ä¿³Î¿¡¼­ Á¦ °ÅµÉ ¶§, ÀÚ½ÅÀÌ ÇÒ´ç¹ÞÀº Ä¿³Î ¸Þ¸ð¸®³ª ÀÎÅÍ·´Æ® °°Àº ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ´Ù. ¸ð µâÀÌ ¾ð·ÎµåµÉ ¶§ Ä¿³ÎÀº ¸ðµâÀÌ Ä¿³Î ½Éº¼ Å×ÀÌºí¿¡ Ãß°¡ÇÑ ½Éº¼µéÀ» ¸ðµÎ Á¦°ÅÇÑ´Ù.

·ÎµåµÈ ¸ðµâÀÌ À߸ø ¸¸µé¾îÁø °ÍÀ̾ ¿î¿µÃ¼Á¦¸¦ ¸Á°¡Æ®¸± °¡´É¼º°ú´Â º°µµ·Î, ´Ù¸¥ À§Çè °¡´É¼ºÀÌ ÀÖ´Ù. ¸¸¾à Áö±Ý ½ÇÇàÇÏ°í ÀÖ´Â Ä¿³Îº¸´Ù ÀÌÀü ¹öÀüÀ̳ª ÀÌÈÄ ¹öÀü ¿ëÀ¸·Î ÄÄÆÄÀÏ µÈ ¸ðµâÀ» ·ÎµåÇÏ·Á°í ÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? ¸ðµâÀÌ Ä¿³Î ·çƾÀ» È£ÃâÇÒ ¶§ À߸øµÈ ÀÎÀÚ¸¦ ³Ñ°ÜÁØ´Ù¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Ä¿³ÎÀº ¸ðµâÀ» ·ÎµåÇÒ ¶§ ¾ö°ÝÇÑ ¹öÀü °Ë»ç¸¦ ÇÏ ¿© ÀÌ·± ¹®Á¦¸¦ ¼±ÅÃÀûÀ¸·Î ¸·À» ¼ö ÀÖ´Ù3.


±×¸² 12.1 : Ä¿³Î ¸ðµâÀÇ ¸®½ºÆ®

12.1 ¸ðµâÀ» ·ÎµåÇϱâ

Ä¿³Î ¸ðµâÀ» ·ÎµåÇÏ´Â ¹æ¹ýÀº µÎ°¡Áö°¡ ÀÖ´Ù. Çϳª´Â insmod ¸í·ÉÀ» »ç¿ëÇÏ¿© ¼öµ¿À¸·Î ¸ð µâÀ» Ä¿³Î¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. µÎ¹ø°´Â À̺¸´Ù ´õ ¶È¶ÈÇÑ ¹æ¹ýÀ¸·Î ¸ðµâÀ» ÇÊ¿ä·Î ÇÒ ¶§ ·ÎµåÇÏ´Â °ÍÀ¸·Î, À̸¦ ¿ä±¸½Ã ·Îµù(demand loading)À̶ó°í ÇÑ´Ù. Ä¿³ÎÀÌ ¾î¶² ¸ðµâÀ» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀ» ¹ß°ßÇϸé (¿¹¸¦ µé¾î »ç¿ëÀÚ°¡ Ä¿³Î¿¡ ¾ø´Â ÆÄÀϽýºÅÛÀ» ¸¶¿îÆ® ÇÑ °æ¿ì), Ä¿ ³ÎÀº Ä¿³Î µ¥¸ó(kerneld)¿¡°Ô ¸Â´Â ¸ðµâÀ» ·ÎµåÇ϶ó°í ¿ä±¸ÇÑ´Ù.

Ä¿³Î µ¥¸óÀº ºñ·Ï ½´ÆÛÀ¯Àú ±ÇÇÑÀ» °¡Áö°í ÀÖ±â´Â ÇÏÁö¸¸ º¸ÅëÀÇ »ç¿ëÀÚ ÇÁ·Î¼¼½ºÀÌ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â º¸Åë ½Ã½ºÅÛÀÌ ºÎÆÃÇÒ ¶§ ½ÃÀÛÇÏ¿©, Ä¿³Î°ú ÇÁ·Î¼¼½º°£ Åë½Å(IPC) ä³ÎÀ» Çϳª ¿¬´Ù. ÀÌ ¿¬°áÀº Ä¿³ÎÀÌ kerneld¿¡°Ô ¿©·¯°¡Áö ÀÛ¾÷À» ¿äûÇϱâ À§ÇØ ¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ »ç¿ëÇÑ´Ù. kerneldÀÇ ÁÖµÈ ¿ªÇÒÀ» Ä¿³Î ¸ðµâÀ» ·ÎµåÇÏ°í ¾ð·ÎµåÇÏ´Â °ÍÀÌÁö¸¸, ÇÊ¿äÇÒ ¶§ Á÷·Ä¶óÀÎ »ó¿¡ PPP ¿¬°áÀ» ½ÃÀÛÇϰųª, ÇÊ¿äÇÏÁö ¾ÊÀ» ¶§ À̸¦ ´Ý´Â °Í °°Àº ´Ù¸¥ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â ´É·Âµµ ÀÖ´Ù. kerneld´Â Á÷Á¢ ÀÌ·± ÀϵéÀ» ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÀÌ·± ÀÏÀ» Çϱâ À§ÇØ ÇÊ¿äÇÑ ÇÁ·Î±×·¥(insmod °°Àº °Í)À» ½ÇÇàÇÑ´Ù. kerneld´Â ´ÜÁö Ä¿³ÎÀÇ ´ë¸®ÀÎÀ̸ç, Ä¿³ÎÀÇ ´Ù¸¥ ÇÑÆí¿¡¼­ ÀÏÀ» ½ºÄÉÁ층ÇÑ´Ù.

insmod ÇÁ·Î±×·¥Àº ÀÚ½ÅÀÌ ·ÎµåÇØ¾ß ÇÏ´Â ¿äûÇÑ Ä¿³Î ¸ðµâÀ» ãÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿ä±¸ ½Ã ·ÎµåÇÏ´Â Ä¿³Î ¸ðµâÀº º¸Åë /lib/modules/kernel-version¿¡ µé¾î ÀÖ´Ù. Ä¿³Î ¸ðµâ Àº ½Ã½ºÅÛ¿¡ ÀÖ´Â ´Ù¸¥ ÇÁ·Î±×·¥°ú ºñ±³ÇÏ¸é ¸µÅ©µÈ ¿ÀºêÁ§Æ® ÆÄÀÏÀ̶ó´Â Á¡¿¡ °°Áö¸¸, Àç ¹èÄ¡°¡´ÉÇÑ À̹ÌÁö·Î ¸µÅ©µÇ¾î ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. Áï, ƯÁ¤ ÁÖ¼Ò¿¡¼­ ½ÃÀÛÇϵµ·Ï ¸µÅ©µÇ¾î ÀÖÁö ¾Ê´Ù´Â °ÍÀÌ´Ù. ÀÌ À̹ÌÁö´Â a.out Æ÷¸ËÀ̳ª ELF Æ÷¸ËÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏÀÏ ¼ö ÀÖ´Ù. insmod´Â Ä¿³ÎÀÌ ÀͽºÆ÷Æ®(export)ÇÏ´Â ½Éº¼À» ã±â À§ÇØ Æ¯±ÇÃþÀÇ ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÑ´Ù. Ä¿³ÎÀº ÀͽºÆ÷Æ® ½Éº¼À» ½Éº¼ÀÇ À̸§°ú ±×°ÍÀÇ °ª(½Éº¼ÀÇ ÁÖ¼Ò°°Àº)ÀÇ ½ÖÀ¸·Î °¡Áö°í ÀÖ´Ù. Ä¿³ÎÀÇ ÀͽºÆ÷Æ® ½Éº¼ Å×À̺íÀº, Ä¿³ÎÀÌ °ü¸®ÇÏ´Â ¸ðµâÀÇ ¸ñ·ÏÀÎ module_list Æ÷ÀÎÅÍ°¡ °¡¸®Å°°í ÀÖ´Â, ù¹ø° module ÀڷᱸÁ¶¿¡ µé¾î ÀÖ´Ù. Ä¿³Î¿¡ ÀÖ´Â ¸ðµç ½Éº¼µéÀÌ ¸ðµâ¿¡ °Ô ÀͽºÆ÷Æ® µÇ´Â °ÍÀº ¾Æ´Ï´Ù. ´ÜÁö Ä¿³ÎÀ» ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÒ ¶§ Ưº°È÷ ÁöÁ¤ÇÑ ½Éº¼¸¸ÀÌ ÀÌ Å×ÀÌºí¿¡ µé¾î°£´Ù4. µå¶óÀ̹ö°¡ ½Ã½ºÅÛÀÇ Æ¯Á¤ ÀÎÅÍ·´Æ®ÀÇ Á¦¾î±ÇÀ» °®°í ½ÍÀ» ¶§ È£Ãâ ÇØ¾ß ÇÏ´Â Ä¿³Î·çƾÀÎ "request_irq" ½Éº¼À» ¿¹·Î µé¾îº¸ÀÚ. ÇÊÀÚ°¡ °®°í ÀÖ´Â ÇöÀç Ä¿³Î ¿¡¼­ ÀÌ°ÍÀÇ °ªÀº 0x0010CD30ÀÌ´Ù. Ä¿³ÎÀÇ ÀͽºÆ÷Æ® ½Éº¼°ú °ªÀº /proc/ksyms¸¦ »ìÆ캸 °Å³ª ksyms ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© º¼ ¼ö ÀÖ´Ù. ksyms ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© Ä¿³Î¿¡ ÀÖ´Â ¸ð µç ÀͽºÆ÷Æ® ½Éº¼À» º¼ ¼öµµ ÀÖ°í, ·ÎµåµÈ ¸ðµâÀÌ ÀͽºÆ÷Æ®ÇÏ´Â ½Éº¼µéÀÇ ¸ñ·Ï¸¸ º¼ ¼öµµ ÀÖ´Ù. insmod´Â ¸ðµâÀ» ÀÚ½ÅÀÇ °¡»ó ¸Þ¸ð¸® °ø°£À¸·Î ÀоîµéÀÌ°í, ¾ÆÁ÷ ÇØ°áµÇÁö ¾ÊÀº Ä¿ ³Î ·çƾ°ú ÀÚ¿ø¿¡ ´ëÇÑ ÂüÁ¶¸¦ Ä¿³Î¿¡ ÀÖ´Â ÀͽºÆ÷Æ® ½Éº¼À» ÅëÇÏ¿© ¸ÂÃß¾îÁØ´Ù. ÀÌ·¸°Ô À§ Ä¡¸¦ °íÁ¤ÇÏ´Â °ÍÀº ¸Þ¸ð¸®»ó¿¡ ÀÖ´Â ¸ðµâ À̹ÌÁö¸¦ ¼öÁ¤ÇÏ´Â ÇüÅ·ΠÀÌ·ç¾îÁø´Ù. insmod ´Â ¸ðµâ¿¡ ÀÖ´Â ÇØ´çÇÏ´Â À§Ä¡¿¡ ¹°¸®ÀûÀ¸·Î ½Éº¼ÀÇ ÁÖ¼Ò¸¦ ½á³Ö´Â´Ù.

insmod°¡ ¸ðµâÀÇ ÀͽºÆ÷Æ®µÈ Ä¿³Î ½Éº¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¸ðµÎ ÇØ°áÇÏ¿´´Ù¸é, Ư±Ç ½Ã½ºÅÛ ÄÝÀ» ÀÌ¿ëÇÏ¿© Ä¿³Î¿¡°Ô »õ·Î¿î Ä¿³ÎÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ´Â ÃæºÐÇÑ °ø°£ÀÌ ÀÖ´ÂÁö ¹¯´Â´Ù. Ä¿³Î Àº »õ module ÀڷᱸÁ¶¿Í, »õ ¸ðµâÀ» ÃæºÐÈ÷ Æ÷ÇÔÇÒ ¼ö ÀÖ´Â Å©±âÀÇ Ä¿³Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ °í, ÀÌ ±¸Á¶Ã¼¸¦ Ä¿³Î ¸ðµâ ¸®½ºÆ®ÀÇ ³¡¿¡ ³Ö´Â´Ù. »õ ¸ðµâÀº ÃʱâÈ­µÇÁö ¾Ê¾Ò´Ù°í (UNINITIALIZED) Ç¥½ÃµÈ´Ù. ±×¸² 12.1Àº FAT¿Í VFAT µÎ ¸ðµâÀÌ Ä¿³Î¿¡ ·ÎµåµÈ ÈÄÀÇ Ä¿ ³Î ¸ðµâÀÇ ¸®½ºÆ®¸¦ º¸¿©ÁØ´Ù. ÀÌ ±×¸²¿¡´Â ³ªÅ¸³ªÁö ¾Ê¾ÒÁö¸¸, ¸®½ºÆ®¿¡ Àִ ù¹ø° ¸ðµâ Àº À¯»ç ¸ðµâ(pseudo module)·Î¼­ ´ÜÁö Ä¿³ÎÀÇ ÀͽºÆ÷Æ® ½Éº¼ Å×À̺íÀ» °®±â À§ÇØ Á¸ÀçÇÑ´Ù. ·ÎµåµÈ Ä¿³ÎÀÇ ¸ñ·Ï°ú ±×µéÀÇ »ó°ü°ü°è¸¦ º¸°í ½ÍÀ¸¸é lsmod ¸í·É¾î¸¦ ¾²¸é µÈ´Ù. lsmod ¸í·ÉÀº ´ÜÁö Ä¿³Î module ÀڷᱸÁ¶ÀÇ ¸®½ºÆ®·Î ºÎÅÍ ¸¸µé¾îÁö´Â /proc/modulesÀÇ Æ÷¸Ë À» ¹Ù²Ù¾î¼­ º¸¿©ÁÖ´Â °Í »ÓÀÌ´Ù. Ä¿³ÎÀÌ ¸ðµâÀ» À§ÇØ ÇÒ´çÇÑ ¸Þ¸ð¸®´Â insmod°¡ ÀÌ¿¡ Á¢ ±ÙÇÒ ¼ö ÀÖµµ·Ï insmod ÇÁ·Î¼¼½ºÀÇ ÁÖ¼Ò°ø°£¿¡ ¸ÅÇÎÀÌ µÈ´Ù. insmod´Â ¸ðµâÀ» ÇÒ´ç¹ÞÀº °ø°£À¸·Î º¹»ç¸¦ ÇÏ°í À̸¦ Àç¹èÄ¡ÇÏ¿©, ÇÒ´ç¹ÞÀº Ä¿³Î °ø°£¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ ´Â ¸ðµâÀÌ ¼­·Î ´Ù¸¥ ¸®´ª½º ½Ã½ºÅÛ¿¡¼­ ¶È°°Àº ÁÖ¼Ò¿¡ ·ÎµåµÇ°Å³ª µÎ¹ø ¸ðµÎ °°Àº ÁÖ¼Ò¿¡ ·ÎµåµÈ´Ù´Â º¸ÀåÀÌ ¾ø±â ¶§¹®¿¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ´Ù½Ã Çѹø, ÀÌ·¸°Ô Àç¹èÄ¡ÇÏ´Â °ÍÀº ¸ðµâ ÀÇ À̹ÌÁö¸¦ ¿Ã¹Ù¸¥ ÁÖ¼Ò·Î ¼öÁ¤ÇÏ´Â °ÍÀ» Æ÷ÇÔÇÑ´Ù.

»õ ¸ðµâÀº ¶ÇÇÑ Ä¿³Î¿¡ ½Éº¼µéÀ» ÀͽºÆ÷Æ®Çϱ⠶§¹®¿¡, insmod´Â ÀÌ·¸°Ô ÀͽºÆ÷Æ®µÈ ÀÌ¹Ì ÁöÀÇ Å×À̺íÀ» ¸¸µç´Ù. ¸ðµç Ä¿³Î ¸ðµâÀº ¸ðµâ ÃʱâÈ­¿Í ¸ðµâ Á¤¸® ·çƾÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù5. ÀÌ µÎ ½Éº¼Àº ÀͽºÆ÷Æ® µÇÁø ¾ÊÁö¸¸, insmod´Â ÀÌ µÑÀÇ ÁÖ¼Ò¸¦ ¾Ë¾Æ³»¾î Ä¿³Î¿¡ ³Ñ °Ü¾ß ÇÑ´Ù. ¸ðµç °ÍÀÌ Àß µÇ¾ú´Ù¸é, insmod´Â ÀÌÁ¦ ¸ðµâÀ» ÃʱâÈ­ÇÒ Áغñ°¡ µÇ¾î ÀÖ°í, Ư ±Ç ½Ã½ºÅÛ ÄÝÀ» ºÒ·¯ Ä¿³Î¿¡ ¸ðµâÀÇ ÃʱâÈ­ ·çƾ°ú Á¤¸® ·çƾÀÇ ÁÖ¼Ò¸¦ ³Ñ±ä´Ù.

»õ ¸ðµâÀÌ Ä¿³Î¿¡ Ãß°¡µÇ¸é, Ä¿³ÎÀÇ ½Éº¼ ¸ñ·ÏÀ» °»½ÅÇÏ°í »õ ¸ðµâÀÌ »ç¿ëÇÏ´Â ¸ðµâµéÀ» ¼ö Á¤ÇØ¾ß ÇÑ´Ù. Àڽſ¡ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ ¸ðµâÀ» °¡Áø ¸ðµâÀº, ÀÚ½ÅÀÇ module ÀڷᱸÁ¶ÀÇ Æ÷ÀÎ ÅÍ°¡ °¡¸®Å°°í ÀÖ´Â ÀÚ½ÅÀÇ ½Éº¼ Å×ÀÌºí ³¡¿¡ ÂüÁ¶µÇ´Â ¸ñ·ÏÀ» °ü¸®ÇÏ¿©¾ß ÇÑ´Ù. ±×¸² 12.1 Àº VFAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâÀÌ FAT ÆÄÀÏ ½Ã½ºÅÛ ¸ðµâ¿¡ ÀÇÁ¸ÇÏ°í ÀÖÀ½À» º¸¿©ÁØ´Ù. µû¶ó¼­ FAT ¸ðµâÀº VFAT ¸ðµâ¿¡ ´ëÇÑ ÂüÁ¶¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ ÂüÁ¶´Â VFAT ¸ðµâÀÌ ·ÎµåµÉ ¶§ Ãß°¡µÈ °ÍÀÌ´Ù. Ä¿³ÎÀº ¸ðµâÀÇ ÃʱâÈ­ ·çƾÀ» ºÎ¸£°í, ÀÌ°ÍÀÌ ¼º°øÇÏ¸é ¸ðµâ ¼³Ä¡¸¦ °è¼Ó ÇÏ °Ô µÈ´Ù. ¸ðµâÀÇ Á¤¸® ·çƾÀÇ ÁÖ¼Ò´Â ¸ðµâÀÇ module ÀڷᱸÁ¶¿¡ ÀúÀåµÇ¸ç, ¸ðµâÀÌ ¾ð·Îµå µÉ ¶§ Ä¿³Î¿¡ ÀÇÇØ È£ÃâµÈ´Ù. ¸¶Áö¸·À¸·Î ¸ðµâÀÇ »óÅ´ ½ÇÇàÁß(RUNNING)À¸·Î ¼³Á¤µÈ´Ù.


12.2 ¸ðµâÀ» ¾ð·ÎµåÇϱâ

¸ðµâÀº rmmod ¸í·ÉÀ» »ç¿ëÇÏ¿© Á¦°ÅÇÒ ¼ö ÀÖÁö¸¸, ¿ä±¸½Ã ·ÎµåµÈ ¸ðµâÀº ´õÀÌ»ó »ç¿ëµÇÁö ¾ÊÀ» ¶§ kerneld¿¡ ÀÇÇØ ½Ã½ºÅÛ¿¡¼­ ÀÚµ¿À¸·Î Á¦°ÅµÈ´Ù. kerneldÀÇ Å¸À̸Ӱ¡ ¸¸·áµÉ ¶§ ¸¶´Ù, kerneld´Â »ç¿ëµÇÁö ¾Ê´Â ¿ä±¸½Ã ·ÎµåµÈ ¸ðµâÀ» ½Ã½ºÅÛ¿¡¼­ Á¦°ÅÇÏ´Â ½Ã½ºÅÛ ÄÝÀ» ºÎ¸¥´Ù. ŸÀ̸ÓÀÇ °ªÀº kerneld¸¦ ½ÃÀÛÇÒ ¶§ ¼³Á¤µÇ´Âµ¥,. ÇÊÀÚÀÇ ½Ã½ºÅÛ¿¡¼­´Â 180Ãʸ¶´Ù °Ë»çÇϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´Ù. ±×·¡¼­, ¿¹¸¦µé¾î ISO9660 ÆÄÀϽýºÅÛÀÌ ¸ðµâ·Î µÇ¾î ÀÖ´Â °÷¿¡ ¼­ ISO9660 CDROMÀ» ¸¶¿îÆ®Çß´Ù¸é, CDROMÀ» ¾ð¸¶¿îÆ®ÇÑ ÈÄ Á¶±Ý ÀÖÀ¸¸é ISO9660 ¸ðµâ ÀÌ Ä¿³Î¿¡¼­ Á¦°ÅµÈ´Ù.

¸ðµâÀº Ä¿³ÎÀÇ ´Ù¸¥ ºÎºÐÀÌ Àڽſ¡ ÀÇÁ¸ÇÏ°í ÀÖÀ» ¶§¿¡´Â ¾ð·ÎµåµÉ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î, ÇÏ ³ª ÀÌ»óÀÇ VFAT ÆÄÀÏ ½Ã½ºÅÛÀÌ ¸¶¿îÆ®µÇ¾î ÀÖ´Â µ¿¾È¿¡´Â VFAT ¸ðµâÀ» ¾ð·ÎµåÇÒ ¼ö ¾ø´Ù. lsmodÀÇ Ãâ·ÂÀ» ´«¿©°Üº¸¸é, ¸ðµâ¿¡ ¼ýÀÚ°¡ °°ÀÌ ºÙ¾î ³ª¿À´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿¹ ¸¦ µé¾î :

Module :	#pages: 	Used by
msdos	5			1
vfat	4			1 (autoclean)
fat	6	[vfat msdos]	2 (autoclean)

Ä«¿îÆ®´Â ÀÌ ¸ðµâ¿¡ ÀÇÁ¸ÇÏ°í ÀÖ´Â Ä¿³Î ¿ä¼ÒÀÇ °³¼öÀÌ´Ù. À§ÀÇ ¿¹¿¡¼­´Â, vfat¿Í msdos ¸ðµâÀÌ fat ¸ðµâ¿¡ ÀÇÁ¸ÇÏ°í ÀÖÀ¸¹Ç·Î Ä«¿îÆ®°¡ 2°¡ µÈ´Ù. vfat¿Í msdos ¸ðµâÀº ÀÌ °ªÀ¸ ·Î 1À» °®°í Àִµ¥ ÀÌ°ÍÀº ¸¶¿îÆ®µÈ ÆÄÀϽýºÅÛÀÌ´Ù. ¸¸¾à ´Ù¸¥ VFAT ÆÄÀÏ ½Ã½ºÅÛÀ» ÀÐ¾î µéÀ̸é, vfat ¸ðµâÀÇ Ä«¿îÆ®´Â 2°¡ µÉ °ÍÀÌ´Ù. ¸ðµâÀÇ Ä«¿îÆ®´Â ±× À̹ÌÁöÀÇ Ã¹¹ø° longword¿¡ ÀúÀåµÈ´Ù.

ÀÌ Ç׸ñ¿¡´Â ¶ÇÇÑ AUTOCLEAN°ú VISITED Ç÷¡±×°¡ ´õ ÀÖ´Ù. ÀÌ µÎ Ç÷¡±×´Â ¿ä±¸½Ã ·Îµå µÈ ¸ðµâ¿¡¼­ »ç¿ëµÈ´Ù. ÀÌµé ¸ðµâÀº ÀÚµ¿À¸·Î ¾ðµµµå µÉ ¼ö ÀÖ´Ù´Â °ÍÀ» ½Ã½ºÅÛÀÌ ¾Ë ¼ö ÀÖ µµ·Ï AUTOCLEANÀ̶ó°í Ç¥½ÃµÈ´Ù. VISITED Ç÷¡±×´Â ¸ðµâÀÌ Çϳª ÀÌ»óÀÇ ´Ù¸¥ ½Ã½ºÅÛ ±¸ ¼º¿ä¼Ò¿¡ ÀÇÇØ »ç¿ëµÇ°í ÀÖÀ½À» ¸»ÇÑ´Ù. ÀÌ´Â ´Ù¸¥ ±¸¼º¿ä¼Ò°¡ ±× ¸ðµâÀ» »ç¿ëÇÒ ¶§¸¶´Ù ¼³ Á¤ÀÌ µÈ´Ù. kerneld°¡ ½Ã½ºÅÛ¿¡ »ç¿ëµÇÁö ¾Ê°í ÀÖ´Â ¿ä±¸½Ã ·ÎµåµÈ ¸ðµâÀ» Á¦°ÅÇ϶ó°í ¿ä ûÇÒ ¶§¸¶´Ù, ½Ã½ºÅÛÀº Àڽſ¡°Ô ÀÖ´Â ¸ðµç ¸ðµâÀ» µÚÁ®¼­ ±×·± È帵éÀ» °ñ¶ó³½´Ù. ÀÌ´Â ´Ü Áö AUTOCLEANÀ̶ó°í Ç¥½ÃµÇ¾î ÀÖ°í RUNNING »óÅ¿¡ ÀÖ´Â ¸ðµâ¸¸À» ã´Â´Ù. ¸¸¾à ±× ÈÄ º¸ÀÇ VISITED Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é ±× ¸ðµâÀ» Á¦°ÅÇÏ°í, ±×·¸Áö ¾Ê´Ù¸é VISITED Ç÷¡±×¸¦ Áö¿ì°í ½Ã½ºÅÛÀÇ ´Ù¸¥ ¸ðµâÀ» °è¼Ó »ìÆ캻´Ù.

ÇÑ ¸ðµâÀÌ ¾ð·Îµå °¡´ÉÇÏ´Ù°í ÇÑ´Ù¸é, ±× ¸ðµâÀÌ ÇÒ´ç¹ÞÀº Ä¿³ÎÀÇ ÀÚ¿øÀ» ÇØÁ¦ÇÒ ¼ö ÀÖµµ·Ï ¸ðµâÀÇ Á¤¸® ·çƾÀÌ È£ÃâµÈ´Ù. ¸ðµâÀÇ ÀڷᱸÁ¶´Â DELETED·Î Ç¥½ÃµÇ°í, Ä¿³Î ¸ðµâÀÇ ¸®½º Æ®¿ÍÀÇ ¿¬°áÀ» ²÷´Â´Ù. ±× ¸ðµâÀÌ ÀÇÁ¸ÇÏ°í ÀÖ´Â ´Ù¸¥ ¸ðµâÀº ´õ ÀÌ»ó Àڽſ¡ ÀÇÁ¸ÇÏÁö ¾Ê ´Ù´Â °ÍÀ» ³ªÅ¸³»µµ·Ï ÂüÁ¶¸ñ·ÏÀÌ ¼öÁ¤µÈ´Ù. ¸ðµâÀÌ ÇÊ¿ä·Î Çß´ø ¸ðµç Ä¿³Î ¸Þ¸ð¸®´Â ÇØÁ¦ µÈ´Ù.


¹ø¿ª : ÀÌÈ£
Á¤¸® : ÀÌÈ£


¿ªÁÖ 1) Ä¿³ÎÀ» »õ·Î ÄÄÆÄÀÏÇÏ´Â °ÍÀ» °¡¸®Å²´Ù. (flyduck)

¿ªÁÖ 2) À̸¦ module stackingÀ̶ó°í ÇÑ´Ù. (flyduck)

¿ªÁÖ 3) ¸ðµâÀ» ÄÄÆÄÀÏÇÒ ¶§ Ä¿³ÎÀÇ ¹öÀü Á¤º¸¸¦ ³ÖÀ» ¼ö ÀÖ´Ù ÀÌ °æ¿ì insmod°¡ ¸ðµâÀ» ·ÎµåÇÒ ¶§ ¹öÀü °Ë»ç¸¦ ÇÏ¿©, ¹öÀüÀÌ ¸ÂÁö ¾ÊÀ¸¸é ¸ðµâÀ» ·ÎµåÇÒ ¼ö ¾ø´Ù. insmod -f ¿É ¼ÇÀ» »ç¿ëÇÏ¸é ¹öÀüÀÌ ¸ÂÁö ¾Ê´õ¶óµµ ·ÎµåÇÏ°Ô ÇÒ ¼ö´Â ÀÖÁö¸¸ ¾ÈÀüÇÏÁø ¾ÊÀ» °ÍÀÌ´Ù. Á» ´õ ÁÁÀº ¹æ¹ýÀ¸·Î ¸ðµâÀÌ »ç¿ëÇÏ´Â Ä¿³Î ¼­ºñ½º¿¡ ³Ñ°ÜÁÖ´Â ÀÎÀÚµéÀÌ ´Þ¶óÁø °æ¿ì¿¡ ¸¸ ¸ðµâÀ» ·ÎµåÇÒ ¼ö ¾ø°Ô ÇÒ ¼ö ÀÖ´Ù. Áï ÄÄÆÄÀÏ µÈ ¸ðµâÀÌ »ç¿ëÇÏ´Â ¼­ºñ½º°¡ ÇöÀç Ä¿ ³Î¿¡¼­ Á¦°øÇÏ´Â ¼­ºñ½º¿Í ´Þ¶óÁø °ÍÀÌ ¾ø´Ù¸é ¹®Á¦°¡ µÇÁö ¾ÊÀ¸¸ç, À̸¦ À§Çؼ± Ä¿³Î°ú ¸ðµâ ¾çÂÊ¿¡¼­ ½Éº¼ÀÌ ÀÎÀÚÁ¤º¸¸¦ üũ¼¶À¸·Î °¡Áö°í ÀÖµµ·Ï ÇؾßÇÑ´Ù. (flyduck)

¿ªÁÖ 4) kernel/ksymc.c¿¡ º¸¸é Ä¿³ÎÀÌ ÀͽºÆ÷Æ®ÇÒ ½Éº¼µéÀÇ ¸ñ·ÏÀÌ µé¾î ÀÖ´Ù. ÀÌ¿Í ¸¶Âù°¡Áö ·Î ¸ðµâÀ» ¸¸µé ¶§ ¸ðµâ¿¡ ÀÖ´Â ¸ðµç ½Éº¼µéÀ» ÀͽºÆ÷Æ®ÇÏÁö ¾Ê°í ÇÊ¿äÇÑ °Í¸¸ ÀͽºÆ÷Æ® Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ³Ê¹« ¸¹Àº ½Éº¼µéÀÌ ½Éº¼ Å×ÀÌºí¿¡ µé¾î°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹® Á¦¸¦ ¹Ì¸® ¸·±â À§ÇÑ °ÍÀÌ´Ù. (flyduck)

¿ªÁÖ 5) À̵éÀÇ À̸§Àº °¢°¢ init_module(), cleanup_module()·Î Á¤ÇØÁ® ÀÖ´Ù. À̵éÀº ½Éº¼ Å×ÀÌºí¿¡ µé¾îÀÖÁö ¾Ê´õ¶óµµ Àü¿ª ÇÔ¼ö·Î µÇ¾î ÀÖ´Ù¸é ±× ÁÖ¼Ò¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. (flyduck)