仮想マシンとは何か?1日5分のXen理解

2005年12月5日に仮想マシンモニタXen 3.0がリリースされました。読者の中には、すでに利用されている方もいるのはないでしょうか? 2004年ごろから仮想化環境はホットな話題です。MicrosoftによるVirtual PCの買収、無償利用できるVMware Playerの登場など、仮想化というトピックに大きな話題集まっているのでご存じの方も多いしょう。本稿では、まず仮想マシン環境とは何であるのかを説明します。仮想マシンモニタとはどういうもので、Xenを使うと何ができるのかを眺めてみましょう。

» 2006年12月15日 08時00分 公開
[高橋浩和(VA Linux Systems Japan),ITmedia]

本記事は、オープンソースマガジン2006年3月号 第1特集「仮想マシンモニタXen 3.0を使ってみよう」のパート1を再構成したものです。以下のように3回に分けて掲載を予定しています。

  • 第1回(本記事)
  • 第2回 仮想マシンモニターXenの特徴(12月16日掲載予定)
  • 第3回 Xen導入のメリットと課題(12月17日掲載予定)

なぜいま、仮想マシン環境なのか?

 仮想マシン環境は、古くて新しい技術です。仮想マシン環境の歴史は古く、大型汎用機用OSが現れた直後には、すでに仮想マシン環境が使われていました。仮想マシン環境とは、ハードウェアを仮想化し、その仮想ハードウェア上で、OSを動作させる技術です。仮想的なハードウェアを複数用意することで、同時に複数のOSを実行することも可能です。

 大型汎用機時代に仮想マシン環境が重宝された最大の動機は、過去の資産の継承です。汎用機の置き換えを行った場合、通常2つの汎用機の間には互換性がなく、古い汎用機用に作られた高価なアプリケーションプログラムは、新しい汎用機上では動作しません。この課題を解決するために、仮想マシン環境が普及しました。仮想マシン環境が古い汎用機のハードウェアをエミュレート*することで、アプリケーションプログラムをその仮想マシン環境の中で使い続けることができました。

 実は、現在でも同様のことが行われており、オフコン用に作られたソフトウェアが、現在はワークステーションやPCサーバの仮想マシン環境上で動作しているなどの例も耳にします。

 最近、この古い技術がまた脚光を浴びるようになってきました。皆さんも、雑誌やインターネット上で仮想マシン環境の話題を目にすることが増えてきたと感じられていることと思います。実際、現在PCサーバの分野にも、この仮想マシン環境を導入しようという動きが広まりつつあります。

 今日の仮想マシン環境を導入しようというモチベーションは、汎用機時代の最大の動機である「資産継承」よりも、マシン台数の削減に目が向いています。インターネット系サービスを中心に、そのサービス成長に伴って規模がどんどん大きくなり、ハードウェアコストおよび運用コストが増大傾向にあります。これらのコストを下げるための1つの手段として、仮想マシン環境の利用が検討されています。

 現在、それを可能とする環境も整いつつあります。高性能のPCサーバマシンが手ごろな価格で入手可能となっていますし、マルチコアプロセッサ、大容量メモリが標準的な環境となる今後のサーバでは、仮想マシン環境は非常に有望な技術です。

仮想マシン環境

 仮想マシン環境を作り出す仕組みは幾つか存在しますが、基本は同じです。

 1つは、あるOS(ホストOSと呼びます)の上に、ハードウェアをエミュレートする環境を載せ、その上で別のOS(ゲストOSと呼びます)を動かす方法です(図1)。

図1 図1 仮想マシン環境(ホストOS型)

 エミュレートはホストOSが持つ機能を利用して実現します。汎用機の仮想マシン環境、UML(User Mode Linux)、 VMware Workstationなどは、この方式を採用しています。

 2つ目は、ハードウェア上に、直接ハードウェアをエミュレートする専用のプログラムを動作させる方法です(図2)。

図2 図2 仮想マシン環境(仮想マシンモニタ型)

 仮想マシン環境を実現するために必要最小限の機能を、OSと実ハードウェアの間に挟み込みます。このプログラムを仮想マシンモニタと呼ぶこともあります。この方式は、1つ目の方式よりも小さなオーバーヘッドで、仮想マシン環境を実装できます。XenやVMware ESX Server版は、この方式を採用しています(コラム参照)。

コラム:そのほかの仮想マシン環境

 CPUエミュレータは、あるCPUアーキテクチャー用に作られた実行形式プログラム(バイナリプログラム)中の命令を解析し、1つずつ命令をエミュレートするプログラムです。実は、CPUエミュレータも仮想マシン環境の一種です。実行されるプログラム側から見ると、本物のCPUによって実行されているのか、CPUエミュレータが作り上げた仮想的なCPU上で実行されているのかに差はありません。

 Linux上で動作可能なCPUエミュレータには、QEMU、Bochsなどがあります。QEMUなどのCPUエミュレータは、PC/ATアーキテクチャーのデバイスのエミュレーション機能も持っています*。解析した命令がデバイスを操作する命令であった場合、その先にあるデバイスに合わせてその振る舞いをエミュレートします*

 最近、QEMUは、QEMUが動作している物理CPUと、QEMUが作り出す仮想環境の仮想CPUが同じアーキテクチャーであるとき、特権命令などの特殊な命令を除き、ネイティブ実行させる試みがなされています。Xenなどの正当派仮想マシンモニタとの区別は、どんどんあいまいに*なっていきそうです。

 Java環境も仮想マシンです。これは良く知られたことでしょう。JavaVMは、仮想的なハードウェア環境を作り出します。このハードウェア環境には元になる見本がありません*。JavaVMは、いかにもそこにそのハードウェアがあるように、Javaバイトコードを実行します。実装的に、QEMU などのCPUエミュレータの親戚です。

 現在意識している人はほとんどいないと思いますが、UNIXやLinuxのプロセスも仮想マシン環境です。プロセスと呼ばれる抽象的な実行環境を提供していますが、これは仮想マシン環境そのものです。その仮想マシン環境の中には、ユーザーが作成したプログラムを入れて自由に動作させることができます。この仮想マシンの制御はシステムコールを用いて行います。


このページで出てきた専門用語

エミュレート

実際にCPUで命令を実行するのではなく、その命令の意味を解析し、その命令が実際に実行された同じ処理を、まねて実行します。

PC/ATアーキテクチャーのデバイスのエミュレーション機能も持っています

現在では、CPUエミュレータよりも、PCエミュレータといった方が正確かもしれません。

その先にあるデバイスに合わせてその振る舞いをエミュレートします

デバイスの動きをまねします。

どんどんあいまいに

逆に、Xenのデバイスエミュレーション機能は、QEMUのコードを流用して実現しています。

このハードウェア環境には元になる見本がありません

かつてJavaバイトコードを直接実行可能なアーキテクチャーのプロセッサも後追いで作られたことがあります。しかし、いまは製造されていません。ホットスポット技術などの登場により、性能的なメリットが相対的に小さくなったことも要因の1つでしょう。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ