仮想アドレス、または仮想メモリアドレスとは、アプリケーションやプロセスがメモリにアクセスするために使用するメモリアドレスのことです。物理メモリが断片化されていても、プログラムが連続したアドレスブロックを持つかのように動作できるようにする、シミュレートされたアドレスです。
プログラムが実行されると、そのプログラム用の仮想アドレス空間が割り当てられます。この仮想アドレス空間は、システム上の物理メモリより大きいこともあります。これにより、物理メモリの制限にかかわらず、プログラムは効率的に実行できます。オペレーティングシステムは、メモリマッピングと呼ばれるプロセスを通じて仮想アドレスを管理する重要な役割を果たします。
メモリマッピング: - メモリマッピングは、仮想と物理のメモリアドレス間のマッピングを行います。これには、プログラムの最適なパフォーマンスを確保するためにメモリリソースの管理と割り当てが含まれます。 - オペレーティングシステムは、各プロセスに一意の仮想アドレス空間を割り当て、それぞれが独立してメモリにアクセスできるようにします。これにより、プロセスが互いのデータやメモリ位置に干渉するのを防ぎます。 - 仮想アドレスは抽象化の層を提供し、アプリケーションが基礎となる物理メモリのレイアウトから保護されます。つまり、プログラムは仮想アドレス空間と対話し、データが実際に保存されている物理アドレスを知らずに動作します。 - オペレーティングシステムは、仮想アドレスが物理アドレスとどのように対応するかを格納するページテーブルと呼ばれるマッピングテーブルを維持します。これにより、仮想アドレスと物理アドレスの間の効率的で透過的な変換が可能になります。
ページング: - ページングは、限られた物理メモリリソースの存在下でメモリを管理するためにオペレーティングシステムが使用する技術です。 - 物理メモリがいっぱいになると、オペレーティングシステムはページングを利用して、物理メモリとハードディスクなどのストレージデバイスとの間でデータをスワップし、プログラムがアクセスしようとしているデータを収容します。 - オペレーティングシステムはメモリを固定サイズのチャンク(ページ)に分割し、各ページには一意のページ番号が割り当てられます。仮想アドレスも同じサイズのページに分割されます。ページテーブルには虚数ページと物理ページ間のマッピングが含まれています。 - プログラムが仮想アドレスにアクセスしようとすると、ページテーブルが参照され、その仮想アドレスに対応する物理アドレスが決定されます。対応するページが現在物理メモリに存在しない場合、ページフォールトが発生し、必要なページがストレージデバイスから物理メモリに取り込まれます。
仮想メモリはコンピュータシステムにおける基本的な概念であり、それを理解することはシステムオペレータや開発者にとって重要です。その理由を以下に示します:
仮想メモリがどのように動作するかを示す例を考えてみましょう:
仮想アドレスは、現代のコンピュータシステムにおいて効率的なメモリ管理と効果的なプログラムの実行を可能にする重要な役割を果たします。仮想メモリを理解することは、システムオペレータや開発者がパフォーマンスを最適化し、メモリ関連のエラーを防ぎ、メモリリソースを効率的に割り当てるために不可欠です。仮想アドレスを利用することで、プログラムは限られた物理メモリでもシームレスに実行できます。