QEMU
仮想化 (かそうか、英語 : virtualization )とは、コンピュータ のリソース を抽象化 することであり、ソフトウェアと物理的なハードウェアの間に抽象化されたレイヤーを提供することで、コンピュータリソースを管理するための様々な技術である。仮想化ソフトウェアを実行しているマシンは、さまざまなオペレーティングシステム (OS )で実行されているアプリケーションを管理できる。サーバー、ストレージデバイス、ネットワークリソースなどのハードウェアプラットフォームをソフトウェアで効果的にエミュレートまたはシミュレートする[ 1] 。
主にユーザーに提供するコンピュータそのものをハードウェアの詳細から切り離した状態でソフトウェア化する事を指す。ユーザーは画面切り替えの要領で複数のコンピュータを使い分けられる。管理者にとっては、ユーザーに提供するコンピュータに関わる全ての作業をソフトウェアの設定変更のみで行えるようになり、構成変更に掛かる時間が劇的に短縮されるため、物理的な作業では対応できないような管理を行う事が出来るようになる。ソフトウェア化したコンピュータを仮想マシン、仮想マシンを実際に稼動させるハードウェアを物理マシンと呼ぶ。仮想マシンは別の物理マシン上にデータ移動のみで移す事が出来るため、USBメモリなどにも収められる。
「リソースの物理的特性を、そのリソースと相互作用するシステム/アプリケーション /エンドユーザー から隠蔽する技法。単一の物理リソース(サーバ 、OS、アプリケーション、補助記憶装置 など)を複数の論理リソースに見せかけたり、複数の物理リソース(複数の補助記憶装置群やサーバ群)を単一の論理リソースに見せかけたりできる」という実用的定義がある[ 2] 。また、単一の物理リソースを何らかの特性の異なる単一の論理リソースに見せかけることもできる。そして、仮想回線 により、幅が拡がる。
概要
仮想化という用語の起源は古く、1960年代 には既に広く使われていた。ネットワーク全体や個々の機能やコンポーネントなど、コンピューティングの様々な面に適用されてきた。仮想化技術に共通する目的は、カプセル化 によって「技術的詳細を隠蔽する」ことである。仮想化は、例えばアクセスを多重化 したり、異なる物理的位置にあるリソースを統合したり、制御システムを単純化したりすることで、根底にある実装を隠蔽した外部インタフェースを生成する。近年、新たな仮想化基盤や仮想化技術が登場し、この円熟した概念が再び注目されるようになってきた。
抽象化 やオブジェクト指向 などの用語と同様、「仮想化」という用語は様々な文脈で用いられる。本項では、これを主に以下の2つに分類して解説する。
プラットフォーム仮想化
コンピュータ 全体のシミュレーション
リソース仮想化
リソースの集合体や部分や単純化されたもののシミュレーション
もちろん、仮想化はコンピュータ以外でも重要な概念である。制御システム は複雑な機器の仮想化されたインタフェースを実装したものとも言える。例えば、最近の自動車のアクセルは単にエンジンへの燃料流入量を増やすだけではない。フライ・バイ・ワイヤ を使った航空機は、物理的実装よりも単純化されたインタフェースを提供する。
ビジネス構造の観点では、仮想化とは、従来型の事務所や店舗を構えたビジネスから、インターネット 上などでビジネスを行う方向に転換していくことを指す。
仮想化と対極に位置する概念が透過性 である。仮想化されたオブジェクトは物理的には存在しなくともアクセス可能である。逆に透過性のあるオブジェクトは物理的には存在しているが、利用者にとっては不可視である。
デザインパターンとして
多くの仮想化の形態は、利用者と提供者に関わるデザインパターン でパターン化可能である。利用者と提供者は何らかのインタフェースを使って相互作用する。仮想化は、この両者の間に介在し、利用者に仮想化されたインタフェースを提供すると同時に、提供者にも別の形で仮想化されたインタフェースを提供する。一般に、利用者と提供者の関係は一対多、あるいは多対一、または多対多であり、中間層(仮想化層)だけがその多重性を意識している。
理想的には、仮想化されていない環境で直接やり取りしている利用者と提供者は、仮想化された環境でも修正することなくそのまま機能するのが望ましい。例えば、仮想記憶 では物理アドレス空間と利用者の間に中間層(仮想記憶管理層)が存在する。その中間層は複数の利用者をサポートするため、複数の仮想アドレス空間を提供する。利用者と提供者(物理メモリ)は一般にその多重性に気づく必要はない。
プラットフォーム仮想化
1960年代に生まれた「仮想化」という用語は、ハードウェアとソフトウェアの組合せによって実現された仮想機械 の登場とともに使われるようになった。同時期にリソース仮想化である仮想記憶 も登場している。仮想機械という用語は IBM M44/44X という実験機で初めて使われている。それ以前に IBM CP-40 が仮想機械を実装しており、このときは pseudo machines (擬似機械)と呼ばれていた。「仮想化」にしても「仮想機械」にしても、その意味は時代と共に変化していった。
プラットフォーム仮想化とは、ハードウェアプラットフォーム上でホストプログラム(制御プログラム)が擬似的なコンピュータ環境を生成し、ゲストソフトウェアに対して「仮想機械」を提供するものである。ゲストソフトウェアは、それ自体もオペレーティングシステム であるのが一般的で、あたかも独立したハードウェアプラットフォームにインストールされたかのように動作する。単一の物理マシン上で複数の仮想機械をシミュレート可能なことが多く、仮想機械の個数はホストであるハードウェアリソースによって制限される。ゲストOSとホストOSは一般に同一である必要はない。ゲストシステムは特定の周辺機器(ハードディスクドライブ やネットワークカード )へのアクセスを必要とすることが多く、その場合その機器とゲストのインタフェースを提供する必要がある。
プラットフォーム仮想化の手法はいくつか存在する。以下にそれらを列挙する。
エミュレータ またはシミュレータ
仮想機械によってハードウェア全体を擬似的に再現する。全く異なるアーキテクチャのハードウェア向けのゲスト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 などがある。
ハードウェアによる仮想化
ゲストOSにハードウェアリソースを割り当て、隔離された状態で動作できるようにする仮想機械。2005年と2006年、インテル とAMD は仮想化をサポートする追加ハードウェアを提供した。例えば、VMware Fusion 、VMware Workstation、Parallels Desktop 、Parallels Workstation などがある。
部分仮想化
特にアドレス空間 などのハードウェア環境に限って、複数の実体があるようにシミュレートする仮想機械。いわゆる仮想記憶 である。プロセスが同時並行して動作できるようにするが、ゲストOSが動作することはできない。一般に仮想機械とは見なされないが、仮想化の歴史上は重要であり、CTSS や IBM M44/44X などで使われ、MVS へと受け継がれた。その後の Microsoft Windows も Linux も、基本的にこの手法を採用している。
準仮想化
ハードウェアを擬似するというよりも、ゲストOSに修正を加えることで利用可能となる特殊なAPIを提供する仮想機械。このようなハイパーバイザ のシステムコール を TRANGO や Xen では「ハイパーコール; hypercall」と呼ぶ。Citrix XenServer 、VMware ESX Server 、Win4Lin 9x 、サン・マイクロシステムズ の論理ドメイン 、VirtualLogix の VLX Virtualizer、TRANGO などがある。
OSレベルの仮想化
物理サーバをOSレベルで仮想化し、複数の仮想サーバを単一の物理サーバ上で動作させる。ゲストOSとホストOSは同一である。あるゲスト環境で動作するアプリケーションから見れば、独立したシステムで動作しているように見える。Linux-VServer 、Virtuozzo 、OpenVZ 、LXC (Linux Containers) 、AIX ワークロードパーティション (WPAR) 、Solaris Containers 、FreeBSD jail などがある。
コンテナ仮想化
コンテナ仮想化とは、アプリケーションの基盤となる動作環境を仮想化する技術である。
アプリケーション仮想化
セキュリティや信頼性、移植性 を強化する目的で、アプリケーションを仮想機械でカプセル化された環境で隔離して実行すること。仮想機械はアプリケーションの実行に最低限必要な要素を備えており、OS とアプリケーションの間の層として動作する。例えば、Java仮想マシン 、Microsoft Application Virtualization 、Altiris 、Citrix XenApp などがある。前述の各種仮想化とは異なる手法であり、Smalltalk 、Forth 、Tcl 、Pコードマシン などのインタプリタ 指向言語の流れを汲むものである[ 1] 。
仮想化技術の進展によって、アプリケーション仮想化とアプリケーションストリーミング といった新たな技法が登場した。
リソース仮想化
上述のプラットフォーム仮想化の概念から、補助記憶装置のボリューム、名前空間 、ネットワークリソースといった特定のシステムリソースの仮想化が生まれた。
リソースの集約/連結/結合などにより、大きなリソースプールを形成する。
コンピュータ・クラスター やグリッド・コンピューティング は、上述の各種技術を使い、複数のコンピュータから仮想化された大きなコンピュータを形成する。
パーティショニング は、ディスクやネットワークなどの単一のリソースを分割し、利用しやすい大きさや速度の多数のリソースとして利用可能にする。
例
以下に、仮想化の応用例を列挙する。
サーバ・コンソリデーション
多数の物理サーバを仮想機械によって1つ(あるいは少数)のサーバに統合する。
ディザスタリカバリ
仮想機械によって、一種の「ホットスタンバイ」環境を構築する。バックアップ・イメージを仮想機械上で起動し、現用系のワークロードをそちらに移行させる。
テストと教育
カーネル 開発やOS開発における評価や教育用途に仮想機械を用いる。[ 3] 開発中のシステムがハングアップしても、該当する仮想機械を再起動するだけで済む。
ポータブルアプリケーション
USBメモリ などの可搬記憶媒体上にアプリケーションをインストールし実行可能とする技術。例えばMicrosoft Windows ではレジストリ などの問題があり、USBメモリ上のアプリケーションを直接実行できないという問題があった。これを仮想化によって解決する手法もある。
ポータブルワークスペース
iPod やUSBメモリ などのマスストレージ機器上にポータブルなワークスペースを生成する仮想化技術。次のような製品がある。
アプリケーションレベル – Thinstal – 可搬記憶媒体にインストールされたアプリケーションをドライバを使わずに実行可能にする。
OSレベル – MojoPac 、Ceedo 、Aargo、U3 – 可搬記憶媒体にアプリケーションをインストールし、別のPC上で利用可能にする。
マシンレベル– moka5、LivePC – 可搬記憶媒体上に仮想機械からOSやアプリケーションを含めた完全なソフトウェア環境をインストールし、任意のマシン上で実行可能にする。
ハードウェア仮想化技術
x86仮想化 - インテルの Vanderpool と AMD の Pacifica
Sun UltraSPARC T1 hypervisor
IBM PowerVM (旧称 Advanced POWER virtualization)
脚注・出典
^ a b Stallings, William,. Foundations of modern networking : SDN, NFV, QoE, IoT, and Cloud . Agboma, Florence,, Jelassi, Sofiene,. Indianapolis, Indiana. ISBN 978-0-13-417547-8 . OCLC 927715441 . https://www.worldcat.org/oclc/927715441
^ Mann, Andi, Virtualization 101 , Enterprise Management Associates (EMA), http://www.emausa.com/ema_lead.php?ls=virtwpws0806&bs=virtwp0806 2007年10月29日 閲覧。
^ Examining VMware Dr. Dobb’s Journal August 2000 By Jason Nieh and Ozgur Can Leonard
関連項目
外部リンク
近年の仮想化の傾向に懐疑的な記事