Linuxで64ビットプロセスの仮想アドレス空間はどのように分割されますか?


12

次の図は、32ビットプロセスの仮想アドレス空間がどのように分割されるかを示しています。

ここに画像の説明を入力してください

しかし、64ビットプロセスの仮想アドレス空間はどのように分割されるのでしょうか。

回答:


10

64ビットのx86仮想メモリマップは、アドレス空間を2つに分割します。下部セクション(上部ビットが0に設定されている)はユーザー空間であり、上部セクション(上部ビットが1に設定されている)はカーネル空間です。(x86-64は「正規」「下位半分」および「上位半分」アドレスを定義し、ビット数は事実上48または56に制限されていることに注意してください。詳細はWikipediaを参照してください。)

完全なマップはカーネルで詳細文書化されています。現在のように見えます

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

48ビットの仮想アドレス。(56ビットバリアントは同じ構造で、16K PBホールの両側に64 PBの使用可能なアドレススペースがあります。)

32ビットの場合とは異なり、「64ビット」のメモリマップはハードウェアの制約を直接反映しています。


明確にするために、この制限はハードウェアによって課されます。現在、仮想アドレス空間の真ん中に使用できないアドレスの巨大な穴を残さない64ビットプロセッサの実装はありません。CPUはアドレスすることができる物理メモリの量はまた、64のパワーに2以下の方法である
ヨハンMyréen

@Johanに感謝します。これを強調してみました。
Stephen Kitt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.