段选择符,段描述符,描述符表

段描述符(8字节)存放于 GDT/LDT

 

段选择符(16位) + 偏移量(32位) = 逻辑地址

 

段寄存器仅仅存放段选择符,段寄存器中的段选择符指定非编程段寄存器中的段描述符。

 

关于描述符,描述符表,段选择符的区别。

 

1、描述符

     描述符是一个八字节的组合数据组,在80286中,组内有最高2个字节保留未用,其余6个字节分别存储着程序(或数据)段所占内存的长度(段限长,2个字节)、起始的物理地址(称段基地址,3个字节)和访问权(1个字节)。
     内存中每段程序(或数据)均可用一个描述符来表示。与任务转换有关的数据的段描述符称任务描述符。
2、描述符表
     将不同程序(或数据)段的描述符在内存中连续排列起来,所形成的表称为描述符表。
     由与全局有关的程序(或数据)段的描述符组织在一块的表称全局描述符表(GDT)。一个系统内只有一张GDT。存放该表的物理地址和长度的寄存器称GDTR。
     所有中断服务程序的描述符表称中断描述符表(IDT),一个系统也仅有一张IDT。
     由不涉及全局的程序(或数据)段的描述符所组成的表称局部描述符表(LDT)。
3、段选择符
     由与任务转移有关的描述符所组成的表称段选择符。
     段选择符用16位来表示,最高13位表示要使用的段在描述符表中的索引号,低3位的前两位表示使用段的权等级,最后一位指明描述符是位于GDT中还是位于LDT中。GDT和LDT各占用64KB内存,含8K个描述符。

 

由于一个段描述符是8字节长,因此它在GDT或LDT内的相对地址是由段选择符的最高13位的值乘以8得到的。

例:如果GDT在0x00020000(这个值保存在gdtr中),且由段选择符所指定的索引号为2,那么相应的段描述符地址是0x00020000 + (2 * 8)= 0x00020010

你可能感兴趣的:(Linux)