保護虛地址模式下的尋址
與實地址模式相同,在保護模式下,一個存儲單元的地址也是由段基地址和段內偏移兩部分組成。段內偏移,除擴展到全地址(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中爲了可以快速尋址,對每一個段寄存器都增長了一個擴展部分,稱爲段描述符緩衝器,用於暫存當前段相對應的描述符。這時,段寄存器用於存放該段的描述符在描述符表中的索引值,又稱爲段選擇符(器)。spa
描述符與描述符表
描述符表定義了用於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)系統描述符
系統描述符定義了特殊的系統數據段和控制轉移機構。
特殊的系統數據段是指令含有局部描述符表的段和含有任務狀態的段;控制轉移機構則是指各類控制門。所以,在系統描述符描述了有關各類操做系統表、任務和門的信息。
特殊的系統數據段描述符與段描述符具備類似的結構,與段描述符相比,不一樣的僅僅是訪問權限域,它具備了不一樣的含義。
另外一類系統控制描述符爲控制轉移描述符,這類描述符一般稱爲門描述符,簡稱門。門描述符定義了一個代碼段的保護入口。有各類門描述符,包括調用門、任務 門、中斷門自陷門。這些門爲源和目標之間的控制轉移提供了一個間接方法,這種方法容許系統自動地完成保護檢查。門也使系統設計者能夠控制操做系統的入口 點。調用門用於改變特權級,任務門用於任務切換,而中斷門和自陷門用於肯定中斷服務程序。
因爲門主要用於控制轉移,因此要肯定目標程序的入口。目標程序的入口一樣是由選擇符(從描述符表中取出目標程序段的描述符)和偏移量兩部分組成。操作系統