• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            實(shí)模式、保護(hù)模式

            Posted on 2009-10-17 00:13 S.l.e!ep.¢% 閱讀(1415) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 系統(tǒng)低層
            實(shí)模式、保護(hù)模式
            2009-06-07 17:18

            參考了百度百科中關(guān)于實(shí)模式的討論:http://baike.baidu.com/view/404433.htm
            http://hi.baidu.com/toening/blog/item/d8d927d403bdfdc350da4b6d.html
            http://hi.baidu.com/trueailei/blog/item/b8faa413a22c57d7f7039e4d.html

            實(shí)模式、保護(hù)模式、虛擬模式都是X86中的概念。
            從尋址方式來(lái)說(shuō),CPU中的IP(EIP)中存放虛地址,把虛地址轉(zhuǎn)換到物理地址,各個(gè)模式有各自的轉(zhuǎn)換方式。
            實(shí)模式下,虛地址到實(shí)地址轉(zhuǎn)換:DS段寄存器左移4位與偏移地址相加,得到物理地址,尋址1M。
            保護(hù)模式下,虛地址到實(shí)地址轉(zhuǎn)換經(jīng)過(guò)MMU(內(nèi)存管理單元),也就是分段與分頁(yè)機(jī)制,尋址4G。

            保護(hù)有兩層含義:
            1、任務(wù)間保護(hù):多任務(wù)操作系統(tǒng)中,一個(gè)任務(wù)不能破壞另一個(gè)任務(wù)的代碼,這是通過(guò)內(nèi)存分頁(yè)以及不同任務(wù)的內(nèi)存頁(yè)映射到不同物理內(nèi)存上來(lái)實(shí)現(xiàn)的。
            2、 任務(wù)內(nèi)保護(hù):系統(tǒng)代碼與應(yīng)用程序代碼雖處于同一地址空間,但系統(tǒng)代碼具有高優(yōu)先級(jí),應(yīng)用程序代碼處于低優(yōu)先級(jí),規(guī)定只能高優(yōu)先級(jí)代碼訪問(wèn)低優(yōu)先級(jí)代碼,這 樣杜絕用戶(hù)代碼破壞系統(tǒng)代碼。這是通過(guò)段式管理來(lái)實(shí)現(xiàn),4G虛擬內(nèi)存中,代碼數(shù)據(jù)和堆棧各占有一個(gè)段,段是一個(gè)獨(dú)立有意義的內(nèi)存單元,有基地址和邊界以及 本段的優(yōu)先級(jí),windows系統(tǒng)有兩個(gè)優(yōu)先級(jí),Ring0(高優(yōu)先級(jí))或Ring3(低優(yōu)先級(jí)),系統(tǒng)代碼段和數(shù)據(jù)段屬于Ring0,不能被用戶(hù)代碼 (Ring3)訪問(wèn)。

            實(shí)模式:
            16bit的8086處理器標(biāo)志著IntelX86王朝的開(kāi)始,并且引入了一個(gè)重要概念——段。8086處理器地址總線擴(kuò)展到 20位,但算術(shù)邏輯運(yùn)算單元(ALU)寬度即數(shù)據(jù)總線卻只有16位,也就是直接運(yùn)算的指針長(zhǎng)度是16位的。為支持1M尋址空間,引入分段的方法。為支持分 段8086CPU設(shè)置四個(gè)16bit段寄存器:CS、DS、SS、ES,對(duì)應(yīng)于地址總線中的高16位。尋址時(shí),段寄存器*0x10+偏移地址=物理地址。 這樣實(shí)現(xiàn)16位內(nèi)存地址到20位物理地址的轉(zhuǎn)換,叫“映射”。
            (之前在想:為什么每個(gè)段最大不超過(guò)64K,其實(shí)很簡(jiǎn)單,因?yàn)?6位CPU數(shù)據(jù)線是16位的,所以最多只能用一個(gè)16bit數(shù)來(lái)標(biāo)識(shí)一個(gè)偏移量,也就說(shuō)一個(gè)段最大長(zhǎng)度是64K)

            保護(hù)模式:
            80286處理器地址總線位數(shù)增加到24位,可以訪問(wèn)16M地址空間。并引入一個(gè)新概念——保護(hù)模式。這種模式下,內(nèi)存段的訪 問(wèn)受到了限制。訪問(wèn)內(nèi)存時(shí)不能直接從段寄存器獲得段起始地址了,而要經(jīng)過(guò)額外轉(zhuǎn)換和檢查(從其不能隨意存取數(shù)據(jù)段)。為與過(guò)去兼容,80286內(nèi)存尋址有 兩種方式:保護(hù)模式和實(shí)模式。系統(tǒng)啟動(dòng)時(shí)處理器處于實(shí)模式,只能訪問(wèn)1M內(nèi)存空間,經(jīng)過(guò)處理可以進(jìn)入保護(hù)模式,可訪問(wèn)16M內(nèi)存空間,但要從保護(hù)模式回到 實(shí)模式必須重啟機(jī)器。它有個(gè)致命缺陷就是80286雖然擴(kuò)大了尋址空間,但是每個(gè)段大小還是64K(因?yàn)閿?shù)據(jù)線還是16位的),程序規(guī)模仍然受到限制,因 此很快就被80386代替了。

            80386是一個(gè)32位的CPU。它的地址總線和ALU數(shù)據(jù)總線都是32位的。尋址能力達(dá)到4G。理論上說(shuō)當(dāng)數(shù)據(jù)總線和地址總線寬度一致 時(shí),CPU結(jié)構(gòu)應(yīng)該簡(jiǎn)潔明了,但80386不能做到這點(diǎn),作為80X86產(chǎn)品系列的一員,80386必須維持那些16位段寄存器的存在,必須支持實(shí)模式, 同時(shí)還要支持保護(hù)模式。Intel選擇在段寄存器基礎(chǔ)上構(gòu)筑保護(hù)模式,保留16位段寄存器。在保護(hù)模式下,段范圍達(dá)到4G。從80386以后Intel的 CPU經(jīng)歷了80486、Pentium、Pentium2、Pentium3等型號(hào),但都屬于同一種系統(tǒng)結(jié)構(gòu)的改進(jìn)與加強(qiáng),所以把80386以后的處理 器統(tǒng)稱(chēng)為IA32(32 Bit Intel Architecture)。


            深入討論下保護(hù)模式:
            保護(hù)模式與實(shí)模式中程序運(yùn)行的實(shí)質(zhì)是一樣的,都是“CPU執(zhí)行指令,操作相關(guān)數(shù)據(jù)”。最大的變化是“地址轉(zhuǎn)換方式”的變化。

            這里可以看下兩種模式下地址轉(zhuǎn)換方式的區(qū)別: 在ES存入0x1000,DI存入0xFFFF
            實(shí)模式:ES:DI = 0x1000 * 0x10 + 0xFFFF = 0x1FFFF,這就是“段基址左移4位加偏移地址”。
            保護(hù)模式:(注意:0x1000 = 10 0000 0000 0 00 B)ES:DI = GDT全局描述符表中第0x200項(xiàng)描述符給出的段基址 + 0xFFFF。為什么是第0x200項(xiàng)?請(qǐng)看下邊段選擇子(即段值)的結(jié)構(gòu)。
            這里ES在兩種模式下都不是真正段地址(實(shí)模式下稱(chēng)"段寄存器",保護(hù)模式下稱(chēng)"選擇子"),都是一種映射,不過(guò)映射規(guī)則不同而已。


            保護(hù)模式的基本組成:(圍繞“地址轉(zhuǎn)換方式”的變化增設(shè)了相應(yīng)機(jī)構(gòu))
            1、數(shù)據(jù)段
            ?? 實(shí)模式下的各種代碼段、數(shù)據(jù)段、堆棧段、中斷服務(wù)程序仍然存在,這里統(tǒng)稱(chēng)為“數(shù)據(jù)段”。
            2、描述符
            ?? 保護(hù)模式引入描述符類(lèi)描述各種數(shù)據(jù)段,描述符為8個(gè)字節(jié)(0-7),第5個(gè)字節(jié)說(shuō)明描述符類(lèi)型,類(lèi)型不同,描述符的結(jié)構(gòu)也不同。
            ?? 若干描述符集中組成描述符表,描述符表本身也是一種數(shù)據(jù)段,也使用描述符進(jìn)行描述。描述符表是一張地址轉(zhuǎn)換函數(shù)表。
            3、選擇子
            ?? 保護(hù)模式下,邏輯地址由段選擇子和段內(nèi)偏移兩部分組成。與實(shí)模式相比,保護(hù)模式下的段選擇子代替了段值。
            ?? 段 選擇子有2個(gè)BYTE。高13位是描述符索引,第2位TI(Table Indicator)是描述符表指示位,TI=0指示從GTD(全局描述符表)中讀取描述符,TI=1指示從LTD(局部描述符表)中讀取描述符。低2位 是RPL(Request Privilege Level),即進(jìn)程對(duì)段訪問(wèn)的請(qǐng)求權(quán)限,具體可以查閱有關(guān)資料。


            這里80X86系列引入新的寄存器GDTR和LDTR。
            GDTR表示GDT在內(nèi)存中的段地址和段界限,GDTR是一個(gè)48位寄 存器,其中32位表示段地址,16位表示段界限(段最大64K,之前提過(guò)描述符表也使用描述符進(jìn)行描述,因此描述符表最大長(zhǎng)度也是64K,里面最多可存放 64K/8Byte=8K個(gè)描述符[每個(gè)描述符8Byte]。這也是段選擇子中描述符索引占13bit的原因[13b=8192])。
            ?? 因?yàn)镚DT不能由GDT本身之內(nèi)的描述符進(jìn)行描述定義,所以采用GDTR為GDT這一特殊系統(tǒng)段提供一個(gè)偽描述符。

            LDTR表示LDT在內(nèi)存中的位置。因?yàn)長(zhǎng)DT本身也是一種數(shù)據(jù)段,它必須有一個(gè)描述符存放于GDT中。因此LDTR使用與DS、ES、CS等相同機(jī)制,只存放一個(gè)“選擇子”,通過(guò)查GDT獲得LDT內(nèi)存地址。
            ?? LDTR 類(lèi)似于段寄存器,由程序員可見(jiàn)的16bit寄存器和程序員不可見(jiàn)的高速緩沖寄存器組成。在初始化或切換任務(wù)過(guò)程中,把描述符對(duì)應(yīng)任務(wù)LDT的描述符的選擇 子裝入LDTR,處理器根據(jù)LDTR可見(jiàn)部分的選擇子從GDT中取出對(duì)應(yīng)描述符,并把LDT的基地址、界限和屬性等信息保存在LDTR的不可見(jiàn)高速緩沖寄 存器中。隨后對(duì)LDT的訪問(wèn)可根據(jù)保存在高速緩沖寄存器中的有關(guān)信息進(jìn)行合法性檢查。
            ?? LDTR包含當(dāng)前任務(wù)的LDT選擇子。所以裝入到LDTR的選擇子必須確定一個(gè)位于GDT中類(lèi)型為L(zhǎng)DT的系統(tǒng)段描述符,即選擇子中的TI=0,且描述符類(lèi)型字段所表示的類(lèi)型必須為L(zhǎng)DT。

            一個(gè)多任務(wù)操作系統(tǒng)必須有一個(gè)GDT,而每一個(gè)正在運(yùn)行的任務(wù)(進(jìn)程)都有一個(gè)LDT??梢哉f(shuō)保護(hù)模式的引進(jìn)才使得80286以后處理器實(shí)現(xiàn)了對(duì) 多任務(wù)的硬件支持。多任務(wù)系統(tǒng)運(yùn)行中在進(jìn)程間切換時(shí)需要“環(huán)境”保護(hù)(比如各寄存器值等)。這些“環(huán)境”數(shù)據(jù)構(gòu)成了一類(lèi)新的數(shù)據(jù)段TSS(任務(wù)狀態(tài)段)。 給TSS段設(shè)置描述符(TSS描述符),并把該類(lèi)描述符放在GDT中(自然不能放在LDT中,80x86也不允許),再加個(gè)TR寄存器用于查表。TR(任 務(wù)寄存器)是一個(gè)起“選擇子”作用的16bit寄存器。任務(wù)切換的工作就是將原任務(wù)“環(huán)境”存入TSS,更新TR,系統(tǒng)將自動(dòng)查GDT表獲得并裝載新任務(wù) 的“環(huán)境”,然后找到該任務(wù)執(zhí)行。


            段描述符高速緩沖寄存器:
            ?? 為避免每次存儲(chǔ)器訪問(wèn)時(shí),都要訪問(wèn)描述符表獲得對(duì)應(yīng)段描述符,從80286開(kāi)始每個(gè)段寄存器都配有一個(gè)高速緩沖寄存器,稱(chēng)為“描述符高速緩沖寄存器”或“描述符投影寄存器”(shadow register),對(duì)于程序員不可見(jiàn)。
            ?? 每 當(dāng)一個(gè)選擇子裝入某個(gè)段寄存器,處理器自動(dòng)從描述符表中取出相應(yīng)描述符,把描述符中的信息保存到對(duì)應(yīng)高速緩沖寄存器中。此后對(duì)該段訪問(wèn)時(shí),處理器都使用對(duì) 應(yīng)高速緩沖寄存器中的描述符信息。段描述符高速緩沖寄存器內(nèi)保存的描述符信息將一直保存到重新把選擇子裝入段寄存器時(shí)再更新。程序員盡管不可見(jiàn)段描述符高 速緩沖寄存器,但必須注意到它的存在和它的上述更新時(shí)機(jī)。例如,在改變了描述符表中的某個(gè)當(dāng)前段的描述符后,也要更新對(duì)應(yīng)的段描述符高速緩沖寄存器的內(nèi) 容,即使段選擇子未作改變,這可通過(guò)重新裝載段寄存器實(shí)現(xiàn)。


            分頁(yè):
            ?? 不同程序由不同用戶(hù)編寫(xiě),而所有這些程序完全可能使用相同地址空間,而程序切換過(guò)程一般不包括內(nèi)存數(shù)據(jù)的刷新,因?yàn)檫@么做太浪費(fèi)。因此引入分頁(yè)機(jī)制才能有效完成對(duì)多任務(wù)的支持。
            ?? 分 頁(yè)引入的主要目標(biāo)就是解決不同進(jìn)程之間發(fā)生地址沖突問(wèn)題。分頁(yè)實(shí)質(zhì)就是實(shí)現(xiàn)程序內(nèi)地址到物理地址的映射。用類(lèi)似GDT的做法:先建立頁(yè)表這種數(shù)據(jù) 段,80x86中使用二級(jí)頁(yè)表方案,增設(shè)一個(gè)CR3寄存器用于存放一級(jí)頁(yè)表(頁(yè)目錄)在內(nèi)存中的地址,CR3共32位,低12位總為零,高20位指示頁(yè)目 錄的內(nèi)存地址,因此頁(yè)目錄總是按頁(yè)對(duì)齊的。CR3作為進(jìn)程“環(huán)境”的一部分在進(jìn)程切換時(shí)被存入TSS數(shù)據(jù)段中。還有一個(gè)相應(yīng)的缺頁(yè)中斷機(jī)制及其相關(guān)寄存器 CR2(頁(yè)故障線性地址寄存器)。


            中斷:
            ?? 80x86(保護(hù)模式)與8086(實(shí)模式)的中斷機(jī)制不一樣。80x86系列為中斷服務(wù)提供中斷/陷阱描述符,這些 描述符構(gòu)成中斷描述符表IDT,并引入一個(gè)48bit寄存器IDTR存放IDT的內(nèi)存地址。理論上IDT表同樣可以有8K項(xiàng),可是因?yàn)?0x86只支持 256個(gè)中斷,因此IDT實(shí)際上最大只能有256項(xiàng)(2K大小,因?yàn)樗忻枋龇际?BYTE)。


            總結(jié)可得出,保護(hù)模式下增加了:
            ?? 1、寄存器:GDTR、LDTR、IDTR、TR、CR3、CR2
            ?? 2、數(shù)據(jù)段:描述符表(GDT、LDT、IDT)、任務(wù)數(shù)據(jù)段(TSS)、頁(yè)表(頁(yè)目錄、二級(jí)頁(yè)表)
            ?? 3、機(jī)制:權(quán)限檢測(cè)(利用選擇子/描述符/頁(yè)表項(xiàng)的屬性位)、線性地址到物理地址的映射

            =========================================================

            實(shí)模式:(即實(shí)地址訪問(wèn)模式)它是Intel公司80286及以后的x86(80386,8048680586)兼容處理器(CPU)的一種操作模式。實(shí)模式被特殊定義為20位地址內(nèi)存可訪問(wèn)空間上,這就意味著它的容量是220次冪(1M)的可訪問(wèn)內(nèi)存空間(物理內(nèi)存和BIOS-ROM),軟件可通過(guò)這些地址直接訪問(wèn)BIOS程序和外圍硬件。實(shí)模式下處理器沒(méi)有硬件級(jí)的內(nèi)存保護(hù)概念和多道任務(wù)的工作模式。但是為了向下兼容,所以80286及以后的x86系列兼容處理器仍然是開(kāi)機(jī)啟動(dòng)時(shí)工作在實(shí)模式下。80186和早期的處理器僅有一種操作模式,就是后來(lái)我們所定義的實(shí)模式。實(shí)模式雖然能訪問(wèn)到1M的地址空間,但是由于BIOS的映射作用(即BIOS占用了部分空間地址資源),所以真正能使用的物理內(nèi)存空間(內(nèi)存條),也就是在640k924k之間。1M地址空間組成是由16位的段地址和16位的段內(nèi)偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。

            286處理器體系結(jié)構(gòu)引入了地址保護(hù)模式的概念,處理器能夠?qū)?nèi)存及一些其他外圍設(shè)備做硬件級(jí)的保護(hù)設(shè)置(保護(hù)設(shè)置實(shí)質(zhì)上就是屏蔽一些地址的訪問(wèn))。使用這些新的特性,然而必不可少一些額外的在80186及以前處理器沒(méi)有的操作規(guī)程。自從最初的x86微處理器規(guī)格以后,它對(duì)程序開(kāi)發(fā)完全向下兼容,80286芯片被制作成啟動(dòng)時(shí)繼承了以前版本芯片的特性,工作在實(shí)模式下,在這種模式下實(shí)際上是關(guān)閉了新的保護(hù)功能特性,因此能使以往的軟件繼續(xù)工作在新的芯片下。直到今天,甚至最新的x86處理器都是在計(jì)算機(jī)加電啟動(dòng)時(shí)都是工作在實(shí)模式下,它能運(yùn)行為以前處理器芯片寫(xiě)的程序.

            DOS操作系統(tǒng)(例如MS-DOS,DR-DOS)工作在實(shí)模式下,微軟Windows早期的版本(它本質(zhì)上是運(yùn)行在DOS上的圖形用戶(hù)界面應(yīng)用程序,實(shí)際上本身并不是一個(gè)操作系統(tǒng))也是運(yùn)行在實(shí)模式下,直到Windows3.0,它運(yùn)行期間既有實(shí)模式又有保護(hù)模式,所以說(shuō)它是一種混合模式工作。它的保護(hù)模式運(yùn)行有兩種不同意義(因?yàn)?/span>80286并沒(méi)有完全地實(shí)現(xiàn)80386及以后的保護(hù)模式功能)

            1〉“標(biāo)準(zhǔn)保護(hù)模式”:這就是程序運(yùn)行在保護(hù)模式下;

            2〉“虛擬保護(hù)模式(實(shí)質(zhì)上還是實(shí)模式,是實(shí)模式上模擬的保護(hù)模式)”:它也使用32位地址尋址方式。Windows3.1徹底刪除了對(duì)實(shí)模式的支持。在80286處理器芯片以后,Windows3.1成為主流操作系統(tǒng)(Windows/80286不是主流產(chǎn)品)。目前差不多所有的X86系列處理器操作系統(tǒng)(Linux,Windows95 and later,OS/2等)都是在啟動(dòng)時(shí)進(jìn)行處理器設(shè)置而進(jìn)入保護(hù)模式的。

            實(shí)模式工作機(jī)理:

            1> 對(duì)于8086/8088來(lái)說(shuō)計(jì)算實(shí)際地址是用絕對(duì)地址對(duì)1M求模。8086的地址線的物理結(jié)構(gòu):20根,也就是它可以物理尋址的內(nèi)存范圍為2^20個(gè)字節(jié),即1 M空間,但由于8086/8088所使用的寄存器都是16位,能夠表示的地址范圍只有0-64K,這和1M地址空間來(lái)比較也太小了,所以為了在8086/8088下能夠訪問(wèn)1M內(nèi)存,Intel采取了分段尋址的模式:16位段基地址:16位偏移EA。其絕對(duì)地址計(jì)算方法為:16位基地址左移4+16位偏移=20位地址。比如:DS=1000H EA=FFFFH 那么絕對(duì)地址就為:10000H + 0FFFFH = 1FFFFH 地址單元。通過(guò)這種方法來(lái)實(shí)現(xiàn)使用16位寄存器訪問(wèn)1M的地址空間,這種技術(shù)是處理器內(nèi)部實(shí)現(xiàn)的,通過(guò)上述分段技術(shù)模式,能夠表示的最大內(nèi)存為:FFFFh: FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes1M多余出來(lái)的部分被稱(chēng)做高端內(nèi)存區(qū)HMA)。但8086/8088只有20位地址線,只能夠訪問(wèn)1M地址范圍的數(shù)據(jù),所以如果訪問(wèn)100000h~10FFEFh之間的內(nèi)存(大于1M空間),則必須有第21根地址線來(lái)參與尋址(8086/8088沒(méi)有)。因此,當(dāng)程序員給出超過(guò)1M100000H-10FFEFH)的地址時(shí),因?yàn)檫壿嬌险?,系統(tǒng)并不認(rèn)為其訪問(wèn)越界而產(chǎn)生異常,而是自動(dòng)從0開(kāi)始計(jì)算,也就是說(shuō)系統(tǒng)計(jì)算實(shí)際地址的時(shí)候是按照對(duì)1M求模的方式進(jìn)行的,這種技術(shù)被稱(chēng)為wrap-around。

            2> 對(duì)于80286或以上的CPU通過(guò)A20 GATE來(lái)控制A20地址線。 技術(shù)發(fā)展到了80286,雖然系統(tǒng)的地址總線由原來(lái)的20根發(fā)展為24根,這樣能夠訪問(wèn)的內(nèi)存可以達(dá)到2^24=16M,但是Intel在設(shè)計(jì)80286時(shí)提出的目標(biāo)是向下兼容,所以在實(shí)模式下,系統(tǒng)所表現(xiàn)的行為應(yīng)該和8086/8088所表現(xiàn)的完全一樣,也就是說(shuō),在實(shí)模式下,80386以及后續(xù)系列應(yīng)該和8086/8088完全兼容仍然使用A20地址線。所以說(shuō)80286芯片存在一個(gè)BUG:它開(kāi)設(shè)A20地址線。如果程序員訪問(wèn)100000H-10FFEFH之間的內(nèi)存,系統(tǒng)將實(shí)際訪問(wèn)這塊內(nèi)存(沒(méi)有wrap-around技術(shù)),而不是象8086/8088一樣從0開(kāi)始。我們來(lái)看一副圖:

            <!--[if !vml]-->??? ??

            ????? 為了解決上述兼容性問(wèn)題,IBM使用鍵盤(pán)控制器上剩余的一些輸出線來(lái)管理第21根地址線(從0開(kāi)始數(shù)是第20根)的有效性,被稱(chēng)為A20 Gate

            ????? 1> 如果A20 Gate被打開(kāi),則當(dāng)程序員給出100000H-10FFEFH之間的地址的時(shí)候,系統(tǒng)將真正訪問(wèn)這塊內(nèi)存區(qū)域;

            ????? 2 如果A20 Gate被禁止,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時(shí)候,系統(tǒng)仍然使用8086/8088的方式即取模方式(8086仿真)。絕大多數(shù)IBM PC兼容機(jī)默認(rèn)的A20 Gate是被禁止的?,F(xiàn)在許多新型PC上存在直接通過(guò)BIOS功能調(diào)用來(lái)控制A20 Gate的功能。

            ????? 上面所述的內(nèi)存訪問(wèn)模式都是實(shí)模式,在80286以及更高系列的PC中,即使A20 Gate被打開(kāi),在實(shí)模式下所能夠訪問(wèn)的內(nèi)存最大也只能為10FFEFH,盡管它們的地址總線所能夠訪問(wèn)的能力都大大超過(guò)這個(gè)限制。為了能夠訪問(wèn)10FFEFH以上的內(nèi)存,則必須進(jìn)入保護(hù)模式。

            保護(hù)模式:經(jīng)??s寫(xiě)為p-mode,Intel iAPX 286程序員參考手冊(cè)中(iAPX 286Intel 80286的另一種叫法)它又被稱(chēng)作為虛擬地址保護(hù)模式。經(jīng)管在Intel 80286手冊(cè)中已經(jīng)提出了虛地址保護(hù)模式,但實(shí)際上它只是一個(gè)指引,真正的32位地址出現(xiàn)在Intel 80386上。保護(hù)模式本身是80286及以后兼容處理器序列之后產(chǎn)成的一種操作模式,它具有許多特性設(shè)計(jì)為提高系統(tǒng)的多道任務(wù)和系統(tǒng)的穩(wěn)定性。例如內(nèi)存的保護(hù),分頁(yè)機(jī)制和硬件虛擬存儲(chǔ)的支持。現(xiàn)代多數(shù)的x86處理器操作系統(tǒng)都運(yùn)行在保護(hù)模式下,包括Linux, Free BSD, Windows 3.0(它也運(yùn)行在實(shí)模式下,為了和Windows 2.x應(yīng)用程序兼容)及以后的版本。

            80286及以后的處理器另一種工作模式是實(shí)模式(僅當(dāng)系統(tǒng)啟動(dòng)的一瞬間),本著向下兼容的原則屏蔽保護(hù)模式特性,從而容許老的軟件能夠運(yùn)行在新的芯片上。作為一個(gè)設(shè)計(jì)規(guī)范,所有的x86系列處理器,除嵌入式Intel80387之外,都是系統(tǒng)啟動(dòng)工作在實(shí)模式下,確保遺留下的操作系統(tǒng)向下兼容。它們都必須被啟動(dòng)程序(操作系統(tǒng)程序最初運(yùn)行代碼)重新設(shè)置而相應(yīng)進(jìn)入保護(hù)模式的,在這之前任何的保護(hù)模式特性都是無(wú)效的。在現(xiàn)代計(jì)算機(jī)中,這種匹配進(jìn)入保護(hù)模式是操作系統(tǒng)啟動(dòng)時(shí)最前沿的動(dòng)作之一。

            在被調(diào)停的多道任務(wù)程序中,它可以從新工作在實(shí)模式下是相當(dāng)可能的。保護(hù)模式的特性是阻止被其他任務(wù)或系統(tǒng)內(nèi)核破壞已經(jīng)不健全的程序的運(yùn)行,保護(hù)模式也有對(duì)硬件的支持,例如中斷運(yùn)行程序,移動(dòng)運(yùn)行進(jìn)程文檔到另一個(gè)進(jìn)程和置空多任務(wù)的保護(hù)功能。

            386及以后系列處理器不僅具有保護(hù)模式又具有32位寄存器,結(jié)果導(dǎo)致了處理功能的混亂,因?yàn)?/span>80286雖然支持保護(hù)模式,但是它的寄存器都是16位的,它是通過(guò)自身程序設(shè)定而模擬出的32位,并非32位寄存器處理。歸咎于這種混亂現(xiàn)象,它促使Windows/386及以后的版本徹底拋棄80286的虛擬保護(hù)模式,以后保護(hù)模式的操作系統(tǒng)都是運(yùn)行在80386以上,不再運(yùn)行在80286(盡管80286模式支持保護(hù)模式),所以說(shuō)80286是一個(gè)過(guò)渡芯片,它是一個(gè)過(guò)渡產(chǎn)品。

            盡管286386處理器能夠?qū)崿F(xiàn)保護(hù)模式和兼容以前的版本,但是內(nèi)存的1M以上空間還是不易存取,由于內(nèi)存地址的回繞,IBM PC XT (現(xiàn)以廢棄)設(shè)計(jì)一種模擬系統(tǒng),它能過(guò)欺騙手段訪問(wèn)到1M以上的地址空間,就是開(kāi)通了A20地址線。在保護(hù)模式里,前32個(gè)中斷為處理器異常預(yù)留,例如,中斷0D(十進(jìn)制13)常規(guī)保護(hù)故障和中斷00是除數(shù)為零異常。

            如果要訪問(wèn)更多的內(nèi)存,則必須進(jìn)入保護(hù)模式,那么,在保護(hù)模式下,A20 Gate對(duì)于內(nèi)存訪問(wèn)有什么影響呢?

            ????? 為了搞清楚這一點(diǎn),我們先來(lái)看一看A20的工作原理。A20,從它的名字就可以看出來(lái),其實(shí)它就是對(duì)于A20(從0開(kāi)始數(shù))的特殊處理(也就是對(duì)第21根地址線的處理)。如果A20 Gate被禁止,對(duì)于80286來(lái)說(shuō),其地址為24根地址線,其地址表示為EFFFFF;對(duì)于80386極其隨后的32根地址線芯片來(lái)說(shuō),其地址表示為FFEFFFFF。這種表示的意思是:

            ??? 1>如果A20 Gate被禁止。則其第A20CPU做地址訪問(wèn)的時(shí)候是無(wú)效的,永遠(yuǎn)只能被作為0。所以,在保護(hù)模式下,如果A20 Gate被禁止,則可以訪問(wèn)的內(nèi)存只能是奇數(shù)1M段,即1M,3M,5M…,也就是00000-FFFFF, 200000-2FFFFF,300000-3FFFFF…

            ????? 2如果A20 Gate被打開(kāi)。則其第20-bit是有效的,其值既可以是0,又可以是1。那么就可以使A20線傳遞實(shí)際的地址信號(hào)。如果A20 Gate被打開(kāi),則可以訪問(wèn)的內(nèi)存則是連續(xù)的。

            實(shí)模式和保護(hù)模式的區(qū)別:從表面上看,保護(hù)模式和實(shí)模式并沒(méi)有太大的區(qū)別,二者都使用了內(nèi)存段、中斷和設(shè)備驅(qū)動(dòng)來(lái)處理硬件,但二者有很多不同之處。我們知道,在實(shí)模式中內(nèi)存被劃分成段,每個(gè)段的大小為64KB,而這樣的段地址可以用16位來(lái)表示。內(nèi)存段的處理是通過(guò)和段寄存器相關(guān)聯(lián)的內(nèi)部機(jī)制來(lái)處理的,這些段寄存器(CS、DS、 SSES)的內(nèi)容形成了物理地址的一部分。具體來(lái)說(shuō),最終的物理地址是由16位的段地址和16位的段內(nèi)偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。

            在保護(hù)模式下,段是通過(guò)一系列被稱(chēng)之為描述符表的表所定義的。段寄存器存儲(chǔ)的是指向這些表的指針。用于定義內(nèi)存段的表有兩種:全局描述符表(GDT) 和局部描述符表(LDT)。GDT是一個(gè)段描述符數(shù)組,其中包含所有應(yīng)用程序都可以使用的基本描述符。在實(shí)模式中,段長(zhǎng)是固定的(64KB),而在保護(hù)模式中,段長(zhǎng)是可變的,其最大可達(dá)4GB。LDT也是段描述符的一個(gè)數(shù)組。與GDT不同,LDT是一個(gè)段,其中存放的是局部的、不需要全局共享的段描述符。每一個(gè)操作系統(tǒng)都必須定義一個(gè)GDT,而每一個(gè)正在運(yùn)行的任務(wù)都會(huì)有一個(gè)相應(yīng)的LDT。每一個(gè)描述符的長(zhǎng)度是8個(gè)字節(jié),格式如圖3所示。當(dāng)段寄存器被加載的時(shí)候,段基地址就會(huì)從相應(yīng)的表入口獲得。描述符的內(nèi)容會(huì)被存儲(chǔ)在一個(gè)程序員不可見(jiàn)的影像寄存器(shadow register)之中,以便下一次同一個(gè)段可以使用該信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址組成。實(shí)模式和保護(hù)模式的不同可以從下圖很清楚地看出來(lái)。

            ??????????????? 實(shí)模式下尋址方式

            ??? <!--[if !vml]-->

            ????????????????? ?? 保護(hù)模式下尋址方式
            久久激情亚洲精品无码?V| 久久精品无码一区二区三区免费 | 7国产欧美日韩综合天堂中文久久久久 | 久久国产AVJUST麻豆| 性高湖久久久久久久久AAAAA| 日本加勒比久久精品| 2021国内精品久久久久久影院| 久久亚洲sm情趣捆绑调教| 久久精品蜜芽亚洲国产AV| 成人资源影音先锋久久资源网| Xx性欧美肥妇精品久久久久久| 久久精品国产精品亚洲| 久久天天躁夜夜躁狠狠躁2022| 亚洲精品高清国产一线久久| 97久久国产亚洲精品超碰热| 18岁日韩内射颜射午夜久久成人| 日韩十八禁一区二区久久 | 狠狠人妻久久久久久综合| 色99久久久久高潮综合影院 | 久久久久久毛片免费看| 狠狠色噜噜色狠狠狠综合久久| 久久精品无码一区二区无码| 亚洲国产成人久久精品影视| 亚洲欧洲精品成人久久奇米网| 中文字幕久久精品无码| 蜜桃麻豆www久久| 亚洲精品视频久久久| 国产精品视频久久久| 日本免费一区二区久久人人澡| 久久免费99精品国产自在现线| 久久精品国产男包| 久久精品国产69国产精品亚洲| 日产久久强奸免费的看| 久久精品亚洲中文字幕无码麻豆| 久久国产成人亚洲精品影院| 新狼窝色AV性久久久久久| 国产精品美女久久久久AV福利| 无码人妻少妇久久中文字幕蜜桃| 久久久WWW成人免费精品| 2022年国产精品久久久久| 亚洲人成网站999久久久综合|