私は Windows メモリが X86 でどのように機能するかを調べていました。VAD と GDT のインターネット関係に関するドキュメントは見つかりませんでした
Windows OS は、VAD (仮想アドレス記述子) を使用して、LDT または GDT 配列からアドレスを割り当てます。
私が読んだように、各VADエントリは単なる「ページテーブル」です
それで :
プロセスの場合、各ページ テーブルは LDT エントリです カーネルの場合、各ページ テーブルは GDT エントリです
NTOSKRNL.EXE OS の起動時に RtlInitializeGenericTable を呼び出して VAD を初期化します。この関数はバイナリ ツリーを作成し、各ノードには空きの LDT または GDT エントリが含まれます。このバイナリ ツリーのルートは、GDT 自体の内部に格納されます。
ユーザー モード malloc からメモリを割り当てると、バイナリ ツリーは LDT プールと VAD ツリー ルートから 1 つの LDT ノードを減算します。
2 番目の質問: Windows で実行できるプロセスの数は GDT エントリの制限です x86 は 16 ビットの GDT エントリを持つことができるため、各プロセスに 1 つの LDT エントリを持つことができる 65536 個の LDT エントリを追加できます。したがって、GDT には最大 60K のエントリを含めることができます。これは、Windows が最大 ~60k のプロセスを実行できることを意味します。これは本当ですか?