linux0.11内核分析-段描述符

Segment Descriptor
  1. Segment Limit
    存放段最后一个内存单元的偏移量,从而决定段的长度,如果G被置为0,则一个段的大小在1个字节到1MB之间变化,否则,将在4KB到4GB之间变化。
  2. Base Address
    包含段的首字节的线性地址。
  3. Type
    描述了段的类型特征和它的存取权限。
  4. S
    系统标志:如果被清0,则这个一个系统段,存储诸如LDT这种关键的数据结构,否则它是一个普通的代码段或数据段。
  5. DPL
    描述符特权级(Descriptor Privilege Level): 用于限制对这个段的存取。它表示为访问这个段二要求的CPU最小的优先级。因此,DPL设为0的段只能当CPL为0时(即在内核态)才是可访问的,而DPL设为3的段对任何CPL值都是可访问的。
  6. P
    Segment-Present标志:等于0表示段当前不再主存中。Linux总是把这个标志设为1,因为它从来不把整个段交换到磁盘上去。
  7. AVL
    可以由操作系统使用,但是被Linux忽略。
  8. L
    在IA-32e模式下,值1表示此代码段中的指令在64位模式下执行。值为0表示此代码段中的指令是在兼容模式下执行。如果设置了L位,则必须清除D位。不处于IA-32e模式时或对于非代码段,保留位21,并且应始终将其设置为0。
  9. D/B
    称为D或者B的标志,取决于是代码段还是数据段。D或B的含义在两种情况下稍微有所区别,但是如果段偏移量的地址是32位长,就基本上把它置位1,如果这个偏移量是16位长,它被清0。
  10. G
    粒度标志:如果该位清0,则段大小以字节为单位,否则以4096字节的倍数计。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。