仮想記憶(カキュウキオク)とは | 意味や読み方など丁寧でわかりやすい用語解説
仮想記憶(カキュウキオク)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
仮想記憶 (カキョウメモリ)
英語表記
virtual memory (バーチャルメモリ)
用語解説
仮想記憶とは、コンピュータが利用できるメモリ空間を、実際の物理メモリ(RAM)の容量に縛られずに、あたかもそれ以上の大きな容量を持つかのように見せかける技術である。これにより、プログラムは物理メモリの制約を気にすることなく、より大きなメモリ空間を利用できる。オペレーティングシステム(OS)とハードウェア(主にCPU)が連携して実現する、現代のコンピュータシステムにおいて不可欠な基本技術の一つだ。
仮想記憶が必要とされる背景には、いくつかの課題がある。まず、物理メモリの容量には限りがあるため、多くのプログラムを同時に実行しようとすると、すぐにメモリが不足してしまう。次に、複数のプログラムがそれぞれ異なるメモリ領域を要求し、互いに干渉しないように管理する必要がある。さらに、プログラムの作成者は通常、物理メモリ上のどこに自分のコードやデータが配置されるかを意識することなくプログラミングしたいと考える。物理アドレスを直接管理することは複雑で、プログラムの移植性も損なわれるため、このような負担を軽減する必要がある。仮想記憶はこれらの課題を解決するために導入された。
仮想記憶の基本的な仕組みは、プログラムが扱う「仮想アドレス」を、実際の物理メモリ上の「物理アドレス」に変換することにある。プログラムは仮想アドレス空間という、非常に大きな連続したメモリ空間を見ているが、実際に物理メモリ上に存在するのはその一部に過ぎない。この仮想アドレスから物理アドレスへの変換は、CPU内のMMU(Memory Management Unit)と呼ばれる専用のハードウェアによって行われるため、非常に高速に処理される。
このアドレス変換を実現する主要な方式に「ページング」がある。ページングでは、仮想アドレス空間と物理メモリをそれぞれ固定長の小さなブロックに分割する。仮想アドレス空間のブロックを「ページ」、物理メモリのブロックを「ページフレーム」と呼ぶ。例えば、ページとページフレームのサイズが4KBであれば、仮想アドレス空間は4KB単位のページに、物理メモリは4KB単位のページフレームに分割される。OSは、各プロセス(実行中のプログラム)が持つ仮想ページが、物理メモリ上のどのページフレームに対応するか、あるいはまだ物理メモリ上にロードされていないかを管理する「ページテーブル」という表を持つ。
プログラムが特定の仮想アドレスにアクセスしようとすると、MMUはこの仮想アドレスをページ番号とページ内のオフセットに分解し、ページテーブルを参照して対応する物理ページフレームの番号を探し出す。そして、その物理ページフレームの先頭アドレスとページ内のオフセットを組み合わせることで、最終的な物理アドレスを特定する。
もし、プログラムがアクセスしようとした仮想ページが現在物理メモリ上に存在しない場合、これを「ページフォールト」と呼ぶ。ページフォールトが発生すると、MMUはOSに割り込みを発生させ、OSがそのページをディスク上の「スワップ領域」や「ページングファイル」と呼ばれる専用の領域から物理メモリに読み込む。これを「ページイン」と呼ぶ。物理メモリに空きがない場合は、OSは現在物理メモリ上にあるページの中で、最も使用頻度の低いページなどを選び出し、それをスワップ領域に書き出すことで物理メモリに空きを作る。これを「ページアウト」と呼ぶ。このディスクとのデータのやり取りによって、物理メモリの容量を超えた仮想メモリ空間を実現している。ただし、ディスクアクセスは物理メモリへのアクセスと比較して非常に遅いため、ページフォールトが頻繁に発生すると、システムの性能が著しく低下することがある。
また、仮想記憶は「メモリ保護」の機能も提供する。各プロセスは自分専用の独立した仮想アドレス空間を持つため、あるプロセスが別のプロセスのメモリ領域に直接アクセスすることはできない。ページテーブルはプロセスごとに異なるため、MMUがアドレス変換を行う際に、そのプロセスに許可されていない物理アドレスへのアクセスを検知し、不正なアクセスとして処理を中断させることができる。これにより、一つのプログラムの不具合が他のプログラムやシステム全体に影響を及ぼすことを防ぎ、システムの安定性とセキュリティを向上させる。
仮想記憶の導入によるメリットは大きい。物理メモリの容量に縛られずに大規模なプログラムを実行でき、また多くのプログラムを同時に効率的に実行できる。プログラマは物理アドレスを意識することなく、シンプルにプログラムを作成できる。さらに、メモリ保護により、システムの安定性と信頼性が向上する。一方で、アドレス変換のオーバーヘッドや、ページフォールト発生時のディスクアクセスによる性能低下、ページテーブルを管理するためのメモリ消費といったデメリットも存在するが、現代のOSとハードウェアはこれらのデメリットを最小限に抑え、仮想記憶の恩恵を最大限に引き出すように設計されている。