Linux²Ù×÷ϵͳͨ¹ý·Ö¶Î»úÖÆ£¬ÊµÏÖÁ˸ßЧµÄÄÚ´æ¹ÜÀí£¬Îª½ø³ÌÌṩÁËÂß¼ÉÏÁ¬ÐøÇÒ°²È«µÄÄÚ´æ·ÃÎÊ·½Ê½
±¾ÎĽ«ÉîÈë̽ÌÖLinux¶Î»úÖÆ£¬°üÀ¨Æä»ù±¾¸ÅÄʵÏÖÔÀíÒÔ¼°ÔÚʵ¼Ê²Ù×÷ϵͳÖеÄÓ¦ÓÃ
Ò»¡¢ÄÚ´æµØÖ·Óë·Ö¶Î»úÖÆµÄ»ù±¾¸ÅÄî ÔÚ¼ÆËã»úϵͳÖУ¬ÄÚ´æµØÖ·ÓÐÈýÖÖÖ÷ÒªÐÎʽ£ºÂß¼µØÖ·¡¢ÏßÐÔµØÖ·ºÍÎïÀíµØÖ·
1. Âß¼µØÖ· Âß¼µØÖ·ÊÇÓɳÌÐòÉú³ÉµÄµØÖ·£¬Ã¿¸ö³ÌÐòÔÚÔËÐÐʱ¶¼ÓÐ×Ô¼ºµÄÂß¼µØÖ·¿Õ¼ä
Âß¼µØÖ·ÊÇÏà¶ÔÓÚ³ÌÐò×ÔÉíµÄµØÖ·£¬³ÌÐòͨ¹ýÂß¼µØÖ··ÃÎÊ×Ô¼ºµÄÊý¾ÝºÍ´úÂë
Âß¼µØÖ·ÓɶΣ¨segment£©ºÍÆ«ÒÆÁ¿£¨offset£©×é³É£¬Æ«ÒÆÁ¿Ö¸Ã÷Á˴ӶοªÊ¼µÄλÖõ½Êµ¼ÊµØÖ·Ö®¼äµÄ¾àÀë
2. ÏßÐÔµØÖ· ÏßÐÔµØÖ·ÊDzÙ×÷ϵͳ¶ÔÂß¼µØÖ·½øÐÐת»»ºóµÃµ½µÄµØÖ·£¬Ò²±»³ÆÎªÐéÄâµØÖ·
ÔÚ32λϵͳÖУ¬ÏßÐÔµØÖ·ÊÇÒ»¸ö32λÎÞ·ûºÅÕûÊý£¬¿ÉÒÔ±íʾ¸ß´ï4GBµÄÄÚ´æµ¥Ôª
ÏßÐÔµØÖ·µÄÖµµÈÓڶλùÖ·¼ÓÉ϶ÎÄÚÆ«ÒƵØÖ·
3. ÎïÀíµØÖ· ÎïÀíµØÖ·ÊÇÕæÕýµÄÓ²¼þµØÖ·£¬ÓÃÓÚÄÚ´æÐ¾Æ¬¼¶Äڴ浥ԪѰַ
ÎïÀíµØÖ·ÓÉ32λ»ò36λÎÞ·ûºÅÕûÊý±íʾ£¬ÕâЩµØÖ·´Ó΢´¦ÀíÆ÷µÄµØÖ·Òý½Å·¢Ë͵½ÄÚ´æ×ÜÏßÉϵĵçÐźÅÏà¶ÔÓ¦
·Ö¶Î»úÖÆÊÇÒ»ÖÖ½«ÐéÄâµØÖ·¿Õ¼äÖеÄÐéÄâÄÚ´æ×éÖ¯³ÉÒ»¸ö¸ö³¤¶È¿É±äµÄ¶ÎµÄ»úÖÆ
ÕâЩ¶ÎÊÇÐéÄâµØÖ·µ½ÏßÐÔµØÖ·×ª»»µÄ»ù´¡
ͨ¹ý·Ö¶Î»úÖÆ£¬²Ù×÷ϵͳ¿ÉÒÔÌṩÓÉÓ²¼þÔöÇ¿µÄ´úÂë¡¢Êý¾Ý½á¹¹¡¢³ÌÐòºÍÈÎÎñµÄ±£»¤´ëÊ©
¶þ¡¢LinuxÖеķֶλúÖÆ Linux²Ù×÷ϵͳ²ÉÓÃÁ˷ֶλúÖÆÀ´ÊµÏÖ½ø³ÌµÄÄÚ´æ¹ÜÀí
·Ö¶ÎÔÊÐí½ø³ÌÒÔÂß¼ÉÏÁ¬ÐøµÄ·½Ê½·ÃÎÊÄڴ棬¶øÎÞÐ轫Õû¸ö½ø³Ì´æ´¢ÔÚÁ¬ÐøµÄÎïÀíÄÚ´æµØÖ·ÉÏ
1. ¶ÎÑ¡Ôñ·ûºÍ¶Î¼Ä´æÆ÷ ¶ÎÑ¡Ôñ·û£¨Segment Selector£©ÊÇÒ»¸ö16λµÄ±êʶ·û£¬ÓÃÓÚÑ¡Ôñ¶ÎÃèÊö·û±íÖеĶÎÃèÊö·û
¶ÎÑ¡Ôñ·ûÓÉÈý²¿·Ö×é³É£º - RPL£¨Request Privilege Level£©£ºÇëÇóÌØÈ¨¼¶£¬±íʾ½ø³ÌÓ¦¸ÃÒÔʲôȨÏÞÀ´·ÃÎʶΣ¬ÊýÖµÔ½´óȨÏÞԽС
- TI£¨Table Indicator£©£º±íʾӦ¸Ã²éѯÄĸö±í£¬TI=0²éGDT±í£»TI=1²éLDT±í
- Index£ºË÷ÒýºÅ£¬Ö¸¶¨ÁË·ÅÔÚGDT»òLDTÖеÄÏàÓ¦¶ÎÃèÊö·ûµÄÈë¿Ú
´¦ÀíÆ÷½«Ë÷ÒýºÅ³ËÒÔ8£¨ÒòΪһ¸ö¶ÎÃèÊö·ûÊÇ8×Ö½Ú³¤£©£¬ÔÙ¼ÓÉÏGDT»òLDTµÄ»ùµØÖ·£¬¾ÍÊÇÒª¼ÓÔØµÄ¶ÎÃèÊö·û
¶Î¼Ä´æÆ÷ÓÃÓÚ´æ·Å¶ÎÑ¡Ôñ·û
ÓÐÁù¸ö¶Î¼Ä´æÆ÷£ºCS£¨´úÂë¶Î¼Ä´æÆ÷£©¡¢SS£¨Õ»¶Î¼Ä´æÆ÷£©¡¢DS£¨Êý¾Ý¶Î¼Ä´æÆ÷£©¡¢ES¡¢FSºÍGS
³ÌÐò¿ÉÒÔ°Ñͬһ¸ö¶Î¼Ä´æÆ÷ÓÃÓÚ²»Í¬µÄÄ¿µÄ£¬·½·¨ÊÇÏȽ«ÆäÖµ±£´æÔÚÄÚ´æÖУ¬ÓÃÍêÔÙ»Ö¸´
2. ¶ÎÃèÊö·û ¶ÎÃèÊö·û£¨Segment Descriptor£©ÊÇGDTºÍLDT±íÖеÄÒ»¸öÊý¾ÝÏÓÃÓÚÏò´¦ÀíÆ÷ÌṩÓйØÒ»¸ö¶ÎµÄλÖúʹóСÐÅÏ¢ÒÔ¼°·ÃÎÊ¿ØÖƵÄ״̬ÐÅÏ¢
ÿ¸ö¶ÎÃèÊö·û³¤¶ÈÊÇ8×Ö½Ú£¬º¬ÓÐÈý¸öÖ÷Òª×ֶΣº - ¶Î»ùÖ·£¨Base address£©£º¶¨ÒåÔÚ4GBÏßÐÔµØÖ·¿Õ¼äÖÐÒ»¸ö¶Î×Ö½Ú0Ëù´¦µÄλÖÃ
´¦ÀíÆ÷»á°Ñ3¸ö·ÖÁ¢µÄ»ùµØÖ·×Ö¶Î×éºÏ³ÉΪһ¸ö32λµÄÖµ
- ¶ÎÏÞ³¤£¨Limit£©£ºÖ¸¶¨¶ÎµÄ³¤¶È
´¦ÀíÆ÷»á°Ñ¶ÎÃèÊö·ûÖÐÁ½¸ö¶ÎÏÞ³¤×Ö¶Î×éºÏ³ÉÒ»¸ö20λµÄÖµ£¬²¢¸ù¾Ý¿ÅÁ£¶È±êÖ¾GÀ´Ö¸¶¨¶ÎÏÞ³¤LimitÖµµÄʵ¼Êº¬Òå
Èç¹ûG=0£¬Ôò¶Î³¤¶ÈLimit·¶Î§¿ÉÒÔ´Ó1µ½1MB×Ö½Ú£»Èç¹ûG=1£¬Ôò¶Î³¤¶ÈLimitµÄ·¶Î§¿ÉÒÔÊÇ´Ó4KBµ½4GB£¬µ¥Î»ÊÇ4KB
- ¶ÎÊôÐÔ£¨Attributes£©£ºÖ¸µÄÊǸöεÄÌØÐÔ£¬°üÀ¨¶ÎÊÇ·ñ¿É¶Á¡¢ÊÇ·ñ¿Éд¡¢ÊÇ·ñÄܹ»×÷Ϊ³ÌÐòÖ´ÐУ¬ÒÔ¼°¶ÎµÄÌØÈ¨¼¶µÈ
¶ÎÃèÊö·ûͨ³£ÊÇÓɱàÒëÆ÷¡¢Á´½ÓÆ÷¡¢¼ÓÔØÆ÷»ò²Ù×÷ϵͳÀ´´´½¨
ÿµ±Ò»¸ö¶ÎÑ¡Ôñ·û±»×°Èë¶Î¼Ä´æÆ÷ʱ£¬ÏàÓ¦µÄ¶ÎÃèÊö·û¾Í´ÓÄÚ´æ×°Èëµ½¶ÔÓ¦µÄ·Ç±à³Ì¼Ä´æÆ÷ÖУ¬ÒÔ¼ÓËÙÂß¼µØÖ·µ½ÏßÐÔµØÖ·µÄת»»
Èý¡¢Linux·Ö¶Î»úÖÆµÄʵÏÖÔÀí Linux·Ö¶Î»úÖÆµÄʵÏÖÒÀÀµÓÚÓ²¼þºÍ²Ù×÷ϵͳµÄÐͬ¹¤×÷
ÒÔÏÂÊÇÆäʵÏÖÔÀíµÄÏêϸ½âÊÍ£º 1. µØÖ·×ª»»¹ý³Ì ÔÚ±£»¤Ä£Ê½Ï£¬CPUʹÓöÎÑ¡Ôñ·ûºÍ¶ÎÃèÊö·û½øÐеØÖ·×ª»»
¾ßÌå¹ý³ÌÈçÏ£º - Âß¼µØÖ·µ½ÏßÐÔµØÖ·µÄת»»£ºCPUʹÓöÎÑ¡Ôñ×ÓÖеÄIndexÊôÐÔͨ¹ý²éѯGDT/LDT±í¶¨Î»ÏàÓ¦µÄ¶ÎÃèÊö·û
È»ºó£¬ÀûÓöÎÃèÊö·û¼ìÑé¶ÎµÄ·ÃÎÊȨÏ޺ͷ¶Î§£¬ÒÔÈ·±£¸Ã¶ÎÊǿɷÃÎÊÇÒÆ«ÒÆÁ¿Î»ÓڶνçÏÞÄÚ
×îºó£¬°Ñ¶ÎÃèÊö·ûÖÐÈ¡µÃµÄ¶Î»ùµØÖ·¼ÓÉÏÆ«ÒÆÁ¿£¬ÐγÉÏßÐÔµØÖ·
- ÏßÐÔµØÖ·µ½ÎïÀíµØÖ·µÄת»»£ºÈç¹ûûÓпªÆô·ÖÒ³»úÖÆ£¬ÏßÐÔµØÖ·¾ÍµÈͬÓÚÎïÀíµØÖ·£¬CPU¿ÉÒÔÖ±½ÓÓô˵ØÖ··ÃÎÊÄÚ´æ
Èç¹û¿ªÆôÁË·ÖÒ³¹¦ÄÜ£¬ÏßÐÔµØÖ·Ôò»¹Òª¾¹ýCPUÒ³²¿¼þת»»³É¾ßÌåµÄÎïÀíµØÖ·£¬È»ºóCPU²ÅÄܽ«ÆäËÍÉϵØÖ·×ÜÏßÈ¥·ÃÎÊÄÚ´æ
2. ÌØÈ¨¼¶ºÍ·ÃÎÊ¿ØÖÆ Linux·Ö¶Î»úÖÆÍ¨¹ýÌØÈ¨¼¶ºÍ·ÃÎÊ¿ØÖÆÀ´ÔöÇ¿ÄÚ´æµÄ°²È«ÐÔ
ÿ¸ö¶ÎÃèÊö·û¶¼ÓÐÒ»¸öÃèÊö·ûÌØÈ¨¼¶£¨Descriptor Privilege Level, DPL£©£¬ÓÃÓÚÏÞÖÆ¶ÔÕâ¸ö¶ÎµÄ´æÈ¡
DPL±íʾ·ÃÎÊÕâ¸ö¶Î¶øÒªÇóµÄCPU×îСµÄÓÅÏȼ¶
µ±ÏàÓ¦µÄ¶ÎÑ¡Ôñ·û×°Èëµ½¶Î¼Ä´æÆ÷ÖÐʱ£¬Ëü»áָʾ³öCPUµ±Ç°µÄÌØÈ¨¼¶
Èç¹û½ø³ÌÊÔͼÒÔµÍÓÚ¶ÎÌØÈ¨¼¶µÄȨÏÞ·ÃÎʶΣ¬»áÒý·¢Òì³£
3. ¶ÎÃèÊö·û±íµÄά»¤ GDTºÍLDTÊǶÎÃèÊö·û±í£¬ËüÃÇ·Ö±ð´æ´¢È«¾Ö¶ÎÃèÊö·ûºÍ¾Ö²¿¶ÎÃèÊö·û
²Ù×÷ϵͳ¸ºÔðά»¤ÕâЩ±í£¬ÒÔÈ·±£¶ÎÃèÊö·ûµÄ׼ȷÐÔºÍÒ»ÖÂÐÔ
µ±¶ÎÃèÊö·û·¢Éú±ä»¯Ê±£¬²Ù×÷ϵͳ±ØÐëÈ·±£¶Ô¶ÎÃèÊö·ûµÄ¸Ä¶¯·´Ó³ÔÚÃèÊö·û»º³åÖÐ
Èç¹û¸ü¸ÄÁ˶ÎÃèÊö·ûȴûÓÐÔÚÃèÊö·û»º³åÖнøÐÐÐ޸ģ¬¾Í»áÔì³É¶Î²»Ò»ÖµÄÏÖÏó
Òò´Ë£¬ÔÚ¶Ô¶ÎÃèÊö·û±í×ö¹ý¸Ä¶¯Ö®ºó£¬²Ù×÷ϵͳͨ³£»áÖØÐ¼ÓÔØ¶Î¼Ä´æÆ÷
ËÄ¡¢Linux·Ö¶Î»úÖÆµÄÓ¦Óà Linux·Ö¶Î»úÖÆÔÚ²Ù×÷ϵͳÖоßÓй㷺µÄÓ¦Óã¬Ö÷ÒªÌåÏÖÔÚÒÔϼ¸¸ö·½Ã棺 1. ½ø³Ì¸ôÀë ͨ¹ý·Ö¶Î»úÖÆ£¬Linux²Ù×÷ϵͳ¿ÉÒÔʵÏÖ½ø³ÌÖ®¼äµÄÄÚ´æ¸ôÀë
ÿ¸ö½ø³Ì¶¼ÓÐ×Ô¼ºµÄÂß¼µØÖ·¿Õ¼ä£¬ÕâЩµØÖ·¿Õ¼äͨ¹ý·Ö¶Î»úÖÆÓ³Éäµ½²»Í¬µÄÎïÀíÄÚ´æÇøÓò
ÕâÑù£¬¼´Ê¹¶à¸ö½ø³ÌͬʱÔËÐÐÔÚͬһ¸öÎïÀíÄÚ´æ¿Õ¼äÖУ¬Ò²²»»áÏ໥¸ÉÈÅ
2. ÄÚ´æ±£»¤ ·Ö¶Î»úÖÆÌṩÁËÓ²¼þ¼¶±ðµÄÄÚ´æ±£»¤»úÖÆ
ͨ¹ý¶ÎÃèÊö·ûÖеķÃÎÊ¿ØÖÆ×ֶΣ¬²Ù×÷ϵͳ¿ÉÒÔÏÞÖÆ¶Ô¶ÎµÄ·ÃÎÊȨÏÞ
Èç¹û½ø³ÌÊÔͼ·ÃÎÊδÊÚȨµÄÄÚ´æÇøÓò£¬»áÒý·¢Òì³££¬´Ó¶ø·ÀÖ¹¶ñÒâ´úÂëµÄÖ´ÐкÍÊý¾Ýй¶
3. ¶¯Ì¬ÄÚ´æ¹ÜÀí Linux·Ö¶Î»úÖÆÖ§³Ö¶¯Ì¬ÄÚ´æ¹ÜÀí
²Ù×÷ϵͳ¿ÉÒÔ¸ù¾ÝÐèÒª¶¯Ì¬µØ´´½¨¡¢Ïú»ÙºÍµ÷Õû¶ÎµÄ´óС
ÕâÖÖÁé»îÐÔʹµÃ²Ù×÷ϵͳÄܹ»¸ßЧµØ¹ÜÀíÄÚ´æ×ÊÔ´£¬Âú×㲻ͬ½ø³ÌµÄÄÚ´æÐèÇó
4. ´úÂëºÍÊý¾Ý¶ÎµÄ¹ÜÀí ÔÚLinuxÖУ¬´úÂë¶ÎºÍÊý¾Ý¶ÎÊÇ·Ö¿ªµÄ
´úÂë¶Î´æ´¢³ÌÐòµÄÖ¸Á¶øÊý¾Ý¶Î´æ´¢³ÌÐòµÄÊý¾Ý
ͨ¹ý·Ö¶Î»úÖÆ£¬²Ù×÷ϵͳ¿ÉÒÔ·Ö±ð¹ÜÀí´úÂë¶ÎºÍÊý¾Ý¶Î£¬È·±£³ÌÐòµÄÕýÈ·Ö´ÐкÍÊý¾ÝµÄÍêÕûÐÔ
Îå¡¢½áÂÛ Linux·Ö¶Î»úÖÆÊÇÒ»ÖÖ¸ßЧµÄÄÚ´æ¹ÜÀí»úÖÆ£¬Ëüͨ¹ý·Ö¶ÎºÍÌØÈ¨¼¶¿ØÖÆÊµÏÖÁ˽ø³ÌÖ®¼äµÄÄÚ´æ¸ôÀëºÍ·ÃÎÊ¿ØÖÆ
ÕâÖÖ»úÖÆ²»½öÌá¸ßÁ˲Ù×÷ϵͳµÄ°²È«ÐÔºÍÎȶ¨ÐÔ£¬»¹Îª½ø³ÌÌṩÁËÁé»îÇÒ¸ßЧµÄÄÚ´æ·ÃÎÊ·½Ê½
Ëæ×żÆËã»ú¼¼ÊõµÄ²»¶Ï·¢Õ¹£¬Linux·Ö¶Î»úÖÆ½«¼ÌÐøÔÚ²Ù×÷ϵͳÖз¢»Ó×ÅÖØÒª×÷ÓÃ