• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            分段管理機(jī)制(虛擬地址轉(zhuǎn)換到線性地址)

            本文介紹保護(hù)方式下的段定義以及由段選擇子及段內(nèi)偏移構(gòu)成的二維虛擬地址如何被轉(zhuǎn)換為一維線性地址。

            <一>段定義和虛擬地址到線性地址的轉(zhuǎn)換

            段是實(shí)現(xiàn)虛擬地址到線性地址轉(zhuǎn)換機(jī)制的基礎(chǔ)。在保護(hù)方式下,每個(gè)段由如下三個(gè)參數(shù)進(jìn)行定義:段基地址(Base Address)、段界限(Limit)和段屬性(Attributes)。
            段基地址規(guī)定線性地址空間中段的開始地址。在80386保護(hù)方式下,段基地址長32位。因?yàn)榛刂烽L度與尋址地址的長度相同,所以任何一個(gè)段都可以從32位線性地址空間中的任何一個(gè)字節(jié)開始,而不象實(shí)方式下規(guī)定的邊界必須被16整除。
            段界限規(guī)定段的大小。在80386保護(hù)模式下,段界限用20位表示,而且段界限可以是以字節(jié)為單位或以4K字節(jié)為單位。段屬性中有一位對(duì)此進(jìn)行定義,把該位成為粒度位,用符號(hào)G標(biāo)記。G=0表示段界限以字節(jié)位位單位,于是20位的界限可表示的范圍是1字節(jié)至1M字節(jié),增量為1字節(jié);G=1表示段界限以4K字節(jié)為單位,于是20位的界限可表示的范圍是4K字節(jié)至4G字節(jié),增量為4K字節(jié)。當(dāng)段界限以4K字節(jié)為單位時(shí),實(shí)際的段界限LIMIT可通過下面的公式從20 位段界限Limit計(jì)算出來:
            LIMIT=limit*4K+0FFFH=(Limit SHL 12)+0FFFH
            所以當(dāng)粒度為1時(shí),段的界限實(shí)際上就擴(kuò)展成32位。由此可見,在80386保護(hù)模式下,段的長度可大大超過64K字節(jié)。
            基地址和界限定義了段所映射的線性地址的范圍。基地址Base是線性地址對(duì)應(yīng)于段內(nèi)偏移為 0的虛擬地址,段內(nèi)偏移為X的虛擬地址對(duì)應(yīng)Base+X的線性地址。段內(nèi)從偏移0到Limit范圍內(nèi)的虛擬地址對(duì)應(yīng)于從Base到Base+Limit范圍內(nèi)的線性地址。
            下圖表示一個(gè)段如何從虛擬地址空間定位到線性地址空間。圖中BaseA等代表段基地址, LimitA等代表段界限。另外,段C接在段A之后,也即BaseC=BaseA+LimitA。
            例如:設(shè)段A的基地址等于00012345H,段界限等于5678H,并且段界限以字節(jié)為單位(G=0),那么段A對(duì)應(yīng)線性地址空間中從00012345H-000179BDH的區(qū)域。如果段界限以4K字節(jié)為單位 (G=1),那么段A對(duì)應(yīng)線性地址空間中從00012345H-0568B344H(=00012345H+5678000H+0FFFH) 的區(qū)域。
            通過增加段界限,可以使段的容量得到擴(kuò)展。這對(duì)于那些要在內(nèi)存中擴(kuò)展容量的普通數(shù)據(jù)段很有效,但對(duì)堆棧段情況就不是這樣。因?yàn)槎褩5自诟叩刂范?,隨著壓棧操作的進(jìn)行,堆棧向低地址方向擴(kuò)展。為了適應(yīng)普通數(shù)據(jù)段和堆棧數(shù)據(jù)段在兩個(gè)相反方向上的擴(kuò)展,數(shù)據(jù)段的段屬性中安排了一個(gè)擴(kuò)展方向位,標(biāo)記為ED。ED=0表示向高端擴(kuò)展,ED=1表示向低端擴(kuò)展。一般只有堆棧數(shù)據(jù)段才使用向低端擴(kuò)展的屬性(堆棧段也可使用向上擴(kuò)展的段),這是因?yàn)椋蛳聰U(kuò)展的段是為以下兩個(gè)目的而設(shè)計(jì)的:
            第一,堆棧段被定義為獨(dú)特段,即DS和SS包含不同的選擇器。
            第二,一個(gè)堆棧段是靠將它復(fù)制到一個(gè)更大的段來擴(kuò)充自己(而不是靠將現(xiàn)存的頁增加到它的段上)。不打算用這種方法實(shí)現(xiàn)堆棧的設(shè)計(jì)者不需要定義向下擴(kuò)展的段。
            需要注意的是,只有數(shù)據(jù)段的段屬性中才有擴(kuò)展方向?qū)傩晕籈D,也就是說只有數(shù)據(jù)段(堆棧段作為特殊的數(shù)據(jù)段)才有向上擴(kuò)展和向下擴(kuò)展之分,其它段都是自然的向上擴(kuò)展。
            數(shù)據(jù)段的擴(kuò)展方向和段界限一起決定了數(shù)據(jù)段內(nèi)偏移的有效范圍。當(dāng)段最大為1M字節(jié)時(shí),在向高端擴(kuò)展的段內(nèi),從0到Limit的偏移是合法有效的偏移,而從Limit+1到1M-1的偏移是非法無效的偏移;在向低端擴(kuò)展的段內(nèi),情形剛好相反,從0到Limit的偏移是非法無效的偏移,而從Limit+1到1M-1的偏移是合法有效的偏移,注意邊界值Limit對(duì)應(yīng)地址的有效性。段最大為4G時(shí),情形類似。由此可見,如果一個(gè)段是向下擴(kuò)展的,則所有的偏移必須大于限長,因?yàn)槠湎揲L是指下限,其基地址從高地址出開始。反之,若一個(gè)段是向上擴(kuò)展的,則所有偏移必須小于等于限長,因?yàn)槠湎揲L是指上限,基地址從低地址處開始。通過使用段環(huán)繞,可以把向下擴(kuò)展段定義到任何線性地址且可定義為任何大小。
            在每次把虛擬地址轉(zhuǎn)換為線性地址的過程中,要對(duì)偏移進(jìn)行檢查。如果偏移不在有效的范圍內(nèi),那么就引起異常。
            段屬性規(guī)定段的主要特性。例如上面已經(jīng)提到的段粒度G就是段屬性的一部分。在對(duì)段進(jìn)行各種訪問時(shí),將對(duì)訪問是否合法進(jìn)行檢查,主要依據(jù)是段屬性。例如:如果向一個(gè)只讀段進(jìn)行寫入操作,那么不僅不能寫入,而且會(huì)引起異常。在下面會(huì)詳細(xì)說明各個(gè)段熟屬性位的定義和作用。

            <二>存儲(chǔ)段描述符

            用于表示上述定義段的三個(gè)參數(shù)的數(shù)據(jù)結(jié)構(gòu)稱為描述符。每個(gè)描述符長8個(gè)字節(jié)。在保護(hù)方式下,每一個(gè)段都有一個(gè)相應(yīng)的描述符來描述。按描述符所描述的對(duì)象來劃分,描述符可分為如下三類:存儲(chǔ)段描述符、系統(tǒng)段描述符、門描述符(控制描述符)。下面先介紹存儲(chǔ)段描述符。

            1.存儲(chǔ)段描述符的格式

            存儲(chǔ)段是存放可由程序直接進(jìn)行訪問的代碼和數(shù)據(jù)的段。存儲(chǔ)段描述符描述存儲(chǔ)段,所以存儲(chǔ)段描述符也被稱為代碼和數(shù)據(jù)段描述符。存儲(chǔ)段描述符的格式如下表所示。表中上面一排是對(duì)描述符8個(gè)字節(jié)的使用的說明,最低地址字節(jié)(假設(shè)地址為m)在最右邊,其余字節(jié)依次向左,直到最高字節(jié)(地址為m+7)。下一排是對(duì)屬性域各位的說明。

            存儲(chǔ)段
            描述符
            m+7 m+6 m+5 m+4 m+3 m+2 m+1 m+0
            Base(31...24) Attributes Segment Base(23...0) Segment Limite(15...0)

            存儲(chǔ)段
            描述符
            屬  性
            Byte m+6 Byte m+5
            BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
            G D 0 AVL Limit(19...16) P DPL DT1 TYPE

            從上表可知,長32位的段基地址(段開始地址)被安排在描述符的兩個(gè)域中,其位0—位23 安排在描述符內(nèi)的第2—第4字節(jié)中,其位24—位31被安排在描述符內(nèi)的第7字節(jié)中。長20 位的段界限也被安排在描述符的兩個(gè)域中,其位0—位15被安排在描述符內(nèi)的第0—第1字節(jié)中,其位16—位19被安排在描述符內(nèi)的第6字節(jié)的低4位中。
            使用兩個(gè)域存放段基地址和段界限的原因與80286有關(guān)。在80286保護(hù)方式下,段基地址只有24位長,而段界限只有16位長。80286存儲(chǔ)段描述符盡管也是8字節(jié)長,但實(shí)際只使用低 6字節(jié),高2字節(jié)必須置為0。80386存儲(chǔ)段描述符這樣的安排,可使得80286的存儲(chǔ)段描述符的格式在80386下繼續(xù)有效。
            80386描述符中的段屬性也被安排在兩個(gè)域中。下面對(duì)其定義及意義作說明。
            (1)P位稱為存在(Present)位。P=1表示描述符對(duì)地址轉(zhuǎn)換是有效的,或者說該描述符所描述的段存在,即在內(nèi)存中;P=0表示描述符對(duì)地址轉(zhuǎn)換無效,即該段不存在。使用該描述符進(jìn)行內(nèi)存訪問時(shí)會(huì)引起異常。
            (2)DPL表示描述符特權(quán)級(jí)(Descriptor Privilege level),共2位。它規(guī)定了所描述段的特權(quán)級(jí),用于特權(quán)檢查,以決定對(duì)該段能否訪問。
            (3)DT位說明描述符的類型。對(duì)于存儲(chǔ)段描述符而言,DT=1,以區(qū)別與系統(tǒng)段描述符和門描述符(DT=0)。
            (4)TYPE說明存儲(chǔ)段描述符所描述的存儲(chǔ)段的具體屬性。
            其中的位0指示描述符是否被訪問過(Accessed),用符號(hào)A標(biāo)記。A=0表示尚未被訪問,A=1 表示段已被訪問。當(dāng)把描述符的相應(yīng)選擇子裝入到段寄存器時(shí),80386把該位置為1,表明描述符已被訪問。操作系統(tǒng)可測(cè)試訪問位,已確定描述符是否被訪問過。
            其中的位3指示所描述的段是代碼段還是數(shù)據(jù)段,用符號(hào)E標(biāo)記。E=0表示段為數(shù)據(jù)段,相應(yīng)的描述符也就是數(shù)據(jù)段(包括堆棧段)描述符。數(shù)據(jù)段是不可執(zhí)行的,但總是可讀的。 E=1表示段是可執(zhí)行段,即代碼段,相應(yīng)的描述符就是代碼段描述符。代碼段總是不可寫的,若需要對(duì)代碼段進(jìn)行寫入操作,則必須使用別名技術(shù),即用一個(gè)可寫的數(shù)據(jù)段描述符來描述該代碼段,然后對(duì)此數(shù)據(jù)段進(jìn)行寫入。
            在數(shù)據(jù)段描述符中(E=0的情況),TYPE中的位1指示所描述的數(shù)據(jù)段是否可寫,用W標(biāo)記。 W=0表示對(duì)應(yīng)的數(shù)據(jù)段不可寫。反之,W=1表示數(shù)據(jù)段是可寫的。注意,數(shù)據(jù)段總是可讀的。TYPE中的位2是ED位,指示所描述的數(shù)據(jù)段的擴(kuò)展方向。ED=0表示數(shù)據(jù)段向高端擴(kuò)展,也即段內(nèi)偏移必須小于等于段界限。ED=1表示數(shù)據(jù)段向低擴(kuò)展,段內(nèi)偏移必須大于段界限。
            在代碼段描述符中(E=1的情況),TYPE中的位1指示所描述的代碼段是否可讀,用符號(hào)R標(biāo)記。R=0表示對(duì)應(yīng)的代碼段不可讀,只能執(zhí)行。R=1表示對(duì)應(yīng)的代碼段可讀可執(zhí)行。注意代碼段總是不可寫的,若需要對(duì)代碼段進(jìn)行寫入操作,則必須使用別名技術(shù)。在代碼段中,TYPE中的位2指示所描述的代碼段是否是一致代碼段,用C標(biāo)記。C=0表示對(duì)應(yīng)的代碼段不是一致代碼段(普通代碼段),C=1表示對(duì)應(yīng)的代碼段是一致代碼段。關(guān)于一致代碼段的說明,后面的文章將會(huì)詳細(xì)介紹。
            存儲(chǔ)段描述符中的TYPE字段所說明的屬性可歸納為下表:

            數(shù)據(jù)段
            類  型
            類型值 說      明
            0 只讀
            1 只讀、已訪問
            2 讀/寫
            3 讀/寫、已訪問
            4 只讀、向下擴(kuò)展
            5 只讀、向下擴(kuò)展、已訪問
            6 讀/寫、向下擴(kuò)展
            7 讀/寫、向下擴(kuò)展、已訪問
            代碼段
            類  型
            類型值 說      明
            8 只執(zhí)行
            9 只執(zhí)行、已訪問
            A 執(zhí)行/讀
            B 執(zhí)行/讀、已訪問
            C 只執(zhí)行、一致碼段
            D 只執(zhí)行、一致碼段、已訪問
            E 執(zhí)行/讀、一致碼段
            F 執(zhí)行/讀、一致碼段、已訪問

            (5)G為就是段界限粒度(Granularity)位。G=0表示界限粒度為字節(jié);G=1表示界限粒度為4K 字節(jié)。注意,界限粒度只對(duì)段界限有效,對(duì)段基地址無效,段基地址總是以字節(jié)為單位。
            (6)D位是一個(gè)很特殊的位,在描述可執(zhí)行段、向下擴(kuò)展數(shù)據(jù)段或由SS寄存器尋址的段(通常是堆棧段)的三種描述符中的意義各不相同。
            在描述可執(zhí)行段的描述符中,D位決定了指令使用的地址及操作數(shù)所默認(rèn)的大小。D=1表示默認(rèn)情況下指令使用32位地址及32位或8位操作數(shù),這樣的代碼段也稱為32位代碼段;D=0 表示默認(rèn)情況下,使用16位地址及16位或8位操作數(shù),這樣的代碼段也稱為16位代碼段,它與80286兼容。可以使用地址大小前綴和操作數(shù)大小前綴分別改變默認(rèn)的地址或操作數(shù)的大小。
            在向下擴(kuò)展數(shù)據(jù)段的描述符中,D位決定段的上部邊界。D=1表示段的上部界限為4G;D=0表示段的上部界限為64K,這是為了與80286兼容。
            在描述由SS寄存器尋址的段描述符中,D位決定隱式的堆棧訪問指令(如PUSH和POP指令)使用何種堆棧指針寄存器。D=1表示使用32位堆棧指針寄存器ESP;D=0表示使用16位堆棧指針寄存器SP,這與80286兼容。
            (7)AVL位是軟件可利用位。80386對(duì)該位的使用未左規(guī)定,Intel公司也保證今后開發(fā)生產(chǎn)的處理器只要與80386兼容,就不會(huì)對(duì)該位的使用做任何定義或規(guī)定。
            此外,描述符內(nèi)第6字節(jié)中的位5必須置為0,可以理解成是為以后的處理器保留的。

            2.存儲(chǔ)段描述符的結(jié)構(gòu)類型表示

            根據(jù)存儲(chǔ)段描述符的結(jié)構(gòu),可定義如下的匯編語言描述符結(jié)構(gòu)類型:
                DESC       STRUC
            LIMITL     DW      0 ;段界限低16位
            BASEL      DW      0 ;基地址低16位
            BASEM      DB      0 ;基地址中間8位
            ATTRIB     DB      0 ;段屬性
            LIMITH     DB      0 ;段界限的高4位(包括段屬性的高4位)
            BASEH      DB      0 ;基地址的高8位
            DESC       ENDS
            
            利用結(jié)構(gòu)類型DESC能方便地在程序中說明存儲(chǔ)段描述符。例如:下面的描述符DATAS描述一個(gè)可讀寫的有效(存在的)數(shù)據(jù)段,基地址是100000H,以字節(jié)為單位的界限是0FFFFH,描述符特權(quán)級(jí)DPL=3。
                DATAS DESC <0FFFFH,,10H,0F2H,,>
            
            再如:下述描述符CODEA描述一個(gè)只可執(zhí)行的有效的32位代碼段,基地址是12345678H,以 4K字節(jié)位單位的段界限值是10H(以字節(jié)位單位的界限是10FFFH),描述符特權(quán)級(jí)DPL=0。
                CODEA DESC <10H,5678H,34H,98H,0C0H,12H>
            

            <三>全局和局部描述符表

            一個(gè)任務(wù)會(huì)涉及多個(gè)段,每個(gè)任務(wù)需要一個(gè)描述符來描述,為了便于組織管理,80386把描述符組織成線性表。由描述符組成的線性表稱為描述符表。在80386中有三種類型的描述符表:全局描述符表GDT(Global Descriptor Table)、局部描述符表LDT(Local Descriptor Table)和中斷描述符表IDT(Interrupt Descriptor Table)。在整個(gè)系統(tǒng)中,全局描述符表GDT和中斷描述符表IDT只有一張,局部描述符表可以有若干張,每個(gè)任務(wù)可以有一張。
            例如,下列描述符表有6個(gè)描述符構(gòu)成:
                DESCTAB LABEL BYTE
            DESC1   DESC  <1234H,5678H,34H,92H,,>
            DESC1   DESC  <1234H,5678H,34H,93H,,>
            DESC1   DESC  <5678H,1234H,56H,98H,,>
            DESC1   DESC  <5678H,1234H,56H,99H,,>
            DESC1   DESC  <0FFFFH,,10H,16H,,>
            DESC1   DESC  <0FFFFH,,10H,90H,,>
            
            每個(gè)描述符表本身形成一個(gè)特殊的數(shù)據(jù)段。這樣的特殊數(shù)據(jù)段最多可包含有8K(8192)個(gè)描述符.
            關(guān)于中斷描述符表IDT在以后的文章中介紹。
            每個(gè)任務(wù)的局部描述符表LDT含有該任務(wù)自己的代碼段、數(shù)據(jù)段和堆棧段的描述符,也包含該任務(wù)所使用的一些門描述符,如任務(wù)門和調(diào)用門描述符等。隨著任務(wù)的切換,系統(tǒng)當(dāng)前的局部描述符表LDT也隨之切換。
            全局描述符表GDT含有每一個(gè)任務(wù)都可能或可以訪問的段的描述符,通常包含描述操作系統(tǒng)所使用的代碼段、數(shù)據(jù)段和堆棧段的描述符,也包含多種特殊數(shù)據(jù)段描述符,如各個(gè)用于描述任務(wù)LDT的特殊數(shù)據(jù)段等。在任務(wù)切換時(shí),并不切換GDT。
            通過LDT可以使各個(gè)任務(wù)私有的各個(gè)段與其它任務(wù)相隔離,從而達(dá)到受保護(hù)的目的。通過GDT可以使各任務(wù)都需要使用的段能夠被共享。下圖給出了任務(wù)A和任務(wù)B所涉及的有關(guān)段既隔離受保護(hù),又合用共享的情況。通過任務(wù)A的局部描述符表LDTA和任務(wù)B的局部描述符表LDTB,把任務(wù)A所私有的代碼段CodeA及數(shù)據(jù)段DataA與任務(wù)B所私有的代碼段CodeB和數(shù)據(jù)段DataB及DataB2隔離,但任務(wù)A和任務(wù)B通過全局描述符表GDT共享代碼段CodeK及CodeOS和數(shù)據(jù)段DataK及DataOS。
            一個(gè)任務(wù)可使用的整個(gè)虛擬地址空間分為相等的兩半,一半空間的描述符在全局描述符表中,另一半空間的描述符在局部描述符表中。由于全局和局部描述符表都可以包含多達(dá)8192個(gè)描述符,而每個(gè)描述符所描述的段的最大值可達(dá)4G字節(jié),因此最大的虛擬地址空間可為:
            4GB*8192*2=64MMB=64TB

            <四>段選擇子

            在實(shí)模式下,邏輯地址空間中存儲(chǔ)單元的地址由段值和段內(nèi)偏移兩部分組成。在保護(hù)方式下,虛擬地址空間(相當(dāng)于邏輯地址空間)中存儲(chǔ)單元的地址由段選擇子和段內(nèi)偏移兩部分組成。與實(shí)模式相比,段選擇子代替了段值。
            段選擇子長16位,其格式如下表所示。從表中可見,段選擇子的高13位是描述符索引(Index)。所謂描述符索引是指描述符在描述符表中的序號(hào)。段選擇子的第2位是引用描述符表指示位,標(biāo)記為TI(Table Indicator),TI=0指示從全局描述符表GDT中讀取描述符;TI=1指示從局部描述符表LDT中讀取描述符。

            選擇子
            結(jié)  構(gòu)
            BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
            描述符索引 TI RPL

            選擇子確定描述符,描述符確定段基地址,段基地址與偏移之和就是線性地址。所以,虛擬地址空間中的由選擇子和偏移兩部分構(gòu)成的二維虛擬地址,就是這樣確定了線性地址空間中的一維線性地址。
            選擇子的最低兩位是請(qǐng)求特權(quán)級(jí)RPL(Requested Privilege Level),用于特權(quán)檢查。 RPL字段的用法如下:
            每當(dāng)程序試圖訪問一個(gè)段時(shí),要把當(dāng)前特權(quán)級(jí)與所訪問段的特權(quán)級(jí)進(jìn)行比較,以確定是否允許程序?qū)υ摱蔚脑L問。使用選擇子的RPL字段,將改變特權(quán)級(jí)的測(cè)試規(guī)則。在這種情況下,與所訪問段的特權(quán)級(jí)比較的特權(quán)級(jí)不是CPL,而是CPU與RPL中更外層的特權(quán)級(jí)。 CPL存放在CS寄存器的RPL字段內(nèi),每當(dāng)一個(gè)代碼段選擇子裝入CS寄存器中時(shí),處理器自動(dòng)地把CPL存放到CS的RPL字段。
            由于選擇子中的描述符索引字段用13位表示,所以可區(qū)分8192個(gè)描述符。這也就是描述符表最多包含8192個(gè)描述符的原因。由于每個(gè)描述符長8字節(jié),根據(jù)上表所示選擇子的格式,屏蔽選擇子低3位后所得的值就是選擇子所指定的描述符在描述符表中的偏移,這可認(rèn)為是安排選擇子高13位作為描述符索引的原因。
            有一個(gè)特殊的選擇子稱為空(Null)選擇子,它的Index=0,TI=0,而RPL字段可以為任意值。空選擇子有特定的用途,當(dāng)用空選擇子進(jìn)行存儲(chǔ)訪問時(shí)會(huì)引起異常??者x擇子是特別定義的,它不對(duì)應(yīng)于全局描述符表GDT中的第0個(gè)描述符,因此處理器中的第0個(gè)描述符總不被處理器訪問,一般把它置成全0。但當(dāng)TI=1時(shí),Index為0的選擇子不是空選擇子,它指定了當(dāng)前任務(wù)局部描述符表LDT中的第0個(gè)描述符。

            <五>段描述符高速緩沖寄存器

            在實(shí)模式下,段寄存器含有段值,為訪問存儲(chǔ)器形成物理地址時(shí),處理器引用相應(yīng)的某個(gè)段寄存器并將其值乘以16,形成20位的段基地址。在保護(hù)模式下,段寄存器含有段選擇子,如上所述,為了訪問存儲(chǔ)器形成線性地址時(shí),處理器要使用選擇子所指定的描述符中的基地址等信息。為了避免在每次存儲(chǔ)器訪問時(shí),都要訪問描述符表而獲得對(duì)應(yīng)的段描述符,從80286開始每個(gè)段寄存器都配有一個(gè)高速緩沖寄存器,稱之為段描述符高速緩沖寄存器或描述符投影寄存器,對(duì)程序員而言它是不可見的。每當(dāng)把一個(gè)選擇子裝入到某個(gè)段寄存器時(shí),處理器自動(dòng)從描述符表中取出相應(yīng)的描述符,把描述符中的信息保存到對(duì)應(yīng)的高速緩沖寄存器中。此后對(duì)該段訪問時(shí),處理器都使用對(duì)應(yīng)高速緩沖寄存器中的描述符信息,而不用再從描述符表中取描述符。
            各段描述符高速緩沖寄存器之內(nèi)容如下表所示。其中,32位段基地址直接取自描述符, 32位的段界限取自描述符中20位的段界限,并根據(jù)描述符屬性中的粒度位轉(zhuǎn)換成以字節(jié)為單位。其它十個(gè)特性根據(jù)描述符中的屬性而定,“Y”表示“是”,“N”表示“否” ,“R”表示必須可讀,“W”表示必須可寫,“P”表示必須存在,“D”表示根據(jù)描述符中屬性而定。

            段描
            述符
            高速
            緩沖
            寄存
            器的
            內(nèi)容
            段寄存器 段基地址 段界限 段屬性
            存在性 特權(quán)級(jí) 已存取 粒度 擴(kuò)展方向 可讀性 可寫性 可執(zhí)行 堆棧大小 一致特權(quán)
            CS 32位基地址 32位段界限 P D D D D D N Y - D
            SS 32位基地址 32位段界限 P D D D D R W N D -
            DS 32位基地址 32位段界限 P D D D D D D N - -
            ES 32位基地址 32位段界限 P D D D D D D N - -
            FS 32位基地址 32位段界限 P D D D D D D N - -
            GS 32位基地址 32位段界限 P D D D D D D N - -

            段描述符高速緩沖寄存器再處理器內(nèi),所以可對(duì)其進(jìn)行快速訪問。絕大多數(shù)情況下,對(duì)存儲(chǔ)器的訪問是在對(duì)應(yīng)選擇子裝入到段寄存器之后進(jìn)行的,所以,使用段描述符高速緩沖寄存器可以得到很好的執(zhí)行性能。
            段描述符高速緩沖寄存器之內(nèi)保存的描述符信息將一直保存到重新把選擇子裝載到段寄存器時(shí)再更新。程序員盡管不可見段描述符高速緩沖寄存器,但必須注意到它的存在和它的上述更新時(shí)機(jī)。例如,在改變了描述符表中的某個(gè)當(dāng)前段的描述符后,也要更新對(duì)應(yīng)的段描述符高速緩沖寄存器的內(nèi)容,即使段選擇子未作改變,這可通過重新裝載段寄存器實(shí)現(xiàn)。
             

            posted on 2010-04-15 01:16 大龍 閱讀(1589) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久综合九色综合网站| 91久久精品91久久性色| 久久久人妻精品无码一区| 久久久久99精品成人片三人毛片 | 无码国产69精品久久久久网站| av色综合久久天堂av色综合在| 国产亚洲精品自在久久| 精品国产综合区久久久久久| 亚洲综合久久久| 久久国产精品一区二区| 日韩久久无码免费毛片软件| 亚洲va久久久噜噜噜久久狠狠| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲av日韩精品久久久久久a| 国产精品国色综合久久| 日本精品一区二区久久久| 久久国产精品一国产精品金尊| 久久久久免费视频| 久久r热这里有精品视频| 国产精品久久久久免费a∨| 国产精品久久久久乳精品爆| 久久婷婷五月综合97色一本一本| 久久精品三级视频| 伊人久久综在合线亚洲2019| 久久影院综合精品| 日本五月天婷久久网站| 国产成人久久久精品二区三区| 97久久天天综合色天天综合色hd | 国产精品视频久久久| 久久精品免费一区二区| 久久婷婷五月综合97色直播| 久久精品国产只有精品2020| 五月丁香综合激情六月久久| 亚洲精品成人久久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久99热国产这有精品| 久久亚洲国产欧洲精品一| 精品免费久久久久久久| 久久国产免费观看精品3| 中文字幕日本人妻久久久免费| 欧美亚洲国产精品久久|