Linux中gdtr的地址

问题描述 投票:1回答:2

我不清楚gdtr的地址。

摘自《了解Linux内核》一书。 2.2.2段描述符(第38页)


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


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

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

关于段落的另一个问题:本书“了解Linux内核”。 2.2.4段Linux(第43页)。


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


12 + 2xNR任务,这12个来自哪里?我认为应该是14“在上一个列表中,我们描述了Linux使用的六个主要的段描述符。四个附加的段描述符涵盖了高级电源管理(APM)功能,还有四个未使用的GDT条目,总计14个。”

我可能会误解某些内容,请帮助我澄清。

谢谢,$ XSM

linux kernel segment
2个回答
0
投票

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

有关更多信息,您可以查看source listing here


0
投票

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9UNXNDVS5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

© www.soinside.com 2019 - 2024. All rights reserved.