PC 教室ソフトウエア ⇒ 仮想記憶

ソフトウエア~仮想記憶という概念

仮想記憶という言葉を聞いたことがあるでしょうか。 もし聞いたことが無いとしても、 ページングファイル(Paging File)、 もしくは、スワップファイル(Swap File)という言葉なら、 耳にしたことがあると思います。

ページングファイルとスワップファイルは、同じ物を示しています。 しかし、ページングファイルは、仮想記憶を実現するために必要な要素でしかありません。 ページングファイルの別名であるスワップファイルのスワップは、 英単語の Swap です。 この場合、Swap は、 入れ替える、交換するという意味合いです。

何と何の間で、何が入れ替えられるのでしょうか。 メインメモリと、 HDD などの二次記憶媒体上にある、 ページングファイルとの間で、 データ、もしくは、プログラムコードが入れ替えられるのです。

何の為でしょうか。 実際に搭載しているメインメモリの容量以上の、 メインメモリーが搭載されているかのように使うことが出来るようにする為です。

メインメモリの容量一杯まで、 データやプログラムコードで埋め尽くされたのならば、 それ以上、新しい記憶場所をメモリに求めることは出来なくなります。 新たにプログラムを起動することも、新たに新規のデータを作成することも、 今編集途中のデータをファイルに保存することさえ出来なくなります。

しかし、仮想記憶の機能を持つ OS ならば、 利用者は、実際に搭載されているメインメモリの容量以上に、 メインメモリが搭載されているかのように利用することができます。

仕組みは、メインメモリ上のデータと、 そのデータ記憶されていたメモリ番地のペアが、 HDD などの二次記憶媒体上にある、 ページングファイルに記録され、 ページングファイルに記録された部分の番地のメインメモリを、 空き領域として再利用するのです。 空き領域が足らない場合は、さらに他のメモリ番地上のデータを、 HDD などの二次記憶媒体上にある、 ページングファイルに記録することで、 メインメモリ上に必要な空き領域を創り出すのです。 もし、ページングファイルに書き出された以前のデータが必要になった場合は、 ページングファイルから必要なデータをメインメモリに読み込めば良い訳です。

メインメモリが一杯になってしまった時に、 ページングファイルにメインメモリ上のデータやプログラムの一部を書き出し、 書き出した部分を空き領域とすることや、 ページングファイルに書き出されたデータやプログラムを使う必要が生じた時に、 ページングファイルからメインメモリの必要な番地に、 データやプログラムを読み込む動作、 これをメモリスワップと呼びます。

仮想記憶は、 OS が持つ機能の一部です。 メモリの容量が一杯になった時に発生する、 メインメモリからページングファイルへの書き出しは、 最も利用される確率が少ないと思われるデータ、もしくは、プログラムから行われるようになっています。 そうしないと、 CPU は、 メモリスワップの作業ばかりをすることになり、 本来の仕事(プログラム)の作業をすることが出来ないからです。

メモリスワップのアルゴリズム(考え方)は、色々あります。 CPU にも、 この様な仮想記憶の機能をサポートする為の機構が用意されているのが普通です。 最近の OS は、 Mach OS に採用されている、 仮想記憶の為のアルゴリズムを導入しています。

Mach OS については、ここでは触れませんが、 Mach OS が持つ、仮想記憶のアーキテクチャにつては、 少し触れます。

Mach OS の仮想記憶のアーキテクチャ以前は、 ページングファイルは、利用できる仮想的なメモリ容量分のページングファイルを作成する必要がありました。 しかし、Mach OS の仮想記憶のアーキテクチャでは、 利用できる仮想的なメモリ容量は、 実際に搭載されているメインメモリの容量と、 ページングファイルの容量の合計が、 利用できる仮想的なメモリ容量となります。

二次記憶装置は、 一番アクセススピードが速い HDD でさえ、 メインメモリと比べれば、大変アクセススピードが遅いです。 ですから、メモリスワップ動作が行われると、 二次記憶装置とメインメモリの間の内容の交換が頻繁に発生するため、 システムの性能低下を招くことになります。

いくら処理能力の高い CPU を搭載していたとしても、 本来の CPU の性能を発揮させることが出来なくなってしまうのです。 性能の高い CPU を搭載する為にコストを掛けるより、 十分なメインメモリを搭載する為にコストを掛けた方が良いという理屈は、 こういうことからも言えるのです。

また、ページングファイルの作り方を工夫することによって、 メモリスワップにかかる時間を少しでも短縮できる方法もあります。 HDD が、一台しかない場合は、以下の工夫は出来ません。

まず、ページングファイルは、OS や、 プログラムが記録されていない HDD に作成した方が良いです。 次に、ページングファイルは、複数の HDD に、 分散して作成した方が良いです。 例えば、HDD が三台ある場合、 一台目に OS や、 プログラムをインストールする様にして、 二台目と三台目の HDD に、 必要とするページングファイルのサイズの半分のページングファイルを、 それぞれ作成するのです。 しかし、メインメモリを十分に搭載する場合と比べれば、 劇的な変化はありません。