Windows での RAM、仮想メモリ、ページファイル、メモリ管理
元の KB 番号: 2160852
まとめ
この記事には、32 ビット バージョンの Windows での仮想メモリの実装に関する基本情報が含まれています。
Windows などの最新のオペレーティング システムでは、アプリケーションや多くのシステム プロセスは、常に仮想メモリ アドレスを使用してメモリを参照します。 仮想メモリ アドレスは、ハードウェアによって実際の (RAM) アドレスに自動的に変換されます。 オペレーティング システム カーネルのコア 部分のみが、このアドレス変換をバイパスし、実際のメモリ アドレスを直接使用します。
実行中のすべてのプロセスで必要なメモリが、システムにインストールされている RAM のボリュームを超えていない場合でも、仮想メモリは常に使用されます。
プロセスとアドレス空間
32 ビット バージョンの Windows で実行されているすべてのプロセス (アプリケーション実行可能ファイルなど) には、コンピューターにインストールされている RAM の量に関係なく、0 から 4,294,967,295 (2*32-1 = 4 GB) までの仮想メモリ アドレス ( 仮想アドレス空間) が割り当てられます。
既定の Windows 構成では、この仮想アドレス空間の 2 ギガバイト (GB) が各プロセスのプライベート使用用に指定され、他の 2 GB はすべてのプロセスとオペレーティング システム間で共有されます。 通常、アプリケーション (メモ帳、Word、Excel、Acrobat Reader など) では、2 GB のプライベート アドレス空間のごく一部しか使用されていません。 オペレーティング システムは、使用されている仮想メモリ ページにのみ RAM ページ フレームを割り当てます。
物理アドレス拡張 (PAE) は、物理メモリ (RAM) アドレスを 36 ビットに拡張する Intel 32 ビット アーキテクチャの機能です。 PAE は仮想アドレス空間のサイズ (4 GB のまま) を変更せず、プロセッサがアドレス指定できる実際の RAM のボリュームのみを変更します。
プロセスで実行されているコードで使用される 32 ビット仮想メモリ アドレスと 36 ビット RAM アドレスの間の変換は、オペレーティング システムによって維持される 変換テーブル に従って、コンピューター ハードウェアによって自動的かつ透過的に処理されます。 任意の仮想メモリ ページ (32 ビット アドレス) は、任意の物理 RAM ページ (36 ビット アドレス) に関連付けることができます。
次の一覧では、さまざまな Windows のバージョンとエディションでサポートされている RAM の量 (2010 年 5 月時点) について説明します。
Windows バージョン | RAM |
---|---|
Windows NT 4.0 | 4 GB |
Windows 2000 Professional | 4 GB |
Windows 2000 Standard Server | 4 GB |
Windows 2000 Advanced Server | 8 GB |
Windows 2000 Datacenter Server | 32 GB |
Windows XP Professional | 4 GB |
Windows Server 2003 Web Edition | 2 GB |
Windows Server 2003 Standard Edition | 4 GB |
Windows Server 2003 Enterprise Edition | 32 GB |
Windows Server 2003 Datacenter Edition | 64 GB |
Windows Vista | 4 GB |
Windows Server 2008 Standard | 4 GB |
Windows Server 2008 Enterprise | 64 GB |
Windows Server 2008 Datacenter | 64 GB |
Windows 7 | 4 GB |
ページファイル
RAM は限られたリソースですが、ほとんどの実用的な目的では、仮想メモリは無制限です。 多数のプロセスが存在する場合があり、各プロセスには 2 GB のプライベート仮想アドレス空間があります。 既存のすべてのプロセスで使用されているメモリが使用可能な RAM を超えると、オペレーティング システムは 1 つ以上の仮想アドレス空間のページ (4 KB の部分) をコンピューターのハード ディスクに移動します。 これにより、その RAM フレームが他の用途で解放されます。 Windows システムでは、これらの ページアウト ページは、パーティションのルートにある 1 つ以上のファイル (Pagefile.sys ファイル) に格納されます。 各ディスク パーティションには、このようなファイルが 1 つ存在する可能性があります。 ページ ファイルの場所とサイズは、 System Properties で構成されます ([ Advanced]>をクリックし、 Performance をクリックして、 Settings ボタンをクリックします)。
ユーザーは頻繁に ページファイルを作成する必要がありますか? インストールされている RAM の量と、ワークロードに必要な仮想メモリの量によって異なるため、この質問に対する答えは 1 つもありません。 他の情報がない場合は、インストールされている RAM の 1.5 倍を推奨することをお勧めします。 サーバー システムでは、通常、十分な RAM を用意して不足がないようにし、ページファイルが使用されないようにします。 これらのシステムでは、大きなページファイルを維持するのに役立つ目的を果たさない場合があります。 一方、ディスク領域が豊富な場合は、大きなページファイル (たとえば、インストールされている RAM の 1.5 倍) を維持しても問題は発生せず、サイズを気にする必要もなくなります。
パフォーマンス、アーキテクチャの制限、および RAM
どのコンピューター システムでも、負荷が増加すると (ユーザー数、作業量)、パフォーマンスは低下しますが、非線形の方法で行われます。 特定の時点を超えて負荷や需要が増加すると、パフォーマンスが大幅に低下します。 これは、一部のリソースが非常に不足しており、ボトルネックとなっていることを意味します。
ある時点で、不足しているリソースを増やすことはできません。 これは、 アーキテクチャの制限 に達したことを意味します。 Windows で頻繁に報告されるアーキテクチャの制限には、次のようなものがあります。
- システム用の 2 GB の共有仮想アドレス空間 (カーネル)
- プロセスあたり 2 GB のプライベート仮想アドレス空間 (ユーザー モード)
- 660 MB のシステム PTE ストレージ (Windows Server 2003 以前)
- 470 MB のページ プール 記憶域 (Windows Server 2003 以前)
- 256 MB の非ページ プール 記憶域 (Windows Server 2003 以前)
これは特に Windows Server 2003 に適用されますが、Windows XP と Windows 2000 にも適用される場合があります。 ただし、Windows Vista、Windows Server 2008、および Windows 7 では、これらのアーキテクチャの制限がすべて共有されているわけではありません。 ユーザー メモリとカーネル メモリ (ここでの数値 1 と 2) の制限は同じですが、PTE やさまざまなメモリ プールなどのカーネル リソースは動的です。 この新機能により、ページング メモリと非ページ メモリの両方が有効になります。 これにより、前に説明した制限を超えて、カーネル全体が使い果たされるまで、PTE とセッション プールを拡張することもできます。
次のような頻繁に見つかったステートメントと引用符で囲まれたステートメント:
ターミナル サーバーでは、4 GB の RAM が使用される前に、2 GB の共有アドレス空間が完全に使用されます。
これは、場合によっては当てはまる場合があります。 ただし、システムが特定のシステムに適用されるかどうかを確認するには、システムを監視する必要があります。 場合によっては、これらのステートメントは特定の Windows NT 4.0 または Windows 2000 環境からの結論であり、必ずしも Windows Server 2003 には適用されません。 実際にこれらのアーキテクチャの制限に達する可能性を減らすために、Windows Server 2003 に大幅な変更が加えられました。 たとえば、カーネル内にあった一部のプロセスは、共有仮想アドレス空間で使用されるメモリを減らすために、カーネル以外のプロセスに移動されました。
RAM と仮想メモリの使用状況の監視
パフォーマンス モニターは、システムのパフォーマンスを監視し、ボトルネックの場所を特定するための原則ツールです。 パフォーマンス モニターを開始するには、Startをクリックし、[コントロール パネル] をクリックし、[Administrative Tools] をクリックし、パフォーマンス モニターをダブルクリックします。 いくつかの重要なカウンターと、それらがあなたに伝えるものの概要を次に示します。
メモリ、コミット済みバイト数: このカウンターは、仮想メモリの需要の尺度です。
これは、プロセスによって割り当てられたバイト数と、オペレーティング システムがページ ファイル内の RAM ページ フレームまたはページ スロットをコミットしたバイト数 (またはその両方) を示します。 Committed Bytesが使用可能な RAM より大きくなると、ページングが増加し、使用されているページファイルのサイズも大きくなります。 ある時点で、ページング アクティビティはパフォーマンスに大きな影響を与え始めます。
プロセス、ワーキング セット、_Total: このカウンターは、 アクティブ 使用されている仮想メモリの測定値です。
このカウンターは、すべてのプロセスで使用されている仮想メモリが RAM 内に存在するように、必要な RAM の量を示します。 この値は常に 4,096 の倍数であり、これは Windows で使用されるページ サイズです。 使用可能な RAM を超える仮想メモリの需要が増加すると、オペレーティング システムは、使用可能な RAM 使用率を最適化し、ページングを最小限に抑えるために、プロセスの仮想メモリの量をワーキング セット内で調整します。
ページング ファイル、使用中の %pagefile: このカウンターは、実際に使用されているページファイルの量の尺度です。
このカウンターを使用して、ページファイルが適切なサイズであるかどうかを判断します。 このカウンターが 100 に達すると、ページファイルがいっぱいになり、処理が停止します。 ワークロードの変動に応じて、ページファイルのサイズが 50 ~ 075% 以下になるようにしたい場合があります。 ページファイルの多くが使用されていて、異なる物理ディスクに複数のページファイルがある場合、パフォーマンスが向上する可能性があります。
メモリ、ページ/秒: このカウンターは、最も誤解されている対策の 1 つです。
このカウンターの値が大きいと、パフォーマンスのボトルネックが RAM の不足から生じるとは限りません。 オペレーティング システムでは、メモリオーバー コミットメントのためにページのスワップ以外の目的でページング システムが使用されます。
メモリ、ページ出力/秒:このカウンターは、1 秒ごとに RAM ページ フレームを解放するためにページファイルに書き込まれた仮想メモリ ページの数を示します。
これは、ページングがパフォーマンスのボトルネックであると思われる場合に監視するのに最適なカウンターです。 コミット済みバイト数がインストールされている RAM より大きい場合でも、ページ出力/秒がほとんどの場合、またはゼロの場合、RAM の不足によるパフォーマンスに大きな問題はありません。
Memory、Cache Bytes、Memory、Pool Nonpaged Bytes、Memory、Pool Paged Bytes、Memory、System Code Total Bytes、Memory、System Driver Total Bytes:
これらのカウンターの合計は、4 GB の仮想アドレス空間の共有部分の 2 GB のうち、実際に使用されている量の測定値です。 これらを使用して、前に説明したアーキテクチャの制限のいずれかにシステムが達しているかどうかを判断します。
メモリ、使用可能な MB: このカウンターは、仮想メモリ (新しい割り当て、またはページ ファイルからページを復元する) の需要を満たすために使用できる RAM の量を測定します。
RAM が不足している場合 (たとえば、Committed Bytes がインストールされている RAM より大きい場合)、オペレーティング システムは、アクティブに使用されていない仮想メモリ ページをページ ファイルにコピーすることで、インストールされている RAM の一部をすぐに使用できるように維持しようとします。 したがって、このカウンターは 0 に達せず、システムが RAM 不足かどうかを示す適切な兆候であるとは限りません。