实模式和保护模式(附i386/x86的由来)
實模式:(即實地址訪問模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容處理器(CPU)的一種操作模式。實模式被特殊定義為20位地址內(nèi)存可訪問空間上,這就意味著它的容量是2的20次冪(1M)的可訪問內(nèi)存空間(物理內(nèi)存和BIOS-ROM),軟件可通過這些地址直接訪問BIOS程序和外圍硬件。實模式下處理器沒有硬件級的內(nèi)存保護概念和多道任務(wù)的工作模式。但是為了向下兼容,所以80286及以后的x86系列兼容處理器仍然是開機啟動時工作在實模式下。80186和早期的處理器僅有一種操作模式,就是后來我們所定義的實模式。實模式雖然能訪問到1M的地址空間,但是由于BIOS的映射作用(即BIOS占用了部分空間地址資源),所以真正能使用的物理內(nèi)存空間(內(nèi)存條),也就是在640k到924k之間。1M地址空間組成是由16位的段地址和16位的段內(nèi)偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。
286處理器體系結(jié)構(gòu)引入了地址保護模式的概念,處理器能夠?qū)?nèi)存及一些其他外圍設(shè)備做硬件級的保護設(shè)置(保護設(shè)置實質(zhì)上就是屏蔽一些地址的訪問)。使用這些新的特性,然而必不可少一些額外的在80186及以前處理器沒有的操作規(guī)程。自從最初的x86微處理器規(guī)格以后,它對程序開發(fā)完全向下兼容,80286芯片被制作成啟動時繼承了以前版本芯片的特性,工作在實模式下,在這種模式下實際上是關(guān)閉了新的保護功能特性,因此能使以往的軟件繼續(xù)工作在新的芯片下。直到今天,甚至最新的x86處理器都是在計算機加電啟動時都是工作在實模式下,它能運行為以前處理器芯片寫的程序.
DOS操作系統(tǒng)(例如MS-DOS,DR-DOS)工作在實模式下,微軟Windows早期的版本(它本質(zhì)上是運行在DOS上的圖形用戶界面應(yīng)用程序,實際上本身并不是一個操作系統(tǒng))也是運行在實模式下,直到Windows3.0,它運行期間既有實模式又有保護模式,所以說它是一種混合模式工作。它的保護模式運行有兩種不同意義(因為80286并沒有完全地實現(xiàn)80386及以后的保護模式功能):
1〉“標(biāo)準(zhǔn)保護模式”:這就是程序運行在保護模式下;
2〉“虛擬保護模式(實質(zhì)上還是實模式,是實模式上模擬的保護模式)”:它也使用32位地址尋址方式。Windows3.1徹底刪除了對實模式的支持。在80286處理器芯片以后,Windows3.1成為主流操作系統(tǒng)(Windows/80286不是主流產(chǎn)品)。目前差不多所有的X86系列處理器操作系統(tǒng)(Linux,Windows95 and later,OS/2等)都是在啟動時進行處理器設(shè)置而進入保護模式的。
實模式工作機理:
1>對于8086/8088來說計算實際地址是用絕對地址對1M求模。8086的地址線的物理結(jié)構(gòu):20根,也就是它可以物理尋址的內(nèi)存范圍為2^20個字節(jié),即1 M空間,但由于8086/8088所使用的寄存器都是16位,能夠表示的地址范圍只有0-64K,這和1M地址空間來比較也太小了,所以為了在8086/8088下能夠訪問1M內(nèi)存,Intel采取了分段尋址的模式:16位段基地址:16位偏移EA。其絕對地址計算方法為:16位基地址左移4位+16位偏移=20位地址。比如:DS=1000H EA=FFFFH那么絕對地址就為:10000H + 0FFFFH = 1FFFFH地址單元。通過這種方法來實現(xiàn)使用16位寄存器訪問1M的地址空間,這種技術(shù)是處理器內(nèi)部實現(xiàn)的,通過上述分段技術(shù)模式,能夠表示的最大內(nèi)存為:FFFFh: FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出來的部分被稱做高端內(nèi)存區(qū)HMA)。但8086/8088只有20位地址線,只能夠訪問1M地址范圍的數(shù)據(jù),所以如果訪問100000h~10FFEFh之間的內(nèi)存(大于1M空間),則必須有第21根地址線來參與尋址(8086/8088沒有)。因此,當(dāng)程序員給出超過1M(100000H-10FFEFH)的地址時,因為邏輯上正常,系統(tǒng)并不認為其訪問越界而產(chǎn)生異常,而是自動從0開始計算,也就是說系統(tǒng)計算實際地址的時候是按照對1M求模的方式進行的,這種技術(shù)被稱為wrap-around。
2>對于80286或以上的CPU通過A20 GATE來控制A20地址線。技術(shù)發(fā)展到了80286,雖然系統(tǒng)的地址總線由原來的20根發(fā)展為24根,這樣能夠訪問的內(nèi)存可以達到2^24=16M,但是Intel在設(shè)計80286時提出的目標(biāo)是向下兼容,所以在實模式下,系統(tǒng)所表現(xiàn)的行為應(yīng)該和8086/8088所表現(xiàn)的完全一樣,也就是說,在實模式下,80386以及后續(xù)系列應(yīng)該和8086/8088完全兼容仍然使用A20地址線。所以說80286芯片存在一個BUG:它開設(shè)A20地址線。如果程序員訪問100000H-10FFEFH之間的內(nèi)存,系統(tǒng)將實際訪問這塊內(nèi)存(沒有wrap-around技術(shù)),而不是象8086/8088一樣從0開始。我們來看一副圖:
為了解決上述兼容性問題,IBM使用鍵盤控制器上剩余的一些輸出線來管理第21根地址線(從0開始數(shù)是第20根)的有效性,被稱為A20 Gate:
1>如果A20 Gate被打開,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時候,系統(tǒng)將真正訪問這塊內(nèi)存區(qū)域;
2如果A20 Gate被禁止,則當(dāng)程序員給出100000H-10FFEFH之間的地址的時候,系統(tǒng)仍然使用8086/8088的方式即取模方式(8086仿真)。絕大多數(shù)IBM PC兼容機默認的A20 Gate是被禁止的?,F(xiàn)在許多新型PC上存在直接通過BIOS功能調(diào)用來控制A20 Gate的功能。
上面所述的內(nèi)存訪問模式都是實模式,在80286以及更高系列的PC中,即使A20 Gate被打開,在實模式下所能夠訪問的內(nèi)存最大也只能為10FFEFH,盡管它們的地址總線所能夠訪問的能力都大大超過這個限制。為了能夠訪問10FFEFH以上的內(nèi)存,則必須進入保護模式。
保護模式:經(jīng)??s寫為p-mode,在Intel iAPX 286程序員參考手冊中(iAPX 286是Intel 80286的另一種叫法)它又被稱作為虛擬地址保護模式。經(jīng)管在Intel 80286手冊中已經(jīng)提出了虛地址保護模式,但實際上它只是一個指引,真正的32位地址出現(xiàn)在Intel 80386上。保護模式本身是80286及以后兼容處理器序列之后產(chǎn)成的一種操作模式,它具有許多特性設(shè)計為提高系統(tǒng)的多道任務(wù)和系統(tǒng)的穩(wěn)定性。例如內(nèi)存的保護,分頁機制和硬件虛擬存儲的支持?,F(xiàn)代多數(shù)的x86處理器操作系統(tǒng)都運行在保護模式下,包括Linux, Free BSD,和Windows 3.0(它也運行在實模式下,為了和Windows 2.x應(yīng)用程序兼容)及以后的版本。
80286及以后的處理器另一種工作模式是實模式(僅當(dāng)系統(tǒng)啟動的一瞬間),本著向下兼容的原則屏蔽保護模式特性,從而容許老的軟件能夠運行在新的芯片上。作為一個設(shè)計規(guī)范,所有的x86系列處理器,除嵌入式Intel80387之外,都是系統(tǒng)啟動工作在實模式下,確保遺留下的操作系統(tǒng)向下兼容。它們都必須被啟動程序(操作系統(tǒng)程序最初運行代碼)重新設(shè)置而相應(yīng)進入保護模式的,在這之前任何的保護模式特性都是無效的。在現(xiàn)代計算機中,這種匹配進入保護模式是操作系統(tǒng)啟動時最前沿的動作之一。
在被調(diào)停的多道任務(wù)程序中,它可以從新工作在實模式下是相當(dāng)可能的。保護模式的特性是阻止被其他任務(wù)或系統(tǒng)內(nèi)核破壞已經(jīng)不健全的程序的運行,保護模式也有對硬件的支持,例如中斷運行程序,移動運行進程文檔到另一個進程和置空多任務(wù)的保護功能。
386及以后系列處理器不僅具有保護模式又具有32位寄存器,結(jié)果導(dǎo)致了處理功能的混亂,因為80286雖然支持保護模式,但是它的寄存器都是16位的,它是通過自身程序設(shè)定而模擬出的32位,并非32位寄存器處理。歸咎于這種混亂現(xiàn)象,它促使Windows/386及以后的版本徹底拋棄80286的虛擬保護模式,以后保護模式的操作系統(tǒng)都是運行在80386以上,不再運行在80286(盡管80286模式支持保護模式),所以說80286是一個過渡芯片,它是一個過渡產(chǎn)品。
盡管286和386處理器能夠?qū)崿F(xiàn)保護模式和兼容以前的版本,但是內(nèi)存的1M以上空間還是不易存取,由于內(nèi)存地址的回繞,IBM PC XT(現(xiàn)以廢棄)設(shè)計一種模擬系統(tǒng),它能過欺騙手段訪問到1M以上的地址空間,就是開通了A20地址線。在保護模式里,前32個中斷為處理器異常預(yù)留,例如,中斷0D(十進制13)常規(guī)保護故障和中斷00是除數(shù)為零異常。
如果要訪問更多的內(nèi)存,則必須進入保護模式,那么,在保護模式下,A20 Gate對于內(nèi)存訪問有什么影響呢?
為了搞清楚這一點,我們先來看一看A20的工作原理。A20,從它的名字就可以看出來,其實它就是對于A20(從0開始數(shù))的特殊處理(也就是對第21根地址線的處理)。如果A20 Gate被禁止,對于80286來說,其地址為24根地址線,其地址表示為EFFFFF;對于80386極其隨后的32根地址線芯片來說,其地址表示為FFEFFFFF。這種表示的意思是:
1>如果A20 Gate被禁止。則其第A20在CPU做地址訪問的時候是無效的,永遠只能被作為0。所以,在保護模式下,如果A20 Gate被禁止,則可以訪問的內(nèi)存只能是奇數(shù)1M段,即1M,3M,5M…,也就是00000-FFFFF, 200000-2FFFFF,300000-3FFFFF…
2如果A20 Gate被打開。則其第20-bit是有效的,其值既可以是0,又可以是1。那么就可以使A20線傳遞實際的地址信號。如果A20 Gate被打開,則可以訪問的內(nèi)存則是連續(xù)的。
實模式和保護模式的區(qū)別:從表面上看,保護模式和實模式并沒有太大的區(qū)別,二者都使用了內(nèi)存段、中斷和設(shè)備驅(qū)動來處理硬件,但二者有很多不同之處。我們知道,在實模式中內(nèi)存被劃分成段,每個段的大小為64KB,而這樣的段地址可以用16位來表示。內(nèi)存段的處理是通過和段寄存器相關(guān)聯(lián)的內(nèi)部機制來處理的,這些段寄存器(CS、DS、SS和ES)的內(nèi)容形成了物理地址的一部分。具體來說,最終的物理地址是由16位的段地址和16位的段內(nèi)偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。
在保護模式下,段是通過一系列被稱之為“描述符表”的表所定義的。段寄存器存儲的是指向這些表的指針。用于定義內(nèi)存段的表有兩種:全局描述符表(GDT)和局部描述符表(LDT)。GDT是一個段描述符數(shù)組,其中包含所有應(yīng)用程序都可以使用的基本描述符。在實模式中,段長是固定的(為64KB),而在保護模式中,段長是可變的,其最大可達4GB。LDT也是段描述符的一個數(shù)組。與GDT不同,LDT是一個段,其中存放的是局部的、不需要全局共享的段描述符。每一個操作系統(tǒng)都必須定義一個GDT,而每一個正在運行的任務(wù)都會有一個相應(yīng)的LDT。每一個描述符的長度是8個字節(jié),格式如圖3所示。當(dāng)段寄存器被加載的時候,段基地址就會從相應(yīng)的表入口獲得。描述符的內(nèi)容會被存儲在一個程序員不可見的影像寄存器(shadow register)之中,以便下一次同一個段可以使用該信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址組成。實模式和保護模式的不同可以從下圖很清楚地看出來。
實模式下尋址方式
保護模式下尋址方式
PS:
計算機剛啟動的時候,CPU首先以實模式的方式工作,直到啟動操作系統(tǒng)后才會切換到保護模式下工作;
從8086到80386,雖然位數(shù)從16位擴展成了32位,但CPU的體系結(jié)構(gòu)卻發(fā)生了質(zhì)的改變。其中,尋址方式從實模式到保護模式的轉(zhuǎn)變對CPU的計算能力起到了至關(guān)重要的作用。80386的后續(xù)型號(如80486,奔騰,奔騰4等)雖然計算速度在飛速提高,但最核心的體系結(jié)構(gòu)基本上沒有多大變化。所以人們把80386及其后續(xù)型號統(tǒng)稱為“x86”或“i386”。
總結(jié)
以上是生活随笔為你收集整理的实模式和保护模式(附i386/x86的由来)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 介绍几个医学图像处理会议
- 下一篇: nature,science上关于计算机