VM 【Virtual Machine】 仮想マシン / バーチャルマシン / 仮想機械 / 仮想コンピュータ
概要
VM(Virtual Machine)とは、コンピュータやCPU(マイクロプロセッサ)の機能を模倣し、まったく同じように振る舞うソフトウェア。また、そのようなソフトウェアによってコンピュータ内に構築された仮想的なコンピュータ。仮想化技術におけるVM
仮想化技術におけるVMはコンピュータ全体の動作を模したソフトウェアで、その上でオペレーティングシステム(OS)を起動して制御することができる。OSやその上で動作するソフトウェアからはある特定の仕様を持つ物理的なコンピュータであるかのように見える。
VM上でソフトウェア環境を構築することにより、一台の物理的なコンピュータをあたかも複数台あるかのように分割し、それぞれを別の利用者が互いに影響を与えず独立に操作したり、それぞれ別のOSを動作させたりすることができる。また、ある機種向けのOSやソフトウェアを、その機種を模したVMを用意することで別の機種上で動作させることができる。
ただし、VMを動作させることによる処理能力の消費が大きく、物理的なコンピュータをそのまま使う場合よりも性能が大きく制約される。また、導入や運用には高度な知識や技能が必要なシステムが多く、構造が複雑なためトラブルが発生した場合に対処するのが難しい。
コンピュータのハードウェア資源を管理し、VMを実行するソフトウェアを「ハイパーバイザー」(hypervisor)という。通常はハードウェア上でOSが実行されるが、仮想化環境ではハードウェア上でハイパーバイザーが動作し、ハイパーバイザーが用意した個々のVM上でOSが実行される。
ソフトウェアの実行環境としてのVM
ソフトウェアの実行環境としてのVMは、ある仕様を持つCPUのように振る舞うソフトウェアで、そのプロセッサ向けのプログラムコードを読み込んで実行することができる。
VMに実装されているのは実際には存在しない架空のプロセッサの機械語(マシン語)の命令セットで、その架空の機械語で記述されたプログラムを読み込んで、自らが動作しているコンピュータのCPUが解釈できる実際の機械語プログラム(ネイティブコード)に変換して実行する。
この架空のプロセッサ向けのプログラムを「中間コード」という。命令語が1バイトで構成されるものを特に「バイトコード」と呼ぶ。プログラミング言語で記述されたソースコードは開発者側でコンパイラなどによって一旦中間コードのプログラムに変換されて利用者へ提供され、利用者側のVMで動的に実行可能コードに変換される。
このように中間コードとVMを介在させることにより、開発者側はプログラミング言語から中間コードへのコンパイラが提供されていれば、利用者の機種やOSごとに配布プログラムを用意する必要がなくなる。利用者側はその中間コードのVMが利用できれば、ソフトウェアが自分の機種やOS向けに個別に対応していなくても使用できるようになる。
この仕組みを利用する著名な例として、Java言語の実行環境である「Java仮想マシン」(Java VM)や、.NET共通仕様を満たす様々なプログラミング言語で対応プログラムを開発できる「.NET Framework」「.NET Core」などがある。