Windows 全球描述符表
我一直在阅读有关虚拟内存(分段+分页)的英特尔手册。据我所知,有一个特殊的寄存器保存全局描述符表(GDT)。GDT包含空描述符、本地描述符表、TSS和段描述符。此外,几乎所有操作系统(OS)都有一个GDT,它在启动时加载,并且无法更改(可能!!!)。我的问题是:Windows 全球描述符表,windows,operating-system,x86,intel,Windows,Operating System,X86,Intel,我一直在阅读有关虚拟内存(分段+分页)的英特尔手册。据我所知,有一个特殊的寄存器保存全局描述符表(GDT)。GDT包含空描述符、本地描述符表、TSS和段描述符。此外,几乎所有操作系统(OS)都有一个GDT,它在启动时加载,并且无法更改(可能!!!)。我的问题是: 所有这些信息存储在哪里(NULL、LDT、TSS和段描述符)?它们是在物理内存、RAM还是本地硬盘驱动器中 段描述符与代码段(ASM:CS)、数据段(ASM:DS)相同吗。。。如果是这样的话,GDT中存储了多少(是否只有一个CS、一个D
LGDT
),因此它可能位于分页内存中SYSENTER
/SYSEXIT
,则需要用户+内核版本)- 段寄存器
- 段选择器
- 段描述符
- 段描述符表
- 分段
程序和线程之间通常唯一不同的是用于访问线程本地存储(TLS)的段(可能还有它的选择器)。FS或GS段寄存器保存指向此TLS段的选择器。所有对TLS的访问都是通过使用适当的段覆盖前缀(FS:或GS:)的指令完成的。TLS对于每个线程都是唯一的。我同意上面的答案,但对于问题2,更完整的答案是:
段描述符指定段的大小、访问权限和 段的权限级别、段类型和段的第一个字节的位置
在线性地址空间中(称为段的基址)。所以段描述符不仅仅是CS,DS,。。。注册。您能给我解释一下GDT中有多少段描述符吗?现在让我们假设,如果进程A被执行,它的段选择器指向GDT中的段描述符,现在进程B被执行,现在进程B的段选择器指向GTD中与进程A相同的条目(段描述符)?GDT/LDT条目的最大数量是8192 IIRC,请查看CPU手册。是的,这是一个非常有效的场景。记住,在片段下面是页面翻译。因此,尽管这两个进程看起来有相同的段,但它们访问的实际内存却不一样。谢谢您的回复。是否只有一个代码段描述符和一个数据项,或者可以是多个?OS在启动时加载GDT和段描述符表,它们在OS生命周期内保持不变,对吗?可以有多个代码和数据段描述符。操作系统可以更改它们或添加更多。这取决于windows下的OS programmer.FS/GS拥有TEB/TIB库,而TEB/TIB库又拥有TLS数据和其他许多东西。感谢您提供的链接和您的答案。投票结束太广泛:一个问题太多。