仮想メモリの本体ページングファイルを攻略
「ウインドウズが管理するのは仮想メモリである」とは?
CPUやOS(オペレーティングシステム)は、物理メモリを細かい区画=アドレスで区切って管理している。物理メモリ上の区画を「物理アドレス」と呼ぶのだが、搭載メモリ容量が少ないと使用できる物理アドレス、つまりアプリケーションに割り当てるメモリ領域がすぐに不足してしまう。こうしたメモリ不足の問題を解消するために考え出されたのが「仮想メモリ」という仕組みだ。この仕組みは、現在主流の32ビットCPUに搭載された「仮想8086モード」と「ページング」という機能によって実現されている。
CPUはページング機能を使い、物理メモリを4KBの「ページ」という単位で多層化する。この多層化という処理によって、搭載した物理メモリ=物理アドレス以上にメモリアドレスを割り当てることを可能にしている。こうして“仮想”的に生成されたメモリが「仮想メモリ」で、仮想メモリに対して割り当てられたアドレスが「論理アドレス」。ウィンドウズXPをはじめとするウィンドウズOSが管理しているのは、この仮想メモリなのだ。物理アドレスと論理アドレスの対応関係は、CPUが発行する「ページテーブル」という表のようなもので管理されている。このページテーブルは、物理アドレスと論理アドレスとの対応関係を随時変換することで複数作成できる(変換処理はCPUが担当)。ページテーブルは、「仮想8086モード」によってパソコンの中に生成された仮想マシン=プログラム実行環境ごとに割り当てられる。OSがアプリケーションからのメモリ要求を受け取ると、仮想メモリマネージャがページテーブルを基に仮想マシンに論理アドレスを割り当てるわけだ。なお、仮想メモリは、OS以外のアプリケーションにとって”使用できるメモリ領域"であり、物理・論理アドレスの速いは意識されない。
「Windowsタスクマネージャ」の<パフォーマンス>タブを開き、「コミットチャージ」セクションで仮想メモリ関係の情報をチェックできる。①合計……現在実行中のすべてのプロセス(プログラム)で使用されている仮想メモリのサイズ②制限値……ページングファイルのサイズを変化させないでプロセスに割り当てることのできる仮想メモリのサイズ③最大値……システムの起動からその時点までに使用された仮想メモリの最大サイズ
①<プロセス>タブで<表示>メニュー→②<列の選択>を選び、メモリ使用量と仮想メモリサイズにチェックを入れて⑤<OK>ボタンを押すと、プログラムが使用する物理メモリと仮想メモリを確認できる
ページングファイルは物理メモリと仮想メモリの仲介役
アプリケーションは物理アドレス・論理アドレスの違いを意識する必要はないが、OSはそうはいかない。CPUがデータを演算処理するには、必ずそのデータが物理メモリ上に存在しなければならないからだ。アプリケーションからの演算処理要求を受け取ると、OSは対象となる仮想メモリ内のデータを物理メモリに読み込む処理を実行する。対象となるデータが物理アドレスlこある場合はそのままCPUに送られるが、データが論理アドレスにある場合は、物理アドレスの範囲に移動しなければならない。このとき、物理メモリ=物理アドレスがいっぱいの場合は、新たなデータを読み込むための空きを作らなければならない。この空きを作るために、物理メモリ内のデー夕を一時的に退避させる場所としてOSが用意したのが「ページングファイル」というハードディスク上の領域だ。
ほかのデータを続み込むために物理メモリ内のデータをページングファイルに書き出すことをページアウトという。逆に、物理メモリ内に存在しないデータの呼び出しが論理アドレス内で行なわれた場合には、ページングファイルからデータを物理メモリに読み込む。この処理をページインという。論理アドレス内に各データには、物理メモリ内に残しておく際の優先度の情報が付加されている。この優先度の情報を記録しているのが「ページテーブルエントリ(PTE)」で、各ページテーブルごとに用意される。仮想メモリマネージャはこのPTEを基にページイン・ページアウトの処理を実行するわけだ。
ページングファイルの本体は、起動ドライブ(通常は「C:」)のルートディレクトリ(もっとも上の階層)にある「pagefile.sys」だ。この「pagefile.sys」の保存先は、設定次第で別の場所に移動することも可能
ページングファイルのサイズは次の方法で調べることができる。①「マイコンピュータ」アイコンを右クリック→②<プロパティ>を選び、開いたダイアログの③<詳細設定>タブで「パフォーマンス」セクションの④<設定>ボタンを押す。さらに開いたダイアログの⑤<詳細設定>タブにある⑥数値がページングファイルのサイズだ
<詳細設定>タブの<変更>ボタンを押すと、ページングファイルの設定を行なう「仮想メモリ」ダイアログが表示される。
①システムが管理しているドライブの情報 ②ドライブに割り当てられたページングファイルの初期-最大サイズ ③選択したドライブの空き領域④初期設定ではここにチェックオン⑤「初期サイズ」欄の初期値は物理メモリ容量の1.5倍⑥「最大サイズ」欄の初期値は物理メモリ容量の3倍⑦最小ページングファイルサイズ ⑧システムが推奨するページングファイルサイズ ⑨選択したドライブに割り当てられているページングファイルのサイズ
32ビットOSが扱える仮想メモリのサイズ
マイクロソフトが公開している情報などを見ると、32ピッ卜版のウィンドウズXPが扱えるメモリ(仮想メモリ)のサイズは4GBまでなっている。これは、32ビットアドレッシングによって論理アドレスを生成しているからだ。具体的に言えば、32ビット版のウィンドウズXPは2の32乗=4,294,967,296バイト、つまり4GBぶんのメモリアドレスを管理できるのだ。ちなみに、64ビット版のウィンドウズXPでは2の64乗=16TB(1TB=1,024GB)の仮想メモリを扱うことができる。
32ビット版ウィンドウズXPの初期状態では、物理メモリの1.5倍のサイズでページングファイルが作成される。最大サイズは物理メモリの3倍だ。ただし、物理メモリの搭載容量が1.5GBや2GBだとこの前提が崩れる。ウインドウズXPのベースになったウィンドウズ2000では、物理メモリが2GB未満のとき、ページングファイルの初期サイズは物理メモリの1.5倍か2GBのどちらか少ない値に設定される。XPもこの仕様を踏襲していると思われる。なお、物理メモリが2GB以上の場合は、ページングファイルの初期サイズは2GBに設定される。また、1.5GB以上の物理メモリを搭載しているとき、ページングファイルの最大サイズは4GB。これは、ワンボリューム(ドライブ)あたりのページングファイルの最大サイズは4,096MBまでという制限があるからだ。
※ドライブあたりのページングファイルの「最大サイズ」は4,096MBであり、初期設定ではこの制限を超えた数値を指定することはできないのだ
「仮想メモリ」ダイアログでページングファイルを管理!
「仮想メモリ」ダイアログでは、ページングファイルの本体の初期サイズと最大サイズを決めるなどの設定が行なえる。ページングファイルは、システムのパフォーマンスにダイレクトに関わってくるので、自分の環境や操作スタイルにあわせて最適な設定にしておきたい。
1.ページングファイルの管理をシステムに任せてしまう
「カスタムサイズ」設定では、ページングファイルの初期サイズと最大サイズをユーザーが決めることができるが、これを完全にシステムに任せることもできる。「仮想メモリ」ダイアログで①「システム管理サイズ」にチェックを入れて②<設定>ボタンをクリック。③<OK>ボタンを押し、さらに④<OK>→<OK>→<はい>とボタンを押してパソコンを再起動すると設定が有効になる
2.ページングファイルを使わない設定に変更するには
「仮想メモリ」ダイアログで①ページングファイルのあるドライブを選択し、②「ページングファイルなし」にチェックを入れて③<設定>ボタンをクリック。④<OK>ボタンおよび<はい>ボタンを押してパソコンを再起動するとページングファイルを使わない設定にできる
<PR>メモリー:ネット最安はどこ!?
ノジマオンライン | TSUKUMO |
ページングファイルのサイズを固定して断片化を防ぐコツ
ページングファイルは、ページイン・ページアウト処理によってデータの書き込みや削除がひんぱんに行なわれる。サイズがダイナミックに変化するため、パソコンを長期間使用しているとページングファイルも断片化が進行する。しかし、ページングファイルはシステム予約領域としてロックされているため、「ディスクデフラグツール」を使って断片化を解消することができないのだ。ページングファイルの断片化を予防するうえで有効なのが、ページングファイルのサイズを固定するという設定だ。
ページングファイルのサイズを固定するには、
「仮想メモリ」ダイアログで
①仮想メモリを作成するドライブを選択し、
②「カスタムサイズ」にチェックオン。
③「初期サイズ」欄と「最大サイズ」欄の両方に
④の数値を半角で入力して
⑤<設定>ボタンを押す。
あとは⑥くOK>および<はい>ボタンを押して
ダイアログをすべて閉じ、パソコンを再起動しよう 「ClearPageFileAtShutdown」アイコンをレジストリに作成
レジストリエディタを起動し、①左ウインドウでHKEY_LOCALMACHINE→SYSTEM→CurrentControlset→ControlSession Manager→Memory Managementとキー(フォルダ)をたどって開き選択する。右ウインドウに②「CtearPageFileAtShutdown」アイコンがあればダブルクリックする。なければ、③何もないところで右クリック→<新規>→④<DWORD値>を選んで作成(名前は半角で入力)しよう。アイコンをダブルクリックして開くダイアログの⑤「値のデータ」欄に半角で「1」を入力し、⑥<OK>ボタンを押す。終わったらレジストリエディタを終了し、パソコンを再起動する
ページングファイルもデフラグできる
ディスク上のファイルの断片化を解消し、コンピュータのパフォーマンスを改善するデフラグツール。従来では難しいと考えられていた完全常駐型デフラグ機能を実現。空きリソースのみを使うことでPCの作業状況にかかわらず随時デフラグ作業を行うことが可能になり、スケジューリングも不要。 今バージョンでは、新型デフラグエンジンを搭載し、ディスクの空きスペースが極めて少ない状態でもデフラグが可能になった。さらに、何百万もの断片化など、極めて重度な断片化状態でもデフラグも可能。
カーネルは可能な限り物理メモリ内に置いておこう
物理メモリの搭載容量によって、OSのカーネル(ウインドウズXPの本体)の一部も物理メモリからページングファイルに書き出される。こうなると、パフォーマンスが下がるので、搭載メモリ容量が256MB以上の環境ではカーネルをできる限り物理メモリに置いておくための設定を施しておこう。
レジストリエディタを起動し、 ①左ウィンドウでHKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Control→SessionManager→Memory Managementとキー(フォルダ)をたどって開き選択する。 右ウインドウにある②「DisablePagingExecutive」アイコンをダブルクリックして開き(アイコンがなければDWORD値形式で作成)、③「値のデータ」欄に半角で「1」と入力して④<OK>ボタンを押す。終わったらレジストリエディタを終了し、パソコンを再起動しよう
ページングファイルのサイズの履歴を統計的に調べる
ウインドウズXPに標準で付属する「パフォーマンス」コンソールを利用すると、ページングファイルのサイズなどを一定の時間軸でグラフ化し、視覚的に確認することができる。ページングファイルを固定する際の目安となるサイズの上限を調べたり、特定の操作でどれだけページングファイルが使われるかを調べたりできる。ここでは、ページングファイルのピーク値を調べる場合を例に、操作方法を紹介しよう。
1.「パフォーマンス」を起動する
<スタート>メニュー→<ファイル名を指定して実行>
を選び、①「名前」欄に半角で「perfmon.msc」と入力、②<OK>ボタンを押して「パフォーマンス」を起動する。右ウィンドウで③「システムモニタ」を選択し、④グラフのフィールド内で右クリック→⑤<プロパティ>を選ぶ
2.グラフ化するカウンタを追加
ステップ1の操作で開いたダイアログの①<データ>タブに移動し、すでにあるカウンタ項目を②<削除>ボタンで削除してから③<追加>ボタンを押す。開いたダイアログの④にチェックオン、⑤で「Process」を選択して⑥にチェックを入れ、⑦「Page FileBytes Peak」を選択。⑧にチェックを入れて⑨「Total」を選び、⑩<追加>→⑪<閉じる>とボタンを押す
グラフのスケールを調整しておく
続いてプロパティダイアログの①<グラフ>タブに移動し、「垂直スケール」の②「最大」欄と③「最小」欄にグラフの縦軸の最大・最小値を半角で入力する。「最小」は「0」でもよいが、「最大」は「仮想メモリ」ダイアログなどを参照し、ページングファイルの最大値に近い値をMB単位で入力しておこう
チェック間隔を調整
次に①<全般>タブの②「自動サンプリング」にチェックを入れ、③の入力欄にべージングファイルの最大値をチェックする間隔を秒単位(半角)で入力する。ここは任意で設定すればよいが、1分(60秒)や5分(300秒)くらいの間隔にしておくとよいだろう。ほかは初期設定のままで④<OK>ボタンを押す
結果がグラフで表示される
「パフォーマンス」のウインドウ内に①ページングファイルのピーク値の履歴が折れ線グラフで表示される。なお、②や③のボタンを押すことで、折れ線グラフ以外の形式で結果を表示することもできる。グラフからページングファイルの最大サイズを割り出し、ページングファイルを固定する際の目安にするとよいだろう