仮想記憶
読み:かそうきおく
外語:virtual memory

 論理的なアドレス空間を、物理メモリーアドレス空間に対応させる、メモリー管理技術の一つ。
目次

概要
 二種類のアドレス空間を用意する。一つは、実際にメモリーバス内で使われる「物理アドレス空間」である。
 そしてもう一つは、プログラムから見える「仮想アドレス空間」である。
 仮想記憶は、ページングとしてメモリー空間を小さな領域(ページ)に区切り、ページごとに任意の物理アドレスを割り当てて管理する機能である。

特徴

利点
 例えば、次のような利点がある。
  1. 実行のたびに異なる物理メモリーにロードされるプログラムに対しOSが同一の仮想メモリーアドレスを割り当てることで、プログラムを常に同一アドレスに読み込まれるという前提で作ることができる
  2. 一時的に不要となる仮想メモリー上のデータを補助記憶装置に退避することにより、物理メモリー量より大きな仮想メモリー空間を扱うことができる
 このとき、仮想的なアドレス空間を「論理アドレス」又は「仮想アドレス」といい、実際の主記憶装置のアドレスは「物理アドレス」又は「実アドレス」と呼ばれる。

ページング
 メモリー空間を適当なサイズで分割し、それぞれをページとして扱う手法をページングという。
 必要に応じて、仮想メモリー空間に物理メモリー空間を割り当てて使用する。物理メモリーが不足したら、その物理メモリーの内容を補助記憶装置(ハードディスクドライブなど)に退避し、その仮想メモリーのページには物理メモリーの割り当てがないマークを付ける。これを「ページアウト」という。
 逆に、一旦ページアウトしたものが必要になった場合は、空いた物理メモリーに補助記憶装置から読みだし、再び仮想メモリーのページに当該の物理メモリーアドレスを割り当てる。れを「ページイン」という。

アドレッシング
 仮想記憶がない場合は、プログラムから見えるアドレスは、CPUのメモリーバスのアドレス、つまり物理アドレスと一対一で対応している。
 しかし仮想記憶が有効の場合、プログラムから見えるアドレスは物理アドレスではなく仮想アドレスとなる。アドレスの長さ(32ビットMPUなら32ビット長、64ビットMPUなら64ビット長)自体は変わらないが、その長さをある程度で区切り、ページ番号を指す部位と、そのページ内のオフセットを分ける、という方法を採ることが多い。
 例えばx86(32ビット)の場合、アドレス32ビット中の上位10ビットはページディレクトリーの番号(1024エントリー)、中間の10ビットはページテーブルを表わす番号(1024エントリー)として使い、この20ビットからテーブルを参照することで32ビット長の物理メモリーアドレスを作りだし、残る下位12ビットをオフセットとして使って1ページ4Kiバイトの空間として使えるようになっている(32ビットWindowsではほぼ使われていないPAEが有効の場合は若干仕様が異なる)。
 ページディレクトリーやページテーブルはCPU内に設定するための領域があり、OSが必要に応じて書き換えることで、適時必要となる仮想記憶の処理を実施することになる。

再検索