web-dev-qa-db-ja.com

32ビットOSマシンは8GB RAM + 20GBのページファイルをすべて使い切ることができますか?

32ビットOSについて私が理解していることは、アドレスは32ビットで表現されているので、多くてもOSが使用できるのは232 = 4Gメモリスペース - 私は単位がバイトであると仮定します、4GBです。

これは、32ビットOS(WindowsでもUNIXでも)で、ハードディスクに合計4GBを超えるRAM +ページファイルがある場合、たとえば8GB RAMおよび20GBページファイルの場合、その記憶は「使い果たされる」ことは決してないだろうか?

「使い切った」とすると、RAMやページファイルを増やしてもパフォーマンスは向上しません。もちろん、アプリケーションがOSにメモリを要求し続けても失敗する可能性は常にあります。

同様に、この32ビットOSマシンに2GBのRAMと2GBのページファイルがある場合、ページファイルのサイズを大きくしてもパフォーマンスは向上しません。これは本当ですか?

97
athos

32ビットOSについて私が理解していることは、アドレスは32ビットで表現されているので、最大でOSは2 ^ 32 = 4GBのメモリ空間を使用することができます。

プロセスアドレスにできる最大のものは4GBです。あなたは潜在的にメモリアドレス空間を混同しています。 プロセスはアドレス空間よりも多くのメモリを持つことができます。それは完全に正当なそして非常に一般的ですビデオ処理やその他のメモリを大量に消費するアプリケーションでプロセスに数十GBのメモリを割り当て、それを自由にアドレス空間との間で交換できます。一度にユーザーアドレススペースに入ることができるのは2 GBだけです。

あなたがあなたの家に4台の車庫を持っているならば、あなたはまだ50台の車を所有することができます。 あなたはそれらすべてをあなたのガレージに保管することはできません。それらのうち少なくとも46個を保存するには他の場所に補助記憶装置を用意する必要があります。どの車をガレージに入れ、どの路上の駐車場に入れるかはあなた次第です。

これは、マシンが4GBを超えるハードディスク上のRAM +ページファイルを持っている場合、32ビットOS、Windowsまたはunixを意味します。たとえば、8GB RAMおよび20GBページファイル、「メモリが使い果たされた」ことは決してないでしょうか。

絶対にそれはそれを意味しません。単一のプロセスがそれよりも多くのメモリを使用する可能性があります。繰り返しますがプロセスが使用するメモリの量は、プロセスが使用する仮想アドレス空間の量とはほとんど関係ありません。保持している車の数と同じです。あなたのガレージはあなたが所有する車の数とは全く無関係です。

さらに、2つのプロセスが非プライベートメモリページを共有できます。 20個のプロセスすべてが同じDLLをロードする場合、すべてのプロセスはそのコードのメモリページを共有します。彼らは仮想メモリアドレス空間を共有しない、彼らはメモリを共有する

よくわからない場合は、まったく同じものではないため、メモリとアドレス空間を同じものと考えるのはやめてください。

この32ビットOSマシンに2GB RAMと2GBのページファイルがある場合、ページファイルサイズを大きくしてもパフォーマンスは向上しません。これは本当ですか?

あなたは50台の車と4台の車庫、そして通りの下に100台の駐車場を持っています。あなたは駐車場の大きさを200スポットに増やします。 50台の追加駐車スペースの代わりに150台の追加駐車スペースを使用した結果、自動車の速度が上がることはありますか?

145
Eric Lippert

CPUは最大4GbのRAMしかアドレス指定できないのは事実です。しかし、現在のCPUはMMU( Memory management unit )を使用して、プロセス固有のメモリアドレスを物理メモリアドレスに変換します。

このMMUは、メモリの分離(プロセスAはプロセスBのメモリを操作できない)からメモリ共有(プロセスAはプロセスBと同じ物理メモリ領域にアクセスしてデータを交換できる)まで、あらゆる種類のトリックに使用されます。こちらです)。

32ビットCPUは1プロセスあたり4 GBのメモリしかサポートしていませんが、 Physical Address Extension を使用すると最大64 GBのRAMをアドレス指定できます。これにより、プロセスAは最初の4Gbのメモリを使用でき、プロセスBは次の4Gbを使用できます。合計で4 GBを超える物理メモリーが使用されますが、1つのプロセスが使用するメモリーの合計量は4 GBで制限されています。

PAEはカーネルバージョン2.3.23以降のLinuxおよび32ビット版のWindows Serverではサポートされていますが、32ビットWindows XP、Vista、または7ではサポートされていません。

CPUがPAEをサポートしていない場合は、4GBの物理メモリに制限されます(または他の要因によってはそれ以下になります)。

お使いのオペレーティングシステムは、PAEをサポートするCPUに関係なく、物理メモリの一部をディスク(ページファイル)に追い出すことができます。これにより、4Gb以上を組み合わせて使用​​する複数のプロセスを起動できます。 PAEの唯一の影響は、プロセスAの実行中にプロセスBの4 Gbを物理メモリに保持できるかどうかです。

66
Dave Webb

特に32ビットのWindowsバリアントについて言えば、Windows 2003バリアント以来4GB以上のRAMをサポートしています(また、Windows 7の kernelハックを取得できます) すべてのRAMを32ビットで使用できるようにします)。ただし、質問の最初の部分で説明したように、これにはコストがかかります。

32ビットオペレーティングシステムでは、ポインター(メモリアドレス)のサイズはCPUのワード長である32ビットと同じであり、(前述したように)2 ^ 32 = 4GBのメモリスペースを使用できます。また、Windowsはアプリケーションに対して「仮想メモリ」アプローチを採用しているため、各アプリケーションには独自のメモリスペースがあります。

各ポインターは32ビット幅しかないため、各アプリケーションのポインターは、システムが4GBを超えるRAMをサポートできる場合でも、最大4GBのメモリしかアドレスできません。私の知る限り、これは32ビットオペレーティングシステムで4GBを超えるRAMを使用する唯一の警告です。合計で、4GBを超えるRAMを組み合わせて使用​​する多くのアプリケーションを使用できますが、特定のプロセスでは最大4GBまでしか割り当て/アクセスできません。


質問に戻って、2GBのRAMを使用するプログラムがあるとしましょう。このプログラムのインスタンスが10個ある場合、それは20GBです。 RAMの8GBすべてが使用され、さらに12GBのページファイルがすべて使用されます。はい、そうです、32ビットオペレーティングシステムでは、このメモリを使い果たすことは可能です。

この32ビットOSマシンに2GB RAMと2GBのページファイルがある場合、ページファイルサイズを大きくしてもパフォーマンスは向上しません。これは本当ですか?

ページファイルのサイズを増やすと、通常はパフォーマンスが向上しません(RAMとpagefileが絶対最小値に設定されているか、低く設定されている場合を除きます)コンピューターが常にスラッシングします)。ただし、コンピューターの(仮想)メモリが不足することはありません。ページファイルに何かをパージする必要があるときはいつでも、hugeパフォーマンスヒットを取得しています(ハードドライブはRAMよりも桁違いに遅いため)。

15
Breakthrough

プロセッサが32ビットであると言われるとき、それはそれが単一の命令を使用して32ビット数で動作できることを意味します。これは、そのアドレスバスの幅とはほとんど関係がありません。Intelアーキテクチャでは、1995年にリリースされた Pentium Pro から36ビットです。

有名な4GBの制限は、ほとんどのPCソフトウェアが フラットメモリモデル を使用しているという事実に由来しています。ポインタは使用するレジスタに収まり、レジスタは32ビット幅なので、4GBに制限されます。

0