物理メモリと仮想メモリのレイアウトに関する入門書
64ビットCPUとO/Sビルド、およびほぼ確実に、ワーキングセットのスラッシングを回避するのに十分なメモリが必要になります。少し背景:
32ビットマシン(概して)には、2 ^ 32(4,294,967,296)の一意の値の1つを格納できるレジスタがあります。これは、32ビットポインタが2 ^ 32の一意のメモリ位置のいずれかをアドレス指定できることを意味します。これは、魔法の4GBの制限が由来する場所です。
SPARCV8やXeonなどの一部の32ビットシステムには、より多くの物理メモリを許可するためのトリックを引き出すMMUがあります。これにより、複数のプロセスが合計で4GBを超えるメモリを使用できるようになりますが、各プロセスは独自の32ビット仮想アドレス空間に制限されます。仮想アドレス空間を調べる単一のプロセスの場合、32ビットポインターでマップできるのは2^32の異なる物理的な場所のみです。
詳細については説明しませんが、このプレゼンテーション(警告:パワーポイント)では、これがどのように機能するかについて説明します。一部のオペレーティングシステムには、MMUを操作し、ユーザーレベルの制御下でさまざまな物理的な場所を仮想アドレス空間にスワップする機能(ここで説明するものなど-上記のFPのおかげで)があります。
オペレーティングシステムとメモリマップドI/Oは仮想アドレス空間の一部を占めるため、その4GBのすべてがプロセスで利用できるとは限りません。例として、Windowsはデフォルトでこのうち2GBを使用しますが、起動時に/3Gスイッチが呼び出された場合は1GBのみを使用するように設定できます。これは、この種の32ビットアーキテクチャ上の単一のプロセスが、メモリ内に4GB未満の連続したデータ構造しか構築できないことを意味します。
つまり、オーバーレイを手動で交換するには、WindowsのPAE機能またはLinuxの同等の機能を明示的に使用する必要があります。これは必ずしも難しいことではありませんが、動作するまでには少し時間がかかります。
または、大量のメモリを搭載した64ビットボックスを入手することもできます。これらの問題は多かれ少なかれ解消されます。64ビットポインタを備えた64ビットアーキテクチャは、少なくとも理論上は、2 ^ 64(18,446,744,073,709,551,616)もの一意のアドレスを持つ連続したデータ構造を構築できます。これにより、より大きな連続したデータ構造を構築および管理できます。