豊田 孝

図1●Windows XP Professionalの「ヘルプとサポート」画面
図2●Windows Server 2003の「ヘルプとサポート」画面
 今回は,仮想メモリーを取り上げます。正確な定義は後ほど行いますが,仮想メモリーはハードウエアとソフトウエアの中間に位置する,たいへん面白い部品です。仮想メモリーの意味を知りたい場合や,その機能を確認したり変更したい場合,皆さんはどのような操作を行っていますか?おそらく,スタート・ボタンをクリックすると表示される「ヘルプとサポート」画面を利用する人が結構いるのではないかと思います。Windows XP Professionalの「ヘルプとサポート」画面は図1[拡大表示]のようになっています。

 「パフォーマンスと保守」という項目を四角で囲みました。これは,仮想メモリーを調べるために私が操作した項目です。仮想メモリーは「パフォーマンスと保守」という項目に含まれているます。つまり,システムのパフォーマンスや保守に関係していることになります。参考のために,Windows Server 2003の「ヘルプとサポート」画面も紹介しておきます(図2[拡大表示])。

 2つの画面を比較してみると分かりますが,2つの画面構成はかなり異なっています。私は,サーバー環境では,コマンドライン・ツールか自作ツールを使用しています。

仮想メモリーの定義

 「ヘルプとサポート」画面から,仮想メモリーはシステムのパフォーマンスや保守に関係していることがわかりました。ここで,仮想メモリーをまず簡単に整理しておきましょう。Microsoftは,仮想メモリーに関して,次のような説明を行っています。

“コンピュータのRAMが不足し,直ちにより多くのメモリーが必要な場合,Windowsでは,ハードディスク・ドライブの領域を利用してRAMのシミュレートが行われます。これは仮想メモリーまたはページング・ファイルと呼ばれます”

 この説明は,次のような意味を伝えようとしています。

  • RAM(メモリー)は有限資源である
  • Windowsはメモリーの代わりにハードディスクを使用する
  • メモリーの代役となるハードディスク領域は,仮想メモリーあるいはページング・ファイルと呼ばれる

図3●仮想メモリーの使用を無効にしようとすると,メッセージが表示される
 メモリーは前回触れたCPUと深い関係があります。ご承知のように,CPUの動作スピードと比べた場合,メモリの動作は低速といわれます。それでは,メモリーの代わりに使用される仮想メモリーはどうなのでしょうか?仮想メモリーの実体はハードディスクということもあり,さらに低速といわれます。すると,仮想メモリーというのは,プログラムを動作させるための最善の策ではなく,苦肉の策である,ということになります。

 表現を変えれば,仮想メモリーが使われた場合,プログラムの実行スピードは落ちる,ということになります。プログラムの実行スピードの低下を考えた場合,仮想メモリーを使用しないことも選択肢の1つになりえますが,仮想メモリーの使用を無効にしようとすると,Microsoftは図3[拡大表示]のような警告メッセージを表示します。つまり,仮想メモリーの使用を無効にすることを“実質的に”禁じているのです。

 これはいったいどういうことでしょうか?結論を言えば,デフォルト設定をそのまま受け入れるか,あるいは,自分の責任において最適化してほしい,ということです。今回は,最適化手順ではなく,仮想メモリーが現在どのように使用されているのかを確認するサンプル・プログラムを紹介します。サンプル・プログラムを繰り返し実行すれば,最適化するためのデータを収集できると思います。仮想メモリーはメモリーが不足したときに使用されるわけですから,対策としてはメモリーの増設が基本です。サンプル・プログラムの実行結果はメモリー増設時の参考データにもなるでしょう。

図4,図5●サンプル・プログラムの実行画面

本日のサンプル・プログラム

 サンプル・プログラムをこちらからダウンロードし,実行してみてください。実行結果は当然皆さんのシステム環境に応じて異なります。私のWindows XP環境では図4図5のような結果が出ました。図4は,Windows XP起動直後に取得したものです。図5は,Windows XPを起動し,続けてVisual Studio .NET ProfessionalとWindows Media Playerを実行した時点でキャプチャしたものです。

 図5では2Mバイトほど増えています。多数のプログラムを実行しているような場合,表示される数字はこのようなものではありません。つまり,使用するプログラムの数,プログラムの機能,プログラムの大きさなどに応じてまったく異なる結果が返されます。例えば,Webサーバー応答が遅くなったなあ,と感じられた場合には,表示される数値に注意し,不要なプログラムの動作を停止するのもひとつの手かもしれません。ぜひ試してみてください。

サンプル・プログラムの解説

 本日のサンプル・プログラムはリスト1のようになっています。前回のソースコードを多少変更してありますから,比較検討してみてください。比較する際には,何もかも一挙に覚えようと力むのではなく,この変更はまったく無意味なのでは?などの軽いノリで味わうようにしてください。言語文法上どうしても気になる箇所があるようでしたら,こちらで公開している情報を参照しながら,自分なりに考えてみてください。

 ちなみに,Microsoftは仮想メモリーを操作するために,pagefileconfig.vbsというツールを用意しています。拡張子から分かるように,このツールはVBScriptで記述されています。pagefileconfig.vbsはSystem32ディレクトリに格納されています。私が確認したところでは,このツールはWindows Server 2003だけではなく,Windows XPにも用意されています。

サンプル・プログラムの活用法と拡張

 上に示したサンプル・プログラムの実行画面には,「ファイルの大きさ(MB)」という項目があります。ほとんどの方は,デフォルト値をそのまま使用していると思います。そのデフォルト値は,搭載メモリー量に1.5を掛けて算出されています。このため,次のようなコードを追加すれば,皆さんのシステムに搭載されているメモリ量を表示させることができます。

strAnswer = strAnswer & vbCRLF & "あなたの搭載メモリ: " & (instPageFile.AllocatedBaseSize * 2 / 3)

図6●仮想メモリーの設定をWindowsに一任するオプション
 なお,仮想メモリーの設定は,図6[拡大表示]のようにWindowsシステムに一任してしまうオプションも用意されています。

 現在有効となっている値を記録した上で設定を変更し,サンプル・プログラムを実行しながら,いろいろ試してみるとよいでしょう。Windowsがどのように仮想メモリーを作っていくのか直に観察できるはずです。

 現在流通しているアプリケーションの多くは多機能化し,とかくメモリーを大食いするといわれます。予算の関係でメモリー増設や新規マシン購入がおぼつかないような場合,本日のサンプル・プログラムの実行結果を参考にしながら,必要な機能だけを実装した軽めのアプリケーションを選択することもできるかもしれません。また逆に,日ごろ使用するアプリケーションがそれほど仮想メモリーを使用していないような場合,仮想メモリーの設定値を低めに設定しなおせば,利用可能ハードディスク領域を増やせることになります。

 本日は以上で終了です。お疲れ様でした。次回またお会いいたしましょう。ごきげんよう!