保護模式(Protected Mode):是一種80286系列和之后的x86兼容cpu的運行模式。保護模式有一些新特性,如內存保護、標簽頁系統及虛擬內存。現在的大多數x86操作系統都在保護模式下運行。
下面先給出保護模式下尋址的整體框架:
286CPU在保護模式下的尋址
選擇符(Selctor)
- 存放在段寄存器中
- 用于選擇某個描述符表(Descriptor Table)中的描述符(Descriptor)
格式:
選擇符
- INDEX指示描述符在描述符表中的位置。
- TI定義描述符表。置1指示描述符在當前局部描述符表LDT中,置0指示描述符在全局描述符表GDT中。
- RPL指示請求特權級0~3.
描述符(Descriptor)
- 詳細定義一個段的起始地址、界限、屬性等內容。
- 包括32位段基址、20位段界限以及12位的其他附屬標志。
- x86存儲管理硬件管理64T虛擬地址空間分段的基本單位。
- 多個描述符構成描述符表。
分類:
描述符分類
格式:
程序段描述符
- 基地址(32位):指示段基址,允許段在其4G字節存儲器的任何單元開始。
- 段界限:指示該存儲段的最大偏移地址。1MB或1MB*4K
- G:段界限長度標志。置1表示界限長度以4K為單位,段長[4K,4G].置0表示界限以字節為單位,段長[1,1M].
- D:指令模式標志。置1,32位指令模式。置0,64位指令模式。
- AV:段有效標志。置1,指示段有效。置0,指示段無效。
- P:選擇符有效指示位。置1,表示選擇符定義的段在存儲器中存在。
- DPL:設置描述符特權級0~3.0最高,3最低。一個任務可以訪問相同或低特權級的數據段,可以調用相同特權級的程序,可以經過門間接訪問更高特權級的段。
- DT:定義描述符類型。置1,表示程序段(數據或代碼段)描述符。置0,系統描述符或門描述符。
位說明
位功能組合
系統段描述符
門描述符
段描述符高速緩沖寄存器
在保護模式下,32位微處理器為每個段寄存器(CS、DS、ES、SS...)以及部分系統地址寄存器(TR、LDTR)都配備了一個描述符高速緩沖寄存器。
每當把一個選擇符裝入一個段寄存器時,微處理器自動從描述符表取出相應的描述符,裝入對應的描述符高速緩沖寄存器中,以后再對該段訪問時直接從描述符高速緩沖寄存器中取。
描述符表(Descriptor Table)
把描述符組織成線性表,叫做描述符表。
其在內存中的位置(32位)和大小(16位)由系統地址寄存器(GDTR、LDTR、IDTR)指示。
分類:
- 全局描述符表GDT
- 局部描述符表LDT
- 中斷描述符表IDT
由于描述符表界限用16為表示,故表長最大64K字節,每個描述符占8個字節,所以全局描述符表和局部描述符表最多存放8K個描述符,中斷描述符最多存放256個中斷描述符。
全局描述符表GDT
- 整個系統只有一個
- (公共的)每個任務都可能或可以訪問的段描述符
- (自己的)各個任務的TSS段描述符、LDT所在的段描述符、各種調用門、任務門描述符。
- GDTR存儲其位置
局部描述符表LDT
- 描述局部存儲器地址空間
- 每個任務都有自己獨立的局部描述符表
- 包括自己的代碼段、數據段、堆棧段描述符,以及該任務使用的門描述符。
- 位置由LDTR間接說明
中斷描述符表IDT
- 包含中斷門、陷阱門和任務門描述符
- 門描述符提供中斷服務程序的起始地址及屬性。
- 整個系統只有一個
任務狀態段
包含任務所必須的信息,如訪問某個寄存器狀態的初始值。
任務切換過程中實現任務的掛起和恢復。