仮想マシン
用語が 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 より弱い。
参考文献#
- Tim Lindholm et al. The Java Virtual Machine Specification, Java SE 21 Edition. https://docs.oracle.com/javase/specs/jvms/se21/html/
- Robert Nystrom. Crafting Interpreters. Genever Benning, 2021.(全文公開) https://craftinginterpreters.com/
- Gerald J. Popek, Robert P. Goldberg. Formal requirements for virtualizable third generation architectures. Communications of the ACM 17(7), 1974. https://doi.org/10.1145/361011.361073