實模式、保護模式與虛擬8086模式

來源:互聯網
上載者:User

學習嵌入式的時候想到開發板上系統的啟動過程,由此想到了windows系統的啟動過程,找資料查看啟動過程的時候,資料裡面說boot sector運行在實模式下,然後Ntldr運行在保護模式下,突然發現自己對這兩種模式忘的差不多了,於是找了些資料看。

 

80386處理器有3種工作模式:實模式、保護模式和虛擬86模式。實模式和虛擬86模式是為了和8086處理器相容而設定的。在實模式
下,80386處理器就相當於一個快速的8086處理器。保護模式是80386處理器的主要工作模式。在此方式下,80386可以定址4  
GB的地址空間,同時,保護模式提供了80386先進的多任務、記憶體分頁管理和優先順序保護等機制。為了在保護模式下繼續提供和8086處理器的兼
容,80386又設計了一種虛擬86模式,以便可以在保護模式的多任務條件下,有的任務運行32位程式,有的任務運行MS-DOS程式。在虛擬86模式
下,同樣支援任務切換、記憶體分頁管理和優先順序,但記憶體的定址方式和8086相同,也是可以定址1   MB的空間。

由此可
見,80386處理器的3種工作模式各有特點且相互聯絡。實模式是80386處理器工作的基礎,這時80386當做一個快速的8086處理器工作。在實模
式下可以通過指令切換到保護模式,也可以從保護模式退回到實模式。虛擬86模式則以保護模式為基礎,在保護模式和虛擬86模式之間可以互相切換,但不能從
實模式直接進入虛擬86模式或從虛擬86模式直接退到實模式。

1.   實模式

80386處理器被複位或加電的時候
以實模式啟動。這時候處理器中的各寄存器以實模式的初始化值工作。80386處理器在實模式下的儲存空間定址方式和8086是一樣的,由段寄存器的內容乘以
16當做基地址,加上段內的位移地址形成最終的物理地址,這時候它的32位地址線只使用了低20位。在實模式下,80386處理器不能對記憶體進行分頁管
理,所以指令定址的地址就是記憶體中實際的物理地址。在實模式下,所有的段都是可以讀、寫和執行的。

實模式下80386不支援優先順序,所
有的指令相當於工作在特權級(優先順序0),所以它可以執行所有特權指令,包括讀寫控制寄存器CR0等。實際上,80386就是通過在實模式下初始化控制寄
存器,GDTR,LDTR,IDTR與TR等管理寄存器以及頁表,然後再通過載入CR0使其中的保護模式使能位置位而進入保護模式的。實模式下不支援硬體
上的多任務切換。

實模式下的中斷處理方式和8086處理器相同,也用中斷向量表來定位中斷服務程式地址。中斷向量表的結構也和8086處理器一樣,每4個位元組組成一個中斷向量,其中包括兩個位元組的段地址和兩個位元組的位移地址。


編程的角度看,除了可以訪問80386新增的一些寄存器外,實模式的80386處理器和8086有什麼進步呢?其實最大的好處是可以使用80386的32
位寄存器,用32位的寄存器進行編程可以使計算程式更加簡捷,加快了執行速度。比如在8086時代用16位寄存器來完成32位的乘法和除法時,要進行的步
驟實在是太多了,於是考試時出這一類的題目就成了老師們的最愛,所以那時候當學生做夢都想著讓寄存器的位元快快長,現在夢想終於成真了,用32位寄存器一
條指令就可以完成(問題是老師們也發現了這個投機取巧的辦法,為了達到讓學生們基礎紮實的目的,也把題目換成了64位的乘法和除法,所以現在晚上做的夢換
成了寄存器忽然長到了64位);其次,80386中增加的兩個輔助段寄存器FS和GS在實模式下也可以使用,這樣,同時可以訪問的段達到了6個而不必考慮
重新裝入的問題;最後,很多80386的新增指令也使一些原來不很方便的操作得以簡化,如80386中可以使用下述指令進行數組訪問:

        mov   cx,[eax   +   ebx   *   2   +   數組基地址]


相當於把數組中下標為eax和ebx的項目放入cx中;ebx   *  
2中的2可以是1,2,4或8,這樣就可以支援8位到64位的數組。而在8086處理器中,實現相同的功能要進行一次乘法和兩次加法。另外,pushad
和popad指令可以一次把所有8個通用寄存器的值壓入或從堆棧中彈出,比起用下面的指令分別將8個寄存器入棧要快了很多:

        push         eax

        push         ebx

        ...

        pop   ebx

        pop   eax

當然,使用了這些新指令的程式是無法拿回到8086處理器上去執行的,因為這些指令的編碼在8086處理器上是未定義的。

2.   保護模式


80386工作在保護模式下的時候,它的所有功能都是可用的。這時80386所有的32根地址線都可供定址,物理定址空間高達4  
GB。在保護模式下,支援記憶體分頁機制,提供了對虛擬記憶體的良好支援。雖然與8086可定址的1  
MB物理地址空間相比,80386可定址的物理地址空間可謂很大,但實際的微機系統不可能安裝如此大的實體記憶體。所以,為了運行大型程式和真正實現多任
務,虛擬記憶體是一種必需的技術。

保護模式下80386支援多任務,可以依靠硬體僅在一條指令中實現任務切換。任務環境的保護工作是由處
理器自動完成的。在保護模式下,80386處理器還支援優先順序機制,不同的程式可以運行在不同的優先順序上。優先順序一共分0~3  
4個層級,作業系統運行在最高的優先順序0上,應用程式則運行在比較低的層級上;配合良好的檢查機制後,既可以在任務間實現資料的安全共用也可以很好地隔離
各個任務。從實模式切換到保護模式是通過修改控制寄存器CR0的控制位PE(位0)來實現的。在這之前還需要建立保護模式必需的一些資料表,如全域描述符
表GDT和中斷描述符表IDT等。

DOS作業系統運行於實模式下,而Windows作業系統運行於保護模式下。

3.   虛擬86模式


擬86模式是為了在保護模式下執行8086程式而設定的。雖然80386處理器已經提供了實模式來相容8086程式,但這時8086程式實際上只是運行得
快了一點,對CPU的資源還是獨佔的。在保護模式的多任務環境下運行這些程式時,它們中的很多指令和保護模式環境格格不入,如段定址方式、對中斷的處理和
I/O操作的特權問題等。為了在保護模式下工作而丟棄這些程式的代價是巨大的。設想一下,如果Windows或80386處理器推出的時候宣布不能運行以
前的MS-DOS程式,那麼就等於放棄了一個巨大的軟體庫,Windows以及80386處理器可能就會落得和蘋果機一樣的下場,這是Microsoft
和Intel都不願看到的。所以,80386處理器又設計了一個虛擬86模式。

虛擬86模式是以任務形式在保護模式上執行的,在
80386上可以同時支援由多個真正的80386任務和虛擬86模式構成的任務。在虛擬86模式下,80386支援任務切換和記憶體分頁。在Windows
作業系統中,有一部分程式專門用來管理虛擬86模式的任務,稱為虛擬86管理程式。

既然虛擬86模式以保護模式為基礎,它的工作方式實
際上是實模式和保護模式的混合。為了和8086程式的定址方式相容,虛擬86模式採用和8086一樣的定址方式,即用段寄存器乘以16當做基址再配合位移
地址形成線性地址,定址空間為1   MB。但顯然多個虛擬86任務不能同時使用同一位置的1  
MB地址空間,否則會引起衝突。作業系統利用分頁機制將不同虛擬86任務的地址空間映射到不同的物理地址上去,這樣每個虛擬86任務看起來都認為自己在使
用0~1   MB的地址空間。

8086代碼中有相當一部分指令在保護模式下屬於特權指令,如屏蔽中斷的cli和中斷返回指令iret
等。這些指令在8086程式中是合法的。如果不讓這些指令執行,8086代碼就無法工作。為瞭解決這個問題,虛擬86管理程式採用類比的方法來完成這些指
令。這些特權指令執行的時候引起了保護異常。虛擬86管理程式在例外處理常式中檢查產生異常的指令,如果是中斷指令,則從虛擬86任務的中斷向量表中取出
中斷處理常式的入口地址,並將控制轉移過去;如果是危及作業系統的指令,如cli等,則簡單地忽略這些指令,在例外處理常式返回的時候直接返回到下一條指
令。通過這些措施,8086程式既可以正常地運行下去,在執行這些指令的時候又覺察不到已經被虛擬86管理程式做了手腳。MS-DOS應用程式在    
Windows作業系統中就是這樣工作的。

——————————————————————————————————————————————————

什麼是保護模式
自從1969年推出第一個微處理器以來,Intel處理器就在不斷地更新換代,從8086、8088、80286,到
80386、80486、奔騰、奔騰Ⅱ、奔騰4等,其體繫結構也在不斷變化。80386以後,提供了一些新的功能,彌補了8086的一些缺陷。這其中包括
記憶體保護、多任務及使用640KB以上的記憶體等,並仍然保持和8086家族的相容性。也就是說80386仍然具備了8086和80286的所有功能,但是
在功能上有了很大的增強。早期的處理器是工作在實模式之下的,80286以後引入了保護模式,而在80386以後保護模式又進行了很大的改進。在
80386中,保護模式為程式員提供了更好的保護,提供了更多的記憶體。事實上,保護模式的目的不是為了保護程式,而是要保護程式以外的所有程式(包括操作
系統)。
簡言之,保護模式是處理器的一種最自然的模式。在這種模式下,處理器的所有指令及體繫結構的所有特色都是可用的,並且能夠達到最高的效能。
保護模式和實模式

表面上看,保護模式和實模式並沒有太大的區別,二者都使用了記憶體段、中斷和裝置驅動來處理硬體,但二者有很多不同之處。我們知道,在實模式中記憶體被劃分成
段,每個段的大小為64KB,而這樣的段地址可以用16位來表示。記憶體段的處理是通過和段寄存器相關聯的內部機制來處理的,這些段寄存器(CS、DS、
SS和ES)的內容形成了物理地址的一部分。具體來說,最終的物理地址是由16位的段地址和16位的段內位移地址組成的。用公式表示為:
物理地址=左移4位的段地址+位移地址。

保護模式下,段是通過一系列被稱之為"描述符表"的表所定義的。段寄存器儲存的是指向這些表的指標。用於定義記憶體段的表有兩種:通用描述元表(GDT)和
局部描述符表(LDT)。GDT是一個段描述符數組,其中包含所有應用程式都可以使用的基本描述符。在實模式中,段長是固定的(為64KB),而在保護模
式中,段長是可變的,其最大可達4GB。LDT也是段描述符的一個數組。與GDT不同,LDT是一個段,其中存放的是局部的、不需要全域共用的段描述符。
每一個作業系統都必須定義一個GDT,而每一個正在啟動並執行任務都會有一個相應的LDT。每一個描述符的長度是8個位元組,格式3所示。當段寄存器被載入
的時候,段基地址就會從相應的表入口獲得。描述符的內容會被儲存在一個程式員不可見的影像寄存器(shadow
register)之中,以便下一次同一個段可以使用該資訊而不用每次都到表中提取。物理地址由16位或者32位的位移加上影像寄存器中的基址組成。實模
式和保護模式的不同可以從圖1和圖2中很清楚地看出來。
此外,還有一個中斷描述符表(IDT)。這些中斷描述符會告訴處理器到那裡可以找到中斷處理常式。和實模式一樣,每一個中斷都有一個入口,但是這些入口的格式卻完全不同。因為在切換到保護模式的過程中沒有使用到IDT,所以在此就不多做介紹了。
進入保護模式
80386
有4個32位控制寄存器,名字分別為CR0、CR1、CR2和CR3。CR1是保留在未來處理器中使用的,在80386中沒有定義。CR0包含系統的控制
標誌,用於控制處理器的操作模式和狀態。CR2和CR3是用於控制分頁機制的。在此,我們關注的是CR0寄存器的PE位控制,它負責實模式和保護模式之間
的切換。當PE=1時,說明處理器運行於保護模式之下,其採用的段機制和前面所述的相應內容對應。如果PE=0,那麼處理器就工作在實模式之下。
切換到保護模式,實際就是把PE位置為1。為了把系統切換到保護模式,還要做一些其它的事情。程式必須要對系統的段寄存器和控制寄存器進行初始化。把PE位置1後,還要執行跳轉指令。過程簡述如下:
1.建立GDT表;
2.通過置PE位為1進入保護模式;
3.執行跳轉以清除在實模式下讀取的任何指令。
實模式下,cpu指令訪問的地址就是物理地址,形式為:段寄存器:位移
在保護模式下,cpu可以使用分段機制和分頁機制。
分段機制下使用的地址就是邏輯地址,形式為:段選擇子:位移
分頁機制下使用的地址就是線性地址,形式為:0xXXXXXXXX
無論是邏輯地址還是線性地址,都要被cpu映射成物理地址。
保護模式下必須採用分段機制。在此基礎上可採用分頁機制。
邏輯地址被轉化為線性地址,如果採用分頁機制,則該線性地址通過分頁機制被映射成物理地址。如果不採用分頁機制,則該線性地址就是物理地址。
實模式下的物理地址只能訪問1M以下空間,而保護模式下的物理地址可以訪問所有32位空間。並且要注意,實體記憶體空間只是物理地址空間的一個部分而已。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.