Linux内核学习第5天

        3.段选择符:是段的一个16位标识符
                 *段选择符结构:
                     
                     请求特权级RPL(Requested Privilege Level):提供了段保护信息
                     表指示标志TI(Table Index):用来指出包含指定段描述符的段描述表GDT或LDT表中的索引项号
                     索引值(Index):描述符索引
                      *CPU不使用GDT表中的第一项,即TI=0,索引值为0的选择符
                     *虽然操作系统可以定义很多个段,但是同时只有六个段可供立即访问
                 *段寄存器结构:
                    Linux内核学习第5天_第1张图片 

        4.段描述符:是GDT和LDT表中的一个数据结构项
                        *每个段描述符的长度为8字节,分三个部分
                                                           (段基地址、段限长、段属性)
                        *段描述符通用格式:
          Linux内核学习第5天_第2张图片
   
                     *段描述符中的字段与标志:
                        (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

                             Linux内核学习第5天_第3张图片
                            Linux内核学习第5天_第4张图片
                                            (P=0时的情况)



你可能感兴趣的:(linux内核)