仮想記憶とは

仮想記憶は、コンピュータが実際に搭載している物理メモリ(RAM)の容量を超えた大容量のメモリ空間が利用可能であるかのように見せかける、オペレーティングシステム(OS)の機能のことであり、二次記憶装置(ハードディスクやSSD)の一部を一時的に主記憶装置(RAM)の拡張領域として利用することで、より大きなプログラムの実行や、同時に多数のプロセスを実行可能にするためのメモリ管理技術のことです。

仮想記憶の概要と原理

仮想記憶(Virtual Memory)は、現代のマルチタスクOSにおいて、複数のプログラム(プロセス)が効率的かつ安全にメモリを使用するための基盤となる技術です。

1. 仮想アドレスと物理アドレス

仮想記憶システムでは、CPUがプログラムを実行する際に使用するアドレスを仮想アドレス(Virtual Address)と呼びます。この仮想アドレス空間は、各プロセスに独立して割り当てられます。一方、実際にRAM上にあるメモリ位置を物理アドレス(Physical Address)と呼びます。

OSは、MMU(Memory Management Unit、メモリ管理ユニット)と呼ばれるハードウェアと連携し、ページテーブルという対応表を用いて、プログラムが使用する仮想アドレスを、実際の物理アドレスにリアルタイムで変換します。

2. ページングとスワッピング

仮想記憶の管理は、メモリを固定サイズのブロックに分割して行うページング(Paging)という手法に基づいており、このブロックをページ(Page)と呼びます。

  • ページイン(Page In): プログラムが必要とするデータやコードが現在RAM上になく、二次記憶装置(ディスク)に格納されている場合、OSはそのページをディスクからRAMへ読み込みます。
  • ページアウト(Page Out)またはスワッピング(Swapping): RAMの空き容量が不足した場合、OSは現在あまり使用されていないRAM上のページを一時的にディスク上のスワップ領域(またはページングファイル)に書き出します。

このページイン・ページアウトの動作を繰り返すことで、限られたRAMを効率的に共有し、より多くのプログラムを実行することが可能になります。

仮想記憶のメリットとデメリット

メリット

  • メモリ容量の拡張: 物理的なRAM容量に縛られることなく、大容量のプログラムや、多数のプロセスを同時に実行できます。
  • メモリの保護: 各プロセスが独立した仮想アドレス空間を持つため、あるプロセスが別のプロセスのメモリ領域に誤ってアクセスしたり、破壊したりすることを防ぎます。これにより、システムの安定性とセキュリティが向上します。
  • 効率的なメモリ共有: 複数のプロセス間で共通のコード(例:OSのライブラリ)を物理メモリ上の同じ領域に配置し、それぞれの仮想アドレス空間から参照させることで、メモリ使用量を節約できます。

デメリット(スラッシング)

仮想記憶は万能ではなく、スワッピングが過剰に発生するとシステム性能を著しく低下させる可能性があります。

  • スラッシング(Thrashing): プロセスが必要とするページがRAMに収まりきらず、ページインとページアウトの処理が頻繁に繰り返される状態です。この状態になると、CPUの処理時間のほとんどがディスクアクセス(スワッピング)に費やされ、システムの応答性が極端に悪化します。
  • 性能低下: 二次記憶装置(ディスク)は、RAMと比較してアクセス速度が圧倒的に遅いため、スワッピングが発生する頻度が高いほど、システムの処理速度は低下します。

このスラッシングを回避するためには、十分な物理メモリを搭載するか、OSのページ置換アルゴリズム(どのページをスワップアウトするか)を最適化する必要があります。

関連用語

メモリウォール | 今更聞けないIT用語集
マルチタスク | 今更聞けないIT用語集
ソフトウェアエンジニアリング

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。