答え1
x86
64ビットx86仮想メモリマップは、アドレス空間を2つの部分に分割します。下位部分(0に設定された最も高いビット)はユーザー空間であり、上位部分(1に設定された最も高いビット)はカーネル空間です。 (x86-64は「標準」「下半分」および「上半分」アドレスを定義し、ビット数は実際には48または57に制限されています。ウィキペディアまたはインテル SDM、第3巻、セクション4.5を参照してください。 )
地図全体がよく文書化されています。カーネルから;現在は次のとおりです。
初期アドレス | オフセット | 最終住所 | サイズ | 仮想マシン領域の説明 |
---|---|---|---|---|
0000_0000_0000_0000 |
0 | 0000_7fff_ffff_ffff |
128チタンホウ素 | ユーザー空間仮想メモリ |
0000_8000_0000_0000 |
+128TiB | ffff_7fff_ffff_ffff |
~16MTiB | 非標準的な |
ffff_8000_0000_0000 |
-128TiB | ffff_ffff_ffff_ffff |
128チタンホウ素 | カーネル空間仮想メモリ |
48ビットの仮想アドレスがあります。 57ビットバリアントは、16K PiBホールの両側に64PiBの使用可能なアドレス空間を持つ同じ構造を持っています。
初期アドレス | オフセット | 最終住所 | サイズ | 仮想マシン領域の説明 |
---|---|---|---|---|
0000_0000_0000_0000 |
0 | 00ff_ffff_ffff_ffff |
64スキンB | ユーザー空間仮想メモリ |
0100_0000_0000_0000 |
+64PiB | feff_ffff_ffff_ffff |
~16K PiB | 非標準的な |
ff00_0000_0000_0000 |
-64PiB | ffff_ffff_ffff_ffff |
64スキンB | カーネル空間仮想メモリ |
(16K PiB = 16M TiB = 2 64 バイトです。使用可能なアドレス空間のほとんどは非標準です。)
どちらのレイアウトも、52本のアドレスライン(4 PiB)を使用して同じ物理アドレス空間へのアクセスを提供します。レベル 4 ページングは、特定の時間に 256TiB のサブセットにのみアクセスを提供します。レベル 5 ページングは、物理アドレス空間全体へのアクセスを提供します。現在、x86 CPUの処理能力は、私が知っている限り、これよりはるかに低いです。単一のCPUは最大6TiBを処理できます。
32ビットの場合とは異なり、「64ビット」メモリマップはハードウェア制限を直接反映します。
腕
64ビットARMは、ハードウェアで同様のアドレス区切りを持ちます。最初の12ビットまたは16ビットはユーザースペースの場合は0、カーネルスペースの場合は1です。 Linuxは、ページテーブルレベルの数とページサイズに応じて、仮想アドレスに39、42、または48ビットを使用します。 ARMv8.2-LVAの場合、別の4ビットが追加され、52ビット仮想アドレスが生成されます。
これもよく文書化されていますカーネルから。