Linux中gdtr的地址

时间:2015-03-14 13:58:39

标签: linux kernel segment

我不清楚gdtr的地址。

来自书"了解Linux内核"。 2.2.2段描述符(第38页)


"主存储器中GDT的地址包含在gdtr处理器寄存器中,当前使用的LDT的地址包含在ldtr处理器中。"


我的问题: 是gdtr逻辑地址/线性地址或物理地址的地址?

我认为它应该是物理地址,因为之前没有实现分页。 需要有人帮助确认并提供更好的解释

关于段落的另一个问题: 预订"了解Linux内核"。 2.2.4分段Linux(第43页)。


因此,对于每个进程,GDT包含两个不同的段描述符:一个用于TSS段,一个用于LDT段。 GDT中允许的最大条目数为12 + 2xNR_TASKS,其中NR_TASKS表示最大进程数。其中,NR_TASKS表示最大进程数。在前面的列表中,我们描述了Linux使用的六个主要段描述符。四个额外的段描述符包括高级电源管理(APM)功能,并且四个GDT条目未被使用,总共14个。


12 + 2xNR TASKS,12来自哪里? 我认为它应该是14 "在上一个列表中,我们描述了Linux使用的六个主要段描述符。四个额外的段描述符包括高级电源管理(APM)功能,并且四个GDT条目未被使用,总共14个。"

我可能会误解某些内容,请帮助我明白。

谢谢, $ XSM

3 个答案:

答案 0 :(得分:1)

Intel手册(64-ia-32-architectures-software-developer-vol-3a-part-1-manual)说,GDT的线性地址存储在GDTR寄存器中,而LDT的线性地址为存储在LDTR寄存器中。

enter image description here

答案 1 :(得分:0)

我相信地址是一个线性地址。在段寄存器(ds,es,fs,gs)设置为已知值(i386为0x18)之后,在startup_32()中打开了分页。页面目录位于0x00101000(也称为swapper_pg_dir)。设置分页后,GDT和IDT的初始化就开始了。

有关详细信息,请查看source listing here

答案 2 :(得分:0)

我想说为什么GDTR必须是线性地址。因为有一条指令cat,这意味着程序员可以设置GDTR。但是由于物理地址对程序员是不可见的,那么GDTR必须是线性地址。