欢迎来到天天文库
浏览记录
ID:41955887
大小:65.50 KB
页数:5页
时间:2019-09-05
《存储段描述符》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、存储段描述符作者:天涯来源:中国自学编程网发布日期:1179923455用于表示上述定义段的三个参数的数据结构称为描述符。每个描述符长8个字节。在保护方式下,每一个段都有一个相应的描述符来描述。按描述符所描述的对彖来划分,描述符可分为如下三类:存储段描述符、系统段描述符、门描述符(控制描述符)。卜•面先介绍存储段描述符。1.存储段描述符的格式存储段是存放可由程序直接进行访问的代码和数据的段。存储段描述符描述存储段,所以存储段描述符也被称为代码和数据段描述符。存储段描述符的格式如卜表所示。表屮上面一排是对描述符
2、8个字节的使用的说明,最低地址字节(假设地址为m)在垠右边,其余字节依次向左,直到授高字节(地址为ni+7)。下一排是对属性域各位的说明。长32位的段基地址(段开始地址)被安排在描述符的两个域中,其位0—位23安排在描述符内的第2—第4字节中,其位24—位31被安排在描述符内的第7字节中。长20位的段界限也被安排在描述符的两个域屮,其位0—位15被安排在描述符内的第0—第1字节屮,其位16—位19被安排在描述符内的第6字节的低4位中。使用两个域存放段基地址和段界限的原因与80286有关。在80286保护方式下
3、,段基地址只有24位长,而段界限只有16位长。80286存储段描述符尽管也是8字节长,但实际只使用低6字节,高2字节必须置为0。80386存储段描述符这样的安排,可使得80286的存储段描述符的格式在80386下继续有效。80386描述符小的段属性也被安排在两个域中。下面对其定义及意义作说明。仃)P位称为存在(Present)位。P二1表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存屮;P二0表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。(2)DPL表示描述
4、符特权级(DescriptorPrivilegelevel),共2位。它规定了所描述段的特权级,用于特权检查,以决定对该段能否访问。(3)DT位说明描述符的类型。对于存储段描述符而言,DT二1,以区别与系统段描述符和门描述符(DT=0)o(4)TYPE说明存储段描述符所描述的存储段的具体属性。具屮的位0指示描述符是否被访问过(Accessed),用符号A标记。A二0表示尚未被访问,A=1表示段已被访问。当把描述符的相应选择了装入到段寄存器时,80386把该位置为1,表明描述符已被访问。操作系统町测试访问位,已
5、确定描述符是否被访问过。其中的位3指示所描述的段是代码段还是数据段,用符号E标记。E二0表示段为数据段,相应的描述符也就是数据段(包括堆栈段)描述符。数据段是不可执行的,但总是可读的。E=1表示段是可执行段,即代码段,相应的描述符就是代码段描述符。代码段总是不可写的,若需要对代码段进行写入操作,则必须使川别名技术,即用-•个可写的数据段描述符來描述该代码段,然后对此数据段进行写入。在数据段描述符中(E二0的情况),TYPE中的位1指示所描述的数据段是否可写,用W标记。W二0表示对应的数据段不可写。反之,W二1
6、表示数据段是可写的。注意,数据段总是可读的。TYPE中的位2是ED位,指示所描述的数据段的扩展方向°ED二0表示数据段向高端扩展,也即段内偏移必须小于等于段界限。ED二1表示数据段向低扩展,段内偏移必须人于段界限。[Page]在代码段描述符中(E二1的情况),TYPE中的位1指示所描述的代码段是否町读,用符号R标记。R二0表示対应的代码段不可读,只能执行。R二1表示对应的代码段可读可执行。注意代码段总是不可写的,若需耍对代码段进行写入操作,则必须使用别名技术。在代码段中,TYPE中的位2指示所描述的代码段是否
7、是一致代码段,用C标记。00表示对应的代码段不是一致代码段(普通代码段),C=1表示对应的代码段是一致代码段。关于-•致代码段的说明,后面的文章将会详细介绍。存储段描述符中的TYPE字段所说明的属性可归纳为下表:数据段类型类型值说明0只读1只读、已访问2读/写3读/写、已访问4只读、向下扩展5只读、向下扩展、已访问6读/写、向下扩展7读/写、向下扩展、已访问代码段类型类型值说明8只执行9只执行、已访问A执行/读B执行/读、已访问C只执行、一致码段D只执行、一致码段、已访问E执行/读、一致码段F执行/读、一致码
8、段、已访问(2)G为就是段界限粒度(Granularity)位。G二0表示界限粒度为字节;G二1表示界限粒度为4K字节。注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。(3)D位是一个很特殊的位,在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符屮的意义各不和同。在描述可执行段的描述符中,D位决定了指令使用的地址及操作数所默认的大小。D二1表示默
此文档下载收益归作者所有