Linux内核学习第5天

举报
远航 | FIBOS 发表于 2020/12/02 00:31:28 2020/12/02
【摘要】         3.段选择符:是段的一个16位标识符                  *段选择符结构:                                            请求特权级RPL(Requested Privilege Level):提供了段保护信息                 ...
        3.段选择符:是段的一个16位标识符
                 *段选择符结构:
                     
                     请求特权级RPL(Requested Privilege Level):提供了段保护信息
                     表指示标志TI(Table Index):用来指出包含指定段描述符的段描述表GDT或LDT表中的索引项号
                     索引值(Index):描述符索引
                      *CPU不使用GDT表中的第一项,即TI=0,索引值为0的选择符
                     *虽然操作系统可以定义很多个段,但是同时只有六个段可供立即访问
                 *段寄存器结构:
                     

        4.段描述符:是GDT和LDT表中的一个数据结构项
                        *每个段描述符的长度为8字节,分三个部分
                                                           (段基地址、段限长、段属性)
                        *段描述符通用格式:
         
   
                     *段描述符中的字段与标志:
                        (1)段限长字段LIMIT(Segment limit field):
                                    用于指定段的长度。
                                             G=0,则LIMIT长度为1字节到1MB字节;G=1,则LIMIT长度为4KB到4GB
                             (2)基地址字段BASE(Base address field):
                                            该字段定义在4GB的线性地址空间中一个段字节0所处的位置
                                            处理器会把三个分立的基地址字段组合形成一个32位的值
                             (3)段类型字段TYPE (Type field):
                                            指定段或门(Gate)的类型、说明段的访问种类以及段的拓展方向
                             (4)描述符类型标志S(Descriptor type flag)
                                            指明一个段描述符是系统段描述符(S=0)还是代码或数据段描述符(S=1)
                             (5)描述符特权级字段DPL(Descriptor privilege level):
                                            指明描述符的特权级,从0~3,0最高
                             (6)段存在标识P(Segment present ):
                                            指出一个段是在内存中(P=1)还是不在内存中(P=0)
                             (7)D/B标志
                                            (对于32位代码和数据段,这个标志应该总是设置为1;对于16位代码和数据段,这个标志设置为0
                                              *可执行代码段
                                            这时该标志位为D,若该标志位为1,
则默认值是32位地址和32位或8位操作数;若该标志位为0,则默认值是16位地址和16位或8位操作数
                                             *栈段(由SS寄存器指向的数据段)
                                                     这是该标志位为B(Big)标志,如果该标志为1,则使用32位栈指针并存在ESP寄存器中;如果该标志为0,则使用16位栈指针并存放在SP寄存器中
                                             *下扩数据段
 
                                                     此时该标志位为B标志,用于指定堆栈段的上界限。如果设置了该标志,则堆栈段的上界限是0xFFFFFFFF(4GB),如果没有设置该标志,则上界限为0xFFFF(64KB)
                             (8)颗粒度标志G(Granularity)
                                               用于确定段限长字段Limit值的单位。如果设置了该标志位则段限长使用4KB单位;如果该标志位为0,则以字节为单位
                             (9)可用和保留比特位(Available and reserved bits)
                                                段描述符第2个双字的位20可供系统软件使用,位21是保留位并总为0

                            
                           
                                            (P=0时的情况)



文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/25511589

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。