仮想化の5つのレベル

{{brizy_dc_image_alt entityId=

複数プラットフォームを用いた仮想化の実装レベル

コンピューティングの世界において、単一のソフトウェアインスタンスのみを使用するだけでは、もはや十分とは言えません。現在、専門家たちは自身のプログラムやソフトウェアを、複数のプラットフォーム上でテストすることを求めています。

しかし、そうしたテストの実施には、様々な制約が伴い、課題が生じがちです。その解決策となるのが、「仮想化」です。仮想化を活用すれば、ユーザーはオペレーティングシステムやアプリケーションなど、多種多様なプラットフォームのインスタンスを構築することが可能になります。

仮想化の概念は、IBMによって導入された1960年代から存在していました。しかし、クラウドベースのシステムが普及したことにより、期待されていたほどの注目を集めるようになったのは、ごく最近のことです。

仮想化とは、簡潔に説明すると、同一のハードウェア上で複数のコンピュータシステムを同時に稼働させることを可能にする技術です。ハードウェアの具体的な利用方法は、仮想マシンの構成によって異なります。

その最も身近な例として、皆さんがお使いのデスクトップPCやノートPCが挙げられます。普段はWindowsを稼働させているシステムであっても、仮想化技術を用いれば、MacintoshやLinux Ubuntuといった別のOSをその上で実行できるようになります。

さて、仮想化にはいくつかの異なるレベルが存在します。それでは、それらについて詳しく見ていくことにしましょう。

仮想化実装の5つのレベル

仮想化の実装は、決して容易なことではありません。コンピュータは通常、特定のハードウェアに合わせて構成されたOS(オペレーティングシステム)上で動作します。そのため、同一のハードウェア上で別のOSをそのまま動作させることは、現実的には困難です。

この課題を解決するために、「ハイパーバイザー」が存在します。ハイパーバイザーの役割は、仮想OSとハードウェアとの間の「橋渡し役」を担い、仮想環境(インスタンス)が円滑に動作できるようにすることです。

業界で一般的に利用されている仮想化の手法には、主に以下の5つのレベルが存在します。

命令セットアーキテクチャ(ISA)レベル

ISAレベルにおける仮想化は、ISAエミュレーションを通じて実現されます。これは、本来とは異なるハードウェア構成向けに記述された、膨大な量のレガシーコードを実行する際に非常に有用です。

こうしたコードは、ISAを介することで仮想マシン上で実行可能となります。

通常であれば実行に追加のレイヤーを必要とするようなバイナリコードも、ISAを利用すればx86マシン上で実行できるほか、多少の調整を加えることでx64マシン上でも動作させることが可能になります。ISAは、このようにしてハードウェアに依存しない(ハードウェア非依存の)仮想マシンを実現する一助となっています。

ただし、基本的なエミュレーションを行うには「インタプリタ」が必要となります。このインタプリタはソースコードを解釈し、ハードウェアが処理可能な形式へと変換する役割を担っています。

ハードウェア抽象化レベル(HAL)

その名の通り、このレベルはハードウェアレベルでの仮想化を支援します。動作にはベアハイパーバイザを使用します。

このレベルは仮想マシンの構築を支援し、仮想化を通じてハードウェアを管理します。

I/Oデバイス、プロセッサ、メモリなど、各ハードウェアコンポーネントの仮想化を可能にします。

これにより、複数のユーザーが同じハードウェア上で、多数の仮想化インスタンスを同時に使用できます。

IBMは1960年にIBM VM/370で初めてこの技術を実装しました。クラウドベースのインフラストラクチャに適しています。

したがって、現在Xenハイパーバイザがx86ベースのマシン上でLinuxやその他のOSを実行するためにHALを使用しているのは当然のことと言えるでしょう。

オペレーティングシステム・レベル

オペレーティングシステム(OS)レベルにおいて、仮想化モデルはアプリケーションとOSの間に抽象化レイヤーを構築します。

これは、物理サーバーおよびOS上に構築された、ハードウェアとソフトウェアを活用する「隔離されたコンテナ」のようなものです。これらのコンテナはそれぞれ、あたかも独立したサーバーであるかのように機能します。

ユーザー数が多く、かつハードウェアを他者と共有することを望まないような状況において、このレベルの仮想化は極めて有効です。

この方式では、各ユーザーに対して専用の仮想ハードウェアリソースを備えた独自の仮想環境が割り当てられます。これにより、リソースの競合や衝突が生じることなく運用が可能となります。

ライブラリレベル

OSのシステムコールは処理が長く、煩雑です。そのため、アプリケーションはユーザーレベルのライブラリが提供するAPIを利用することを選択します。

システムによって提供されるAPIの大部分は、比較的詳細に文書化されています。したがって、こうした状況においては、ライブラリレベルでの仮想化が好まれます。

ライブラリ・インターフェースの仮想化は、APIフックによって実現されます。これらのAPIフックは、システムとアプリケーションとの間の通信経路を制御する役割を担います。

現在利用可能なツールの中には、vCUDAやWINEのように、この技術の実証に成功しているものも存在します。

アプリケーションレベル

アプリケーションレベルの仮想化は、特定のアプリケーションのみを仮想化したい場合に有用です。これは、プラットフォームや環境全体を仮想化するものではありません。

オペレーティングシステム上において、アプリケーションは単一のプロセスとして動作します。そのため、この方式は「プロセスレベル仮想化」とも呼ばれています。

一般的に、高水準言語を用いて仮想マシン上でプログラムを実行する際に有効です。この構成では、アプリケーションは仮想化レイヤーの上に位置し、その仮想化レイヤーがさらにアプリケーションプログラムの上に配置される形となります。

そして、そのアプリケーションプログラム自体は、オペレーティングシステム上に存在しています。

高水準言語で記述され、アプリケーションレベル仮想マシン向けにコンパイルされたプログラムであれば、この環境下で円滑に実行することが可能です。

結論

仮想化には5つのレベルが存在しますが、すべての企業がそれらすべてを利用する必要はありません。どのレベルの仮想化を選択すべきかは、各企業がどのような業務に取り組んでいるかによって異なります。

企業は一般的に、クロスプラットフォーム・アプリケーションの開発やテストを行う際に、仮想マシンを活用する傾向にあります。クラウドベースのアプリケーションが普及の一途をたどる中、仮想化は今や世界中の企業にとって不可欠な要素となっています。