基本的に、32 ビットだけで 8GB をアドレス指定することはできません。32 ビットを使用する任意の時点で、4G メモリ ロケーションからのみ選択できます。
一般的な回避策は、ページ テーブルで 32 ビットより大きい物理アドレスを使用することです。これにより、オペレーティング システムは、プログラムがアクセスできる 8GB のサブセットを定義できます。ただし、このサブセットは 4GB を超えることはできません。x86 PAEは 1 つの例ですが、まったく同じことを行うものは他にもあります。
この回避策を使用すると、オペレーティング システム自体は、独自のページ テーブルを変更するだけで 8GB 全体にアクセスできます。たとえば、メモリ ロケーションにアクセスするには、まずページ テーブルを変更してメモリ ロケーションを独自のアドレス空間にマッピングする必要があります。その後で初めて、メモリ ロケーションへのアクセスを開始できます。もちろん、これは非常に面倒です (控えめに言っても)。オペレーティング システムの一部が、このタイプのメモリ拡張を考慮せずに作成された場合にも、問題が発生する可能性があります。デバイス ドライバは典型的な例です。
問題は新しいものではありません。Commodores C64 のような 8 ビット コンピュータは、16 ビット アドレスで 64KB 以上にアクセスするためにバンク スイッチングを使用していました。初期の PCは、640KB の制限を回避するために拡張メモリを使用していました。もちろん、Right Thing (TM) は、醜いソリューションに頼る前に、より大きなアドレスに切り替えることです。