GNU/Linux >> Linux の 問題 >  >> Linux

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

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

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

承認された回答:

x86

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

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

Start addr オフセット 終了アドレス サイズ VMエリアの説明
0000_0000_0000_0000 0000_7fff_ffff_ffff 128 TiB ユーザースペース仮想メモリ
0000_8000_0000_0000 +128 TiB ffff_7fff_ffff_ffff 〜16M TiB 非正規
ffff_8000_0000_0000 -128 TiB ffff_ffff_ffff_ffff 128 TiB カーネル空間仮想メモリ

48ビットの仮想アドレスを使用します。 (56ビットバリアントは同じ構造で、16KPiBホールの両側に64PiBの使用可能なアドレス空間があります。)
(16KPiB =16MTiB =2バイトであることに注意してください。)

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

ARM

64ビットARMには、ハードウェアでも同様のアドレスの違いがあります。上位16ビットは、ユーザースペースの場合は0、カーネルスペースの場合は1です。 Linuxは、ページテーブルレベルの数とページサイズに応じて、仮想アドレスに39、42、または48ビットを使用します。 ARMv8.2-LVAでは、さらに4ビットが追加され、52ビットの仮想アドレスになります。

これもカーネルに詳細に文書化されています。


Linux
  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linuxにvtopをインストールする方法

  3. Linux でスワップ領域を追加する方法

  1. 64 ビット Linux での 32 ビット プロセスのアドレス空間

  2. Linux でユーザー空間から物理アドレスにアクセスするには?

  3. 仮想アドレス空間でページサイズはどのように決定されますか?

  1. LinuxでIPアドレスを見つける方法

  2. Linuxでディスク容量を確認する方法

  3. Linuxで実行中のプロセスを一覧表示する方法