0

我正在搜索 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 进程,这是真的吗?


4

0 回答 0