1

AMD64ベースのハードウェアで32ビットのRHEL4.4を使用しています。これがuname-aからの出力です

$ uname -a
Linux zulu 2.6.9-42.0.10.ELsmp #1 SMP Fri Feb 16 17:17:21 EST 2007 i686 athlon i386 GNU/Linux

このシステムには8Gigのメモリがインストールされており、OSは32ビットです。私のシステムでは8GBのメモリをすべて使用できないと思います。しかし、トップを実行すると、次のように表示されます-

Mem:   8309168k total,  8292028k used,    17140k free,     7096k buffers

したがって、top は8GBのメモリをすべて表示できます。

同じマシンに32ビットのWinXPをインストールすると、タスクマネージャーは3GBを使用可能として表示します。

私の質問は-32ビットOSはどのようにして8GBのメモリを見ることができますか?これは、私のアプリケーションがより大きなアドレス空間を使用できることを意味しますか?そして、なぜ32ビットLinuxと32ビットWinXPの違いは何ですか?

ありがとう!

4

4 に答える 4

3

Linuxシステムは物理アドレス拡張をサポートしています。

于 2009-05-28T11:03:53.990 に答える
2

メモリにはさまざまな「レベル」があります。OSが何であれ、1つのプロセスで4Gbを超えるアドレスを指定することは不可能です。これは、ポインタがそれ以上には小さすぎるためです。これが、メモリに対する32ビットの基本的な制限です。LinuxとWindows、および私が推測するほとんどの「従来の」OSでは、32ビットの仮想アドレス空間はカーネル用とプロセス用に分割されているため、各プロセスで取得できるアドレス可能なコンテンツは4Gb未満です。

ただし、それでも、OSは4 Gb以上を使用する可能性があります。たとえば、2〜3個のプロセスがそれぞれ2Gbのメモリを消費します。32ビットCPUでも(ハードウェアレベルで)4 Gbを超えるメモリをアドレス指定できますが、仮想アドレス空間では、常に32ビットポインターによって制限されます。

古い新しいものには、物理​​アドレス空間、仮想アドレス空間、および共同の違いについての良い説明があります:http: //blogs.msdn.com/oldnewthing/archive/2004/08/18/216492.aspx

于 2009-05-28T11:06:13.017 に答える
1

これを可能にする方法は「PAE」(物理アドレス拡張)と呼ばれます。CPUは内部で36ビットアドレスを使用でき、OSはそれをサポートしています。残念ながら、Windows XPはNXビットをサポートするためにPAEのみを使用します(eXecutionビットがないため、プロセッサがこのビットでマークされたページからコードを実行しようとすると例外が発生します)。32ビットLinuxカーネルはPAEをサポートしています。

于 2009-05-28T11:04:34.253 に答える
1

新しいi386互換CPUは、PAEモードを使用して4GB以上をアドレス指定できます。Windows XPは、すべてのDMAが4 GB未満のメモリに対して実行されると想定する、記述が不十分なハードウェアドライバーが多すぎるため、アドレス空間を人為的に4GBに制限します。したがって、4GBのアドレス空間のうち約1GBがハードウェアにマップされ、残りは物理RAMにマップされます。Windows Serverエディションには、この制限はありません。PAEをサポートするLinuxカーネルもメモリを制限しません。私が正しく覚えていれば、これらは両方とも最大32GBをサポートします。

アプリケーションは、OSオプションに応じて、2〜3GBのアドレス空間に制限されます。1つのアプリケーションは、たとえばアドレスウィンドウ化拡張やメモリマップトファイルを使用して、メモリの一部をそのアドレススペースに出し入れすることにより、より多くの物理RAMを効果的に使用できます。

于 2009-05-28T11:11:42.523 に答える