仮想化とは、コンピューティングにおいて、物理的な計算資源をソフトウェアで抽象化し、利用者やプログラムが生のハードウェアではなく、簡略化された、あるいは分離された見え方の上で動作できるようにする仕組みである。この抽象化は、プロセッサ、メモリ、ストレージ、ネットワーク、さらにはオペレーティングシステム全体に及ぶことがある。その結果、柔軟な割り当て、ワークロード同士の分離、1台の物理ホスト上で複数の論理システムを動かすことが可能になる。
仕組み
仮想化は通常、ハードウェアへのアクセスを仲介するソフトウェア層によって提供される。その層は、各ゲストに仮想ハードウェアを提示したり、命令を変換したり、名前空間を分離したりする。現代のプロセッサには仮想化を効率よく動かすための機能が備わっていることが多く、仮想資源と物理資源の間を変換する際のオーバーヘッドを減らすのに役立つ。
一般的な種類
- 完全仮想化 — ハイパーバイザーが完全なハードウェアをエミュレートし、変更していないゲストOSを動かせる。
- 準仮想化 — ゲストが仮想化を認識し、性能向上のために特別なインターフェースを利用する。
- コンテナ型(OSレベル)仮想化 — 別個のOSインスタンスではなく、名前空間とcgroupsを用いて共有カーネル内のプロセスを分離する。
- エミュレーション — ソフトウェアが別のハードウェアアーキテクチャを模倣し、あるアーキテクチャ向けにコンパイルされたソフトウェアを別の環境で動かせるようにする。
用途と重要性
仮想化は、サーバー統合、効率的なクラウドコンピューティング、テストや開発環境、安全なマルチタスクの基盤となる。スナップショット、クローン作成、ワークロードのライブマイグレーション、きめ細かなリソース制限も可能にする。管理者は、稼働率の向上、ハードウェアコストの削減、信頼性とセキュリティのためのサービス分離に仮想化を活用する。
違いと考慮点
コンテナは軽量で高速だがカーネルを共有し、仮想マシンはより強い分離を得られる一方でオーバーヘッドが大きい。エミュレーションは互換性を最大化するが、速度は遅い。仮想化方式を選ぶ際には、セキュリティ、性能、ライセンス、管理ツールといったトレードオフが重要になる。より技術的な背景や例については、参考資料を参照されたい。