仮想メモリとは、メインメモリのメモリアドレス空間を分割したり、細切れにしたものを組み替えたりして作られた仮想的なメインメモリのことです。
一般的に、それぞれの仮想メモリは、メモリアドレスが0から始まる連続したメモリアドレスを持ったメモリアドレス空間として扱えます。これを多重仮想記憶と言います。
なお、仮想メモリを実現するにはいくつかの手法があります。具体的な手法に関しては、上位の知識で説明します。
一般的なマルチタスクOSでは、マルチタスクが行われるプロセスごとに仮想メモリを割り当てます。
つまり、マルチタスクを行うプロセスが10個あれば、それらに割り当てられる仮想メモリも10個です。
なお、プロセスから見ると、割り当てられた仮想メモリは、専用のメインメモリに見えます。
仮想メモリのおかげでマルチタスクが行われる各プロセスは、お互いに干渉しないため、お互いのプロセスを意識しなくて良くなります。
マルチタスクOSで、マルチタスクが行われる各プロセスが起動と終了を繰り返すことは、仮想メモリの割り当てと解放を繰り返すことを意味します。
これにより、空いているメモリアドレス空間は、メモリアドレス空間上で点在することになります。
ひと繋がりの空いているメモリアドレス空間を利用して仮想メモリを作ったり、点在している空いているメモリアドレス空間を集めて仮想メモリを作ったりできるため、効率的にメモリアドレス空間を利用できます。
メインメモリだけでなく、補助記憶装置も使って、仮想メモリを作ると、メインメモリのサイズよりも大きな仮想メモリを作ることができます。
仮想メモリ上のメモリアドレスのことを仮想アドレスと言います。
また、メインメモリなど実際のメモリのメモリアドレスのことを物理アドレスと言います。
物理アドレスは、仮想アドレスと区別が必要な場合に利用します。
仮想メモリのメモリアドレス空間のことを仮想アドレス空間と言います。
また、メインメモリなど実際のメモリのメモリアドレス空間のことを物理アドレス空間と言います。
物理アドレス空間は、仮想アドレス空間と区別が必要な場合に利用します。
仮想アドレスと物理アドレスの変換は、メモリ管理ユニットが行います。
この変換を行うための対応情報(変換テーブル)は、通常、メインメモリに格納されています。メモリ管理ユニットは、この変換テーブルにアクセスして、変換に必要な情報を得ます。
そして、この変換テーブルは、カーネルが管理します。つまり、カーネルが「仮想メモリの作成」と「各プロセスへの仮想メモリの割り当て」を行います。
なお、一般的なメモリ管理ユニットは、最近行った仮想アドレスと物理アドレスの変換を記憶できるテーブルを持っており、そのテーブルを利用することにより、高速に変換を行えます。