●VM実行環境の管理
いくつかの管理項目があるが、ここでは「メモリ管理」と「入出力管理」が重要なポイントである。
(a)メモリ管理=VMが使用するメモリ上のアドレスを実計算機上のどのアドレスにマッピングするかを管理する機能
実際に搭載しているメモリ(実メモリ)容量以上のアドレス空間を提供する仮想メモリは、よく知られた技術だ。仮想メモリ上のアドレス(仮想アドレス)から、実メモリー上のアドレス(実アドレス)への変換を「アドレス変換」と呼び、OSが管理しているアドレス変換テーブルを用いてハードウェアにより行われる。
VMの場合、それぞれのVMは自由に仮想的な実メモリ(VM実メモリ)容量を定義できる。しかし、VM実メモリを、実計算機上の実メモリにそのままマッピングすると、他のVMとのぶつかりなど不整合が起きてしまう。そこで、VM実メモリ上のアドレス(VM実アドレス)を実計算機上の仮想アドレスとしてメモリ管理する機能が必要となってくる(図1)。このように2段階にわたったアドレス変換を必要とするVMを「V=V仮想計算機」と呼び、論理的にはいくつでもVMを作り出すことが可能となる。
(b)入出力管理=VMが発行する入出力命令を正しく実行するために、データの転送や終了の状態報告等を管理する機能
入出力処理で読み書きされるデータアドレスは、実アドレスが使用される。この機能は、メモリ管理で説明したように、必ずしもVM実アドレスが実計算上の実アドレスとは限らないため、正しくデータ転送が行われるようにシミュレーションする機能である。
また、メインフレームの入出力処理は、CPUとは別の専用のプロセッサとチャネルにより、CPUの動作とは独立して非同期に行われる。チャネルは、実メモリと、たとえばディスク装置のような入出力装置との間のデータ転送制御を行う。これらはシステム性能を向上させるために大変効果的なアーキテクチャであるが、あるVM1が発行した入出力命令の終了報告が、他のVM2が動作している最中に受けてしまうといった不具合が起こる場合がある。入出力管理は、これを防ぎ、VM1が発行した入出力命令の終了報告は、VM1が受けるように管理する機能のことだ。
「命令シミュレーション」と「VM実行環境の管理」は特にオーバーヘッドが大きな部分だ。そこで次に、メインフレームの歴史の中で、これらのオーバーヘッドをどのように減らしてきたかについて説明しよう。
仮想計算機の高速化技術
[第1世代(1980年〜)=ソフトウェアシミュレーションによるVM]
第1世代は、VMの基礎となるソフトウェア技術が完成した世代である。日立の場合、VMS(Virtual Machine System)というVMCPを製品化し、複雑なシミュレーションやVM管理を、すべてソフトウェアで行っていた世代となる。このため実計算機で行うのに対して、実行時間で数倍のオーバーヘッドがかかっていた。現在のPCサーバ向けに製品化されている仮想化ソフトは、基本的にこのレベルである。
(1)命令シミュレーション
VMCPは、非特権モードでVMに制御を渡す。このためVMが発行する特権命令は全て特権命令例外の割り込みになる。このタイミングで制御がVMからVMCPに移り、シミュレーションを行う。
(2)VM実行環境の管理
(a)メモリ管理
VM上の仮想アドレス(VM-VA)から実計算機上の実アドレス(RM-RA)を求めるには、2段階のアドレス変換が必要だ。しかし、ハードウェアは1段階のアドレス変換しかできないために、VM-VAとRM-RAを関連付ける新たなアドレス変換テーブル(シャドーテーブル)を作成し、VM動作中はこのシャドーテーブルを使うようシミュレーションを行う(図2)。シャドーテーブルは、各VMごとに作成し管理する。
(b)入出力管理
VMCPが、VMが実行しようとしていた入出力動作を調べ、代わりに入出力命令を発行することによりシミュレーションを行う。