仮想化

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

仮想化英語: virtualization)とは、コンピュータリソース抽象化することである。「リソースの物理的特性を、そのリソースと相互作用するシステム/アプリケーション/エンドユーザーから隠蔽する技法。単一の物理リソース(サーバOS、アプリケーション、補助記憶装置など)を複数の論理リソースに見せかけたり、複数の物理リソース(複数の補助記憶装置群やサーバ群)を単一の論理リソースに見せかけたりできる」という実用的定義がある[1]。また、単一の物理リソースを何らかの特性の異なる単一の論理リソースに見せかけることもできる。そして、仮想回線により、幅が拡がる。

概要[編集]

仮想化という用語の起源は古く、1960年代には既に広く使われていた。ネットワーク全体や個々の機能やコンポーネントなど、コンピューティングの様々な面に適用されてきた。仮想化技術に共通する目的は、カプセル化によって「技術的詳細を隠蔽する」ことである。仮想化は、例えばアクセスを多重化したり、異なる物理的位置にあるリソースを統合したり、制御システムを単純化したりすることで、根底にある実装を隠蔽した外部インタフェースを生成する。近年、新たな仮想化基盤や仮想化技術が登場し、この円熟した概念が再び注目されるようになってきた。

抽象化オブジェクト指向などの用語と同様、「仮想化」という用語は様々な文脈で用いられる。本項では、これを主に以下の2つに分類して解説する。

プラットフォーム仮想化
コンピュータ全体のシミュレーション
リソース仮想化
リソースの集合体や部分や単純化されたもののシミュレーション

もちろん、仮想化はコンピュータ以外でも重要な概念である。制御システムは複雑な機器の仮想化されたインタフェースを実装したものとも言える。例えば、最近の自動車のアクセルは単にエンジンへの燃料流入量を増やすだけではない。フライ・バイ・ワイヤを使った航空機は、物理的実装よりも単純化されたインタフェースを提供する。

ビジネス構造の観点では、仮想化とは、従来型の事務所や店舗を構えたビジネスから、インターネット上などでビジネスを行う方向に転換していくことを指す。

仮想化と対極に位置する概念が透過性である。仮想化されたオブジェクトは物理的には存在しなくともアクセス可能である。逆に透過性のあるオブジェクトは物理的には存在しているが、利用者にとっては不可視である。

デザインパターンとして[編集]

多くの仮想化の形態は、消費者と提供者に関わるデザインパターンでパターン化可能である。消費者と提供者は何らかのインタフェースを使って相互作用する。仮想化は、この両者の間に介在し、消費者に仮想化されたインタフェースを提供すると同時に、提供者にも別の形で仮想化されたインタフェースを提供する。一般に、消費者と提供者の関係は一対多、あるいは多対一、または多対多であり、中間層(仮想化層)だけがその多重性を意識している。

理想的には、仮想化されていない環境で直接やり取りしている消費者と提供者は、仮想化された環境でも修正することなくそのまま機能するのが望ましい。例えば、仮想記憶では物理アドレス空間と消費者の間に中間層(仮想記憶管理層)が存在する。その中間層は複数の消費者をサポートするため、複数の仮想アドレス空間を提供する。消費者と提供者(物理メモリ)は一般にその多重性に気づく必要はない。

プラットフォーム仮想化[編集]

1960年代に生まれた「仮想化」という用語は、ハードウェアとソフトウェアの組合せによって実現された仮想機械の登場とともに使われるようになった。同時期にリソース仮想化である仮想記憶も登場している。仮想機械という用語は IBM M44/44X という実験機で初めて使われている。それ以前に IBM CP-40 が仮想機械を実装しており、このときは pseudo machines(擬似機械)と呼ばれていた。「仮想化」にしても「仮想機械」にしても、その意味は時代と共に変化していった。

プラットフォーム仮想化とは、ハードウェアプラットフォーム上でホストプログラム(制御プログラム)が擬似的なコンピュータ環境を生成し、ゲストソフトウェアに対して「仮想機械」を提供するものである。ゲストソフトウェアは、それ自体もオペレーティングシステムであるのが一般的で、あたかも独立したハードウェアプラットフォームにインストールされたかのように動作する。単一の物理マシン上で複数の仮想機械をシミュレート可能なことが多く、仮想機械の個数はホストであるハードウェアリソースによって制限される。ゲストOSとホストOSは一般に同一である必要はない。ゲストシステムは特定の周辺機器(ハードディスクドライブネットワークカード)へのアクセスを必要とすることが多く、その場合その機器とゲストのインタフェースを提供する必要がある。

プラットフォーム仮想化の手法はいくつか存在する。以下にそれらを列挙する。

エミュレータまたはシミュレータ
仮想機械によってハードウェア全体を擬似的に再現する。全く異なるアーキテクチャのハードウェア向けのゲストOSを修正することなしに動作させることができる。これは、新たなCPUなどのハードウェア開発が完了する前にソフトウェアを並行して開発する手法として使われてきた。具体例としては、BochsPearPCVirtual PCの PowerPC 版、QEMU、Hercules emulator(IBMのメインフレームのエミュレータ)などがある。エミュレーションのための技法は様々で、有限オートマトンを使った技法から、仮想化プラットフォーム上での動的再コンパイル技法まである。
ネイティブ仮想化
同じアーキテクチャのプラットフォーム上で、ゲストOSを隔離された状態で、かつ無修正で動作させる仮想機械。この手法は IBM CP-40 などが起源とされる。メインフレーム以外の領域では、Parallels WorkstationParallels DesktopVirtualBoxVirtual PCVMware WorkstationVMware ServerQEMUAdeosMac-on-Linux、VirtualLogix VLX Virtualizer for VT などがある。
ハードウェアによる仮想化
ゲストOSにハードウェアリソースを割り当て、隔離された状態で動作できるようにする仮想機械。2005年と2006年、インテルAMDは仮想化をサポートする追加ハードウェアを提供した。例えば、VMware Fusion、VMware Workstation、Parallels DesktopParallels Workstationなどがある。
部分仮想化
特にアドレス空間などのハードウェア環境に限って、複数の実体があるようにシミュレートする仮想機械。いわゆる仮想記憶である。プロセスが同時並行して動作できるようにするが、ゲストOSが動作することはできない。一般に仮想機械とは見なされないが、仮想化の歴史上は重要であり、CTSS や IBM M44/44X などで使われ、MVS へと受け継がれた。その後の Microsoft WindowsLinux も、基本的にこの手法を採用している。
準仮想化
ハードウェアを擬似するというよりも、ゲストOSに修正を加えることで利用可能となる特殊なAPIを提供する仮想機械。このようなハイパーバイザシステムコールを TRANGO や Xen では「ハイパーコール; hypercall」と呼ぶ。Citrix XenServerVMware ESX ServerWin4Lin 9xサン・マイクロシステムズ論理ドメイン、VirtualLogix の VLX Virtualizer、TRANGO などがある。
OSレベルの仮想化
物理サーバをOSレベルで仮想化し、複数の仮想サーバを単一の物理サーバ上で動作させる。ゲストOSとホストOSは同一である。あるゲスト環境で動作するアプリケーションから見れば、独立したシステムで動作しているように見える。Linux-VServerVirtuozzoOpenVZLXC (Linux Containers) 、AIX ワークロードパーティション (WPAR)Solaris ContainersFreeBSD jail などがある。
アプリケーション仮想化
セキュリティや信頼性、移植性を強化する目的で、アプリケーションを仮想機械でカプセル化された環境で隔離して実行すること。仮想機械はアプリケーションの実行に最低限必要な要素を備えており、OSとアプリケーションの間の層として動作する。例えば、Java仮想マシンMicrosoft Application VirtualizationAltirisCitrix XenApp などがある。前述の各種仮想化とは異なる手法であり、SmalltalkForthTclPコードマシンなどのインタプリタ指向言語の流れを汲むものである。

仮想化技術の進展によって、アプリケーション仮想化とアプリケーションストリーミングといった新たな技法が登場した。

リソース仮想化[編集]

上述のプラットフォーム仮想化の概念から、補助記憶装置のボリューム、名前空間、ネットワークリソースといった特定のシステムリソースの仮想化が生まれた。

  • リソースの集約/連結/結合などにより、大きなリソースプールを形成する。
    • 仮想記憶 は個々のアプリケーションに別々の仮想空間を提供し、メモリや補助記憶装置の不連続なリソースから連続的な仮想アドレス空間を利用可能にする。
    • RAID論理ボリュームマネージャは、複数のディスク装置を統合して1つの大きな論理ディスクにする。
    • ストレージエリアネットワークでよく使われる技法として、物理ストレージから論理ストレージに抽象化することをストレージ仮想化と言う。物理ストレージのリソースを1つのプールに集約し、そこから論理ストレージを生成する。物理ストレージ装置はネットワーク上に分散配置可能だが、ユーザーから見れば単一のストレージに見え、集中管理可能である。
    • チャネルボンディングとは、複数の通信路(インタフェース)を1つの高スループットリンクとして使用する技術。
    • Virtual Private Network (VPN) とネットワークアドレス変換 (NAT) は、ネットワークの名前空間を仮想化する技術である。
  • コンピュータ・クラスターグリッド・コンピューティングは、上述の各種技術を使い、複数のコンピュータから仮想化された大きなコンピュータを形成する。
  • パーティショニングは、ディスクやネットワークなどの単一のリソースを分割し、利用しやすい大きさや速度の多数のリソースとして利用可能にする。

[編集]

以下に、仮想化の応用例を列挙する。

サーバ・コンソリデーション
多数の物理サーバを仮想機械によって1つ(あるいは少数)のサーバに統合する。
ディザスタリカバリ
仮想機械によって、一種の「ホットスタンバイ」環境を構築する。バックアップ・イメージを仮想機械上で起動し、現用系のワークロードをそちらに移行させる。
テストと教育
カーネル開発やOS開発における評価や教育用途に仮想機械を用いる。[2]開発中のシステムがハングアップしても、該当する仮想機械を再起動するだけで済む。
ポータブルアプリケーション
USBメモリなどの可搬記憶媒体上にアプリケーションをインストールし実行可能とする技術。例えばMicrosoft Windows ではレジストリなどの問題があり、USBメモリ上のアプリケーションを直接実行できないという問題があった。これを仮想化によって解決する手法もある。
ポータブルワークスペース
iPodUSBメモリなどのマスストレージ機器上にポータブルなワークスペースを生成する仮想化技術。次のような製品がある。
  • アプリケーションレベル – Thinstal – 可搬記憶媒体にインストールされたアプリケーションをドライバを使わずに実行可能にする。
  • OSレベル – MojoPacCeedo、Aargo、U3 – 可搬記憶媒体にアプリケーションをインストールし、別のPC上で利用可能にする。
  • マシンレベル– moka5、LivePC – 可搬記憶媒体上に仮想機械からOSやアプリケーションを含めた完全なソフトウェア環境をインストールし、任意のマシン上で実行可能にする。
ハードウェア仮想化技術
  • x86仮想化 - インテルの Vanderpool と AMD の Pacifica
  • Sun UltraSPARC T1 hypervisor
  • IBM PowerVM (旧称 Advanced POWER virtualization)

脚注・出典[編集]

  1. ^ Mann, Andi, Virtualization 101, Enterprise Management Associates (EMA), http://www.emausa.com/ema_lead.php?ls=virtwpws0806&bs=virtwp0806 2007年10月29日閲覧。 
  2. ^ Examining VMware Dr. Dobb’s Journal August 2000 By Jason Nieh and Ozgur Can Leonard

関連項目[編集]

外部リンク[編集]

近年の仮想化の傾向に懐疑的な記事[編集]