はじめに
最近のパソコン寄りのIT 系では「仮想化」というキーワードを見かけます。Microsoft の VirtualPC 2004 が無償化された話題、同 Virtual Server 2005 R2 Enterprise Editon が無償化された話題、VMware が VMware Player を無償提供した話題、仮想化ソフトウェアのオープンソース Xen などなど。とにかく仮想化ブームと言えるくらい、色々な話題があります。
そもそも仮想化とは?
前述のソフトウェア製品の場合、パソコンの中にさらにパソコンを作り出すソフトウェアですが、仮想化の概念は実はかなり幅広いものです。Java 仮想マシンのように、特定のハードウェアではないものを仮想的に定義して提供するものも仮想化に分類されています。特定のハードウェアをソフトウェアに対して抽象化提供するのもある意味で仮想化ともいえます。
ソフトウェアの世界における抽象化と仮想化の境界は非常にあいまいで、作り手が抽象化といえば抽象化で、仮想化といえば仮想化なのかもしれません。あえて分類するなら、抽象化は仮想化よりも粒度が低いか「薄いレイヤー」であるもので、仮想化は抽象化よりも粒度が高いか「厚いレイヤー」であるといえるかもしれません。
仮想化と OS
Microsoft Windows の 386 対応版(Windows/386)以降、同ソフトウェアのコアは VMM というものでした。これに、VxD と呼ばれる仮想ドライバをどんどん加えて構成したのが、 Windows/386 、 Windows 3.0 、 Windows 3.1 、 Windows 95 、 Windows 98 、 Windows 98 Second Edition 、 Windows Millenium Edition などの一連のシリーズです。この VMM とは、Virtual Machine Manager の略称であり、現在話題になっている VMM とまったく同じ「言葉」なのです。
OS はハードウェアとアプリケーションの間に入り、ハードウェアを抽象化したり効率的に割り当てたりしながら、ハードウェアとアプリケーションそれぞれの性能を最大限に発揮させるためのソフトウェアです。この中では抽象化、あるいは仮想化ともいえることを行っています。上記 Windows シリーズでは、それを仮想化であるとしていたわけです。
これらのシリーズで動くソフトウェアは、歴史的経緯からハードウェアに直接アクセスするものも少なくありませんでした。しかし、複数同時にアプリケーションが動作するようになると、それらのアクセスが衝突し、予期しない結果を生むことがありました。それを 80386 以降の機能を用いて、実際のハードウェアをアプリケーションから隔離して仮想化することにより、問題の回避を行ったのです。
実際、Windows Millenium Edition においても、主な I/O ポートをアクセスするソフトウェアも動作します。また、MS-DOS プロンプトでは、複数の MS-DOS 用ソフトウェア、それも I/O アクセスを行うものも動作します。このように、確かに仮想化を OS レベルで行っていたわけです。
今後、さらに OS で仮想化を行っていくという予想もありますが、それは新しいことではなく、ある意味以前からしてきたことを、さらに完璧に行おうとしていると見ることが適当なのではないでしょうか。
仮想化は今の始まったことではなく、継続して延長線上にある OS の機能とみなすべきなのです。
まとめ
仮想化という技術は OS の一部とみなすことができるものでもあり、同時に OS が提供しない更なる完璧な仮想化を実現するアプリケーションが、更なる OS の仮想化を推進したといえるでしょう。そして、この「完璧な仮想化」がコスト面に対しても大きなメリットをもたらすことが明らかとなり、CPU やハードウェアレベルで仮想化を支援するという流れが、現在の仮想化トレンドの根底にあるわけです。
OS が直接完全な仮想化をサポートすることにより、OS の上に仮想化を実現するというソリューションよりも、ソフトウェアの厚みを減らすことができ、それは性能面や信頼性面で大きなメリットを生み出します。
今後も古くて新しい、これらの仮想化は推進されていくことは間違いないでしょう。そして、いつか、その先にあるものは。きっと仮想化からの脱却ではないかと予想するのですが、いかが思われるでしょうか? ちょうど、コンピュータの歴史が、集約と分散の歴史を繰り返しているようなことをソフトウェアでも繰り返しているのではないかと思えるのです。