我正在搜索 Windows 内存如何与 X86 一起工作,我学到了一些东西,但我进退两难,这是真的还是假的。我没有找到任何关于 VAD 和 GDT 之间的互联网关系的文档
Windows 操作系统使用 VAD(虚拟地址描述符)从 LDT 或 GDT 数组分配地址。
正如我所读到的,每个 VAD 条目只是一个“页表”
所以 :
对于进程,每个页表都是 LDT 条目 对于内核,每个页表都是 GDT 条目
NTOSKRNL.EXE 操作系统启动时通过调用 RtlInitializeGenericTable 初始化 VAD 该函数生成二叉树,每个节点包含空闲的 LDT 或 GDT 条目。这个二叉树根存储在 GDT 本身中。
当我们从用户模式 malloc 分配内存时,二叉树从 LDT 池和 VAD 树根中减去一个 LDT 节点。
我的第二个问题:Windows 可以运行的进程数是 GDT 条目的限制 x86 可以有 16 位 GDT 条目,所以我们可以添加 65536 个 LDT 条目,每个进程可以有 1 个 LDT 条目。所以 GDT 最多可以包含 60K 个条目。这意味着 Windows 最多可以运行 ~60k 进程,这是真的吗?