前回、スタックのお話で、以下のような1つのプロセスが保持している、4Gのメモリ空間のお話しをしましたが、皆さん覚えていますでしょうか?
『えっ、4G。うちのパソコン、2Gしかメモリないんですけど…』って思った方、いませんでしょうか? 『一つのプロセス(プログラム)で、4Gですか? 今、WordとExcelの2つ起動しているんですけど…、合計8Gになるんですけど?』、何か、つじつまが合わないですよね。
4Gのメモリ空間と言いましたが、実は、4Gの仮想メモリ空間という表現が、正しい表現なんです。そうすると次は、『仮想メモリって何?』となると思うのですが、一言で言うと、プログラムが、あたかも4Gのメモリ空間を保持して振舞っているように、OS(基本ソフトウェア)が論理的に作り上げたメモリ空間のことです。また、物理的なデバイスは存在していないのですが、それを、ソフトウェアにより、まるで実在しているように見せる技術を、システムの世界では、よく仮想という言い方をします。
※例をあげると、印刷処理で、PDFファイルを出力する仮想プリンタ etc.
この仮想メモリを管理する機能が、OS上に存在し、これを仮想メモリマネージャー(VMManager:Virtual Memory Manager)といいます。では、もう少し、具体的にするとしましょう。例えば、物理メモリが2Gしか搭載していないパソコンで、どのように4Gの仮想メモリ空間を実現しているか説明してみたいと思います。
仮想メモリマネージャーの基本ポリシーは、現在、実行されているプログラムがよく使用するデータを、物理メモリ上に展開し、あまり使用されないデータは、ディスク(ファイルシステム)に保存するというものです。
では、ディスク上に退避されているデータに、プログラムが参照するときに、どうなるかというと、OS上で、ページフォルトというイベント(ソフトウェア割込み:カーネルのある関数が呼びされます。)が発生し、そのイベント内にて、物理メモリ上に、必要なデータを新たに配置します。また、その際に、不要な(使われなくなった)物理メモリ上のデータを、今度はディスク上に退避させます。この入替作業のことをスワップといいます。これにより、1つのプロセスが、あたかも、4Gのメモリ空間を持っているように見せれるわけです。
パソコンが重い、もしくは、遅いと感じたときに、ディスクがカラカラ回り、ハードディスクへのアクセスが非常に多くなっていることを体験したことは、ありませんでしょうか? この原因は、メモリ不足により、先程、説明したスワップが頻繁に発生し、ディスクアクセスが集中していることによるものです。プログラムは、物理メモリへの参照は、非常に高速なのですが、それにくらべるとディスクへのアクセスが、遅いために、そのような現象が発生してしまいます。このような現象が確認できたら、メモリを増設すれば、パフォーマンスを改善出来ます。
単純に処理が遅いというだけであれば、以下の可能性がありますので、注意が必要です。
頻繁なディスクのI/Oを伴う、パーフォーマンスの低下が確認できたときは、メモリ不足の可能性が高いと思われますので、以下の2点により、改善策をこうじてみるべきです。
最後に、もう1点、仮想メモリ空間は、以下のように、アクセスしているプロセスによって、ユーザーモードと、カーネルモードの2つの領域に区分されています。
0~2Gが、ユーザーモードの領域で、2G~4Gがカーネルモードの領域となっています。また、この領域を参照しているプロセスをそれぞれ、ユーザモードのプロセス、カーネルモードのプロセスとしています。ユーザーモードのプロセスには、通常のWordやExcelなどのアプリケーション(VBAなどにより開発したプログラムも含む)やサービスがあり、カーネルモードのプロセスには、OSを構成しているカーネル、ドライバが挙げられます。
※サービスとは、Windowsを構成するプログラムの一つで、バックグラウンドで動作しているプログラムのことです。Linuxなどでは、デーモンと呼ばれるプログラムです。
また、ユーザーモードのアプリケーションは、カーネルモードの領域を参照することはできません。これは、
OSを構成している基本ソフトウェアの領域を保護するためで、この領域に異常が発生すると、OS自体(コンピューター)がおかしくなってしまいますので、こういう構造になっています。
本日説明した、仮想メモリ空間や、仮想メモリマネージャーの内容は、Windowsだけでなく、Linuxなども同等のことが言えます。
ご意見・ご要望等ありましたら、画面最下部のメールアドレスまでご連絡ください。