一、概述
所謂的保護模式就是在此模式下,CPU利用對虛擬地址的支持爲系統資源(內存,I/O等)提供不同的權限級別,操作系統和用戶程序的權限不同,所能訪問的資源也不同,同時虛擬地址也進程資源共享,進程管理提供了有力支持。
二、保護模式下的段機制
2.1、段尋址
保護模式下的段機制和實模式下是大相徑庭的,在保護模式下,虛擬地址也以段來管理,舉例如下:
mov eax fs:[12345678h]的含義是尋址fs對應的段的偏移量爲12345678h的雙字,其實這裏的fs寄存器裏的值並不是實模式下的段基址的意義,而是一個段描述符表中的索引值和其他信息,稱作段選擇子,段選擇子結構見下圖:
* INDEX,尋址段描述符在段描述表中的索引
* TI=0,表示段描述符在全局描述符表中,1表示在局部描述附表中
* RPL,表示此段的權限,當此段爲代碼段時,RPL就是CPL,值越小權限越大(操作系統內核0級,操作系統其他部分1級,中間層2級,用戶程序3級)
* 描述符的查找有高速緩衝支持。
2.2、段描述
段描述表分爲全局描述附表GDT(描述操作系統等全局共享的段)和局部描述符表LDT(任務私有的段),描述符表中的每一項都佔用8個字節,描述符表中佔用的段分爲3中,系統段,存儲段及門。
◆ 系統段和存儲段有着相同的描述結構,見下圖:
* 如上圖所示,段基址和段界限以及粒度(G)設定了段的起始地址,大小,當G=1時表示粒度爲4KB,段的大小可以是4GB,段基址用32位表示是沒有粒度要求的。
* DT=1時表示此段是存儲段,是程序可以直接訪問的段,DT=0是表示此段是操作系統維護的段。
* DPL表示段的訪問權限
* P=1時表示此段無效
* AVL,Intel未規定,軟件可利用
* D在存儲段的情況下,又分爲如下3中情況(此位在系統段中不使用):
** 當此段是可執行段時,D=1標誌指令默認工作在32位模式,否則工作在16位模式。
** 當此段是向下擴展段時,D=1表示段的上部邊界爲4GB,否則爲64K。
** 當此段是SS指向的段時(堆棧段),D=1表示PUSH,POP工作在32位模式,否則工作在16位模式。
*TYPE
**存儲段的訪問屬性,見下圖。
**系統段和門的屬性見下圖:
◆ 門段的結構圖如下所示:
2.3、段訪問
◆ 控制寄存器如下圖所示:
* CRO
PG=0,PE=0時,實模式
PG=0,PE=1時,保護模式,無分頁機制(虛擬地址直接對應物理地址)
PG=1,PE=0時,非法
PG=1,PE=1時,保護模式,啓用分頁機制
* CR1 保留
* CR2 頁故障線性地址
* CR3 的高20位是也目錄表起始地址,低20位爲0。
GDTR保存全局描述符表的起始地址和界限,粒度爲字節。
IDTR保存中斷描述符秒的起始地址和界限,粒度爲字節
LDTR保存局部描述符表在GDT中的段選擇子,有高速緩衝支持。
TR保存任務狀態段在GDT中的段選擇子,有高速緩衝支持。
三、保護模式下的頁機制
參見本博客的80x86的內存組織