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

32-bit memory

私が理解しているのは、32ビットOSの場合、アドレスは32ビットで表現されているので、せいぜい232=4Gのメモリ空間を使うことができるということです — 単位はバイトなので、4GBと仮定しています

これは、32ビットOS(WindowsでもUnixでも)を搭載したマシンで、ハードディスク上のRAMとページファイルの合計が4GB以上、例えば8GBのRAMと20GBのページファイルの合計があれば、そのメモリは「使い切られない」ということを意味しているのでしょうか?

もちろん、アプリケーションがOSにメモリを要求し続けて失敗する可能性は常にあります

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

  99  athos  2011-12-13


ベストアンサー

私が理解しているのは、32ビットOSの場合、アドレスは32ビットで表現されているので、せいぜい2^32=4GBのメモリ容量を使うことになります

プロセスがアドレスできるのは最大で4GBです。メモリとアドレス空間を混同している可能性があります。プロセスはアドレス空間よりも多くのメモリを持つことができます。これは完全に合法であり、ビデオ処理や他のメモリを多用するアプリケーションでは非常に一般的なことです。プロセスは何十GBものメモリを割り当てられ、アドレス空間に自由に入れたり出したりすることができます。ユーザーのアドレス空間に一度に入ることができるのは2GBだけです

自宅に4台の車庫があっても、50台の車を所有することができます。ただ、全部をガレージに入れておくことはできません。どこか別の場所に補助的な保管場所を用意して、最低でも46台は保管しておかなければなりません

これは、WindowsでもUnixでも、32ビットOSでも、マシンが4GB以上のハードディスク上のRAM+ページファイル、例えば8GBのRAMと20GBのページファイルを持っている場合、「メモリを使い切る」ということはないということですか?

絶対にそうではありません。1つのプロセスがそれ以上のメモリを使用することもあります。繰り返しになりますが、プロセスが使用するメモリの量は、プロセスが使用する仮想アドレス空間の量とはほとんど関係がありません。ガレージに保管している車の数と所有している車の数が全く関係ないのと同じように

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

私が言いたいのは、念のために言っておくと、メモリとアドレス空間を同じものとして考えるのはやめた方がいいということです

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

あなたは50台の車と4台の車庫を持っていて 通りに100台の駐車場がありますあなたは駐車場を200台分に増やしました。50台分の駐車スペースを増やす代わりに150台分の駐車スペースを増やした結果、あなたの車は速くなりましたか?

145  Eric Lippert  2011-12-13


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

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

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

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

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

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

69  Dave Webb  2011-12-13


具体的には 32 ビット Windows の変種といえば、彼らは Windows 2003 の変種以来、4GB 以上の RAM をサポートしてきました (また、Windows 7 のカーネルハックを取得して、32 ビットで RAM のすべてを使用できるようにすることもできます)。しかし、これはあなたがあなたの質問の最初の部分で概説したように、コストがかかります

32ビットのOSでは、ポインタ(メモリアドレス)のサイズはCPUのワード長と同じ32ビットなので、(ご指摘のように)2^32=4GBのメモリ空間を確保することができます。また、Windowsはアプリケーションに対しても「仮想メモリ」というアプローチをとっていますので、各アプリケーションは独自のメモリ空間を持っています

各ポインタは32ビット幅しかないので、システムが4GB以上のRAMをサポートしていても、各アプリケーションのポインタは最大4GBのメモリしかアドレスできません。私の知る限りでは、これが32ビットOSで4GB以上のRAMを使用する際の唯一の注意点です。合計すると、4GB 以上の RAM を使用する多くのアプリケーションを使用することができますが、ある特定のプロセスでは最大 4GB までしか割り当てることができません


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

この32ビットOSのマシンで、RAMが2GBでページファイルが2GBの場合、ページファイルのサイズを大きくしても性能は変わらないということですが、これは本当でしょうか?

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

15  Breakthrough  2011-12-13


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

有名な4GB制限は、ほとんどのPCソフトがメモリの各バイトをポインタでアドレス指定できるフラットメモリモデルを使用していることに由来しています。ポインタは使用するレジスタに収まる必要があり、レジスタは32ビット幅なので、4GBまでに制限されます

-1  Dmitry Grigoryev  2015-06-17


タイトルとURLをコピーしました