80386保護模式編程模型

一、概述

所謂的保護模式就是在此模式下,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的內存組織

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章