物理アドレス拡張 - 仮想アドレスはどのように機能しますか?

物理アドレス拡張 - 仮想アドレスはどのように機能しますか?

私はDebian Linuxを使用しています。フラグが有効な32ビットアーキテクチャシステムをuname -m示します。はい。搭載されたRAM容量は6GBです。i686paegetconf LONG_BIT32

私の/proc/cpuinfoアイテムがありますaddress sizes : 40 bits physical, 48 bits virtual。しかし、私のプログラムは32ビットアドレスのみを生成します。 ( Address of x is 0xbfbaf5cc)

cat /proc/cpuinfo表示された48ビット仮想アドレスとCプログラムによって生成された仮想アドレスとの間の関係は理解できません。完全なCPU情報を見つけることができます。ここで。

誰かがこれを説明できますか?

ベストアンサー1

PAE仮想アドレスについては何も変更されません。名前が示すように、物理アドレスにのみ関連しています。アプリケーションプログラマーとして、PAEはあなたのために何も変更しません。プログラムにはまだ32ビットのアドレス空間があり、そのうちのカーネルは約1ビットを占めています(Linuxはコンパイルオプションに従ってユーザースペースに1GB、2GB、または3GBを付与します)。より大きなアドレス空間が必要な場合は、64ビットシステムが必要です。

PAEの目的は、カーネルが4 GB以上の物理RAMを処理できるようにすることです。 RAMをすべて活用するには、それぞれ最大2GB(または1GBまたは3GB)までマッピングできる複数のプロセスが必要です。

PAEモードでは、MMUテーブルは3レベルテーブルを使用して32ビット仮想アドレスを40ビット物理アドレスにマッピングします。 MMUテーブルは、2レベルテーブルを使用して32ビット仮想アドレスをマッピングする非PAEモードとは異なります。 32ビット物理アドレス)。

「48ビット仮想」指定は、CPUの機能を表します。これは、CPUが64ビット(つまり64ビットをサポートする)を意味すると思います。amd64(別名 x86-64))。 48ビット仮想アドレスを使用するには、64ビットオペレーティングシステムを実行する必要があります。ここで、48ビットはアプリケーションプログラマーにとってやや混乱しています。 CPUはアドレスの48ビットのみを変換しますが、アドレスは64ビットにエンコードされます。ポインタは6バイトではなく8バイトを占めます。上位 16 ビットには以下を含めることができます。オペレーティングシステムで使用される追加タグ

おすすめ記事