个人对GDT、GDTR、LDT、LDTR的理解

原创 2007年09月25日 08:20:00

作者:lianxi1999        来源:http://hi.baidu.com/lianxi1999

GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。(TSS是任务状态段,存放各个任务私有运行状态信息描述符)
LDT是局部描述符表,主要存放各个任务的私有描述符,如本任务的代码段描述符和数据段描述符等。
GDTR是一个长度为48bit的寄存器,内容为一个32位的基地址和一个16位的段限。其中32位的基址是指GDT在内存中的地址。
LDTR是局部描述符寄存器,由一个可见的16位寄存器(段选择子)和一个不可见的描述符寄存器组成(描述符寄存器实际上是一个不可见的高速缓冲区)。
这里加入我的理解:应为GDT中除了有段描述符之外还有LDT描述符,所以微处理器在GDT中寻址LDT时,也需要使用选择子,以保持与段描述符寻址的统一。
在这里还要引入一个段选择子的概念。段选择子是一个寄存器,高13位用来指示描述符在描述符表中的索引号,低两位是表示使用描述符的特权级别;另外一位(T1)是GDT和LDT的信号量,如果T1=0,则使用GDTR,如果T1=1,则使用LDTR。选择子将被装入段寄存器中。系统中的段寄存器共有六个:CS、SS、DS、ES、FS和GS。当选择子被装入段寄存器时,微处理器会自动将其对应的描述符装入描述符寄存器。
系统任务切换时,LDT切换,而GDT不切换(因为真个系统只有一个GDT),这时新任务的LDT描述符的选择子就被装入到LDTR中。

任务切换过程中,各个相关寄存器的变化?
当任务切换时,如果使用的是LDT,首先变化的是LDTR。段选择子被装入LDTR,同时LDT描述符自动被装入描述符寄存器。系统利用LDTR中的段选择子来定位LDT描述符在GDT中的位置。这里我不明白的是LDTR中的LDT描述符和GDT中的描述符是什么关系?为什么要这样做呢?自动装入到LDTR中的描述符到底是什么?从哪来?请高手指点!

为什么要有一个GDTR,并且GDTR的结构和LDTR不一样呢?
这主要是因为系统只有一个GDT,而GDT的描述符有不能存放在GDT中(LDT的描述符都存放在GDT中),所以就需要一个GDTR来指示GDT在内存中的位置。因为GDTR是直接指示内存地址,而LDTR主要指示LDT描述符在GDT中的位置和属性,所以GDTR和LDTR的结构也不同。

为什么在保护模式下的物理寻址空间是4G而虚拟地址是64T?
物理地址是4G是因为地址总线是32位的。
虚拟地址的情况比较复杂。具体分析如下:
保护模式下,一个任务的整个虚拟地址空间可以分为相等的两半,一半空间的描述符在全局描述符表GDT中,一半空的描述符在局部描述符表LDT中。并且由上可知,段选择子的位数是13位,即最多可以有8192个描述符,而每个LDT也最多可以包含8192个描述符。每个描述符描述的段的最大寻址范围都是32位的,即4G。所以所有任务的虚拟地址空间为:8192*4G*2=64T。
作者:lianxi1999        来源:http://hi.baidu.com/lianxi1999

段描述符的数据结构:

B31-B24&B23-B16&B15-B0是指段的基地址,L19-L16&L15-L0是指段限地址。
G指示段的长度单位,G=0表示字节,=1表示4k;D表示存取方式,=0表示16位,=1表示32位。
A表示是否能为系统软件使用;没有使用的一位强制为0;P位表示该段是否在内存中,=0时表示不在;
DPL有两位,是访问本段需要的权限;S位表示描述符的类型,=1表示系统,=0表示代码段或者数据段;type表示描述符描述的段的类型,与S位结合起了使用。
本图最下面一行位字节的位数标定。

最后插入一张intel 关于相关概念的一张图:

 

相关文章推荐

两张图看懂GDT、GDTR、LDT、LDTR的关系

买了本罗老师的琢石成器,才看前3章就感觉晕晕忽忽,总体觉得要看懂这本书前提是必须会DOS汇编,了解32位汇编基础.DOS汇编本人只看了王爽老师的汇 编语言前11章,中断这块还没有看,看来不看还是不行的...

GDT,LDT,GDTR,LDTR 详解

一、引入   保护模式下的段寄存器由 16位的选择器与64位的段描述符寄存器构成。   段描述符寄存器: 存储段描述符 选择器:         存储段描述符的索引 PS:原先实模式下的...

GDT、GDTR、LDT、LDTR的理解 [zz]

GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。(TSS是任务状态段,存放各个任务私有运行状态信息描述符)LDT是局部描述符...
  • Terryhml
  • Terryhml
  • 2010年04月10日 10:21
  • 17102

个人对GDT、GDTR、LDT、LDTR的理解

GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。(TSS是任务状态段,存放各个任务私有运行状态信息描述符) LDT是局部描...

GDT,LDT,GDTR,LDTR 详解,包你理解透彻

一、引入 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成 段描述符寄存器: 存储段描述符 选择器:存储段描述符的索引 段寄存器 PS:原先实模式下的各个段寄存器作为保护...

GDT、GDTR、LDT、LDTR的理解 [zz]

GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。(TSS是任务状态段,存放各个任务私有运行状态信息描述符) LDT是局部描...

GDTR GDT LDTR LDT寄存器说明

  • 2013年05月19日 22:12
  • 133KB
  • 下载

GDT,LDT,GDTR,LDTR详解

首先,我们 GDT

GDT,LDT,GDTR,LDTR

GDT,LDT,GDTR,LDTR 买了本罗老师的琢石成器,才看前3章就感觉晕晕忽忽,总体觉得要看懂这本书前提是必须会DOS汇编,了解32位汇编基础.DOS汇编本人只看了王爽老师的汇编语...

GDT、GDTR、LDT、LDTR的学习

GDT的由来: 在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。 为什么要有GDT?我们首先考虑一下在Real Mode...
  • yeruby
  • yeruby
  • 2014年10月01日 15:31
  • 8085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:个人对GDT、GDTR、LDT、LDTR的理解
举报原因:
原因补充:

(最多只允许输入30个字)