您的位置:首页 > 编程语言

80386保护模式编程模型

2011-07-15 16:30 363 查看
一、概述
所谓的保护模式就是在此模式下,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的内存组织
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: