仮想化とハイパーバイザ
物理ハードウェア上に複数の仮想マシン(VM)を走らせるための基盤技術。CPU・I/O・メモリを論理的に分割し、ゲストOSにあたかも専有ハードウェアがあるかのように見せる。
仮想化要件と特権レベル
- PopekとGoldbergの仮想化要件: センシティブ命令(I/O やシステム状態を変える命令)がすべて特権命令としてトラップ可能であれば、効率的に仮想化できる。
- CPU仮想化は重く、I/O(ハードウェア)仮想化を支援する仕組みが必要。センシティブ命令をトラップしてハイパーバイザが代理実行する。
- ARM (AArch64) の Exception Level: EL0(App) / EL1(Guest OS) / EL2(Hypervisor、全センシティブ命令をトラップ) / EL3(Hardware)。詳細は cpu-architecture-isa を参照。
- x86 (Intel VT-x): root mode / non-root mode を「縦」に割り、保護リング(Ring0..3)と直交する形で仮想化を支援する。
完全仮想化と準仮想化
- x86アーキテクチャは標準ハードウェア一式の幻想を作る完全仮想化が難しく、ハイパーバイザが複雑化・低速化しやすい。
- 準仮想化(paravirtualization): ゲストOSを改変し、I/O命令の代わりにハイパーバイザへシステムコールを発行させる。Xen が採用。
- VMWare: 1998年発表の商用ハイパーバイザの先駆け。ホストOSの横でゲストOSを動かす。プライベートクラウドが主力で、後にBroadcomが買収。
CPUエミュレーションとの違い
- ハイパーバイザは同一ISA上での分割だが、異なるISAを跨ぐ場合はエミュレーションが必要。
- バイトオーダ(エンディアン)よりも cpu-architecture-isa で扱うメモリ整合性モデル(Total Store Ordering)が変換時に問題になる。cuda 周辺の WSL2 環境構築でも仮想化レイヤが関わる。
microVM
- Firecracker: AWS Lambda の実行基盤となっている Rust 製の軽量microVM。サーバーレス向けにセキュアかつ高速な起動を実現。
- QEMU: 汎用のマシンエミュレータ兼仮想化基盤。
- コンテナ(linux の名前空間ベース)はOSの仕組みを複製するのに対し、VirtualBox等はOSそのものを動かす点で層が異なる。
関連: _moc-systems / operating-system-kernel / webassembly(runtimeによるポータビリティ)