80x86的保護虛位址模式

2021-04-12 13:44:42 字數 2910 閱讀 1749

在保護模式下,80x86支援虛擬儲存器的功能,乙個任務可執行多達16kb個段,每個段最大可為4gb,故乙個任務最大可達64t的虛擬位址。保護模式下執行的程式分為4個特權等級:0、1、2、3,作業系統核心執行在最高特權等級0;使用者程式執行在最低特權等級3。

80x86中有完善的特權檢查機制,既能實現資源共享,又能保證程式和資料的安全和保密、任務之間的隔離。

保護虛位址模式下的定址

與實位址模式相同,在保護模式下,乙個儲存單元的位址也是由段基位址和段內偏移兩部分組成。段內偏移,除擴充套件到全位址(32位)外,與實位址方式下區別不大。這兩種定址方式的根本區別在於如何確定段基位址。

實位址模式下,段暫存器的內容×16(即左移4位)就形成段基位址,故段基位址是20位的,只能定址1mb。

在保護模式下,段基位址是32位的,所以不能由段暫存器的內容直接形成32位的段基位址,而要經過轉換。

80x86中,記憶體中有乙個表,每個表項包含32位的段基位址。為了適應多使用者、多工作業系統的需要,乙個段還要有一些其他資訊,例如,段的大小和讀寫許可權、段的型別等。乙個段用乙個8位元組的描述符來描述,這些描述符構成了乙個表項,稱為段描述符表。

段描述符中的段基位址加上32位的段內偏移量就可以定址乙個儲存單元。段基位址(32位)和段內偏移(32位)形成的位址稱為線性位址(32位)。

在80x86處理器內有分頁的mmu,當啟用頁機制時(cr0最高位pg=1),經過分頁機制可以把執行緒位址轉換為儲存器的實體地址;當不啟用分頁機制時(cr0的pg=0),執行緒位址即為記憶體的實體地址。保護方式下的段內偏移量為32 位,故乙個段最大可達4gb。

在80x86中為了能夠快速定址,對每個段暫存器都增加了乙個擴充套件部分,稱為段描述符緩衝器,用於暫存當前段相對應的描述符。這時,段暫存器用於存放該段的描述符在描述符表中的索引值,又稱為段選擇符(器)。

描述符與描述符表

描述符表定義了用於80x86系統的所有的段。80x86共有3種型別的描述符表,分別是全域性描述符表gdt、區域性描述符表ldt和中斷描述符表idt。gdt和idt只有乙個,ldt可以有若干個,每個任務乙個。

最多可以有8k(8192=2^13)個描述符。每個描述符描述乙個段,包括段的基址、界限和其他特性。

(1) 全域性描述符表gdt

gdt含有系統中每乙個任務都可以訪問的段描述符,一般包括系統使用的**段、資料段和堆疊段、各任務狀態段、系統中所有的區域性描述符表的描述符等。

(2) 區域性描述符表ldt

區域性描述符表包含了乙個任務的專用描述符。作業系統為每個任務建立乙個ldt。ldt可以包含**段、資料段、堆疊段、任務門和呼叫門。

從每個任務的虛擬位址空間來看,整個虛擬位址空間可以分成兩半,一半空間的描述符在全域性描述符表中,另一半空間的描述符在區域性描述符表中。每乙個表都可以包含多達8192個描述符(即對應的空間可由8192個段組成),每個段最大可為4gb。故每個任務最大的虛擬位址空間可為:2×8192×4gb=64tb

(3) 中斷描述符表idt

中斷描述符表包含了最多256個描述符,每個描述符包含乙個中斷服務程式的入口位址和屬性。idt中可以包含任務門、中斷門和自陷門。

在系統中,每個描述符表都有乙個與之對應的暫存器,它們分別是全域性描述符表暫存器gdtr、區域性描述符表暫存器ldtr和中斷描述符表暫存器idtr。

gdtr與idtr暫存器存放全域性描述符表與中斷描述符表的基址和界限。

16位ldtr暫存器存放當前任務段的區域性描述符表對應的描述符在全域性描述符表中的索引值(ldt選擇符),根據索引值,自動將該任務的區域性描述符表的描述符裝入程式不可見的高速緩衝器。

(4) 描述符

描述符有兩大類:一類是段描述符,另一類是系統描述符。

1) 段描述符

段描述符的各個域是:

(a) 段界限(20);

(b) 段的基位址(32位);

(c) 訪問許可權(8位)。

其中g位用於段限制域所用的單位:當g位為0時,表示段限制單位為位元組;當g位為1時,段限制單位為頁(4kb)。

以上內容分散在描述符的不同位元組中,這種不規整的安排完全是為了與286相容。

2)系統描述符

系統描述符定義了特殊的系統資料段和控制轉移機構。

特殊的系統資料段是指令含有區域性描述符表的段和含有任務狀態的段;控制轉移機構則是指各種控制門。因此,在系統描述符描述了有關各種作業系統表、任務和門的資訊。

特殊的系統資料段描述符與段描述符具有相似的結構,與段描述符相比,不同的僅僅是訪問許可權域,它具有了不同的含義。

另一類系統控制描述符為控制轉移描述符,這類描述符通常稱為門描述符,簡稱門。門描述符定義了乙個**段的保護入口。有各種門描述符,包括呼叫門、任務門、中斷門自陷門。這些門為源和目標之間的控制轉移提供了乙個間接方法,這種方法允許系統自動地完成保護檢查。門也使系統設計者可以控制作業系統的入口點。呼叫門用於改變特權級,任務門用於任務切換,而中斷門和自陷門用於確定中斷服務程式。

由於門主要用於控制轉移,所以要確定目標程式的入口。目標程式的入口同樣是由選擇符(從描述符表中取出目標程式段的描述符)和偏移量兩部分組成。

保護虛位址方式下的儲存器定址

在保護虛位址方式下,各個段暫存器中的內容,不再是段基位址,而是乙個用於從全域性描述符表gdt或區域性描述符表ldt中檢索該段相應描述符的段選擇符。最低兩位為請求特權級rpl(requested privilege level),用於段訪問時的保護目的。從硬體角度看,ds、es、fs 或gs暫存器的rpl必須小於或等於被選擇的描述符的dpl。而對於ss選擇器,兩者必須相等。實際上intel高速的連線於構造軟體總是使rpl與相應的dpl相等。

第2位ti指示從哪個描述符表中去讀取描述符。ti=0,指示從gdt中讀取描述符;ti=1,指示從ldt中讀取描述符。剩下的13位即為此段描述符在描述符表中的索引,2^13=8192,故可區分8192個描述符。

每當乙個選擇符被裝載入乙個段暫存器時,80x86的硬體自動從描述符表中取出相應的描述符,載入至相應的高速緩衝暫存器中。一旦裝入,此後對此段的訪問都使用此高速緩衝暫存器中的描述符資訊,而不用再去取描述符,直至對段暫存器重新裝載。

80x86的保護虛位址模式

在保護模式下,80x86支援虛擬儲存器的功能,乙個任務可執行多達16kb個段,每個段最大可為4gb,故乙個任務最大可達64t的虛擬位址。保護模式下執行的程式分為4個特權等級 0 1 2 3,作業系統核心執行在最高特權等級0 使用者程式執行在最低特權等級3。80x86中有完善的特權檢查機制,既能實現資...

80X86 保護模式

保護模式定義 保護 用硬體對每個任務使用的記憶體空間進行保護,阻 止其他任務的非法訪問。特點如下 a 採用虛擬儲存管理,啟用分段和分頁機制。允許關閉分頁機制 b 段內偏移位址 32位,每個段最大232 b 4gb 每個程式最多可以使用 16k個段,理論上的虛擬位址空間為 4gb 16k 64tb c...

80x86保護模式

請教 1 何為實位址方式?2 何為保護方式?3 二者的區別是什麼?能否詳細 4 什麼是虛擬位址?5 什麼是對映?6 何為浮點數?回答 如果你想詳細地搞清以上問題,建議你去閱讀有關386 486或pentium彙編的書 8086 8088的彙編的書一般沒有保護方式 虛擬位址 浮點數等概念 一般都會有專...