メモリ仮想化には、ソフトウェア ベースのメモリ仮想化とハードウェア アシストによるメモリ仮想化の 2 種類があります。
仮想化によって導入される特別なレベルのメモリ マッピングのため、ESXi は、すべての仮想マシン間でメモリを効率的に管理できます。仮想マシンの一部の物理メモリが共有ページにマッピングされるか、マッピングされていないページまたはスワップアウトされているページにマッピングされます。
ホストは仮想メモリ管理を行いますが、ゲスト OS が認識したり、ゲスト OS のメモリ管理サブシステムの干渉を受けたりすることはありません。
各仮想マシンの VMM は、ゲスト OS の物理メモリ ページから、基盤となるマシン上の物理メモリ ページへのマッピングを保持します(VMware は、基盤となるホスト物理ページを 「マシン」 ページとして参照し、ゲスト OS の物理ページを 「物理」 ページとして参照します)。
各仮想マシンは、ゼロ ベースの連続したアドレス可能物理メモリ スペースを参照します。各仮想マシンによって使用される、サーバの基盤となるマシン メモリは、必ずしも連続しません。
ソフトウェア ベースのメモリ仮想化でも、ハードウェア アシストによるメモリ仮想化でも、ゲストの仮想アドレスとゲストの物理アドレスとのマッピングは、ゲスト OS によって管理されます。ハイパーバイザーの役割は、ゲストの物理アドレスをマシン アドレスに変換することだけです。ソフトウェア ベースのメモリ仮想化では、ゲストの仮想アドレスとマシン アドレスとのマッピングをソフトウェアで統合し、ハイパーバイザーによって管理されるシャドウ ページ テーブルに保存します。ハードウェア アシストによるメモリ仮想化では、ハードウェア機器を活用し、ゲストのページ テーブルとハイパーバイザーによって管理されるネストしたページ テーブルを使用して統合されたマッピングを生成します。
図は、ESXi でのメモリ仮想化の実装を示しています。
- ボックスはページを表し、矢印はそれぞれメモリ マッピングを表します。
- ゲスト仮想メモリからゲスト物理メモリへの矢印は、ゲスト OS 内のページ テーブルが保持するマッピングを表します(仮想メモリから x86 アーキテクチャ プロセッサのリニア メモリへのマッピングは示していません)。
- ゲスト物理メモリからマシン メモリへの矢印は、VMM が保持するマッピングを表します。
- 点線の矢印は、ゲストの仮想メモリから、シャドウ ページ テーブル (これも VMM が保持) のマシン メモリへのマッピングを表します。仮想マシンを実行している基盤となるプロセッサは、シャドウ ページ テーブルのマッピングを使用します。