1. 程式人生 > 其它 >CPU--真實模式與保護模式

CPU--真實模式與保護模式

一、真實模式(實地址訪問模式)

 是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位的段地址+偏移地址。

 

二、保護模式(虛擬地址保護模式)

 保護模式本身是80286及以後相容處理器序列之後產成的一種操作模式,它具有許多特性設計為提高系統的多道任務和系統的穩定性。例如記憶體的保護,分頁機制和硬體虛擬儲存的支援。

 現代多數的x86處理器作業系統都執行在保護模式下,只有在開機時是真實模式

 在保護模式下,全部32條地址線有效,可定址高達4G位元組的實體地址空間(32位處理器,64位可定址264TB),擴充的儲存器分段管理機制和可選的儲存器分頁管理機制,不僅為儲存器共享和保護提供了硬體支援,而且為實現虛擬儲存器提供了硬體支援。

 支援多工,能夠快速地進行任務切換和保護任務環境。4個特權級和完善的特權檢查機制,既能實現資源共享又能保證程式碼和資料的安全和保密及任務的隔離;支援虛擬8086方式,便於執行8086程式

 

三、區別

 在真實模式中記憶體被劃分成段,每個段的大小為64KB,而這樣的段地址可以用16位來表示。記憶體段的處理是通過和段暫存器相關聯的內部機制來處理的,這些段暫存器(CS、DS、 SS和ES)的內容形成了實體地址的一部分。

 具體來說,最終的實體地址是由16位的段地址和16位的段內偏移地址組成的。用公式表示為:實體地址=左移4位的段地址+偏移地址。

 

 在保護模式下,段是通過一系列被稱之為“描述符表”的表所定義的。段暫存器儲存的是指向這些表的指標。用於定義記憶體段的表有兩種:全域性描述符表(GDT) 和區域性描述符表(LDT)。

 GDT是一個段描述符陣列,其中包含所有應用程式都可以使用的基本描述符。LDT也是段描述符的一個數組,是一個段,其中存放的是區域性的、不需要全域性共享的段描述符。

 每一個作業系統都必須定義一個GDT,而每一個正在執行的任務都會有一個相應的LDT。每一個描述符的長度是8個位元組,當段暫存器被載入的時候,段基地址就會從相應的表入口獲得。

 描述符的內容會被儲存在一個程式設計師不可見的影像暫存器(shadow register)之中,以便下一次同一個段可以使用該資訊而不用每次都到表中提取。

 實體地址由偏移量加上影像暫存器中的基址組成。