±Û¾´ÀÌ : ÀÌÈ£ (i@flyduck.com)
ÃֽбÛÀÌ ÀÖ´Â °÷ : http://linuxkernel.net/

v0.1.0 2000³â 4¿ù 4ÀÏ



Â÷·Ê






0. ¼­¹®

ÇöÀç Linux°¡ µ¹°í ÀÖ´Â ½Ã½ºÅÛ ÁßÀÇ ´ëºÎºÐÀº Intel IA32 CPUÀÌ´Ù. Linux´Â Intel 80386ºÎÅÍ ½ÃÀÛÇÏ¿© 80486, Pentium °è¿­ÀÇ CPU¿¡¼­ ½ÇÇàÀÌ µÈ´Ù. ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀ» ±¸ÇöÇÏ·Á¸é CPUÀÇ Áö¿øÀ» ÇÊ¿ä·Î Çϴµ¥, Linux´Â 80386ºÎÅÍ µîÀåÇÑ 32-bit º¸È£¸ðµå(protected mode)ÀÇ Áö¿øÀ» ÀÌ¿ëÇÏ¿©, ¸Þ¸ð¸® °ü¸®, ÇÁ·Î¼¼½º °ü¸® µîÀ» Çϰí ÀÖ´Ù. ¿©±â¼­´Â Linux¸¦ ±¸ÇöÇϱâ À§ÇØ ÇÊ¿äÇÑ º¸È£¸ðµåÀÇ ±â´ÉµéÀ» °£´ÜÈ÷ »ìÆìº¸µµ·Ï ÇÑ´Ù.



1. ½ÇÁ¦¸ðµå(Real Mode)

½ÇÁ¦¸ðµå´Â x86 °è¿­·Î óÀ½ µîÀåÇÑ Intel 8086 CPU¿Í °°Àº µ¿ÀÛ ¸ðµå¸¦ ¸»ÇÏ´Â °ÍÀ¸·Î, 16 bit CPUÀÎ 8086, 80286¿¡¼­»Ó¸¸ ¾Æ´Ï¶ó, 80386 ÀÌÈÄÀÇ ¸ðµç 32-bit ÇÁ·Î¼¼¼­¿¡¼­µµ À̸¦ Áö¿øÇÑ´Ù. x86 °è¿­ÀÇ ¸ðµç CPU´Â óÀ½ ½ÃÀÛÇÒ ¶§´Â ½ÇÁ¦¸ðµå·Î µ¿ÀÛÇÑ´Ù.

½ÇÁ¦¸ðµå¿¡¼­´Â 20 bit address bus¸¦ »ç¿ëÇÏ¿© ÃÑ 1MBÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, 16 bit register¸¦ »ç¿ëÇÑ´Ù. ·¹Áö½ºÅÍÀÇ Å©±â°¡ 16 bitÀ̱⠶§¹®¿¡, 20 bit ÁÖ¼Ò¸¦ ³ªÅ¸³»±â À§ÇØ segment register¶ó´Â °ÍÀ» µµÀÔÇÏ¿´´Ù. ÀÌ´Â 16 bit segment register¿Í 16 bit offsetÀ» Áßø½ÃÄѼ­ 20 bitÀÇ ÁÖ¼Ò¸¦ ¸¸µé¾î³»´Â °ÍÀÌ´Ù. ¸ðµç ¸Þ¸ð¸® Á¢±Ù¿¡´Â segment¿Í offsetÀÌ °°ÀÌ ÇÊ¿äÇϸç, ÇϳªÀÇ segment¸¦ »ç¿ëÇϸé 64K(0x10000)¸¸Å­ÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦¸ðµå¿¡¼­´Â °¡»ó ¸Þ¸ð¸®¶ó´Â °³³äÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸ç, segment¿Í offsetÀ¸·Î ¸¸µé¾îÁö´Â ÁÖ¼Ò´Â ¹Ù·Î ¹°¸®ÀûÀÎ ¸Þ¸ð¸® ÁÖ¼ÒÀÌ´Ù. ¶ÇÇÑ ÀÌ ¸ðµå¿¡¼­ µ¿ÀÛÇÏ´Â ¸ðµç ÇÁ·Î±×·¥Àº ¸Þ¸ð¸®ÀÇ ¾î¶² ¿µ¿ªÀ̵çÁö ¸¾´ë·Î Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç, cli (clear interrupt), sti (set interrupt)°°Àº ¸í·É¾î¸¦ Æ÷ÇÔÇÏ¿© ½ÇÁ¦¸ðµå¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç ¸í·É¾îµéÀ» ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

IBM-PC´Â 8086 CPU¸¦ ÀÌ¿ëÇÏ¿© ¸¸µé¾îÁ³´Âµ¥, À̰ÍÀÌ Ã³À½ µîÀåÇÏ´ø ´ç½Ã¿£ 1MBÀÇ ¸Þ¸ð¸®´Â »ó´çÈ÷ Å« °ÍÀ̾ú´Ù. ±×·¡¼­ IBMÀº ¾ÕÀÇ 640KB(0 - 0x9ffff)¸¸À» ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô Çϰí, ³ª¸ÓÁö 384KB(0xa0000 - 0xfffff)´Â BIOS¿Í ISA ÀåÄ¡¿ëÀ¸·Î »ç¿ëÇÏ°Ô ÇÏ¿´´Âµ¥, ÀÌ´Â ½ÇÁ¦¸ðµå·Î µ¿ÀÛÇÏ´Â °¢Á¾ ÇÁ·Î±×·¥µéÀÌ 640KBÀÇ ¸Þ¸ð¸®¸¸À» »ç¿ëÇÒ ¼ö ¹Û¿¡ ¾ø´Â Á¦¾àÀ» ¸¸µé¾ú´Ù. ÀϹÝÀûÀ¸·Î ¸®´ª½º ºÎÆÃÀ» ÇÒ ¶§ »ç¿ëµÇ´Â LILOµµ ½ÇÁ¦¸ðµå·Î ½ÃÀÛÇÏ¿© ¸®´ª½º Ä¿³ÎÀ» ·ÎµåÇϱ⠶§¹®¿¡, ¸¶Âù°¡Áö·Î 640KBÀÇ Á¦¾àÀ» ¹Þ°Ô µÈ´Ù.


±×¸² 1-1. ½ÇÁ¦¸ðµå¿¡¼­ÀÇ ¸Þ¸ð¸® º¯È¯°úÁ¤ (ÁÖ1)


±×¸² 1-2. ½ÇÁ¦¸ðµå¿¡¼­ÀÇ ¸Þ¸ð¸® °è»ê¹æ¹ý (ÁÖ2)



2. º¸È£¸ðµå(Protected Mode)

Intel 80286ºÎÅÍ Ã³À½ µµÀÔµÈ º¸È£¸ðµå´Â 80386¿¡ À̸£·¯¼­ ¿Ï¼ºµÈ ¸ð½ÀÀ» º¸¿© Áö±Ý¿¡ À̸£°Ô µÈ´Ù. 80286ÀÇ º¸È£¸ðµå¸¦ °£´ÜÈ÷ »ìÆìº¸¸é, ¿ì¼± 24 bit address bus¸¦ »ç¿ëÇÏ¿© ÃÑ 16MB(0x1000000)ÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ¿´´Ù. segment register´Â selector¶ó´Â ¸íĪÀ¸·Î ¹Ù²î¾ú°í, descriptor tableÀ̶ó´Â °ÍÀ» ÅëÇÏ¿© 16 bit segment¸¦ 24 bit base address·Î ¹Ù²Ù°Ô ÇÏ¿´´Ù. ÀÌ base address¿¡ offsetÀ» ´õÇÔÀ¸·Î½á ¸ðµÎ 16MBÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ¾úÁö¸¸, 80286 ¿ª½Ã 16 bit CPU¿´±â ¶§¹®¿¡ °¢ segmentÀÇ Å©±â´Â ¿©ÀüÈ÷ 64KBÀÇ Á¦ÇÑÀ» °¡Áö°Ô µÇ¾ú´Ù.

ÀÌ·± Á¦ÇÑÀ» ¾ø¾Ö°í ¿ÏÀüÇÑ 32 bit address space¿Í 32 bit register setÀ» Á¦°øÇÏ´Â 80386ÀÌ µîÀåÇÏ¿´°í, ÀÌÈÄ¿¡ ¿î¿µÃ¼Á¦µéÀº 80386¿¡¼­ Á¦°øÇÏ´Â º¸È£¸ðµåÀÇ ±â´ÉÀ» Ȱ¿ëÇÏ°Ô µÇ¾ú´Ù. º¸È£¸ðµå¿¡¼­´Â CPU°¡ Á¦°øÇÏ´Â ¸ðµç ±â´É°ú ¸í·É¾îµéÀ» Ȱ¿ëÇÒ ¼ö ÀÖ´Ù. º¸È£¸ðµå¿¡¼­´Â privilege levelÀ̶ó´Â °ÍÀÌ µîÀåÇϴµ¥, ÀÌ´Â ÇÁ·Î¼¼¼­¸¦ Ȱ¿ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÁ¤µµ¸¦ ¸»ÇÑ´Ù. ÀÌ´Â 0ºÎÅÍ 3±îÁö Àִµ¥, 0ÀÌ ¸ðµç ÀÏÀ» ÇÒ ¼ö ÀÖ´Â ¸ðµå·Î ÀϹÝÀûÀÎ ¿î¿µÃ¼Á¦ ±¸Çö¿¡¼­ Ä¿³Î¸ðµå°¡ ÀÌ »óÅÂÀ̸ç, 3Àº ÀÀ¿ëÇÁ·Î±×·¥Ã³·³ »ç¿ëÀÚ ±ÇÇÑÀÇ ½ÇÇà»óŸ¦ ³ªÅ¸³½´Ù. ÀÌ privilege levelÀ» ÅëÇÏ¿© Ä¿³Î¸ðµå/»ç¿ëÀÚ¸ðµå¸¦ ±¸ÇöÇÏ°Ô µÈ´Ù. º¸È£¸ðµå¿¡¼­´Â 32 bit address bus¸¦ ÅëÇÏ¿© 4GBÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ¸Þ¸ð¸® º¸È£±â´É°ú, ÆäÀÌ¡(paging) ¸ÞÄ¿´ÏÁò µîÀ» ÅëÇØ °¡»ó ¸Þ¸ð¸®¸¦ È¿À²ÀûÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ÀÎÅÍ·´Æ®³ª ¿¹¿Üó¸®, task switching µîµµ ¸ðµÎ º¸È£¸ðµå¿¡¼­ Áö¿øÇÏ´Â ±â´ÉÀ» Ȱ¿ëÇÑ´Ù.


±×¸² 2-1. º¸È£¸ðµå ·¹Áö½ºÅÍ¿Í ÀڷᱸÁ¶ (ÁÖ3)



3. Intel 80386 Registers





4. º¸È£¸ðµå¿¡¼­ÀÇ ¸Þ¸ð¸® °ü¸®

º¸È£¸ðµå¿¡¼­´Â segmentation°ú paging ¸ÞÄ¿´ÏÁòÀ» ÀÌ¿ëÇÏ¿© ¸Þ¸ð¸®¸¦ °ü¸®ÇÑ´Ù. segmentationÀº 4GBÀÇ ¸Þ¸ð¸®¸¦ segment¶ó´Â ´ÜÀ§·Î Âɰ³´Â °ÍÀ» ¸»ÇÑ´Ù. ¿©±â¼­´Â 16 bitÀÇ selector¿Í 32 bitÀÇ offsetÀ» ÀÌ¿ëÇÏ¿© 4GB ¹üÀ§¾È¿¡ ÀÖ´Â 32 bitÀÇ ¼±ÇüÁÖ¼Ò(linear address)¸¦ ¸¸µå´Â ÀÏÀ» ÇÑ´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø ¼±ÇüÁÖ¼Ò°¡ ¹°¸®ÁÖ¼Ò(physical address)°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸Þ¸ð¸®¸¦ 4KB ´ÜÀ§·Î Âɰ³¼­ °ü¸®ÇÏ´Â paging mechanismÀ» °ÅÃļ­ ¹°¸®ÁÖ¼Ò·Î º¯È¯µÈ´Ù. (control register CR0ÀÇ PG flag¸¦ ¼öÁ¤ÇÔÀ¸·Î½á paging ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù)


±×¸² 4-1. º¸È£¸ðµå¿¡¼­ÀÇ ¸Þ¸ð¸® º¯È¯°úÁ¤ (ÁÖ4)

segment´Â segment descriptor¶ó´Â °ÍÀ¸·Î Á¤Àǰ¡ µÈ´Ù. ¿©±â¿¡´Â segmentÀÇ base address¿Í segment limit (Å©±â), ±×¸®°í DPL (descriptor privilege level)À» ºñ·ÔÇÑ Á¤º¸°¡ µé¾î°£´Ù. (¿©±â¿¡ º¸¸é segment typeÀ̶ó´Â °ÍÀÌ ÀÖ´Ù. À̰ÍÀº ÀÌ descriptor°¡ ³ªÅ¸³»´Â °ÍÀÌ ¹«¾ùÀÎÁö¸¦ ¸»ÇÏ´Â °ÍÀÌ´Ù. segment´Â ÀϹÝÀûÀÎ code/data/stackÀÏ ¼öµµ ÀÖ°í, µÚ¿¡ ³ª¿À´Â TSS Àϼöµµ, gateÀÏ ¼öµµ Àִµ¥ ÀÌ typeÀ» °¡Áö°í ¹«¾ùÀ» °¡¸®Å°´Â descriptorÀÎÁö ±¸º°ÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ¿¡ µû¶ó descriptorÀÇ ±¸Á¶°¡ ´Þ¶óÁø´Ù.) segment descriptor tableÀº À̵é segment descriptor¸¦ ¸ð¾ÆµÎ°í ÀÖ´Â °ÍÀ» ¸»Çϴµ¥, ¿©±â¿¡´Â ½Ã½ºÅÛ Àüü¿¡ ´ëÇÑ descriptor tableÀÎ GDT (global descriptor table)°ú ÇÁ·Î¼¼½º¸¶´Ù °³º°ÀûÀ¸·Î Á¤ÀÇÇϰí ÀÖ´Â LDT (local descriptor table)ÀÌ ÀÖ´Ù. À̵éÀº ¸ðµÎ ¸Þ¸ð¸® »ó¿¡ Á¸ÀçÇÏ°Ô µÇ´Âµ¥, GDTÀÇ À§Ä¡´Â GDTR (GDT register)°¡ °¡¸®Å°°í ÀÖ´Ù. LDTÀÇ À§Ä¡´Â LDTR (LDT register)°¡ °¡¸®Å°°í Àִµ¥ ÀÌ LDTRÀº ¿ø·¡ GDT¿¡ ÀÖ´Â ÇÑ segment descriptor¸¦ °¡¸®Å°°í ÀÖ´Â selectorÀÌ´Ù. Áï GDT¿¡´Â ½Ã½ºÅÛ¿¡ ÀÖ´Â ¸ðµç LDT¿¡ ´ëÇÑ segment descriptor°¡ µé¾îÀÖÀ¸¸ç, LDTRÀº ÀÌ Áß ÇöÀç ÇÁ·Î¼¼½ºÀÇ LDT¿¡ ´ëÇÑ segment descriptor¸¦ °¡¸®Å°´Â selectorÀÌ´Ù.

16 bitÀÎ selector¿¡´Â ÀÌ descriptor table¿¡¼­ÀÇ index °ª°ú, À̰ÍÀÌ À̰ÍÀÌ GDT¿¡¼­ÀÇ indexÀÎÁö, LDT¿¡¼­ÀÇ indexÀÎÁö¸¦ ³ªÅ¸³»´Â TI (table indicator), ±ÇÇÑÀ» ³ªÅ¸³»´Â RPL (requestor privilege level)ÀÌ µé¾îÀÖ´Ù. ÀÌ TI¿Í index¸¦ °¡Áö°í ÇØ´çÇÏ´Â table¿¡¼­ segment descriptor¸¦ ã¾Æ¼­ base address¸¦ ±¸ÇÏ°Ô µÈ´Ù. ÀÌ °ª¿¡ offsetÀ» ÇÕÇϸé ÁöÁ¤ÇÑ selector¿Í offset¿¡ ÇØ´çÇÏ´Â linear address°¡ ¸¸µé¾îÁö°Ô µÈ´Ù.


±×¸² 4-2. Selector (ÁÖ5)


±×¸² 4-3. Segment Descriptor (ÁÖ6)


±×¸² 4-4. descriptor table ÂüÁ¶ (ÁÖ7)


±×¸² 4-5. °¡»óÁÖ¼Ò¿¡¼­ ¼±ÇüÁÖ¼Ò·ÎÀÇ º¯È¯ (ÁÖ8)

ÀÌ·¸°Ô segmentationÀ» °ÅÃÄ ³ª¿Â linear address´Â paging ¸ÞÄ¿´ÏÁòÀ» ÅëÇÏ¿© physical address·Î º¯È¯ÀÌ µÈ´Ù. pagingÀº ¿äÁòÀÇ ¿î¿µÃ¼Á¦¿¡¼­ ¸ðµÎ ±¸ÇöÇϰí ÀÖ´Â pagingÀ» Áö¿øÇϱâ À§ÇÑ °ÍÀÌ´Ù. À̸¦ ÀÌ¿ëÇÏ¿© ½ÇÁ¦·Î Çϵå¿þ¾îÀûÀ¸·Î ÀÖ´Â ¸Þ¸ð¸®º¸´Ù ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ¸Þ¸ð¸®¸¦ È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, swappingÀ» ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¸Þ¸ð¸®´Â 4KB ´ÜÀ§ÀÇ page·Î Âɰ³Áö¸ç, À̵éÀº page directory¿Í page table·Î ü°èÈ­µÈ´Ù. °¢ pageµéÀÇ ½ÃÀÛ À§Ä¡´Â page table entry¿¡ ±â·ÏÀÌ µÇ¸ç, °¢ page tableµéÀÇ À§Ä¡´Â page directory entry¿¡ µé¾îÀÖ´Ù. page directoryÀÇ ½ÃÀÛ À§Ä¡´Â control registerÁßÀÇ ÇϳªÀÎ CR3ÀÌ °¡Áö°í ÀÖ´Ù. ¾Õ¿¡¼­ ³Ñ¾î¿Â linear address´Â page directory¿¡¼­ÀÇ index, page table¿¡¼­ÀÇ index, offset ¼¼°¡Áö·Î Âɰ³Áö¸ç, À̵é tableµéÀ» Â÷·Ê·Î µû¶ó°¡¼­ ½ÇÁ¦ pageÀÇ ÁÖ¼Ò¸¦ ¾ò°í, ¿©±â¿¡ offsetÀ» ´õÇÔÀ¸·Î½á ½ÇÁ¦ physical address°¡ ³ª¿À°Ô µÈ´Ù.


±×¸² 4-6. ¼±ÇüÁÖ¼Ò¿¡¼­ ¹°¸®ÁÖ¼Ò·ÎÀÇ º¯È¯ (ÁÖ9)

ÀÌ·¸°Ô °¡»óÁÖ¼Ò°¡ ¹°¸®ÁÖ¼Ò·Î º¯È¯µÇ´Â °úÁ¤À» Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°´Ù.


±×¸² 4-7. °¡»óÁÖ¼Ò¿¡¼­ ¹°¸®ÁÖ¼Ò·ÎÀÇ º¯È¯ (ÁÖ10)



5. º¸È£¸ðµå¿¡¼­ÀÇ Å½ºÅ© °ü¸®

º¸È£¸ðµå¿¡¼­´Â °¢ taskº°·Î TSS (Task State Segment)¶ó´Â °ÍÀ» °ü¸®ÇÑ´Ù. ¿©±â¿¡´Â ÇϳªÀÇ taskÀÇ »óÅ - ÀÏ¹Ý register, segment register, flag, EIP, stack segment selector, stack pointer, LDT selector, page directory base address µî - °¡ ÀúÀåÀÌ µÇ¸ç, task switchingÀÌ ÀϾ ¶§ ÀÌÀüÀÇ »óŸ¦ ÀÚµ¿À¸·Î ¿©±â¿¡ ÀúÀåÀ» Çϸç, »õ·Î¿î TSS¿¡ ÀÖ´Â »óŰ¡ ÇöÀç »óÅ·Πº¹±¸°¡ µÈ´Ù. task registerÀÎ TRÀº ÇöÀç taskÀÇ TSS¸¦ °¡¸®Å°´Â selectorÀÌ´Ù. °¢ TSS´Â GDT¿¡¼­ TSS descriptor·Î ±â¼úµÇ¸ç, TRÀº ÀÌ Áß¿¡¼­ ÇöÀç TSSÀÇ descriptor¸¦ °¡¸®Å°´Â °ÍÀÌ´Ù.


±×¸² 5-1. Task Register (ÁÖ11)

task switchingÀ» ÇÏ´Â ¹æ¹ýÀ¸·Î ¿ì¼± callÀ̳ª jmp ¸í·É¿¡ ÀüȯÇÒ TSS selector¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ ÀÖ´Ù. ÀÌ·¸°Ô Çϸé ÇÁ·Î¼¼¼­´Â ÇöÀç »óŸ¦ ÇöÀç TSS¿¡ ÀúÀåÀ» Çϰí, »õ·Î¿î taskÀÇ TSS·Î »óŸ¦ ¸ðµÎ ¹Ù²ÛÈÄ, »õ·Î¿î task¸¦ ½ÇÇàÇÑ´Ù.

task gate´Â task switchingÀ» ÀÏÀ¸Å°´Â Ưº°ÇÑ descriptor·Î¼­ LDT³ª IDT (Interrupt Descriptor Table)¿¡ µé¾î°¡´Â descriptorÀÌ´Ù. ¿©±â¿¡´Â TSS descriptor¿¡ ´ëÇÑ selector°¡ µé¾îÀÖ´Ù. task gate´Â interrupt³ª trapÀÌ ¹ß»ýÇÏ¿´À» ¶§ task switchingÀÌ ÀϾ°Ô ÇÏ´Â °Íó·³ °£Á¢ÀûÀ¸·Î task switchingÀÌ ÀϾ°Ô Çϰųª, ƯÁ¤ÇÑ taskµéÀÌ TSS¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ¾ÕÀÇ °æ¿ì¿¡¼­Ã³·³ callÀ̳ª jmp¿¡ task gateÀÇ selector¸¦ ÁöÁ¤À» ÇØÁÖ¸é ¿©±â¼­ °¡¸®Å°´Â TSS·Î task switchingÀÌ ÀϾ´Ù. ¶ÇÇÑ task gate°¡ IDT¿¡ ÀÖÀ» ¶§ ÇØ´çÇÏ´Â interrupt°¡ ¹ß»ýÇϸé ÀÌ task gate¸¦ ÅëÇÏ¿© ÇØ´çÇÏ´Â TSS·Î task switchingÀÌ ÀϾ°Ô µÈ´Ù.


±×¸² 5-1. Task Gate (ÁÖ12)



6. º¸È£¸ðµå¿¡¼­ÀÇ ÀÎÅÍ·´Æ®/¿¹¿Ü ó¸®

ÀÎÅÍ·´Æ®³ª ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ¾î¶² °ÍÀÌ ¹ß»ýÇÏ¿´´ÂÁö ½Äº°ÇÏ´Â ¹øÈ£°¡ ³ª¿À°Ô µÈ´Ù. (ÀÎÅÍ·´Æ®´Â CPUÀÇ ÀÎÅÍ·´Æ® ÇÉ¿¡ ÀÇÇÏ¿© ¹ß»ýÇϸç, ¿¹¿Ü´Â ÇÁ·Î¼¼¼­°¡ ÀÛ¾÷À» ÇÏ´Â Áß¿¡ À߸øµÈ ÀÏÀ» ¹ß°ßÇϰųª - ¿©±â¿¡´Â fault, trap, abort°¡ ÀÖ´Ù -, ÇÁ·Î±×·¡¹ÖÀ¸·Î µé¾î°¡ ÀÖ´Â Äڵ忡 ÀÇÇÏ¿© - INT 3, INT n, BOUND µî - ¿¡ ÀÇÇÏ¿© ¹ß»ýÇÏ´Â °ÍÀÌ´Ù) ÀÌ ¹øÈ£¸¦ vector¶ó°í ºÎ¸£´Âµ¥ À̸¦ index »ï¾Æ, IDT (interrupt descriptor table)¿¡ ÀÖ´Â descriptor¸¦ ã¾Æ¼­ À̸¦ ó¸®ÇÏ°Ô µÈ´Ù. IDT´Â interrupt 󸮿¡ °ü·ÃµÈ descriptorµéÀ» ¸ð¾ÆµÐ °ÍÀ¸·Î ÀÌÀÇ À§Ä¡´Â IDTR (IDT register)°¡ °¡Áö°í ÀÖ´Ù. ¿©±â¿¡ µé¾î°¡´Â descriptor·Î´Â task gate, interrupt gate, trap gate°¡ ÀÖ´Ù. task gate´Â ¾Õ¿¡¼­ À̾߱âÇÑ °Íó·³ TSS selector¸¦ °¡Áö°í ÀÖ´Â gate·Î¼­, ÇØ´çÇÏ´Â TSS·Î task switchingÀÌ ÀϾ°Ô µÈ´Ù. interrupt gate¿Í trap gate´Â GDT/LDT¿¡ ÀÖ´Â segment descriptor¿¡ ´ëÇÑ selector¿Í offsetÀ» °¡Áö°í ÀÖ´Â gate·Î¼­, selector¸¦ °¡Áö°í segmentÀÇ ½ÃÀÛÁÖ¼Ò¸¦ ¾ò°í, ¿©±â¿¡ offsetÀ» ´õÇÏ¿© À̸¦ ó¸®ÇÒ handlerÀÇ ÁÖ¼Ò¸¦ ¾ò°Ô µÈ´Ù. ±×¸®°í ÀÌ handlerÀÇ À§Ä¡·Î °Ç³Ê°¡¼­ ÇØ´çÇϴ ó¸®¸¦ ÇÑ ÈÄ À̸¦ ¸¶Ä£ÈÄ¿¡ º¹±ÍÇÏ°Ô µÈ´Ù. ÀÌ °úÁ¤¿¡¼­ privilege levelÀÌ ¹Ù²ð ¼öµµ ÀÖÀ¸¸ç, ó¸® Áß¿¡´Â ÇöÀç TSS¿¡ ÀÖ´Â stackÀ» ±×´ë·Î »ç¿ëÇÑ´Ù. interrupt gate¿Í trap gate¸¦ ÅëÇÏ´Â °æ¿ìÀÇ Â÷ÀÌ´Â, interrupt gate¸¦ ÅëÇÏ´Â °æ¿ì ó¸®ÇÏ´Â µ¿¾È interrupt¸¦ ±ÝÁöÇϰí (flagÀÇ IF¸¦ clear) 󸮸¦ ¸¶Ä¡°í º¹±ÍÇÒ ¶§ ´Ù½Ã À̸¦ º¹±¸ÇÏÁö¸¸, trap gate¸¦ ÅëÇÏ´Â °æ¿ì¿¡´Â interrupt¸¦ ±ÝÁöÇÏÁö ¾Ê´Â´Ù.


±×¸² 6-1. Interrupt Gate¿Í Trap Gate (ÁÖ13)


±×¸² 6-2. Interrupt ¹ß»ý½Ã Task Gate (ÁÖ14)



7. º¸È£¸ðµå¿¡¼­ÀÇ ½Ã½ºÅÛÄÝ

½Ã½ºÅÛÄÝÀº »ç¿ëÀÚ¸ðµå¿¡¼­ Ä¿³Î¸ðµå¿¡¼­ ½ÇÇàµÇ´Â Äڵ带 ºÎ¸£±â À§ÇÑ ¹æ¹ýÀÌ´Ù. À̸¦ À§Çؼ­ À§Çؼ­ º¸È£¸ðµå¿¡¼­´Â call gate¶ó´Â °ÍÀ» Á¦°øÇÑ´Ù. call gate´Â ´Ù¸¥ privilege level »çÀÌ·Î Á¦¾î±ÇÀ» ³Ñ±â´Â ¹æ¹ýÀ¸·Î, segment selector¿Í offsetÀ» °¡Áö°í ÀÖ´Ù. ÀÌ selector´Â GDT/LDT¿¡ ÀÖ´Â segment descriptor¸¦ °¡¸®Å°°í, ¿©±â¼­ ¾ò¾îÁö´Â base address¿¡ offsetÀ» ´õÇÏ¿© ½ÇÇàÇÒ ÇÔ¼öÀÇ À§Ä¡¸¦ ¾ò°Ô µÈ´Ù. callÀ̳ª jmp ¸í·É¿¡ ¸ñÀûÇÏ´Â call gateÀÇ segment selector¸¦ ÁöÁ¤ÇÔÀ¸·Î½á call gate¸¦ ÅëÇÏ¿© Ä¿³Î¸ðµå·Î ÁøÀÔÇÏ°Ô µÈ´Ù. ÀÌ ¶§ CPL (current privilege level)°ú call gate descriptorÀÇ DPL, call gate selectorÀÇ RPLÀ» ºñ±³ÇÏ¿© ±ÇÇÑÀ» °Ë»çÇÑ´Ù. ½Ã½ºÅÛÄÝ¿¡ ÁøÀÔÇÏ¿´À» ¶§¿¡´Â ÇöÀç taskÀÇ TSS¿¡ ÀÖ´Â stackÀ» »ç¿ëÇϸç, ret ¸í·ÉÀ» ÅëÇØ¼­ °á°ú°ª°ú ÇÔ²² ½Ã½ºÅÛÄÝÀ» ºÎ¸£±â ÀÌÀüÀÇ »óÅ·ΠµÇµ¹¾Æ°¡°Ô µÈ´Ù.


±×¸² 7-1. Call Gate (ÁÖ15)



A. Reference







ÁÖ1) Real-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ2) Real-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ3) Intel Architecture Software Developer's Manual Volume 3 Figure 2-1
ÁÖ4) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ5) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ6) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ7) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ8) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ9) Protected-Mode Memory Management¿¡¼­ °¡Á®¿È
ÁÖ10) Pentium Processor Family Developer's Guide Volume 3 Figure 11-16
ÁÖ11) Pentium Processor Family Developer's Guide Volume 3 Figure 13-3
ÁÖ12) Pentium Processor Family Developer's Guide Volume 3 Figure 13-5
ÁÖ13) Pentium Processor Family Developer's Guide Volume 3 Figure 14-3
ÁÖ14) Pentium Processor Family Developer's Guide Volume 3 Figure 14-5
ÁÖ15) Pentium Processor Family Developer's Guide Volume 3 Figure 12-6

# dualpage.muz.ro [2008-01-26]