仮想メモリの定義と仕組み:メモリ管理・ページングを分かりやすく解説
仮想メモリの定義と仕組みを初心者向けに図解で解説。メモリ管理・ページングの原理、応答時間や組込みでの注意点までわかりやすく学べる入門ガイド。
仮想メモリとは、最近コンピュータで使われている技術の一つであるメモリの管理方法です。ハードウェア(CPUやグラフィックカードなどの物理的な部分)はソフトウェアを実行します。ソフトウェアは実行のためにコンピュータのメモリを必要とし、そのメモリ領域にデータや命令を格納して処理を進めます。現代のコンピュータは同時に複数のアプリケーションを動かすことができ、複数の作業を並行して処理します。これをマルチプロセッシングと呼びます。
マルチプロセッシングでは、同時に実行されるプログラム群が限られたハードウェア資源を共有します。実行中のプログラムが増えても、必ずしもプロセッサやメインメモリ(RAM)が増えるわけではありません。そこで仮想メモリは、各プログラムに独立した「仮想アドレス空間」を与え、プログラムから見えるメモリを仮想化することで、少ない物理メモリを効率的かつ安全に分配します。
仕組みの概要
仮想メモリでは、プログラムは連続したアドレス空間(仮想アドレス空間)を持っているように見えますが、実際のデータは物理メモリやディスク上(スワップ領域やページファイル)など、さまざまな場所に分散して格納されます。CPUに搭載されたMMU(メモリ管理ユニット)が、仮想アドレスを物理アドレスに変換し、必要に応じてオペレーティングシステム(OS)が補助します。最近のオペレーティングシステムもこの管理を高度に行い、プロセスごとの保護や共有、ページの入れ替えを制御しています。
ページングとページフォルト(ページングの詳細)
多くの実装は「ページング」という方式を使います。仮想メモリ空間と物理メモリは固定長の単位(ページ、一般に4KBや2MBなど)に分割され、ページ単位で割り当て・移動されます。プログラムがアクセスしたい仮想アドレスが物理メモリ上に存在しない場合、CPUは「ページフォルト(page fault)」を発生させ、OSはそのページをディスクから読み込み、必要ならば物理メモリの別ページをディスクへ書き出して置き換えます。これが一般に「ページング」と呼ばれる動作です。
実装上の主要要素
- 仮想アドレスと物理アドレス:プログラムが使う仮想アドレスと、実際のメモリ位置(物理アドレス)を対応付ける表(ページテーブル)が存在します。
- MMU(メモリ管理ユニット):CPU内のハードウェアで、仮想→物理変換を高速に行います。変換結果をキャッシュするTLB(Translation Lookaside Buffer)も使われます。
- スワップ領域(ページファイル):物理メモリが不足したときに一時的にページを退避するディスク領域。SSDやHDDにより性能差があります。
- ページ置換アルゴリズム:どのページを追い出すかを決めるアルゴリズム(LRU、FIFO、Clockなど)により、効率が左右されます。
- コピーオンライト(COW):プロセスのフォークでメモリを共有しつつ、書き込みがあったときだけコピーを行う最適化です。
利点
- プログラミングの単純化:連続した大きなアドレス空間を使えるため、開発者は物理メモリの配置を意識せずに済みます。
- 保護と分離:プロセスごとに独立した仮想空間を提供し、他プロセスのメモリ不正参照から保護します。
- 効率的なメモリ利用:必要なページだけを物理メモリに読み込む(オンデマンドロード)ことで、限られたRAMを有効活用できます。
- 共有の容易さ:ライブラリやメモリマップドファイルを複数プロセスで共有でき、メモリ使用量を削減できます。
欠点と注意点
一方で仮想メモリには欠点や運用上の注意点もあります。ディスクにページをスワップする際はアクセス遅延が大きく、レスポンス時間が急に増大する可能性があります。多くのページフォルトが発生すると「スラッシング(thrashing)」と呼ばれる状態に陥り、システム全体の性能が著しく低下します。また、ディスクI/Oに依存するため、ディスクの種類(HDDとSSD)により体感性能が変わります。
組込みシステムでの扱い
組込みシステムのような特定のコンピュータでは、非常に高速で一貫した応答時間(リアルタイム性)が求められるため、仮想メモリを使わない設計が選ばれることがあります。仮想メモリを使うと、ページフォルト発生時にディスクからページをロードする必要があり、応答時間の予測が難しくなるのが主な理由です。そのためリアルタイムOSや一部の組込み機器では、仮想メモリ機構を無効にするか、スワップを使わない限定的な方式で運用します。
まとめ
仮想メモリは、現代の多くのコンピュータで使われる強力なメモリ管理技術であり、プログラムごとの分離、メモリ効率の向上、簡便なメモリアクセスを提供します。一方で、ページングに伴う遅延やスラッシング、リアルタイム性の欠如といった問題もあり、用途に応じて適切に設計・運用することが重要です。

プログラムは、広い範囲の連続したアドレスを持っていると思っていますが、実際には、現在使用している部分はメインメモリに散らばっていて、非アクティブな部分はディスクファイルに保存されています。
質問と回答
Q:仮想メモリとは何ですか?
A:仮想メモリとは、コンピュータのメモリを管理する方法の一つで、アプリケーションが所定の大きさのメモリブロックにアクセスすることを可能にします。このメモリブロックは、メインメモリやディスクなど、異なる部分から来ることができます。
Q:仮想メモリはどのように機能するのですか?
A:仮想メモリは、CPUのArithmetic Logic Unitがアプリケーションとシステムリソースの間の変換を行うことで機能します。また、最新のオペレーティングシステムもこの作業の一部を担っています。アプリケーションがシステムメモリにないメモリブロックにアクセスしようとすると、そのアプリケーションは停止し、そのブロックがシステムメモリにロードされます。
Q:仮想メモリを使用しないコンピュータの例を教えてください。
A:組込みシステムは、高速な応答時間や常に同じ応答時間を必要とするため、仮想メモリを使用しないコンピュータの一例です。仮想メモリは応答時間を予測することが難しいため、組み込みシステムでは使用されません。
Q:マルチプロセッシングとは何ですか?
A:マルチプロセッシングとは、コンピュータが一度に複数のことを行うことができ、リソースを共有する複数のアプリケーションを同時に実行することを指します。
Q: アプリケーションがシステムメモリにないメモリブロックにアクセスしようとするとどうなりますか?
A: アプリケーションがシステムメモリにないメモリブロックにアクセスしようとすると、そのアプリケーションは停止し、そのブロックはシステムメモリにロードされます。
Q: ページングとは何ですか?
A: ページングとは、アプリケーションがシステムメモリに保存されていない別の部分にアクセスするために、システムメモリのその部分にあったものをディスクに書き戻す必要があるときに起こることを指します。
百科事典を検索する