仮想マシン

仮想マシン

執筆済 コンピュータ言語処理系

用語が 2 つの意味で使われる。

種類 何を模倣するか
プロセス VM(言語 VM) JVM、CPython VM、V8 抽象的な計算機
システム VM VMware、KVM、Hyper-V 物理マシン全体

ここでは前者を扱う。

言語 VM の役割#

バイトコードを解釈して実行する。 実機と言語の間に抽象の層を置く。

提供するもの 内容
命令の実行 ディスパッチループ
メモリ管理 GC
型システムの実行時表現 オブジェクト、クラス
例外処理 スタック巻き戻し
スレッド 並行性のモデル
安全性 境界検査、検証

ディスパッチ#

VM の中心は次のループ。

while (true) {
    opcode = code[pc++];
    switch (opcode) {
        case ADD: ...
        case LOAD: ...
    }
}

この switch の分岐が予測できないため、 分岐予測が 外れ続けて遅くなる。

対策として

  • 計算 goto — 命令ごとに分岐点を分け、予測を効かせる
  • スーパー命令 — 頻出する組を 1 命令にまとめる
  • JIT — ディスパッチ自体を無くす

システム VM との対比#

システム VM は特権命令をトラップして仮想化する。 ハードウェア支援(Intel VT-x、AMD-V)により オーバーヘッドが小さくなり、 クラウドの基盤になった。

コンテナはカーネルを共有する点で VM より軽いが、 分離の強度は VM より弱い

参考文献#

ノート一覧を閉じる