仮想化(かそうか、英語: virtualization)とは、コンピュータのリソースを抽象化することであり、ソフトウェアと物理的なハードウェアの間に抽象化されたレイヤーを提供することで、コンピュータリソースを管理するための様々な技術である。仮想化ソフトウェアを実行しているマシンは、さまざまなオペレーティングシステム(OS)で実行されているアプリケーションを管理できる。サーバー、ストレージデバイス、ネットワークリソースなどのハードウェアプラットフォームをソフトウェアで効果的にエミュレートまたはシミュレートする。

主にユーザーに提供するコンピュータそのものをハードウェアの詳細から切り離した状態でソフトウェア化する事を指す。ユーザーは画面切り替えの要領で複数のコンピュータを使い分けられる。管理者にとっては、ユーザーに提供するコンピュータに関わる全ての作業をソフトウェアの設定変更のみで行えるようになり、構成変更に掛かる時間が劇的に短縮されるため、物理的な作業では対応できないような管理を行う事が出来るようになる。ソフトウェア化したコンピュータを仮想マシン、仮想マシンを実際に稼動させるハードウェアを物理マシンと呼ぶ。仮想マシンは別の物理マシン上にデータ移動のみで移す事が出来るため、USBメモリなどにも収められる。

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

## 概要

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

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

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

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

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

## デザインパターンとして

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

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

## プラットフォーム仮想化

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

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

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

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

## リソース仮想化

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

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

## 例

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