32ビットx86 PAE Linuxカーネルを使用すると、システムに使用可能なメモリがGiB以上ある場合でも、単一のアプリケーションは2GiB以上を割り当てることができません。これは本当ですか? 64ビットx86 Linuxカーネルはこの制限を軽減しますか?
答え1
32ビットプロセスには32ビットアドレス空間があり、定義によると、「32ビット」はプロセスのメモリアドレスが32ビット幅であることを意味し、異なるアドレスが2 32の場合は最大2 32です。バイト(4GB)を処理できます。 32ビットLinuxカーネルは32ビットプロセスのみを実行できます。カーネルのコンパイルオプションによっては、各プロセスに1 GB、2 GB、または3 GBのメモリしか割り当てられません(残りはシステムコールを処理するときにカーネル用に予約されています)。これは、RAM、スワップ、およびマップされたファイル間の分類に関係ない仮想メモリの量です。
64ビットカーネルは、64ビットプロセスだけでなく32ビットプロセスも実行できます。原則として、64ビットプロセスは最大2つの64バイト(16EB)をアドレス指定できます。優秀x86_64 アーキテクチャ、部分的にx86_64のデザインのためメモリ管理ユニット現在のプロセスあたりのアドレス空間は128TBに制限されています。
答え2
32ビットプロセスは、32ビットカーネルを構築するときに選択したメモリ分割に応じて最大1、2、3、または約4 GBしか割り当てることができません。 64ビットカーネルの32ビットプロセスは約4GBを割り当てることができます。 64ビットx86-64カーネルの64ビットプロセスは割り当てることができます。最大128TiB。