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的内存组织

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