ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxϵͳÔÚX86ÉϵÄÐéÄâÄÚ´æ¹ÜÀíÏê½â

·¢²¼Ê±¼ä:2007-04-03 19:27:54À´Ô´:ºìÁª×÷Õß:earwig
LinuxÖ§³ÖºÜ¶àÓ²¼þÔËÐÐÆ½Ì¨£¬³£ÓõÄÓУºIntel X86£¬Alpha£¬SparcµÈ¡£¶ÔÓÚ²»Äܹ»Í¨ÓõÄһЩ¹¦ÄÜ£¬Linux±ØÐëÒÀ¾ÝÓ²¼þƽ̨µÄÌØµãÀ´¾ßÌåʵÏÖ¡£±¾ÎĵÄÄ¿µÄÊǼòҪ̽ÌÖLinuxÔÚX86±£»¤Ä£Ê½ÉÏÈçºÎʵÏÖÐéÄâÄÚ´æ¹ÜÀí¹¦ÄÜ¡£Îª¼ò»¯ºÍ·½±ãÐðÊö£¬±¾ÎÄ×öÈçÏÂÏÞ¶¨£ºX86´¦ÀíÆ÷Ϊ80486ºÍÆäºóµÄ´¦ÀíÆ÷£¬X86¹¤×÷ÔÚ±£»¤Ä£Ê½£¬²»²ÉÓÃÎïÀíÄÚ´æÀ©Õ¹£¨Ê¹ÓÃ32bitsÎïÀíµØÖ·£©£¬²»Ê¹ÓÃÀ©Õ¹Ò³£¨Ò³´óСΪ4K£©¡£·²ÊÇÓëÏÞ¶¨Ä£Ê½Î޹صÄÄÚÈÝ£¬±¾Îͼ¾¡Á¿ÂÔ¹ý¡£LinuxµÄÐéÄâÄÚ´æ¹ÜÀíÖÐÓëÓ²¼þƽ̨Î޹صÄÄÚÈÝÔÚ±¾ÎÄÖÐÒ²±»ÂÔ¹ý¡£±¾ÎÄËùÔ®ÒýµÄLinuxÄÚºËÔ´´úÂë°æ±¾ÎªLinux 2.2.5¡£

X86µÄ·Ö¶ÎºÍ·ÖÒ³»úÖÆ

I. X86µÄ·Ö¶Î»úÖÆºÍÏàӦϵͳ½á¹¹

X86µÄ·Ö¶Î»úÖÆ¾ÍÊǽ«X86µÄÏßÐÔµØÖ·¿Õ¼ä·Ö³ÉÐí¶àС¿Õ¼ä--¶Î£¨segment£©£¬ÀûÓÃÕâЩ¶ÎÀ´´æ´¢£¨¼Ç¼£©´úÂëºÍÊý¾Ý£¬Í¨¹ý¶Ô¶ÎµÄ±£»¤À´ÌṩһÖÖ¶ÔÊý¾Ý»ò´úÂëµÄ±£»¤¡£¸ù¾Ýÿ¸ö¶ÎµÄ×÷Óúʹ洢ÄÚÈݵIJ»Í¬£¬X86½«¶Î·ÖΪÈýÀà½ø³Ì¶Î£¨´úÂë¶Î¡¢Êý¾Ý¶ÎºÍ¶ÑÕ»¶Î£©ºÍÁ½Ààϵͳ¶Î£ºÈÎÎñ״̬¶Î£¨TSS£¬Task-State Segment£©ºÍLDT¶Î£¨ÓÉÓÚGDT²»ÊÇͨ¹ý¶ÎÃèÊö·ûºÍ¶ÎÑ¡Ôñ·ûÀ´·ÃÎÊ£¬ËùÒÔX86ûÓÐÈÏΪ´æÔÚÒ»¸öGDT¶Î£»Í¬Àí£¬Ò²²»´æÔÚIDT¶Î£©¡£

ÔڷֶλúÖÆ£¬X86ʹÓÃÁËÈçϼ¸ÖÖÖ÷ÒªÊý¾Ý½á¹¹£º

• È«¾ÖÃèÊö·û±í£¨GDT£¬Global Describtor Table£©£º´æ·ÅϵͳÓõĶÎÃèÊö·ûºÍ¸÷ÏîÈÎÎñ¹²ÓõĶÎÃèÊö·û£¬¿ÉÒÔÊÇÉÏÊöµÄÈκÎÒ»Àà¶ÎµÄ¶ÎÃèÊö·û£¬×î´ó±í³¤64KB£»

• ¾Ö²¿ÃèÊö·û±í£¨LDT£¬Local Describtor Table£©£º´æ·Åij¸öÈÎÎñרÓõĸ÷¶ÎµÄ¶ÎÃèÊö·û£¬Ö»ÄÜÊÇÈýÀà½ø³Ì¶ÎµÄ¶ÎÃèÊö·ûºÍµ÷ÓÃÃÅÃèÊö·û£¬×î´ó±í³¤4GB£»

• ¶ÎÃèÊö·û£¨Segment Describtor£©£º64bits£¬ÓÃÀ´ÃèÊöÒ»¸ö¶ÎµÄ»ùµØÖ·£¨¸ÃµØÖ·ÊÇÏßÐÔµØÖ·£©£¬¸Ã¶ÎµÄÀàÐÍ£¬¶Ô¸Ã¶Î²Ù×÷µÄÏÞÖÆ£»

• ÃÅÃèÊö·û£¨Gate Describtor£©£º64bits£¬Ò»ÖÖÌØÊâµÄÃèÊö·û£¬Îª´¦ÓÚ²»Í¬ÌØÈ¨¼¶µÄϵͳµ÷Óûò³ÌÐòµÄµ÷Óûò·ÃÎÊÌṩ±£»¤£»·ÖΪËÄÀࣺµ÷ÓÃÃÅÃèÊö·û£¨Call Gate Describtor£©¡¢ÖжÏÃÅÃèÊö·û£¨Interrupt Gate Describtor£©¡¢ÏÝÚåÃÅÃèÊö·û£¨Trap Gate Describtor£©¡¢ÈÎÎñÃÅÃèÊö·û£¨Task Gate Describtor£©£»

• ¶ÎÑ¡Ôñ·û£¨Segment Selector£©£º16bits£¬ÓÃÓÚÔÚGDT»òLDTÖÐË÷ÒýÏàÓ¦µÄ¶ÎÃèÊö·û£»

• ÖжÏÃèÊö±í£¨IDT£¬Interrupt Describer Table£©£º´æ·ÅÃÅÃèÊö·û£¬Ö»ÄÜÊÇÖжÏÃÅÃèÊö·û£¬ÏÝÚåÃÅÃèÊö·ûºÍÈÎÎñÃÅÃèÊö·û£¬×î´ó±í³¤64KB£»

ͬʱ£¬X86ÌṩÁËÈçϼ¸¸öÓÃÓÚÖ§³Ö·Ö¶Î»úÖÆµÄ¼Ä´æÆ÷£º

• È«¾ÖÃèÊö·û±í¼Ä´æÆ÷£¨GDTR£¬GDT Register£©£º48bits£¬32bitsΪGDTµÄ»ùµØÖ·£¨ÏßÐÔµØÖ·£©£¬16bitsΪGDTµÄ±í³¤£»GDTRµÄ³õʼֵΪ£º»ùµØÖ·0£¬±í³¤0xFFFF£»

• ¾Ö²¿ÃèÊö·û±í¼Ä´æÆ÷£¨LDTR£¬LDT Register£©£º80bits£¬16bitsΪLDT¶ÎÑ¡Ôñ·û£¬64bitsΪ¸ÃLDT¶ÎµÄ¶ÎÃèÊö·û£»

• ÖжÏÃèÊö·û±í¼Ä´æÆ÷£¨IDTR£¬IDT Register£©£º48bits£¬32bitsΪIDTµÄ»ùµØÖ·£¨ÏßÐÔµØÖ·£©£¬16bitsΪIDTµÄ±í³¤£»IDTRµÄ³õʼֵΪ£º»ùµØÖ·0£¬±í³¤0xFFFF£»

• ÈÎÎñ¼Ä´æÆ÷£¨TR£¬Task Register£©£º80bits£¬16bitsΪÈÎÎñ״̬¶ÎÑ¡Ôñ·û£¬64bitsΪ¸ÃÈÎÎñ״̬¶ÎµÄ¶ÎÃèÊö·û£»

• Áù¸ö¶Î¼Ä´æÆ÷£¨Segment Register£©£º·ÖΪ¿É¼û²¿·ÖºÍÒþ²Ø²¿·Ö£¬¿É¼û²¿·ÖΪ¶ÎÑ¡Ôñ·û£¬Òþ²Ø²¿·ÖΪ¶ÎÃèÊö·û£»Áù¸ö¶Î¼Ä´æÆ÷·Ö±ðΪCS¡¢SS¡¢DS¡¢ES¡¢FS¡¢GS£»¹ØÓÚÕâЩ¶Î¼Ä´æÆ÷µÄ×÷Óòμû[1]ÖÐ3.4.2 'Segment Register';

86¹¤×÷ÔÚ±£»¤Ä£Ê½Ê±£¬½ø³ÌʹÓõÄ48bitsÂß¼­µØÖ·£¨Logical address£©¡£Âß¼­µØÖ·µÄ¸ß16bitsΪ¶ÎÑ¡Ôñ·û£¬µÍ32bitsÊǶÎÄ򵀮«ÒÆÁ¿¡£Í¨¹ý¶ÎÑ¡Ôñ·ûÔÚGDT»òLDTÖÐË÷ÒýÏàÓ¦µÄ¶ÎÃèÊö·û£¨µÃµ½¸Ã¶ÎµÄ»ùµØÖ·£©£¬ÔÙ¼ÓÉÏÆ«ÒÆÁ¿µÃµ½Âß¼­µØÖ·¶ÔÓ¦µÄÏßÐÔµØÖ·£¨Linear Address£©¡£Èç¹ûûÓвÉÓ÷ÖÒ¶¹ÜÀí£¬ÏßÐÔµØÖ·ÊÇÖ±½ÓÓ³ÉäÎïÀíµØÖ·£¨Physical Address£©£¬ÓÚÊÇ¿ÉÒÔÖ±½ÓÓÃÏßÐÔµØÖ··ÃÎÊÄڴ棻·ñÔò£¬»¹ÒªÍ¨¹ýX86µÄ·Öҳת»»£¬½«ÏßÐÔµØÖ·×ª»»ÎªÎïÀíµØÖ·¡£

ÒÔÉÏÊǶÔX86·Ö¶ÎÏà¹ØÄÚÈݵļòÒªÃèÊö£¬¶ÔÓÚ¸÷Êý¾Ý½á¹¹¡¢¼Ä´æÆ÷µÄϸ½ÚºÍÂß¼­µØÖ·×ª»»ÎªÏßÐÔµØÖ·µÄϸ½Ú¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. hoker ÓÚ 2009-08-12 12:29:14·¢±í:

    ÏÖÔÚ»¹¿´²»¶®