保护模式知识(三)

原创 2003年02月19日 10:31:00

描述符
 前面已经提到,描述符是描述一个段的大小,地址及各种状态的8个字节的结构,在编程时它可以定义它.
 如图2所示,根据描述符所描述对象的不同,描述符可分为存储段描述符、系统段描述符、门描述符三种,而门描述符又可分为调用门、任务门、中断门和陷阱门四类。下面将分别介绍各描述符作用及其各位的意义:
 一、存储段描述符
 存储段描述符是描述程序中的代码段和数据段的,这其中也包括堆栈段,在保护模式下,应该把堆栈段理解为特殊的数据段。
 分析存储段描述符时应该把它分成4个域来理解:
第一个域为描述符的第0至1字节,该字是段界线的低16位,段界线是描述段的大小共20位,高4位在第六字节的低4位中;第二个域为描述符的第2至4字节,这三个字节是段基址的低24位;第三个域是描述符的第5、6字节,该字存放的是段的一些属性;第四个域是最后一个字节,该字节存放的是段基址的高8位。下面对属性字的每一位进行描述:
 如图2所示:
 P位说明所描述的段是否存在,P=1表示描述符所描述的段存在于内存中,P=0表示描述符所描述的段不在内存中。
 DPL为描述符所描述段的特权级,只有有效特权级EPL大于等于DPL时,才能对段进行访问。
 DT位必有为1以区别于系统段描述符。
 TYPE字段:
 位0表示被描述的段是否被访问过,该位为0表示未被访问过,为1则表示该段先前已经被访问过。
 位1的定义在于描述符所描述段的类型。当所描述的是代码段时,该位指示所描述的代码段是否可读,为1则可读,为0则不可读;当所描述的是数据段时,该位指示所描述的数据段是否可写,为1则可写,为0则不可写。
 位2的定义也在于描述符所描述段的类型。当所描述的是代码段时,该位指示所描述的代码段是否是一至代码段,为1表示该代码段是一至代码段,为0表示该代码段不是一至代码段,即是普通的代码段。当所描述的是数据段时,该位指示该段的扩展方向,为1时表示该段向低地址扩展,为0时表示该段向高地址扩展。
 位3指示所描述的段类型,为1表示所描述的段是代码段,是可以被执行的,为0表示所描述的段是数据段,是不能被执行的。前面已经说了,在保护模式下应该把堆栈段理解为特殊的数据段,为0时也包括堆栈段。
 G位表示段界限的计数单位,该位为0时表示段界限以字节为单位,为1时表示以4K为单位。这样计算下来,20位的段界限就可以描述大小为64K或4G的段了,
 D位说明描述符所描述的段是32位环境还是16位的环境。该决定了指令所使用的操作数以及地址的默认大小,为1时说明是32位地址和32位操作数,即32位段;为0时说明是16位地址和16位操作数,即是16位段。但这时仍可使用操作数及地址大小前缀来改变这种默认设置。该位还决定了系统是使用IP还是EIP,使用SP还是ESP,
 二、系统段描述符
 系统段描述符是描述两个特殊的段,它们分别为局部描述符表LDT段和任务状态段TSS。
 从图2中可见,系统段描述符与存储段描述符的区别只在于DT位,DT=1则为存储段描述符,DT=0则为系统段描述符,两种描述符就靠此位区分.但系统段描述符的TYPE字段与存储段描述符的TYPE却截然不同.描述如下:
 TYPE字段:
 0、1两位的定义取决于位2。当位2为1时,说明是门描述符,为0时说明是非门描述符。当位2为1时,0、1两位确定门描述符的类型,因为两位可有4种状态,所以正好描述4个描述符,为0时则是调用门,为1时则是任务门,为2时则是中断门,为3时则是陷阱门;当位2为0时,低两位0位、1位为0时未定义,为1时则是可用的286的TSS,为2时则是LDT,为3时则是忙的286的TSS。
 位4为0时,如其它位也为0或低两位为2或3时则也是未定义,否则该位提示是386还是286描述符,关于段基地址和段界限为何都安排在两个分开的域中的原因也与此有关,请读者自己想想!
 三、门描述符
 从系统段描述符的说明中可以看出门描述符是靠TYPE字段与系统段描述符区分的,但从图2中可见门描述符却与系统段描述符在结构上也不一至,其实这才是区分二者关键。门描述符的第四字节的低4位为双字计数字段,该字段是说是在发生特权级变换时,把外层堆栈中的参数拷贝到内层堆栈中的数量,计数以双字为单位。关于特权级变换请参阅《保护模式下的特权级检查》一文.
 

 


        (待续)
 
 
 
 

浅谈数据库三大模式

浅谈数据库三大模式1、外模式对应数据库的升级、外模式包括(子模式 用户模式) 用来描述用户看到或者使用那部分的数据的逻辑结构,用户根据外模式用户数据操作语句或者程序去操作数据库中的数据,外模式的主要特...
  • qq_15950325
  • qq_15950325
  • 2016年09月24日 23:38
  • 1458

【Oracle】DG三种保护模式及切换方式

一、三种保护方式 Required Redo Transport Attributes for Data Protection Modes Maximum Availability Max...
  • NextAction
  • NextAction
  • 2017年01月07日 15:07
  • 3152

DG保护模式--3种

三种:最大保护、最大性能、最高可用。 1.最大保护: 如果主数据库失败,这个保护模式可以保证没有任何数据丢失。事务在完成提交之前,事务恢复需要的redo数据必须写到主数据库的联机redo日...
  • ghostliming
  • ghostliming
  • 2016年02月11日 20:56
  • 1970

前端高质量知识(五)-JS详细图解全方位解读this

~ 我们在学习JavaScript的过程中,由于对一些概念理解得不是很清楚,但是又想要通过一些方式把它记下来,于是就很容易草率的给这些概念定下一些方便自己记忆的有偏差的结论。 危害比较...
  • pingfan592
  • pingfan592
  • 2017年03月03日 11:01
  • 400

word2vec 中的数学原理详解(三)背景知识

word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单、高效,因此引起了很多人的关注。由于 word2vec 的作者 Tomas Miko...
  • peghoty
  • peghoty
  • 2014年07月19日 22:49
  • 54125

保护模式——从分段到分页

保护模式——从分段到分页    其实很早以前就想写这个关于分页模式的了,可是自己还是有点东西没弄的太明白,今天也是终于写出来了,关于上一篇讲分段机制的,一博友还夸了我一下,另我有点...
  • haiross
  • haiross
  • 2016年03月28日 09:58
  • 896

进入保护模式总结

1.最主要的就是那个jmp dword,一切都是为了Jmp做准备 2.int 13h读取扇区,既可以读硬盘,又可以读软盘,应该是两个的驱动器号不同(这个还没搞清楚,现在只会读软盘)。用硬盘映像的时候...
  • A1157599735
  • A1157599735
  • 2012年10月01日 15:21
  • 780

进入保护模式(三)

(十)保护模式下的栈 76 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 77 mov cx,00000000000_11_000B ...
  • bfboys
  • bfboys
  • 2016年09月01日 09:38
  • 632

保护模式下寻址

 保护模式下寻址 刺猬@http://blog.csdn.net/littlehedgehog 网上看到的一强帖,不转不行了,牛人啊,把这段代码拿捏的相当到位 括号中是我的加注 段机制轻松体验[内存寻...
  • littlehedgehog
  • littlehedgehog
  • 2008年02月13日 10:18
  • 8973

保护模式下的内存访问

保护模式下的内存访问模式、方法,而这个保护模式下的内存访问模式在实模式与保护模式已经介绍过是什么,这次来具体点看...
  • name_z
  • name_z
  • 2015年08月09日 16:33
  • 775
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:保护模式知识(三)
举报原因:
原因补充:

(最多只允许输入30个字)