32ビットOSマシンは、8GB RAM + 20GBページファイルをすべて使用できますか?


98

32ビットOSについて私が理解しているのは、アドレスが32ビットで表現されているため、最大でOSが2 32 = 4Gのメモリ空間を使用できることです-単位はバイトなので、4GBと仮定します。

これは、32ビットOS(WindowsまたはUnix)を搭載したマシンでRAMに合計4GBを超えるRAM +ページファイル、たとえば8GB RAMと20GBページファイルがある場合、そのメモリが「使い果たされる」ことを意味します「?

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

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


2
余談ですが、たまたま4GB以上のRAMがあり、32ビットOSしか持っていない場合は、RAMディスクを作成できます。これはあなたのRAM内のハードドライブであり、あなたはそれを配置するために使用されていない/アドレス指定されていないRAMを使用することができます。
サイモンVerbeke

10
できません。OSがRAMを作成できない場合、OSがメモリを使用できない場合は、OSを介してRAMディスクを作成する必要があります。(BIOSがRAMディスクを作成できる場合を除き、これはまれです)。
AVee

1
短い答えは「はい」です。通常、プロセスには使用する32ビットのアドレス空間が与えられますが、OS自体はそれ以上を使用できます(80年代に行ったようにバンクを切り替えるか、IntelのPAEとしてアドレス拡張のトリックスクールを使用します。一度に1つのプログラム(複数のプロセスで構成される場合があります(Chromeは異なるプロセスにタブを配置します)。OS自体は、ローカルの固定ディスクからデータをキャッシュするなどの目的でメモリを使用します。使用
rbanffy

回答:


145

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

プロセス対応できる最大サイズは4GBです。メモリアドレススペースを混同する可能性がありますプロセスは、アドレス空間よりも多くのメモリを持つことができます。これは完全に合法であり、ビデオ処理やその他のメモリ集約型アプリケーションでは非常に一般的です。 プロセスには、数十GBのメモリを割り当てて、自由にアドレススペースにスワップしたり、アドレススペースからスワップアウトしたりできます。一度に2 GBのみがユーザーアドレススペースに移動できます。

自宅に4台のガレージがあれば、50台の車を所有できます。それらをすべてガレージに保管することはできません。少なくとも46個を保存するには、別の場所に補助ストレージが必要です。ガレージに保管する車と通りの駐車場に保管する車はあなた次第です。

これは32ビットOSを意味しますか、WindowsでもUNIXでも、マシンのRAM +ページファイルが4GBを超えるハードディスクにある場合(たとえば、8GB RAMと20GBページファイル)、「メモリが使い果たされる」ことはありませんか?

絶対にそれはそれを意味しません。1つのプロセスがそれ以上のメモリを使用する可能性があります!繰り返しますが、プロセスが使用するメモリの量は、プロセスが使用する仮想アドレス空間の量とほぼ完全に無関係です。ガレージに保管する車の数は、所有する車の数とはまったく関係ありません。

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

はっきりしない場合、私のポイントは、メモリとアドレス空間を同じものと考えるのをやめるべきだということです。なぜなら、それらはまったく同じものではないからです。

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

50台の車と4台の車庫があり、通りに100台の駐車場があります。駐車場のサイズを200スポットに増やします。50台の追加駐車スペースの代わりに150台の追加駐車スペースを使用した結果、車の速度が上がりますか?


26
私はこの答えが手元の質問に対処していないことを発見し、ポイントでほとんど欺de的です。
リグ

48
@リグ:素晴らしい、あなたの建設的な批判を聞いてうれしいです。より良い答え書いて、あなたを欺くものではなく、より適切であると思う種類の答えを見せてください。
エリックリッパー

4
@BlueRaja:物理メモリメモリを混同していると思われます。物理メモリは、メモリへの高速アクセスを可能にする最適化にすぎません。プロセッサキャッシュがメモリへの高速アクセスを可能にする最適化であるように。 メモリ、ページファイルで予約されているすべての意図と目的のスペースです。ページファイル内の特定のページが(1)仮想メモリアドレスにマップされているか、(2)ディスクから物理メモリにコピーされているかは、割り当てられているかどうかの問題とは無関係です。
エリックリッパー

4
@BlueRaja:この件に関するRaymond Chenの記事が役立つかもしれません。彼は、ページファイルから4GBを割り当てる方法を示しています。それはプロセスが所有するメモリです。プロセスはもちろん一度にすべてに対処することはできませんが、ページを未使用のVMページにマッピングし、しばらく使用してから破棄することで、任意のページに対処できますblogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
エリック

3
エリック、Windows(および他のOS)が仮想アドレス空間に実際にメモリを確保することなくメモリを「予約」できることを明示的に述べていれば、この答えはより明確でした。対処しますか?」それに対する答えは、「仮想アドレス空間にページングするためにそれを参照するために使用する何らかのページIDがあり、そこにアドレスすることができる」と思いますが、私は知りませんあなたの答えは言っていません:)
ティムウィ

67

CPUは最大4GbのRAMしかアドレスできないことは事実です。ただし、現在のCPUはMMU(メモリ管理ユニット)を使用して、プロセス固有のメモリアドレスを物理メモリアドレスに変換します。

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

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

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

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

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


それがサポートしていない場合、それは私がそれを上で言ったことを修正するということですか?

10
Windows XPはPAE(SP2以降)をサポートしていますが、マシンがPAEをサポートしている場合でも4GBを超えるRAMは無視します。こちらをご覧ください。ハードウェアベースのデータ実行防止に使用されます。NX/ XDビットは、「通常の」ページテーブルエントリではなく、PAEページテーブルエントリでのみ使用できます。
ワイザード

チップセットは、選択したOSやハックに関係なく、サポート/使用できるメモリ量の制限要因にもなります。
モアブ

5
32ビットウィンドウのコンシューマバージョンが4GBを超えるRAMをサポートしない理由は、かなりの数のメモリでかなりの数のハードウェアドライブが正しく動作しないことがわかったからです。当時、サーバー/ウルトラハイエンドワークステーション以外では4GBを超えるRAMが非常にまれだったため、ドライバーをメンテナンスしたほとんどの企業は、顧客ベースの0.1%のみが使用するドライバーを更新するためにお金を費やしていませんでした。
ダン・ニーリー

6
@DanNeely OS メモリをサポートしていますが、ライセンスの問題により制限されています。これはサードパーティのハッキングであることに同意しますが、これはWindowsのコンシューマーバリアントのみを対象としています。Windows 2000以降のサーバーベースのWindowsディストリビューションでは、4GBを超えるメモリがサポートされています(最初のリンクを参照)。
ブレークスルー

15

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

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

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


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

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

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


各プロセスが取得する4GBのアドレス空間のうち、実際に使用できるのは2GBのみです。他の2GBはカーネルが使用するために予約されています。/ 3GBのブートオプションは、一部のプログラムは、より多くのRAMを使用できるようにすることができます。
ワイザード

1
@Breakthrough:「ページファイルのサイズを増やしてもパフォーマンスが向上することはありません」これは真実ではないと思います。たとえば、スワップが多い場合、OSは未使用のプログラムデータをより積極的にスワップアウトし、空きディスクをディスクキャッシュなどに使用できます。構成によっては、これによりパフォーマンスが向上する場合があります。これらの問題に触れ、ページファイルが重要である理由についてServerFaultの上の素敵な答えは、あります:serverfault.com/questions/23621/...
sleskeは、

2
「ページファイルのサイズを大きくしてもパフォーマンスが向上することはありません」などのブランケットステートメントに注意してください。ページファイルが小さすぎると、ページファイルが大きくなるよりディスクスラッシングが大きくなる可能性があります。この質問の回答とコメントをご覧ください。
マークブース

1
@sleske良い点、私はそれを「通常はない」タイプのものに更新しました。私はそれがサーバーに大きな違いをもたらすかもしれないことに同意しますが、ほとんどの人にとって、私が理解しようとしていたポイントは、RAMを増やすだけの方が良いということです(ページングしているとき、パフォーマンスはかなり遅いですそれが得ることができるように)。
ブレークスルー

-1

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

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


上記の他の以前の回答で指摘されているように、これは間違っています。
ChrisInEdmonton

私が間違ったという特定の事実を指摘していただけますか?
ドミトリーグリゴリエフ

1
1つのプロセスで4 GB以上を使用できます。具体的には、以前の回答では、「プロセスはアドレス空間よりも多くのメモリを持つことができます」と指摘されています。
ChrisInEdmonton

2
たとえば、blog.superuser.com / 2011/04/23 /…を参照してください。今、確かに、4 GB以上を同時に使用することはできませんが、1つのプロセスでメモリのマップ解除と再マップを行うことができます。 1つのプロセスで4 GB、わずかな簿記があります。そのブログ投稿はかなりWindows固有のものです。32ビットLinuxインストールで、4 GBを超えるメモリが割り当てられたデータベースサーバーを実行しました。もちろん最近では、64ビットLinuxを実行するだけでした。
ChrisInEdmonton

1
OK、すみません。mmapメモリを追加する可能性については考えていませんでした。
ドミトリーグリゴリエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.