コンピュータ・システムにおける仮想化は,昨今様々な視点で語られることが多い。1台のコンピュータ上で複数の処理を実現するテクノロジや,ストレージの仮想化,ネットワークの仮想化,ワーク・ロードを最適化するテクノロジなどが挙げられる。1台のコンピュータを仮想化によって分割するテクノロジは,約40年にも及ぶ歴史があるが,高価であったコンピュータを占有するのではなく,複数の処理でコンピュータ資源を共用する方法として発展した。

 当初の仮想化は,1台のコンピュータ上のCPU処理時間をユーザー(処理)単位に分割し,複数のユーザー(処理)が同時にコンピュータを利用しているかのように見せる「タイム・シェアリング・システム」によって実現された。その後ハードウエア・タイマー割り込みが用いられるマルチタスクへ発展していくが,コンテキスト・スイッチが重要となった。

 コンテキスト・スイッチとは,複数のプロセスが1つのCPUを共有できるように,CPUの状態(コンテキスト)を保存したり復元したりする過程を指す。マルチタスクOSでは,実行中のプロセスは途中でCPUを明け渡し,ほかのプロセスが実行される必要がある。このプロセスの切り替え時にコンテキスト・スイッチが発生する。

 マルチタスクOSと同様に,1台のコンピュータ上で複数のゲストOSが稼働する場合,あるゲストOSが一定時間処理された後,そのゲストOSのコンテキストがメモリーに退避され,その後別のゲストOSのコンテキストがメモリーから読み込まれ,CPUレジスタに書き込まれる。この基本的な動作を理解した上で,仮想化テクノロジを考えたい。

 システムとしてとらえた場合,ストレージやネットワークなど,様々な仮想化を検討しなければならないが,ここではIAサーバーに注目し,IAサーバーで実現されている仮想化テクノロジを整理する。

いくつもある仮想化技術

 IAサーバーにおける仮想化は,主にOSやアプリケーションをハードウエアから独立させる概念であるととらえられている。実装にはいくつかの方法があるが,基本的にはハードウエアとソフトウエア・コンポーネントの間に仮想化レイヤー(仮想化ソフトウエア)を設け,両者へのインターフェースの提供と,お互いの存在の「見せかけ」を実現している。

 仮想化テクノロジを特徴づける概念として,以下項目を取り上げる。

(a)エミュレーション・メカニズムとバーチャライゼーション・メカニズム
(b)ホスト・ベースとハイパーバイザ
(c)バイナリ・トランスレーションとパラバーチャライゼーション(準仮想化)
(d)ハードウエア仮想化サポート

 エミュレーション・メカニズムとバーチャライゼーション・メカニズムというこれらの用語は,全く異なる意味を持っている。まず,CPUのアーキテクチャに関して理解する必要がある。

 個々のマイクロプロセッサは独自のインストラクション・セット(インストラクション・セット・アーキテククチャ)を持っている。インストラクション・セットとはプログラマやアプリケーション側から見た場合,利用できるレジスタ・リソースや命令セット,演算機能などの体系のことである。マイクロプロセッサが異なれば,異なるインストラクション・セットが実装されている(表1)。ある実行ファイルやプログラムが特定のプロセッサだけでしか動作しない理由がこれだ。

表1●主なインストラクション・セット一覧
表1●主なインストラクション・セット一覧