實模式和保護模式

2021-07-04 15:16:58 字數 4478 閱讀 9470

實模式:(即實位址訪問模式)它是intel公司80286及以後的x86(80386,80486和80586等)相容處理器(cpu)的一種操作模式。實模式被特殊定義為20位位址記憶體可訪問空間上,這就意味著它的容量是2的20次冪(1m)的可訪問記憶體空間(物理記憶體和bios-rom),軟體可通過這些位址直接訪問bios程式和外圍硬體。實模式下處理器沒有硬體級的記憶體保護概念和多道任務的工作模式。但是為了向下相容,所以80286及以後的x86系列相容處理器仍然是開機啟動時工作在實模式下。80186和早期的處理器僅有一種操作模式,就是後來我們所定義的實模式。實模式雖然能訪問到1m的位址空間,但是由於bios的對映作用(即bios占用了部分空間位址資源),所以真正能使用的物理記憶體空間(記憶體條),也就是在640k到924k之間。1m位址空間組成是由16位的段位址和16位的段內偏移位址組成的。用公式表示為:實體地址=左移4位的段位址+偏移位址。

286處理器體系結構引入了位址保護模式的概念,處理器能夠對記憶體及一些其他外圍裝置做硬體級的保護設定(保護設定實質上就是遮蔽一些位址的訪問)。使用這些新的特性,然而必不可少一些額外的在80186及以預處理器沒有的操作規程。自從最初的x86微處理器規格以後,它對程式開發完全向下相容,80286晶元被製作成啟動時繼承了以前版本晶元的特性,工作在實模式下,在這種模式下實際上是關閉了新的保護功能特性,因此能使以往的軟體繼續工作在新的晶元下。直到今天,甚至最新的x86處理器都是在計算機加電啟動時都是工作在實模式下,它能執行為以預處理器晶元寫的程式.

dos作業系統(例如

ms-dos,dr-dos)工作在實模式下,微軟windows早期的版本(它本質上是執行在dos上的圖形使用者介面應用程式,實際上本身並不是乙個作業系統)也是執行在實模式下,直到windows3.0,它執行期間既有實模式又有保護模式,所以說它是一種混合模式工作。它的保護模式執行有兩種不同意義(因為80286並沒有完全地實現80386及以後的保護模式功能):

1〉「標準保護模式」:這就是程式執行在保護模式下;

2〉「虛擬保護模式(實質上還是實模式,是實模式上模擬的保護模式)」:它也使用32位位址定址方式。windows3.1徹底刪除了對實模式的支援。在80286處理器晶元以後,windows3.1成為主流作業系統(windows/80286不是主流產品)。目前差不多所有的x86系列處理器作業系統(linux,windows95 and later,os/2等)都是在啟動時進行處理器設定而進入保護模式的。

實模式工作機理:

2> 對於80286或以上的cpu通過a20 gate來控制a20位址線。 技術發展到了80286,雖然系統的位址匯流排由原來的20根發展為24根,這樣能夠訪問的記憶體可以達到2^24=16m,但是intel在設計80286時提出的目標是向下相容,所以在實模式下,系統所表現的行為應該和8086/8088所表現的完全一樣,也就是說,在實模式下,80386以及後續系列應該和8086/8088完全相容仍然使用a20位址線。所以說80286晶元存在乙個bug:它開設a20位址線。如果程式設計師訪問100000h-10ffefh之間的記憶體,系統將實際訪問這塊記憶體(沒有wrap-around技術),而不是象8086/8088一樣從0開始。我們來看一副圖:

為了解決上述相容性問題,ibm使用鍵盤控制器上剩餘的一些輸出線來管理第21根位址線(從0開始數是第20根) 的有效性,被稱為a20 gate:

1> 如果a20 gate被開啟,則當程式設計師給出100000h-10ffefh之間的位址的時候,系統將真正訪問這塊記憶體區域;

2 如果a20 gate被禁止,則當程式設計師給出100000h-10ffefh之間的位址的時候,系統仍然使用8086/8088的方式即取模方式(8086**)。絕大多數ibm pc相容機預設的a20 gate是被禁止的。現在許多新型pc上存在直接通過bios功能呼叫來控制a20 gate的功能。

上面所述的記憶體訪問模式都是實模式,在80286以及更高系列的pc中,即使a20 gate被開啟,在實模式下所能夠訪問的記憶體最大也只能為10ffefh,儘管它們的位址匯流排所能夠訪問的能力都大大超過這個限制。為了能夠訪問10ffefh以上的記憶體,則必須進入保護模式。

保護模式:經常縮寫為p-mode,在intel iapx 286程式設計師參考手冊中(iapx 286是intel 80286的另一種叫法)它又被稱作為虛擬位址保護模式。經管在intel 80286手冊中已經提出了虛位址保護模式,但實際上它只是乙個指引,真正的32位位址出現在intel 80386上。保護模式本身是80286及以後相容處理器序列之後產成的一種操作模式,它具有許多特性設計為提高系統的多道任務和系統的穩定性。例如記憶體的保護,分頁機制和硬體虛擬儲存的支援。現代多數的x86處理器作業系統都執行在保護模式下,包括linux, free bsd, 和windows 3.0(它也執行在實模式下,為了和windows 2.x應用程式相容)及以後的版本。

80286及以後的處理器另一種工作模式是實模式(僅當系統啟動的一瞬間),本著向下相容的原則遮蔽保護模式特性,從而容許老的軟體能夠執行在新的晶元上。作為乙個設計規範,所有的x86系列處理器,除嵌入式intel80387之外,都是系統啟動工作在實模式下,確保遺留下的作業系統向下相容。它們都必須被啟動程式(作業系統程式最初執行**)重新設定而相應進入保護模式的,在這之前任何的保護模式特性都是無效的。在現代計算機中,這種匹配進入保護模式是作業系統啟動時最前沿的動作之一。

在被調停的多道任務程式中,它可以從新工作在實模式下是相當可能的。保護模式的特性是阻止被其他任務或系統核心破壞已經不健全的程式的執行,保護模式也有對硬體的支援,例如中斷執行程式,移動執行程序文件到另乙個程序和置空多工的保護功能。

386及以後系列處理器不僅具有保護模式又具有32位暫存器,結果導致了處理功能的混亂,因為80286雖然支援保護模式,但是它的暫存器都是16位的,它是通過自身程式設定而模擬出的32位,並非32位暫存器處理。歸咎於這種混亂現象,它促使windows/386

及以後的版本徹底拋棄80286的虛擬保護模式,以後保護模式的作業系統都是執行在80386以上,不再執行在80286(儘管80286模式支援保護模式),所以說80286是乙個過渡晶元,它是乙個過渡產品。

儘管286和386處理器能夠實現保護模式和相容以前的版本,但是記憶體的1m以上空間還是不易訪問,由於記憶體位址的迴繞,ibm pc xt (現以廢棄)設計一種模擬系統,它能過欺騙手段訪問到1m以上的位址空間,就是開通了a20位址線。在保護模式裡,前32個中斷為處理器異常預留,例如,中斷0d(十進位制13)常規保護故障和中斷00是除數為零異常。

如果要訪問更多的記憶體,則必須進入保護模式,那麼,在保護模式下,a20 gate對於記憶體訪問有什麼影響呢?

為了搞清楚這一點,我們先來看一看a20的工作原理。a20,從它的名字就可以看出來,其實它就是對於a20(從0開始數)的特殊處理(也就是對第21根位址線的處理)。如果a20 gate被禁止,對於80286來說,其位址為24根位址線,其位址表示為efffff;對於80386極其隨後的32根位址線晶元來說,其位址表示為ffefffff。這種表示的意思是:

1>如果a20 gate被禁止。則其第a20在cpu做位址訪問的時候是無效的,永遠只能被作為0。所以,在保護模式下,如果a20 gate被禁止,則可以訪問的記憶體只能是奇數1m段,即1m,3m,5m…,也就是00000-fffff, 200000-2fffff,300000-3fffff…

2如果a20 gate被開啟。則其第20-bit是有效的,其值既可以是0,又可以是1。那麼就可以使a20線傳遞實際的位址訊號。如果a20 gate被開啟,則可以訪問的記憶體則是連續的。

實模式和保護模式的區別:從表面上看,保護模式和實模式並沒有太大的區別,二者都使用了記憶體段、中斷和裝置驅動來處理硬體,但二者有很多不同之處。我們知道,在實模式中記憶體被劃分成段,每個段的大小為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位的偏移加上影像暫存器中的基址組成。實模式和保護模式的不同可以從下圖很清楚地看出來。

實模式下定址方式

保護模式下定址方式

實模式和保護模式

無法支援多工 程式設計師多個程式可能指定執行的實體地址一樣 程式的安全性無法得到保證 使用者程式可以改寫系統空間或者其他使用者的程式內容 實模式將整個物理記憶體看成分段的區域,程式 和使用者程式沒有區別對待,而且每乙個指標都是指向 實在 的實體地址。這樣一來,使用者程式的乙個指標如果指向了系統程式區...

實模式和保護模式

從80386開始,cpu有三種工作模式 實模式 保護模式和虛擬8086模式。80286開始的cpu引入保護模式,實際上,實模式概念是在保護模式推出之後為了區別保護模式之前的8086cpu工作模式才有的,在8086時代cpu工作模式只有一種,自然沒有實模式之說。實模式有著先天的缺陷 下文詳述 但出於向...

實模式與保護模式

實模式與保護模式 1.實模式,又叫實位址模式,cpu完全按照8086的實際定址方法訪問從00000h fffffh 1mb大小 的位址範圍的記憶體,在這種模式下,cpu只能做單任務執行 定址公式為 實體地址 左移4位的段位址 偏移位址,即 實體地址是由16位的段位址和16位的段內偏移位址組成的。2....