仮想化
1960年代に生まれた「仮想化」という用語は、ハードウェアとソフトウェアの組合せによって実現された仮想機械の登場とともに使われるようになった。同時期にリソース仮想化である仮想記憶も登場している。仮想機械という用語は IBM M44/44X という実験機で初めて使われている。それ以前に IBM CP-40 が仮想機械を実装しており、このときは pseudo machines(擬似機械)と呼ばれていた。「仮想化」にしても「仮想機械」にしても、その意味は時代と共に変化していった。
プラットフォーム仮想化とは、ハードウェアプラットフォーム上でホストプログラム(制御プログラム)が擬似的なコンピュータ環境を生成し、ゲストソフトウェアに対して「仮想機械」を提供するものである。ゲストソフトウェアは、それ自体もオペレーティングシステムであるのが一般的で、あたかも独立したハードウェアプラットフォームにインストールされたかのように動作する。単一の物理マシン上で複数の仮想機械をシミュレート可能なことが多く、仮想機械の個数はホストであるハードウェアリソースによって制限される。ゲストOSとホストOSは一般に同一である必要はない。ゲストシステムは特定の周辺機器(ハードディスクドライブやネットワークカード)へのアクセスを必要とすることが多く、その場合その機器とゲストのインタフェースを提供する必要がある。
プラットフォーム仮想化の手法はいくつか存在する。以下にそれらを列挙する。
コンテナ仮想化とは、アプリケーションの基盤となる動作環境を仮想化する技術である。
iPodやUSBメモリなどのマスストレージ機器上にポータブルなワークスペースを生成する仮想化技術。次のような製品がある。 アプリケーションレベル – Thinstal – 可搬記憶媒体にインストールされたアプリケーションをドライバを使わずに実行可能にする。 OSレベル – MojoPac、Ceedo、Aargo、U3 – 可搬記憶媒体にアプリケーションをインストールし、別のPC上で利用可能にする。 マシンレベル– moka5、LivePC – 可搬記憶媒体上に仮想機械からOSやアプリケーションを含めた完全なソフトウェア環境をインストールし、任意のマシン上で実行可能にする。
仮想化という用語の起源は古く、1960年代には既に広く使われていた。ネットワーク全体や個々の機能やコンポーネントなど、コンピューティングの様々な面に適用されてきた。仮想化技術に共通する目的は、カプセル化によって「技術的詳細を隠蔽する」ことである。仮想化は、例えばアクセスを多重化したり、異なる物理的位置にあるリソースを統合したり、制御システムを単純化したりすることで、根底にある実装を隠蔽した外部インタフェースを生成する。近年、新たな仮想化基盤や仮想化技術が登場し、この円熟した概念が再び注目されるようになってきた。
抽象化やオブジェクト指向などの用語と同様、「仮想化」という用語は様々な文脈で用いられる。本項では、これを主に以下の2つに分類して解説する。
物理サーバをOSレベルで仮想化し、複数の仮想サーバを単一の物理サーバ上で動作させる。ゲストOSとホストOSは同一である。あるゲスト環境で動作するアプリケーションから見れば、独立したシステムで動作しているように見える。Linux-VServer、Virtuozzo、OpenVZ、LXC (Linux Containers) 、AIX ワークロードパーティション (WPAR)、Solaris Containers、FreeBSD jail などがある。
仮想機械によってハードウェア全体を擬似的に再現する。全く異なるアーキテクチャのハードウェア向けのゲストOSを修正することなしに動作させることができる。これは、新たなCPUなどのハードウェア開発が完了する前にソフトウェアを並行して開発する手法として使われてきた。具体例としては、Bochs、PearPC、Virtual PCの PowerPC 版、QEMU、Hercules emulator(IBMのメインフレームのエミュレータ)などがある。エミュレーションのための技法は様々で、有限オートマトンを使った技法から、仮想化プラットフォーム上での動的再コンパイル技法まである。
同じアーキテクチャのプラットフォーム上で、ゲストOSを隔離された状態で、かつ無修正で動作させる仮想機械。この手法は IBM CP-40 などが起源とされる。メインフレーム以外の領域では、Parallels Workstation、Parallels Desktop、VirtualBox、Virtual PC、VMware Workstation、VMware Server、QEMU、Adeos、Mac-on-Linux、VirtualLogix VLX Virtualizer for VT などがある。