Chapter 3 プロセス仮想マシン(第一回)
他のマシン(ABI)向けにコンパイルされたプログラムを仮想マシンを使って動かせるようにしましょう、というお話。
そういったプログラムを動かすためには、システム全体を仮想マシンで扱う方法もありますが、ここでは他のマシン向けのプロセスに仮想環境を提供して、動かせるようにする。ゲストプロセスは、ランタイムの仮想環境によってホストプロセスと同等に扱えるようになる。それを表したのが下図。
仮想マシンの実装
典型的なプロセス仮想マシンの構成を下図に示しました。
ここでは、構成要素の説明をします。
- ローダーは、ゲスト用のメモリイメージにコードとデータを書き込みます。
- その後、ローダーは初期化に移行する。初期化ブロックでは、コードキャッシュや補助のテーブルのためにメモリを確保します。さらに、初期化ブロックはホストOSにシグナルハンドラをもうける。
- エミュレーションエンジンは、インタープリットとバイナリ変換のどちらか、もしくは両方を使用してゲストプロセスの命令をエミュレートします。バイナリ変換を使う場合、変換されたターゲットコードはコードキャッシュに保持されます。
- コードキャッシュマネージャは、どの変換されたコードをキャッシュするか、といったことを管理します。
- OSコールエミュレータは、ゲストプロセスが発行したシステムコールのエミュレートを担当します。
- 仮想環境では、must handle trapsやゲストプロセスに対する割り込みに対処する必要があります。この部分は、例外エミュレータが担当します。