ハイパーバイザ

コンピュータ用語における、ハイパーバイザ  とは、コンピュータの仮想化技術のひとつである仮想機械を作成および実行するソフトウェアである。仮想化モニタや仮想化オペレーティングシステムと呼ばれることもある。

1. 名称
-----

IBMが「オペレーティングシステム 」と呼んだためにその用語が普及したが、一般にはOSのことをスーパーバイザとも言う。「ハイパー」という語は、「スーパー」のさらに上という意味で使われることが一般にあるが、ここではそのような意味で、OSをさらに管理する層、というような意味である。

2. 概要
-----

ハイパーバイザは大別して以下の2種類があり、作成した仮想機械でそれぞれのOSを動かすことができる。

ハードウェアの上で直接稼働する
他のOSの上で稼働するまた、ゲストOSを修正せずそのまま稼働できるものを完全仮想化、性能などの理由でゲストOSに修正が必要なものを準仮想化とも呼ぶ。

なお、仮想機械でも単なる物理分割で特にリソース管理を行っていない場合は、ハイパーバイザは存在しない。

3. 分類
-----

ハイパーバイザの分類方法は多数あるが、ここではその動作方式によって2つのタイプに分類する。

3.1. Type 1ハイパーバイザ
------------------

ハイパーバイザがハードウェア上で直接動作 し、全てのOSはそのハイパーバイザ上で動作する方式を指す。狭義の「ハイパーバイザ」はこちらのみを指す。

この方式のハイパーバイザはIBMが1960年代に開発したCP/CMS が最初で、現在のIBM z/VM の祖先である。最近の例では以下がある。

Xen
VMwareの ESX、ESXi、vSphere
L4マイクロカーネルファミリー
TRANGO
マイクロソフトのHyper-V
LinuxのKernel-based Virtual Machine 
SELTECHのFOXvisorこれの派生品としてはプラットホームのファームウェアの中に組み込まれたハイパーバイザがあり、以下がある。

IBMのLPARハイパーバイザ
オラクルのOracle VM Server for SPARC 旧論理ドメイン  ハイパーバイザ。
ヒューレット・パッカード  のVirtual Server Environment for HP-UX
日立製作所のVirtageハイパーバイザ

3.2. Type 2ハイパーバイザ
------------------

ハードウェア上でまず別のOSが稼働し、その上でハイパーバイザが稼働し、更にはハイパーバイザの上で更に別のOSを稼働させる方法である。狭義においては、Type 2はハイパーバイザには含まれない。

例としては以下のものがある。

VMwareのVMware Server、VMware Workstation、VMware Player、VMware Fusion
マイクロソフトのVirtual PCとMicrosoft Virtual Server
オラクルのVirtualBox
パラレルスのParallels WorkstationとParallels Desktop
オープンソースのQEMU
オラクルのSolarisのKernel Zone必ずしもすべてのハイパーバイザが、Type-1,2のいずれかに明確に分類出来るものではない。例えばLinuxで動作するKVM、およびFreeBSDで動作するbhyveは、ホストOSカーネルにハイパーバイザを埋め込んでしまうもので、仮想化の機能としてはType-1に属する。しかしゲストOSがホストOS上で1プロセスとして動作する事、また、ホストOS自体はハイパーバイザ上では動作しないため、これらの観点ではType-2に属するという意見もある。

4. 歴史
-----

「ハイパーバイザ」という用語はSystem/370用にCP-67を再実装したIBMのCP-370が起源であり、VM/370として1972年にリリースされた。hypervisor callまたはhypercallという用語は、準仮想化インタフェースで参照されるが、何によってゲストOSがの制御プログラムからサービスに直接アクセスするか、つまり同じレベルのOSに//supervisor call//を何によって行うのかというのと似ている。

4.1. メインフレーム
------------

ハイパーバイザは、メインフレームで最初に実装された。ソフトウェアによる完全仮想化を最初に提供したのはIBMのCP-40で、研究用に1967年の1月から製造が開始された。CP-40は更にCP-67、VM/370、VM/XA、VM/ESAとなり、現在のz/VMに続いており、ゲストOSとしてz/OS、z/VSEなどの他、Linuxを多数稼働させる用途でも使われている。また国産メインフレーム各社も同等の仮想化OSを持っている。

//→詳細は z/VM#開発経緯 および メインフレーム#種類 を参照//

4.2. サーバ
--------

いくつかの要因により、UNIXやLinuxサーバベンダの間で仮想化技術が再び使われるようになってきた。

ハードウェア能力の拡大による一台当たりの同時に処理できる量の増大
サーバ群をまとめることによるコスト削減と管理のシンプル化。
大規模なマルチプロセッサおよびクラスタサーバ、すなわちサーバファームやレンダーファームへのセットアップを管理する必要が出てきた。
セキュリティや信頼性の改善とハイパーバイザアーキテクチャを使うことによるデバイスに依存せずに済むようになった。
複雑でOSに依存するアプリケーションを異なるハードウェアやOS環境の上で動作させる要望があること。IBMやサン・マイクロシステムズ、HP、SGIなどの主要なUNIXベンダーは2000年以前より仮想化したハードウェアを販売していた。これらのハードウェアは一般的にサーバクラスの値札をつけている。仮想化もまたいくつかのミッドレンジのシステム、IBMのSystem pサーバやサンマイクロシステムズのCoolThreadsのT1000やT2000サーバで利用可能である。

IBMはメインフレーム用のロジカル・パーティショニング  を、サーバに移植した。現在ではゲストOSの停止なくリソースの変更が可能で、CPUは10分の1単位で割り振りができるほか、ハイエンド以外のモデルにも搭載している。

サンの論理ドメイン  ハイパーバイザの上でゲストOSとして動作させるために、いくつかのホストOSは変更が行われている。2006年後半には、SolarisやLinux、FreeBSDはハイパーバイザの上で動作するように移植された。Wind Riverの//Carrier Grade Linux//もまたサンのハイパーバイザ上で動作する計画である。SPARCプロセッサ上で完全仮想化を実現するのはそれほど難しい訳ではない。完全仮想化への取り組みが1980年代半ばから始まったことから、SPARCアーキテクチャは仮想化の邪魔になる古い仕組みを慎重に取り除いてきたからである。

似た傾向はLinuxのx86/x64サーバプラットフォーム、Xenのようなオープンソースプロジェクトによって仮想化技術を取り込もうとする動きが見られる。これらの技術は巨大なシステムからデスクトップに及んでいる。これについては次の節で述べる。

4.3. x86システム
------------

高い利益を誇るサーバハードウェア市場分野へ興味をもっていることから、従来のデスクトップPCを含むインテルのx86命令セットのマシン用のハイパーバイザの開発が行われている。初期のPC向けハイパーバイザの一つは1998年に発表された商業用VMwareである。パラレルスはParallels Workstationを2005年に発表したが、その主な用途はPC上で使うことであった。2006年にはMac OS X上で動作するParallels Desktop for Macを発表した。

たいていのPCシステムで使われるx86アーキテクチャはとりわけ仮想化が難しい。x86上の完全仮想化は、ハイパーバイザがあまりにも複雑になりすぎ、実行時パフォーマンスに重大な問題が生じる。

別の方法では、ハイパーバイザによってシミュレートされるマシンのI/O命令を実行するよりも、ハイパーバイザにシステムコールを発行するようにゲストOSを変更することを要求する。これはXenで使われている準仮想化と呼ばれるものであり、Parallels Workstationでは「hypercall」と呼ばれるものであり、IBMの仮想機械では「診断コード」と呼ばれるものである。VMwareはゲスト用のデバイスドライバをつけることで、仮想化時の最も処理に時間がかかるところを補っている。これらすべては同じことでシステムコールをハイパーバイザに渡している。MachやL4マイクロカーネルファミリーのようなマイクロカーネルはゲストOSの準仮想化を行うには十分柔軟である。

CPUベンダは製品に仮想化支援機構を追加してきた。インテルのバーチャライゼーション・テクノロジー  およびAMDのAMD-Vは、元来仮想化を行うのには難しくかつ非効率なx86アーキテクチャを拡張し、ハイパーバイザの実現を支援する機構である。この仕組みは仮想化コードをより単純にし、完全仮想化においてより高いパフォーマンスを可能にするものである。

Xenのような他のものについては、仮想機械をソフトウェアのみで実装している。XenはLinuxのような普通のホストOSの上で動作するし、準仮想化ないしはIntel VTを使った完全仮想化のどちらも動作させることができる。Xenは無変更のWindows XPを動作させるデモに成功した。Xenの配布物には変更済みのFreeBSDやLinux、NetBSD、ベル研究所のPlan 9版がすでに含まれている。ユーザプログラムは変更なしにXen上で動作が可能である。

2006年には、マイクロソフトは新しいType1のハイパーバイザシステムであるコードネーム//Viridian//の開発を始め、2008年6月30日正式版をHyper-Vとして公開した。このシステムは最下層でOSと統合する設計がされている。Windows VistaをはじめとしたWindowsの新バージョンはViridianハイパーバイザの上で動作させた場合にパフォーマンスをあげる拡張を含んでいる。

4.4. 組み込みシステム
-------------

仮想機械は携帯電話のような組み込みシステムの中に近年見られるようになった。この現象は、一方で、同時に従来のリアルタイムオペレーティングシステム  APIをメンテナンスしながら、LinuxやMicrosoft Windowsのようにアプリケーションプログラミング用の高レベルOSインタフェースを提供する要望によって引き起こされている。低レベルRTOSの環境は従来の機能をサポートするために維持し続ける必要がある。高レベルOSのリアルタイム性能は多くの組み込みアプリケーションにとっては満足できるものではない。

したがって、組み込み用のハイパーバイザはリアルタイム性が要求され、その設計基準は他の分野で使われているハイパーバイザには適用できない。多くの組み込みシステムでは使えるリソースがあらかじめ決まっている性質を持ち、特にバッテリー駆動のモバイル機器では、より小メモリかつ低消費電力で動作することを求められる。結局、PCの世界ではx86アーキテクチャが至る所に存在するのとは対照的に、組み込みの世界ではより幅広く様々なアーキテクチャが使われている。仮想化を行うには、メモリ保護機能とCPUモードの区別の機能が必要であるため、多くのマイクロコントローラは除外されてしまう。この機能を満たすものは、ミドルレンジからハイエンドの組み込みシステムで広く採用されているx86やMIPS、ARM、PowerPCしか残らない。

組み込みシステムメーカーは、普通自分たちが使っているOSのソースコードを持っているので、完全仮想化の必要性はあまりない。しかし、準仮想化はパフォーマンスがよいという利点があるので、普通それが仮想化技術として選択される。にもかかわらず、ARMは近年TrustZone技術を用いた完全仮想化のサポートを追加した。

商業用として最初にハイパーバイザが組み込まれた販売されたモバイル組み込みシステムはOKL4である。これはL4マイクロカーネルファミリーの商業版である。これはx86やARM、MIPSプロセッサをサポートしている。組み込みシステム用として使われる他のシステムにはTRANGOというものがあって、ARMやMIPS、PowerPCをサポートしている。同じく、組み込みシステム用として、VirtualLogix VLX が、x86-VT、ARM をサポートしている。VLX は海外でのネットワークインフラ、モバイルフォンでの採用実績は多い。日本の製品としては、ウェルインテクノロジーのEM-VRTやSELTECHのMOS-S、エルミック・ウェスコムのACCELシリーズがあり、日本国内で採用実績の多いRTOSであるITRONと汎用OSの同時実行を可能にしている。また、TOPPERSプロジェクトの一環として開発されたSafeGもTrustZone技術を用いた組み込み用実装の一つである。

5. 脚注
-----

6. 関連項目
-------

仮想化
準仮想化
LPAR
Microsoft Hyper-V
Kernel-based Virtual Machine 
VMware
Xen 
TOPPERS

7. 外部リンク
--------

[1]
[2], IBM Research
[3], ケンブリッジ大学
L4マイクロカーネル 技術をベースとした オープンソースのhypervisor [4], [5]
[6] 組み込みCPU向けのリアルタイムセキュアハイパーバイザ, TRANGO Virtual Processors
[7] 組み込み機器向けのリアルタイムバーチャライザー、VirtualLogix VLX Virtualizer
[8] 1CPU上でハイブリッドOS化を可能とする組み込み向け仮想化製品、EM-VRT
[9] 複数のOSを1SoCに実装するハイパーバイザ、MOS-S
[10] Enbedded Linuxリアルタイム化ツール、Accel-Linux
[11] Microsoft TechNet
[12] Microsoft