(57)【特許請求の範囲】
【請求項１】
プロセスを実行する複数の仮想マシンを仮想マシン管理装置上に構築し，前記仮想マシン管理装置が，前記構築された仮想マシンにＣＰＵを割り当てて，各仮想マシンのプロセスの実行を管理する仮想マシンシステムであって，
前記仮想マシン管理装置は，
プログラムの実行を管理する，プログラム管理部と，
前記プログラムを構成する複数のプロセスを各々で実行する複数の仮想マシンへのＣＰＵ割当を，スケジュールにもとづいて管理する，仮想マシンスケジュール管理部とを備えて，
前記プログラム管理部は，
前記プログラムを構成する複数のプロセスのうち当該プログラムの起動要求を受けて実行される第１プロセスを実行する第１仮想マシンから，前記第１プロセスの識別情報，前記プログラムを構成する前記第１プロセス以外の第２プロセス以降のプロセスを特定する情報を含むプログラム構成情報を取得して，前記プログラム構成情報および前記各プロセスを実行する仮想マシンの識別情報をプログラムテーブルに登録する，プログラムテーブル管理部と，
前記仮想マシン管理装置上に生成した仮想マシンで実行されているプロセスから通知を受信する，通知受信部と，
前記プログラムテーブルを参照して，前記通知受信部が受信した通知に対応するプロセスに関する処理の要求を前記仮想マシンスケジュール管理部へ送信する，通知処理部とを備えて，
前記仮想マシンスケジュール管理部は，
前記仮想マシンに対するＣＰＵ割当のスケジュールを決定する，スケジューリング部と，
前記通知処理部から受信した前記要求が前記プログラムの起動要求である場合に，当該起動対象のプログラムを構成する前記第１プロセスを実行する第１仮想マシンを生成する処理と，前記通知処理部から受信した前記要求が前記第１プロセスに関連する第２プロセス以降のプロセスの実行要求である場合に，前記第２プロセス以降のプロセスを実行する仮想マシンを生成する処理とを行う，仮想マシン状態管理部と，
前記通知処理部からの通知にもとづいて，前記要求により実行が要求される要求先のプロセスを実行する仮想マシンを前記プログラムテーブルにより特定し，前記特定した仮想マシンへＣＰＵ割当を切り替える，仮想マシン切替部とを備えて，
前記第１仮想マシンは，
前記第１プロセスの実行時に，前記プログラム構成情報を前記プログラム管理部へ送信する処理と，要求元および要求先のプロセスを特定する情報を含むプロセス呼び出しの通知を前記プログラム管理部へ送信する処理とを行う，仮想マシンモニタ通知部を備え，
前記第２プロセス以降のプロセスを実行する各仮想マシンは，
要求元および前記処理したプロセスの返却先のプロセスを特定する情報を含むプロセス返却の通知を前記プログラム管理部へ送信する，仮想マシンモニタ通知部を備える
ことを特徴とする仮想マシンシステム。
【請求項２】
前記仮想マシン状態管理部は，前記通知受信部が，前記第２プロセス以降のプロセスの各属性情報を含むプログラム構成情報を受信した場合に，前記受信されたプログラム構成情報にもとづくプログラムテーブルを参照して，前記第２プロセス以降のプロセスとして前記属性情報に対応するプロセスを実行する仮想マシンの生成を行う
ことを特徴とする請求項１に記載の仮想マシンシステム。
【請求項３】
前記仮想マシン状態管理部は，前記プログラムの実行に関連するプロセスであって前記プログラムのプロセスと独立して実行される独立プロセスの情報を含むプログラム構成情報を受信した場合に，前記受信されたプログラム構成情報にもとづくプログラムテーブルを参照して，前記独立プロセスを実行する仮想マシンの生成を行い，
前記スケジューリング部は，前記生成された独立プロセスを実行する仮想マシンのスケジューリングを行う
ことを特徴とする請求項１または請求項２に記載の仮想マシンシステム。
【請求項４】
前記仮想マシンスケジュール管理部は，
前記仮想マシン毎のＣＰＵ消費時間を取得する処理と，前記プログラムテーブルをもとに，前記第２プロセス以降のプロセスを実行する各仮想マシンの前記ＣＰＵ消費時間を，前記第１仮想マシンのＣＰＵ消費時間に加算する処理とを行う消費時間計算部を備えて，
前記スケジューリング部は，前記仮想マシンのＣＰＵ割当のスケジュールを決定する際に，前記第１仮想マシンのＣＰＵ消費時間として前記消費時間計算部により加算されたＣＰＵ消費時間を用いてスケジュールを決定する
ことを特徴とする請求項１ないし請求項３のいずれか一項に記載の仮想マシンシステム。
【請求項５】
前記仮想マシン状態管理部が，前記プログラムの第１プロセスを実行する第１仮想マシンを複数生成かつ前記複数の仮想マシンが実行するプロセスが前記第２プロセス以降のプロセスを共有している場合に，
前記消費時間計算部は，前記プログラムテーブルをもとに，前記複数の第１仮想マシンによって共有されたプロセスを実行する仮想マシンのＣＰＵ消費時間を，前記共有する第１仮想マシンの各々のＣＰＵ消費時間に加算する
ことを特徴とする請求項４に記載の仮想マシンシステム。
【請求項６】
プロセスを実行する複数の仮想マシンを構築して，前記構築した仮想マシンにＣＰＵを割り当てて，各仮想マシンのプロセスの実行を管理する仮想マシン管理装置が実行する仮想マシン管理方法であって，
前記仮想マシン管理装置が，プログラムの実行を管理するプログラム管理部と，前記プログラムを構成する複数のプロセスを各々で実行する複数の仮想マシンへのＣＰＵ割当を，スケジュールにもとづいて管理する仮想マシンスケジュール管理部と，プログラムテーブルとを備えて，
前記プログラム管理部が，前記プログラムの起動要求を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムの起動要求が通知された場合に，前記プログラムを構成するプロセスであって前記起動要求を受けて実行する第１プロセスを実行する第１仮想マシンを生成する処理ステップと，
前記プログラム管理部が，前記第１仮想マシンから，前記第１プロセスの識別情報，前記プログラムを構成する前記第１プロセス以外の第２プロセス以降のプロセスを特定する情報を含むプログラム構成情報を取得する処理ステップと，
前記プログラム管理部が，前記プログラム構成情報および前記各プロセスを実行する仮想マシンの識別情報を前記プログラムテーブルに格納する処理ステップと，
前記プログラム管理部が，前記第１プロセスから，前記第１プロセスに関連する第２プロセス以降のプロセスの実行要求を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記第２プロセス以降のプロセスを実行する仮想マシンを生成する処理ステップと，
前記プログラム管理部が，前記第１プロセスから前記第２プロセス以降のプロセスの呼び出し通知を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムテーブルを参照して，前記呼び出し通知に対応するプロセスを実行する仮想マシンへＣＰＵ割当を切り替える処理ステップと，
前記プログラム管理部が，前記第２プロセスから前記呼び出し通知に関する処理の返却通知を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムテーブルを参照して，前記返却通知に対応するプロセスを実行する仮想マシンへＣＰＵ割当を切り替える処理ステップとを備える
ことを特徴とする仮想マシン管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，仮想マシンのスケジューリング処理技術に関する。
【背景技術】
【０００２】
仮想マシンシステムは，実ハードウェアのＣＰＵ等の演算装置や，メモリ・入出力装置などのリソースを仮想化して，１つの物理的コンピュータ上で複数の仮想マシンを実行するものである。
【０００３】
仮想マシンシステムの仮想マシン管理装置は，仮想マシンの起動・実行・シャットダウンを管理し，仮想マシンを時分割で実行させることによって，複数の仮想マシンが同時に実行されているかのような環境を提供する。
【０００４】
仮想マシン管理装置内に備えられるスケジュール機能（スケジューラ）が，どの仮想マシンにＣＰＵを割り当てて実行させるかを決定して，仮想マシンの実行の切り替えの制御を行う。また，仮想マシン上のＯＳ（ゲストＯＳ）は，仮想マシン管理装置で行われる仮想マシンのスケジュールと同様に，自ゲストＯＳ上で実行するプロセスのスケジューリングを行っている。
【０００５】
図１６は，各仮想マシン上のプロセス・スケジューリングの例を示す図である。
【０００６】
図１６に示すように，仮想マシン管理装置（ＶＭＭ：仮想マシンモニタ）が，ＣＰＵに割り当てられる仮想マシンおよびその順序（ＶＭプロセス・スケジュール）を決定する。各仮想マシンＶＭ―Ａ，ＶＭ＿ＢのゲストＯＳは，通常，仮想マシン管理装置によって自マシンにＣＰＵが割り当てられている期間内に限り，自マシンでのプロセスをスケジューリングする。
【０００７】
すなわち，仮想マシンシステムのＯＳによるプロセス・スケジューリングと，仮想マシン管理装置のゲストＯＳによる仮想マシン内プロセス・スケジューリングとは全く独立に行われるため，各仮想マシンＶＭ＿Ａ，ＶＭ＿ＢのゲストＯＳは，他の仮想マシン上のプロセスについて，プロセスの状態を知ることも，制御することもできない。
【０００８】
仮想マシン同士を関連させるスケジューリングの従来手法として，仮想マシン管理装置が，送信側仮想マシンから受信側仮想マシンへのＯＳ間の通信要求を受けて，受信側仮想マシンのゲストＯＳに受信割り込みによる通知を行って，受信割り込み解除後にその受信処理に必要なＣＰＵ時間を受信側仮想マシンに追加割り当てするスケジュール調整手法が知られている。
【０００９】
また，仮想マシン管理装置が，相互に通信する仮想マシンの組を特定して，特定された組の各仮想マシンの実行スケジューリングにおいて，対応する仮想マシンのＣＰＵ割当時間を短縮するスケジュール手法が知られている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−０７５７６６号公報
【特許文献２】特開２００８−１６５４１０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本願の発明者は，仮想化技術の応用として，プログラムを複数のモジュールやプロセスに分割して，分割したモジュールやプロセスの処理を，それぞれ別々の仮想マシン上の処理として独立実行させるような手法について検討をした。
【００１２】
図１は，本願の発明者により検討された仮想マシンシステムの構成例を示す図である。
【００１３】
図１に示す仮想マシンシステムにおいて，仮想マシン管理装置９０は，１つのプログラムを，ユーザとのＧＵＩを有する処理を行うアプリケーションプロセス側（フォアグランド側プロセス）と，アプリケーションプロセスから呼び出されるような処理を行うプロセス側（バックグラウンド側プロセス）とに分離して，それらのプロセスをそれぞれ別々の仮想マシン９１ｘ，９１ｙ，９１ｚで実行する。
【００１４】
ここで，他のアプリケーションによるハッキングで，プロセスＸで動作をさせている仮想マシン９１ｘが乗っ取られたと仮定する。この場合に，プロセスＸから独立したプロセスＹ，プロセスＺを実行している仮想マシン９１ｙ，９１ｚは，仮想マシン９１ｘと隔離されている。そのため，プロセスＹ，プロセスＺが，センシティブなデータやデバイスへのアクセスを行うものであっても，これらをハッキングから保護することができ，セキュリティの向上を図ることができる。
【００１５】
しかし，元々１つのプログラムとして１つの仮想マシン上で動作するようなプログラム群（例えば，メインプログラムとサブルーチンプログラム）を，複数のプロセスに分割して，別々の仮想マシンで実行する場合に，仮想マシン管理装置のスケジューリングの影響によって，以下の問題が生じる。すなわち，メインプログラムのプロセスを実行するメイン仮想マシンと，サブルーチンプログラムのプロセスを実行するサブ仮想マシンとメインプログラムを動作するメイン仮想マシンとのスケジューリングについて，元来１つのプログラムとして動作するサブルーチン呼び出しなどの順序や時間間隔を制御することができず，一体化したプログラムとしての動作が保証されなくなるという問題がある。
【００１６】
特に，１つのプログラムを構成するプロセスを実行するメイン仮想マシンとサブ仮想マシン以外にも，他のプログラムやプロセスを実行する複数の仮想マシンが動作している場合には，その数が増加するほど，メイン仮想マシンとサブ仮想マシンとの切り換えのタイミングや割り当て順序が合わないという問題がより多く生じて，問題が深刻になる。
【００１７】
図２は，メインプロセスと，メインプロセスから呼び出されるサブプロセスとのスケジューリングの理想例を示す図である。
【００１８】
図２は，プログラムを，メイン仮想マシンＶＭ＿Ａで実行されるプロセス１（以下，メインプロセスと呼ぶ）と，サブ仮想マシンＶＭ＿Ｂのプロセス１（以下，サブプロセスと呼ぶ）とに分離して実行している場合の，メインプロセスからサブプロセスの関数呼び出し時の望ましいスケジューリングを示している。
【００１９】
メインプロセスからサブプロセス上の関数呼び出し（処理依頼）を行う際に，メインプロセスからの関数呼び出しのタイミングで，メインＶＭ＿ＡからサブＶＭ＿ＢへとＣＰＵの割り当てが行われ，サブプロセスでの処理完了後に，再びメインＶＭ＿Ａに再割り当てされて，メインプロセスがサブプロセスの処理結果を直ちに取得して，プログラムの実行を継続できることが望ましい。
【００２０】
図３は，メインプロセスと，メインプロセスと独立して実行するサブプロセス（独立サブプロセス）とのスケジューリングの理想例を示す図である。
【００２１】
図３は，プログラムを，メイン仮想マシンＶＭ＿Ａのプロセス１（以下，メインプロセスと呼ぶ）と，サブ仮想マシンＶＭ＿Ｂのプロセス１（以下，サブプロセスと呼ぶ）とに分離して実行していて，サブプロセスがデバイスへの定期的なデータ受信（ポーリング）などの動作を，メインプロセスと独立して行っている場合の望ましいスケジューリングを示している。
【００２２】
サブＶＭ＿Ｂが，メインＶＭ＿Ａとは全く独立に定期的にスケジューリングされることによって，サブプロセスは，ポーリング動作を行うことができる。メインプロセスは，メインＶＭ＿Ａ上でスケジューリングされたタイミングでサブプロセスのデータを取得しようとする。この時，常に，サブプロセスがデバイスからデータを受信済みであり，メインプロセスは，そのデータを直ちに取得して，処理を滞りなく続けられることが望ましい。
【００２３】
図２および図３に示すスケジューリング例は，プログラムが同一のプロセスであるかのように理想的な動作を行った場合の例である。
【００２４】
しかし，実際にプログラムを分離して異なる仮想マシンで実行する場合に，特に他のプログラムに関する複数の仮想マシンも存在しているときは，メインプロセスとサブプロセス間でのデータの受け渡しタイミングや順序が想定通りにならず，処理待ちなどが生じてプログラムの動作に支障がある場合がある。
【００２５】
図４は，メインの仮想マシンとサブ仮想マシン間に生じる不具合を説明するための図である。
【００２６】
図４に，プログラムを，メイン仮想マシンＶＭ＿Ａのプロセス１（以下，メインプロセスと呼ぶ）と，サブ仮想マシンＶＭ＿Ｂのプロセス１（以下，サブプロセスと呼ぶ）とに分離して実行していて，他のプログラムのプロセスを実行する仮想マシンＶＭ＿Ｃがある場合に，実際に生じやすいスケジューリング動作の例を示している。
【００２７】
図４に示すスケジュール例において，サブプロセスの処理後にサブＶＭ＿ＢからメインＶＭ＿Ａへとスケジューリングが行われ，サブプロセスとメインプロセスが連続して実行されたため，メインプロセスがサブプロセスのデータをうまく取得できている（ケース１）。
【００２８】
その後，メインＶＭ＿Ａ→他ＶＭ＿Ｃ→メインＶＭ＿Ａとスケジューリングされたため，メインＶＭ＿Ａ上でメインプロセスがスケジューリングされるまでにサブプロセスが実行されなかったとする。この場合には，メインプロセスはサブプロセスからのデータ取得に失敗をしてしまう（ケース２）。
【００２９】
さらにその後，メインＶＭ＿Ａ→他ＶＭ＿Ｃ→サブＶＭ＿Ｂ→他ＶＭ＿Ｃ→メインＶＭ＿Ａとスケジューリングされ，メインプロセスはサブプロセスのデータを取得することができたが，サブプロセスの処理からメインプロセスの処理までに，他ＶＭ＿Ｃへの割り当てが割り込まれていたとする。この場合には，メインプロセスは，サブプロセスのデータ取得に時間がかかってしまう（ケース３）。
【００３０】
このように，１つのプログラムを複数の仮想マシン上で実行する場合に，関数の呼び出し，データの受け渡しなどが適切なタイミングや順序にならない状況が生じたり，他の仮想マシンに割り込まれて処理待ちが生じたりするなどの問題が発生する。
【００３１】
ところで，複数の仮想マシンへのスケジューリングを制御する従来手法として，以下の２つの方法がある。
【００３２】
［仮想マシンへの固定優先度付け］
仮想マシン管理装置から，仮想マシンに対して固定的な優先度を設定するスケジューリング手法がある。例えば，プログラムを，仮想マシンＶＭ１，ＶＭ２で実行する場合に，仮想マシンＶＭ１と仮想マシンＶＭ２へのＣＰＵ割当時間を，ＣＰＵ全体の４０％，２０％に固定して設定する。
【００３３】
［グループスケジューリング］
複数の仮想マシンをグループ化し，ＣＰＵの割り当てをそのグループ単位で管理するスケジューリング手法がある。例えば，複数のプログラムを複数の仮想マシンに分割して実行する場合に，プログラム単位で仮想マシンをグループ化し，グループ単位でのＣＰＵ割当量の総計をもとにスケジューリングを行う。
【００３４】
しかし，固定優先度付けの手法では，仮想マシンＶＭ１，ＶＭ２上に分割して実行されるプロセス各々についてのＣＰＵ割当量を制御することができるが，仮想マシンＶＭ１と仮想マシンＶＭ２のＣＰＵ割当のタイミング（順序，時間間隔など）は考慮されないため，上述の処理待ちなどの問題は解決できない。
【００３５】
また，グループスケジューリング手法は，グループ間での公正な優先度付けやリソース配分が可能となるが，グループ内における仮想マシン間のＣＰＵ割当タイミングまでは考慮されないため，問題は解決できない。
【００３６】
本願発明は，複数の仮想マシン上で実行される複数のプロセスが，１つのプログラムとして一体化した動作を効率的に行えるように，仮想マシン間のプロセッサ（ＣＰＵ）の割り当ての順序や時間間隔等を考慮して仮想マシンのスケジュールを管理できる仮想マシンシステムを提供することを目的とする。
【００３７】
また，本願発明は，複数の仮想マシン上で実行される複数のプロセスが，１つのプログラムとして一体化した動作を効率的に行える仮想マシン管理方法を提供することを目的とする。
【課題を解決するための手段】
【００３８】
本願発明の一態様として開示される仮想マシンシステムは，プロセスを実行する複数の仮想マシンを仮想マシン管理装置上に構築し，前記仮想マシン管理装置が，前記構築された仮想マシンにＣＰＵを割り当てて，各仮想マシンのプロセスの実行を管理する仮想マシンシステムであって，前記仮想マシン管理装置は，プログラムの実行を管理する，プログラム管理部と，前記プログラムを構成する複数のプロセスを各々で実行する複数の仮想マシンへのＣＰＵ割当を，スケジュールにもとづいて管理する，仮想マシンスケジュール管理部とを備える。
【００３９】
さらに，前記プログラム管理部は，１）前記プログラムを構成する複数のプロセスのうち当該プログラムの起動要求を受けて実行される第１プロセスを実行する第１仮想マシンから，前記第１プロセスの識別情報，前記プログラムを構成する前記第１プロセス以外の第２プロセス以降のプロセスを特定する情報を含むプログラム構成情報を取得して，前記プログラム構成情報および前記各プロセスを実行する仮想マシンの識別情報をプログラムテーブルに登録する，プログラムテーブル管理部と，２）前記仮想マシン管理装置上に生成した仮想マシンで実行されているプロセスから通知を受信する，通知受信部と，３）前記プログラムテーブルを参照して，前記通知受信部が受信した通知に対応するプロセスに関する処理の要求を前記仮想マシンスケジュール管理部へ送信する，通知処理部とを備える。
【００４０】
さらに，前記仮想マシンスケジュール管理部は，１）前記仮想マシンに対するＣＰＵ割当のスケジュールを決定する，スケジューリング部と，２）前記通知処理部から受信した前記要求が前記プログラムの起動要求である場合に，当該起動対象のプログラムを構成する前記第１プロセスを実行する第１仮想マシンを生成する処理と，前記通知処理部から受信した前記要求が前記第１プロセスに関連する第２プロセス以降のプロセスの実行要求である場合に，前記第２プロセス以降のプロセスを実行する仮想マシンを生成する処理とを行う，仮想マシン状態管理部と，３）前記通知処理部からの通知にもとづいて，前記要求により実行が要求される要求先のプロセスを実行する仮想マシンを前記プログラムテーブルにより特定し，前記特定した仮想マシンへＣＰＵ割当を切り替える，仮想マシン切替部とを備える。
【００４１】
そして，前記第１仮想マシンは，前記第１プロセスの実行時に，前記プログラム構成情報を前記プログラム管理部へ送信する処理と，要求元および要求先のプロセスを特定する情報を含むプロセス呼び出しの通知を前記プログラム管理部へ送信する処理とを行う，仮想マシンモニタ通知部を備える。
【００４２】
さらに，前記第２プロセス以降のプロセスを実行する各仮想マシンは，要求元および前記処理したプロセスの返却先のプロセスを特定する情報を含むプロセス返却の通知を前記プログラム管理部へ送信する，仮想マシンモニタ通知部を備える。
【発明の効果】
【００４３】
開示した仮想マシンシステムによれば，プログラムを複数のプロセスに分割して，分割したプロセスを異なる仮想マシンでそれぞれ実行する場合に，プログラムの最初のプロセス起動時に，プログラム構成情報を取得して管理し，仮想マシンで実行されているプロセスから他の仮想マシンで実行されるプロセスの呼び出しや返却が通知されると，該当するプロセスを実行する仮想マシンを特定して，特定した仮想マシンへＣＰＵ割当を切り替えることができる。
【００４４】
これにより，１つのプログラムを複数のプロセスで実行した場合に，複数のプロセス間の実行順序を考慮したスケジューリングを実現することができ，プログラムを分割せずに実行している場合と同等にＣＰＵ割当時間を制御することができる。よって，複数の仮想マシンで実行されているプログラムを１つの仮想マシンで実行している場合と同様の最小の応答時間で処理を実現することができる。
【図面の簡単な説明】
【００４５】
【図１】本願の発明者により検討された仮想マシンシステムの構成例を示す図である。
【図２】メインプロセスと，メインプロセスから呼び出されるサブプロセスとのスケジューリングの理想例を示す図である。
【図３】メインプロセスと，メインプロセスと独立して実行するサブプロセス（独立サブプロセス）とのスケジューリングの理想例を示す図である。
【図４】メインの仮想マシンとサブ仮想マシン間に生じる不具合を説明するための図である。
【図５】本発明の一実施例における仮想マシンシステムの構成例を示す図である。
【図６】プログラムの起動時の処理例を示す図である。
【図７】サブルーチン呼び出し時の処理例を示す図である。
【図８】独立サブプロセスの実行時の処理例を示す図である。
【図９】仮想マシンの状態遷移を示す図である。
【図１０】優先度がＵＮＤＥＲとＯＶＥＲの場合の待ち状態例を示す図である。
【図１１】優先度がＵＮＤＥＲ，ＯＶＥＲおよびＩＤＬＥの場合の待ち状態例を示す図である。
【図１２】スケジューリング部によるＣＰＵ割当の例を示す図である。
【図１３】独立実行されるサブＶＭとして，リアルタイムＶＭが生成される場合の割り当て例を示す図である。
【図１４】スケジューリング部によるＣＰＵ割当の例を示す図である。
【図１５】仮想マシンシステムを実現するハードウェア構成例を示す図である。
【図１６】各仮想マシン上のプロセス・スケジューリングの例を示す図である。
【発明を実施するための形態】
【００４６】
図５は，本発明の一実施例における仮想マシンシステムの構成例を示す図である。
【００４７】
図５に示す仮想マシンシステム１は，プロセスを実行する複数の仮想マシン（ＶＭ）２，３，４，…を仮想マシン管理装置（ＶＭＭ）１０上に構築して，仮想マシン管理装置１０が，構築された仮想マシン２，３，４，…にコンピュータのプロセッサ（ＣＰＵ）（図示しない）を割り当てて，各仮想マシン２，３，４，…のプロセスの実行を仮想マシン管理装置１０が管理するシステムである。
【００４８】
本形態において，プログラムは，例えば，ＯＳ上で動作するアプリケーションプログラムであるが，それのみを指すものではなく，アプリケーションプログラムから呼び出される特定のライブラリモジュール，ＯＳ中の一機能を実現するサブシステム，デバイスドライバなどの，コンピュータの実現する処理手順によって実現される機能を含むものである。
【００４９】
プロセスは，ＯＳが生成するプログラム動作単位を示すものであるが，それのみを指すものではなく，タスクやスレッド，ジョブなどと呼ばれる動作単位を含むものである。
【００５０】
本形態において，プログラム実行中に実行されるプロセスのうち，仮想マシン上で最初に起動される第１プロセスをメインプロセスｍｐとする。メインプロセスｍｐとは別個に動作するプロセス群，すなわち第２プロセス以降のプロセス群を，サブプロセスｓｐとして分離する。
【００５１】
メインプロセスｍｐは，主に，ユーザが直接あるいは間接的に操作し，プログラムの起動停止などを行うための仮想マシン上で起動されるプロセスであり，ユーザの操作を受け付けるユーザインタフェースなどを備える。
【００５２】
サブプロセスｓｐは，主に，プログラムを構成するモジュールやオブジェクトの一部として，同期的または非同期的に呼び出されるサブルーチンとして実装されるプロセスである。サブプロセスｓｐを実行する仮想マシンは，サブプロセスｓｐのみを実行する特別な仮想マシンであってよい。
【００５３】
メインプロセスｍｐとサブプロセスｓｐとは異なる仮想マシン上で実行される。図５に示す構成例では，メインプロセスｍｐは，仮想マシン（以下，メインＶＭとする）２で，サブプロセスｓｐは，仮想マシン（以下，サブＶＭとする）３でそれぞれ実行される。
【００５４】
仮想マシンシステム１が備える仮想マシン管理装置(ＶＭＭ)１０は，プログラム管理部１１，プログラムテーブル１３，仮想マシンスケジュール管理部１５，および仮想マシン間通信部１７を備える仮想マシン管理装置である。
【００５５】
プログラム管理部１１は，プログラムのメインプロセスｍｐおよびサブプロセスｓｐを管理する処理部である。
【００５６】
プログラムテーブル１３は，プログラムのメインプロセスｍｐ，サブプロセスｓｐの構成を示す情報，各プロセスを実行する仮想マシン（メインＶＭ２，サブＶＭ３）を識別する情報が格納される記憶部である。
【００５７】
仮想マシンスケジュール管理部（ＶＭスケジュール管理部）１５は，複数の仮想マシン２，３，４，…へのＣＰＵの割り当てを，スケジュールにもとづいて管理する処理部である。
【００５８】
仮想マシン間通信部（ＶＭ間通信部）１７は，メインＶＭ２，サブＶＭ３の仮想マシン間通信部２３，３３と，メッセージ通信を行う処理部である。
【００５９】
プログラム管理部１１は，通知受信部１１１，プログラムテーブル管理部１１３，および通知処理部１１５を備える。
【００６０】
通知受信部１１１は，メインＶＭ２のメインプロセスｍｐから，プログラム構成情報を受信する。また，通知受信部１１１は，メインＶＭ２またはサブＶＭ３で実行されているプロセスからの通知を受信する。
【００６１】
具体的には，通知受信部１１１は，仮想マシン（メインＶＭ２，サブＶＭ３）上のＯＳやアプリケーションから送信された，仮想マシン管理装置１０内の処理の呼び出し（ハイパーコール）を受信する。
【００６２】
プログラムテーブル管理部１１３は，プログラムのメインプロセスｍｐを実行するメインＶＭ２から，メインプロセスｍｐおよびサブプロセスｓｐに関する識別情報と構成情報とを含むプログラム構成情報を取得して，プログラムを構成するメインプロセスｍｐおよびサブプロセスｓｐの構成，ならびにこれらのプロセス（メインプロセスｍｐおよびサブプロセスｓｐ）を実行する仮想マシンの識別情報とを対応付けた情報を，プログラムテーブル１３として管理する。
【００６３】
一例として，プログラム構成情報は，プログラムのメインプロセスｍｐの識別情報，メインプロセスｍｐから呼び出されるサブプロセスｓｐの構成情報を含む。
【００６４】
メインプロセスｍｐの識別情報は，実行される仮想マシン上でメインプロセスを一意に特定可能なプロセス番号やプログラム名などである。
【００６５】
サブプロセスｓｐの構成情報は，例えば，メインプロセスｍｐからサブプロセスｓｐを識別するためのプログラム名，初期状態，使用するメモリ量などのパラメタである。
【００６６】
また，サブプロセスｓｐの構成情報は，サブプロセスｓｐの役割や機能を示す属性情報を含む情報であってもよい。
【００６７】
また，サブプロセスｓｐの構成情報は，メインプロセスｍｐと独立して実行されるサブプロセス（独立サブプロセス）の識別情報および制御情報を含む情報であってもよい。この場合に，独立サブプロセスの制御情報は，例えば，サブプロセスｓｐを実行する仮想マシン３のスケジューリングに関するパラメタである。具体的なパラメタは，仮想マシン管理装置１０のスケジューリング部１５５が採用するスケジューリングアルゴリズムにより異なるが，例えば，スケジューリングの優先度，デッドライン時間などを示すものである。
【００６８】
独立サブプロセスを実行するサブＶＭ３により，例えば特定デバイスのポーリング動作などが実行可能となる。
【００６９】
仮想マシンの識別情報は，仮想マシン管理装置１０が仮想マシン２，３，４，…を一意に特定可能な仮想マシン番号，仮想マシン名などである。
【００７０】
なお，プログラム構成情報のサブプロセスｓｐの構成情報は，サブプロセスｓｐ自体の実行イメージ，またはサブプロセスｓｐの実行イメージを含む仮想マシン自体の実行イメージを含む情報であってもよい。
【００７１】
プログラムテーブル管理部１１３は，プログラムテーブル１３に，メインプロセスｍｐの識別情報と，それを実行するメインＶＭ２の識別情報，サブプロセスｓｐの識別情報とサブＶＭ３の識別情報とを登録し，参照する。
【００７２】
通知処理部１１５は，プログラムテーブル１３を参照して，通知受信部１１１が受信した通知に対応する依頼（要求）を仮想マシンスケジュール管理部１５へ送信する。
【００７３】
具体的には，通知処理部１１５は，メインＶＭ２およびサブＶＭ３から受信した通知を解釈して，メインプロセスｍｐとサブプロセスｓｐに関する処理の依頼として，「仮想マシン（ＶＭ）切替依頼」，「サブＶＭ起動依頼」，「仮想マシン（ＶＭ）実行依頼」を仮想マシンスケジュール管理部１５に通知する。
【００７４】
「ＶＭ切替依頼」は，メインプロセスｍｐまたはサブプロセスｓｐからの通知が，プロセスの呼び出し通知である場合に，通知された呼び出し先のプロセスを実行する仮想マシンへのＣＰＵの切り替えを要求するものである。
【００７５】
「サブＶＭ起動依頼」は，メインプロセスｍｐからの通知がサブプロセスの起動依頼である場合に，通知された起動依頼のサブプロセスｓｐを実行する仮想マシンの起動を要求し，メインＶＭ２と起動したサブプロセスｓｐを実行するサブＶＭ３との仮想マシン間の通信路確立の要求である。
【００７６】
「ＶＭ実行依頼」は，メインプロセスｍｐからの通知が独立サブプロセスの実行通知である場合に，通知された独立サブプロセスｓｐを実行するサブＶＭ２のスケジューリングを要求するものである。
【００７７】
仮想マシンスケジュール管理部１５は，仮想マシン２，３，４，…の実行状態，仮想マシン２，３，４，…が消費したＣＰＵの時間（ＣＰＵ消費時間）を管理し，仮想マシン２，３，４，…へのＣＰＵ割当を時分割で切り替えるスケジュール管理処理を行う。
【００７８】
仮想マシンスケジュール管理部１５は，仮想マシン切替部（ＶＭ切替部）１５１，仮想マシン状態管理部（ＶＭ状態管理部）１５３，スケジューリング部１５５，および消費時間計算部１５７を備える。
【００７９】
仮想マシン切替部１５１は，通知処理部１１５からの要求（ＶＭ切替依頼）にもとづいて，要求先の仮想マシンへＣＰＵの割り当てを切り替える。
【００８０】
仮想マシン状態管理部１５３は，プログラムの起動要求，サブプロセスの起動要求などの通知によるサブＶＭ起動依頼，ＶＭ実行依頼にもとづいて，該当するプロセスに対応する仮想マシンを生成する。なお，本実施例における仮想マシンの生成は，仮想マシンを新規に起動することにより実現しても良いし，既に起動済みの仮想マシンを該当するプロセスに割当てることにより実現しても良い。
【００８１】
スケジューリング部１５５は，仮想マシン２，３，４，…のＣＰＵの割り当てのスケジュールを決定する。スケジューリング部１５５は，仮想マシンのＣＰＵ消費時間，優先度などから，所定のスケジューリングアルゴリズムにもとづいて，次にどの仮想マシンにＣＰＵをどれだけ割り当てるかを決定する。
【００８２】
消費時間計算部１５７は，仮想マシン２，３，４，…毎に，使用したＣＰＵの消費時間を計算して，プログラムテーブル１３をもとに，サブプロセスｓｐを実行するサブＶＭ３でのＣＰＵ消費時間を，メインＶＭ２のＣＰＵ消費時間に加算する。
【００８３】
この場合に，スケジューリング部１５５は，仮想マシンのＣＰＵ割当のスケジュールを決定する際に，メインＶＭのメインプロセスｍｐの消費時間として，消費時間計算部１５７により加算された消費時間を用いて，スケジュールを決定する。
【００８４】
メインＶＭ２は，ユーザがアプリケーションを利用し実際に操作を行う仮想マシンである。メインＶＭ２に割り当てられたＣＰＵは，さらにメインＶＭ２上で動作するＯＳのプロセススケジューラにより，時分割でアプリケーションに割り当てられる。
【００８５】
メインＶＭ２が実行するメインプロセスｍｐは，メインＶＭ２とサブＶＭ３に分割して実行されるプログラムのうち，メインＶＭ２で実行されるプロセスである。
【００８６】
メインＶＭ２は，仮想マシンモニタ通知部（ＶＭＭ通知部）２１を備える。仮想マシンモニタ通知部２１は，メインプロセスｍｐの実行時に，プログラム構成情報，メインプロセスｍｐで発行される要求や制御の通知（例えば，サブＶＭ３の生成，サブＶＭ３へのＣＰＵ割当の切り替えなどを要求するためのハイパーコール）をプログラム管理部１１へ送信する。
【００８７】
サブＶＭ３は，メインＶＭ２からの要求で生成される，サブプロセスｓｐを実行するための仮想マシンである。
【００８８】
サブＶＭ３が実行するサブプロセスｓｐは，メインＶＭ２とサブＶＭ３に分割して実行されるプログラムのうち，サブＶＭ３で実行され，主にメインＶＭ２からのサブルーチンとして実装されたプロセスである。
【００８９】
サブＶＭ３は，仮想マシンモニタ通知部（ＶＭＭ通知部）３１を備える。仮想マシン仮想マシンモニタ通知部３１は，サブプロセスｓｐで発行される要求や制御の通知（例えば，メインＶＭ２へのＣＰＵ割当の切り替えなどを要求するためのハイパーコール）をプログラム管理部１１へ送信する。
【００９０】
仮想マシンモニタ通知部２１，３１は，例えば，プログラムから仮想マシン管理装置１０を呼び出すためのハイパーコールの他，プログラムからＯＳを経由して仮想マシン管理装置１０を呼び出すためのシステムコール，あるいは，ＣＰＵ命令における特定の特権命令や例外命令を発行し，仮想マシン管理装置１０にその命令をトラップさせて，仮想マシン管理装置１０に制御を遷移させることにより実現されてもよい。
【００９１】
また，メインＶＭ２およびサブＶＭ３は，それぞれ，仮想マシン間通信部（ＶＭ間通信部）２３，３３を備えてもよい。仮想マシン間通信部２３，３３は，メインＶＭ２とサブＶＭ３との間のメッセージ通信を行う。
【００９２】
また，メインＶＭ２およびサブＶＭ３は，仮想マシン間の共有メモリなどにより，サブルーチン呼び出し後の返却値，処理データの授受を行うことができる。
【００９３】
以下に，仮想マシンシステムの処理動作例を示す。
【００９４】
〔プログラムの生成時の処理例〕
図６は，プログラムの生成時の処理例を示す図である。
【００９５】
ステップＳ１：ユーザによるアプリケーションプログラムの起動があると，メインＶＭ２が生成される。メインＶＭ２が，メインプロセスｍｐを生成する。
【００９６】
ステップＳ２：メインプロセスｍｐは，サブプロセスｓｐの実行イメージをメモリ上に展開する。
【００９７】
ステップＳ３：仮想マシンモニタ通知部２１は，プログラム構成情報として，仮想マシン管理装置１０に対して，メインプロセスｍｐの識別情報（プロセスＩＤ），サブプロセスｓｐの実行イメージ，サブプロセスの識別情報（プロセスＩＤ）を展開したメモリ上のアドレスを，ハイパーコールにより通知する。
【００９８】
ステップＳ４：通知受信部１１１がプログラム構成情報を受けると，通知処理部１１５は，対応するサブプロセスｓｐを実行するためのサブＶＭ起動依頼を仮想マシンスケジュール管理部１５へ通知する。そして，ＶＭ状態管理部１５３が，サブＶＭ３を生成する。
【００９９】
ステップＳ５：さらに，ＶＭ状態管理部１５３が，生成したサブＶＭ３上にサブプロセスｓｐの実行イメージをコピーして，サブプロセスｓｐを起動させる。
【０１００】
ステップＳ６：プログラムテーブル管理部１１３が，メインＶＭ２の識別情報（ＶＭ番号）とメインプロセスｍｐのＩＤ，生成されたサブＶＭ３の識別情報（ＶＭ番号）とサブプロセスｓｐのＩＤとを対応づけてプログラムテーブル１３に登録して，メインプロセスｍｐのハイパーコールに応答する。
【０１０１】
これにより，仮想マシン管理装置１０では，プログラム毎に，メインプロセスｍｐを実行する仮想マシン（メインＶＭ２）と，サブプロセスｓｐを実行する仮想マシン（サブＶＭ３）とを紐付けて管理することが可能となる。
【０１０２】
図６に示す処理例において，ステップＳ４において，ＶＭ状態管理部１５３は，メインＶＭ２からの通知を受けてサブＶＭ３を生成する。
【０１０３】
しかし，ＶＭ状態管理部１５３は，サブプロセスｓｐを実行するサブＶＭ３を，メインプロセスｍｐの実行開始前にあらかじめ生成しておき，プログラムテーブル管理部１１３は，メインプロセスｍｐからの通知により，メインプロセスｍｐとサブプロセスｓｐとを関連付けてプログラムテーブル１３に登録してもよい。
【０１０４】
これにより，特定の動作や機能を実現するサブプロセスｓｐを実行するサブＶＭ３が既に生成されている場合に，メインプロセスｍｐからの通知にもとづいて，該当するサブＶＭ３をメインプロセスｍｐのメインＶＭ２と対応付けて利用することが可能となる。
【０１０５】
また，この場合に，プログラムテーブル管理部１１３は，サブプロセスｓｐを実行するサブＶＭ３が，複数のメインプロセスｍｐから共有されるように，プログラムテーブル１３に登録して管理しても良い。
【０１０６】
すなわち，サブＶＭ３が事前に生成されている場合に，後からメインプロセスｍｐとサブプロセスｓｐを対応付けて，１対１で使用されるようにしてよく，または，複数のメインプロセス間でサブプロセスｓｐを共有して使用されるようにしてもよい。また，既に生成されているサブＶＭ３を使用する場合であっても，メインプロセスｍｐ間でサブプロセスｓｐを共有しないようにすることもできる。
【０１０７】
さらに，消費時間計算部１５７は，共有されたサブＶＭ３のＣＰＵ消費時間を，共有したメインプロセスｍｐのメインＶＭ２各々のＣＰＵ消費時間に，それぞれ加算する。
【０１０８】
これにより，サブＶＭ３を，あるサブルーチンを複数のメインプロセスから呼び出す共通ライブラリとして利用することが可能となる。また，プログラム間のスケジューリングをＣＰＵの消費時間に則して適切に行うことが可能となる。
【０１０９】
〔サブルーチン呼び出し時の処理例〕
図７は，サブルーチン呼び出し時の処理例を示す図である。
【０１１０】
ステップＳ１１：仮想マシン管理装置１０のスケジューリング部１５５が決定したスケジュールにもとづいて，仮想マシン切替部１５１が，メインＶＭ２にＣＰＵを割り当てる。
【０１１１】
ステップＳ１２：メインＶＭ２において，メインプロセスｍｐにＣＰＵを割り当てられる。
【０１１２】
ステップＳ１３：メインプロセスｍｐが，サブプロセスｓｐのサブルーチン呼び出しのために，仮想マシン管理装置１０に，サブプロセスｓｐのＩＤを指定したＶＭ切替のハイパーコール呼び出しを行う。
【０１１３】
ステップＳ１４：通知受信部１１１が，ハイパーコール呼び出しを受信すると，通知処理部１１５は，サブプロセスｓｐのＩＤを指定したＶＭ切替依頼を仮想マシンスケジュール管理部１５へ通知する。ＶＭ切替部１５１は，プログラムテーブル１３を参照して，サブプロセスｓｐＩＤから，切替先のサブＶＭ３のＶＭ番号を特定する。
【０１１４】
ステップＳ１５：ＶＭ切替部１５１は，特定したサブＶＭ３にＣＰＵの割り当てを切り替える。
【０１１５】
ステップＳ１６：サブＶＭ３において，サブプロセスｓｐにＣＰＵが割り当てられて，サブルーチンが実行される。
【０１１６】
ステップＳ１７：サブルーチンの処理終了後，仮想マシンモニタ通知部３１は，仮想マシン管理装置１０に，ＶＭ切替通知のハイパーコール呼び出しを行い，メインＶＭ２へのＣＰＵ割当を通知する。
【０１１７】
ステップＳ１８：通知受信部１１１が，ハイパーコール呼び出しを受けると，通知処理部１１５は，サブＶＭ３からのＶＭ切替依頼を仮想マシンスケジュール管理部１５へ通知する。ＶＭ切替部１５１は，プログラムテーブル１３を参照して，サブプロセスｓｐＩＤから，処理の戻り先のメインＶＭ２のＶＭ番号を確認する。
【０１１８】
ステップＳ１９：消費時間計算部１５７は，サブＶＭ３のＣＰＵ消費時間を取得して，取得した消費時間をメインＶＭ２の消費時間に加算する。
【０１１９】
ステップＳ１１０：ＶＭ切替部１５１は，メインＶＭ２にＣＰＵの割り当てを切り替える。
【０１２０】
ステップＳ１１１：メインＶＭ２において，メインプロセスｍｐにＣＰＵが割り当てられる。ＶＭ間通信部２３，３３の通信によって，メインプロセスｍｐは，サブプロセスｓｐのサブルーチン呼び出しの出力結果を取得して，処理を継続する。
【０１２１】
以上のように，仮想マシン管理装置１０は，従来のサブルーチン呼び出しと同様に，メインプロセスｍｐからサブプロセスｓｐへとＣＰＵ割当を変更し，サブプロセスｓｐでの処理終了後に，再びメインプロセスｍｐへとＣＰＵ割当を戻すことができる。
【０１２２】
また，仮想マシン管理装置１０は，サブＶＭ３のＣＰＵ消費時間をメインＶＭ２のＣＰＵ消費時間として扱う。
【０１２３】
これにより，メインプロセスｍｐとサブプロセスｓｐとが同一の仮想マシン上で実行されているように，一体化してスケジューリングすることが可能となる。
【０１２４】
〔独立サブプロセスの実行時の処理例〕
図８は，独立サブプロセスの実行時の処理例を示す図である。
【０１２５】
独立サブプロセスの実行は，サブプロセスｓｐを独立実行させて，ポーリングなどのタスクをメインプロセスｍｐからの指示で行う処理で利用される。
【０１２６】
ステップＳ２１：スケジューリング部１５５が決定したスケジュールにもとづいて，仮想マシン切替部１５１が，メインＶＭ２にＣＰＵを割り当てる。
【０１２７】
ステップＳ２２：メインＶＭ２において，メインプロセスｍｐにＣＰＵが割り当てられる。
【０１２８】
ステップＳ２３：メインプロセスｍｐが，サブプロセスｓｐにデバイスのポーリングをさせるため，サブプロセスｓｐのＩＤを指定して，仮想マシン管理装置１０にＶＭ実行依頼の通知をハイパーコール呼び出しにより行う。
【０１２９】
ステップＳ２４：通知受信部１１１が，ハイパーコール呼び出しを受けると，通知処理部１１５は，サブプロセスｓｐのＩＤを指定したＶＭ実行依頼を仮想マシンスケジュール管理部１５へ通知する。ＶＭ状態管理部１５３，プログラムテーブル１３を参照して，サブプロセスｓｐのＩＤから独立実行を行うサブＶＭのＶＭ番号を特定し，サブＶＭ番号とスケジューリングのパラメタ（例えば優先度など）をスケジューリング部１５５に渡す。スケジューリング部１５５は，特定されたサブＶＭ３のスケジューリングを登録する。
【０１３０】
ステップＳ２５：ＶＭ切替部１５１は，メインプロセスｍｐからのＶＭ切替通知を受け付けることなく，サブＶＭ３にＣＰＵを割り当て，サブＶＭ３でサブプロセスｓｐにＣＰＵが割り当てられる。メインプロセスｍｐは，メインプロセスｍｐにＣＰＵが割り当てられたタイミングで，ＶＭ間通信部２３，３３により，サブプロセスｓｐがポーリングにより取得したデータを受信して，処理を行う。
【０１３１】
以上のように，仮想マシン管理装置１０は，メインプロセスｓｐから得たサブプロセスｓｐの制御情報（スケジューリングパラメタ）にもとづいて，該当するサブＶＭ３を，メインＶＭ２とは独立にスケジューリングすることができる。
【０１３２】
一方で，メインプロセスｍｐから取得したサブプロセスｓｐの制御情報（例えば，スケジューリングパラメタ）にもとづいて独立実行するサブプロセスｓｐのスケジューリングが行われるため，メインＶＭ２と関連付けたスケジューリングも可能となる。
【０１３３】
〔スケジューリング処理〕
仮想マシン管理装置１０のスケジューリング部１５５の処理を説明する前に，スケジューリング部１５５が採用するクレジットスケジュール手法を説明する。
【０１３４】
クレジットスケジューリングでは，実行するプロセスに応じた重みｗが各仮想マシンに設定され，一定時間（例えば，３０ミリ秒［ｍｓ］）毎に，その重みｗに応じたＣＰＵの持ち時間（Ｃｒｅｄｉｔ）が仮想マシンに付与される。
【０１３５】
例えば，Ｃｒｅｄｉｔ＋＝３０×（重みｗ／Ａｃｔｉｖｅな仮想マシンＶＭの総重みＷ）とし，ここで，重みｗ＝１から１０までの値，デフォルト値は１とする。
【０１３６】
さらに，クレジットスケジューラは，Ｃｒｅｄｉｔにより仮想マシンの状態を更新して，仮想マシンの実行優先度を再設定する。
【０１３７】
図９は，仮想マシンの状態遷移を示す図である。
【０１３８】
仮想マシンは，ＣＰＵを割り当てられて実行されると，実行された時間分だけＣｒｅｄｉｔが消費（減算）される。付与されたＣｒｅｄｉｔが残っている（正の値）の場合には，仮想マシンの状態は「ＵＮＤＥＲ」となる。Ｃｒｅｄｉｔを使いきっている（負の値）場合には，仮想マシンの状態は「ＯＶＥＲ」である。なお，一定時間（例えば，３０ｍｓ）経過後に，クレジットスケジューラからＣｒｅｄｉｔを再付与されて，値が正になると「ＵＮＤＥＲ」となる。
【０１３９】
また，Ｃｒｅｄｉｔが一定値（ここでは３０）以上である場合には，その仮想マシンは活発に動作していないと判断され，Ｃｒｅｄｉｔの加算対象から除外され，Ｃｒｅｄｉｔの値が０となり，状態が「ＵＮＤＥＲ（ＩＮＡＣＴＩＶＥ）」となる。これは，実行を行わない待ち状態にある仮想マシンが延々とＣｒｅｄｉｔ値を加算され続けるのを防止するための処置である。
【０１４０】
ＣＰＵ割当により仮想マシンの実行が再開されると，状態は「ＵＮＤＥＲ」となる。
【０１４１】
同様にＯＶＥＲの場合も，Ｃｒｅｄｉｔの下限値（ここでは−３０とする）を設定しておき，実行を続けている仮想マシンのＣｒｅｄｉｔが延々と減算され続けるのを防止する。
【０１４２】
クレジットスケジューラは，ＵＮＤＥＲ，ＯＶＥＲの順に高い優先度として扱い，ＵＮＤＥＲ，ＯＶＥＲの状態にある仮想マシンをランキューで管理し，ランキューの先頭の仮想マシンから順番にＣＰＵを割り当て，また，実行後には，仮想マシンはランキューの末尾に移動させる。
【０１４３】
図１０は，優先度がＵＮＤＥＲとＯＶＥＲの場合の待ち状態例を示す図である。
【０１４４】
図１０に示すように，仮想マシンの状態がＯＶＥＲからＵＮＤＥＲに戻る場合には，その仮想マシンは，ＵＮＤＥＲのランキューの先頭へ移動される。また，ＵＮＤＥＲからＯＶＥＲに落ちる場合には，仮想マシンは，ＯＶＥＲのランキューの末尾に移動される。
【０１４５】
クレジットスケジューラでは，仮想マシンの状態更新と仮想マシン間の優先度が再設定された次の３０ｍｓの間で，図１０に示すようなＵＮＤＥＲのランキューの先頭から順に実仮想マシンにＣＰＵが割り当てられる。そして，仮想マシン自体が処理待ちあるいはＩ／Ｏ命令発行などで待ち状態になると，ＣＰＵ割当がランキューの次の仮想マシンに切り替えられる。ＵＮＤＥＲのランキューの仮想マシンの割り当てが一巡した後は，ＯＶＥＲのランキューの先頭の仮想マシンから割り当てが行われる。
【０１４６】
クレジットスケジューラは，ＣＰＵ割当の切り替え時に，仮想マシンの実行された時間（ＣＰＵ消費時間）を計算して，仮想マシンに付与しているＣｒｅｄｉｔを減算する。例えば，仮想マシンが１０ｍｓ実行された場合には，Ｃｒｅｄｉｔ−１０ｍｓ（下限値を−３０）として，その仮想マシンをランキューの末尾に移動する。
【０１４７】
上記の動作により，Ｃｒｅｄｉｔを使いきった仮想マシンは，まだＣｒｅｄｉｔが残っている仮想マシンが動作していない時間に限って動作可能になる。また，活発に動作していないと判断された仮想マシンには，新たなＣｒｅｄｉｔが与えられず，活発に動作する仮想マシンがＣｒｅｄｉｔを分けあうことになる。
【０１４８】
このようにして，各仮想マシンに設定された重みｗに合わせて仮想マシン間の割り当てのバランスをとりながら，効率的なＣＰＵ割当が行われる。
【０１４９】
仮想マシン管理装置１０のスケジューリング部１５５は，上記のクレジットスケジューリング手法をもとに，仮想マシンの状態として「ＵＮＤＥＲ」，「ＯＶＥＲ」に加え，「ＩＤＬＥ」を設定する。
【０１５０】
図１１は，優先度がＵＮＤＥＲ，ＯＶＥＲおよびＩＤＬＥの場合の待ち状態例を示す図である。
【０１５１】
スケジューリング部１５５は，ＵＮＤＥＲまたはＯＶＥＲのランキューには，メインＶＭ２のみを移動させるようにし，通常のランキュー順のＣＰＵ割当を，ＵＮＤＥＲおよびＯＶＥＲのランキューの仮想マシン（メインＶＭ２）のみに対して行う。
【０１５２】
スケジューリング部１５５は，サブＶＭ３を，生成時にはＩＤＬＥ状態とし，ＵＮＤＥＲまたはＯＶＥＲのキューにあるメインＶＭ２からの呼び出しによってのみ，ＣＰＵの割り当てを行う。すなわち，スケジューリング部１５５は，ＩＤＬＥ状態にあるサブＶＭ３をＣｒｅｄｉｔの加算対象および減算対象から除外する。
【０１５３】
図１２は，スケジューリング部１５５によるＣＰＵ割当の例を示す図である。
【０１５４】
図１２に，ある時点でのランキューの状態を示す。ＵＮＤＥＲのランキューに，仮想マシンＶＭ＿Ａ，ＶＭ＿Ｂ，ＶＭ＿Ｃ，ＶＭ＿Ｄが，ＯＶＥＲのランキューに，ＶＭ＿Ｅ，ＶＭ＿Ｆ，ＶＭ＿Ｇ，ＶＭ＿Ｈが，ＩＤＬＥのランキューに，ＶＭ＿Ｉ，ＶＭ＿Ｊ，ＶＭ＿Ｋ，ＶＭ＿Ｌが，それぞれあるとする。
【０１５５】
ここで，ＶＭ＿Ｋが，ＶＭ＿ＢのサブＶＭであり，ＶＭ＿ＫからＶＭ＿Ｂを呼び出す処理があるとする。この場合に，仮想マシンがスケジューリングされる手順とＣＰＵを割り当てられる仮想マシンは以下のようになる。
【０１５６】
ステップＳ４１：スケジューリング部１５５は，ＵＮＤＥＲのランキューの先頭のメインＶＭ（ＶＭ＿Ａ）を割当対象とする。
【０１５７】
ステップＳ４２：スケジューリング部１５５が，ＵＮＤＥＲのランキューの次のメインＶＭ（ＶＭ＿Ｂ）に割り当て対象を移すと，ＶＭ切替部１５１は，メインＶＭ（ＶＭ＿Ｂ）にＣＰＵ割当を切り替える。
【０１５８】
ステップＳ４３：仮想マシンＶＭ＿ＢからサブＶＭ（ＶＭ＿Ｋ）への切替依頼が通知されると，スケジューリング部１５５が，ＩＤＬＥのサブＶＭ（ＶＭ＿Ｋ）に割り当て対象を移し，ＶＭ切替部１５１は，サブＶＭ（ＶＭ＿Ｋ）にＣＰＵ割当を切り替え，実行する。
【０１５９】
ステップＳ４４：サブＶＭ（ＶＭ＿Ｋ）から，メインＶＭ（ＶＭ＿Ｂ）への割り当て切替が通知されると，スケジューリング部１５５は，ＵＮＤＥＲのランキューのメインＶＭ（ＶＭ＿Ｂ）へ割り当て対象を移し，ＶＭ切替部１５１は，メインＶＭ（ＶＭ＿Ｂ）へＣＰＵ割当を切り替えて復帰する。
【０１６０】
ステップＳ４５：スケジューリング部１５５は，ＵＮＤＥＲのランキューのメインＶＭ（ＶＭ＿Ｃ）へ割り当て対象を移し，ＶＭ切替部１５１は，メインＶＭ（ＶＭ＿Ｃ）へＣＰＵ割当を切り替えて，次のプログラムのメインＶＢ＿Ｃが実行される。
【０１６１】
既に説明したように，ＩＤＬＥ状態にあるサブＶＭ（ＶＭ＿Ｋ）は，Ｃｒｅｄｉｔの加算および減算対象ではないため，消費時間計算部１５７は，サブＶＭ（ＶＭ＿Ｋ）が消費したＣＰＵ時間を，メインＶＭ（ＶＭ＿Ｂ）が消費したＣＰＵ時間としてＣｒｅｄｉｔから減算する。
【０１６２】
これにより，スケジューリング部１５５は，メインＶＭ２のＣｒｅｄｉｔのみを通常の仮想マシンと同様に管理するだけで，サブＶＭ３のＣｒｅｄｉｔ消費量をメインＶＭの消費量として計上することができる。
【０１６３】
図１３は，独立実行されるサブＶＭとして，リアルタイムＶＭが生成される場合の割り当て例を示す図である。
【０１６４】
リアルタイムＶＭは，所定のスケジューリング期間中で常に一定の時間を割り当てられることが保証されている仮想マシンであり，他の仮想マシンとは異なる優先度でスケジューリングされる。
【０１６５】
通常の仮想マシンのＶＭ＿Ａ，ＶＭ＿Ｂ，ＶＭ＿Ｃ，ＶＭ＿Ｄと，リアルタイムＶＭのＲＴＶＭ＿Ａ，ＲＴＶＭ＿Ｂが生成されている場合に，スケジューリング部１５５は，クレジットスケジューリング手法により処理を行う場合に，クレジットスケジューリングによってスケジューリングする時間と，リアルタイムでスケジュールする時間とに分割して管理し，システムの中で一定時間をリアルタイムＶＭに割り当てるようにする。
【０１６６】
スケジューリング部１５５は，一定のタイムスライス（ここでは３０ｍｓ）とする中で，タイムスライスの９０％（２７ｍｓ）を，クレジットスケジューリングにもとづいて通常のＶＭ（ＶＭ＿Ａ〜ＶＭ＿Ｄ）の割り当てをスケジュールする。そして，スケジューリング部１５５は，タイムスライスの１０％（３ｍｓ）を，リアルタイムＶＭ（ＲＴＶＭ＿Ａ，ＲＴＶＭ＿Ｂ）に割り当てる。
【０１６７】
リアルタイムＶＭは，優先度ｐ（ここでは１−１０の値とし，デフォルト値は１とする）を持ち，各々のリアルタイムＶＭのＣＰＵ持ち時間は，（３ｍｓ×優先度ｐ／リアルタイムＶＭの総優先度Ｐ）とする。例えば，ＲＴＶＭ＿Ａの優先度ｐ＝１，ＲＴＶＭ＿Ｂの優先度ｐ＝２の場合に，ＲＴＶＭ＿Ａに１ｍｓ，ＲＴＶＭ＿Ｂに２ｍｓがそれぞれ割り当てられるようにする。
【０１６８】
図１４は，スケジューリング部１５５によるＣＰＵ割当の例を示す図である。
【０１６９】
図１４に，ある時点でのランキューの状態を示す。ＵＮＤＥＲのランキューに，仮想マシンＶＭ＿Ａ，ＶＭ＿Ｂ，ＶＭ＿Ｃ，ＶＭ＿Ｄが，ＯＶＥＲのランキューに，ＶＭ＿Ｅ，ＶＭ＿Ｆ，ＶＭ＿Ｇ，ＶＭ＿Ｈが，ＩＤＬＥのランキューに，ＶＭ＿Ｉ，ＶＭ＿Ｊ，ＶＭ＿Ｋ，ＶＭ＿Ｌが，リアルタイムＶＭ用（ＲＴ）のランキューに，ＶＭ＿Ｍが，それぞれあるとする。
【０１７０】
サブＶＭ（ＶＭ＿Ｌ）は，生成時には通常のサブＶＭとして優先度がＩＤＬＥと設定される。その後，メインＶＭからの独立実行のサブＶＭとしてＶＭ実行通知がなされると，スケジューリング部１５５は，サブＶＭ（ＶＭ＿Ｌ）をＩＤＬＥのランキューからＲＴのランキューに移動させる。さらに，ＲＴランキューに移動されたサブＶＭ（ＶＭ＿Ｌ）は，ＶＭ実行通知において付与された優先度ｐに従って，一定のタイムスライス内で必ずＣＰＵ時間が割り当てられることが保証される。
【０１７１】
これにより，メインＶＭ２のリアルタイム処理などをリアルタイムＲＴすなわちＲＴランキューのサブＶＭが肩代わりして実行することが可能となる。
【０１７２】
図１５は，仮想マシンシステム１を実現するハードウェア構成例を示す図である。
【０１７３】
図１５に示すように，仮想マシンシステム１は，ＣＰＵ１０１，主記憶部（メモリ）１０３，入出力インターフェイス１０５，外部記憶装置１１０，入力装置（キーボード等）１２０を備えるコンピュータ１００によって実施することができる。
【０１７４】
仮想マシンシステム１は，コンピュータ１００が実行可能なプログラムによって実施することができる。この場合に，仮想マシンシステム１が有すべき機能の処理内容を記述したプログラムが提供される。提供されたプログラムをコンピュータ１００が実行することによって，上記説明した仮想マシンシステム１の各処理部がコンピュータ１００上で実現される。
【０１７５】
なお，コンピュータ１００は，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。また，コンピュータ１００は，サーバコンピュータからプログラムが転送されるごとに，逐次，受け取ったプログラムに従った処理を実行することもできる。
【０１７６】
さらに，このプログラムは，コンピュータ１００で読み取り可能な記録媒体に記録しておくことができる。
【０１７７】
上記した仮想マシンシステム１によれば，以下の制御を実現するスケジューリングが可能となる。すなわち，１つのプログラムを複数のプロセスに分割して異なる仮想マシンで実行する場合に，ある仮想マシンのメインプロセスから他仮想マシンのプロセスのサブルーチン呼び出しを行い，サブルーチンの処理終了後に呼び出し元の仮想マシンのプロセスに制御が戻ることが可能となる。そのため，メインプロセスとサブルーチンを１つの仮想マシンで実行するように一体化して実行させることができる。
【０１７８】
また，ある仮想マシンのプロセスから他仮想マシン上のプロセスの動作について，一定時間ごとにＣＰＵが割り当てられるなどの制御を行うことが可能となる。
【０１７９】
仮想化技術を用いて，プログラムを複数のプロセスに分割して，別々の仮想マシン上で実行させるモデルにおいて，主にユーザが操作するメインプロセスが，サブプロセスのサブルーチン呼び出しを必要とするタイミングに合わせて，サブプロセスを実行する仮想マシンへのＣＰＵ割当が行われ，プログラムを分割せずに実行している場合と同等にＣＰＵ割当時間を制御することができる。
また，サブプロセスを独立に実行させ，そのＣＰＵ割当についても制御することで，一定時間内でのポーリングなどを必要とするリアルタイムプログラムの制御も行うことができる。
【０１８０】
本願発明の実施態様における特徴を列記すると以下のようになる。
【０１８１】
（付記１）  プロセスを実行する複数の仮想マシンを仮想マシン管理装置上に構築し，前記仮想マシン管理装置が，前記構築された仮想マシンにＣＰＵを割り当てて，各仮想マシンのプロセスの実行を管理する仮想マシンシステムであって，
前記仮想マシン管理装置は，
プログラムの実行を管理する，プログラム管理部と，
前記プログラムを構成する複数のプロセスを各々で実行する複数の仮想マシンへのＣＰＵ割当を，スケジュールにもとづいて管理する，仮想マシンスケジュール管理部とを備えて，
前記プログラム管理部は，
前記プログラムを構成する複数のプロセスのうち当該プログラムの起動要求を受けて実行される第１プロセスを実行する第１仮想マシンから，前記第１プロセスの識別情報，前記プログラムを構成する前記第１プロセス以外の第２プロセス以降のプロセスを特定する情報を含むプログラム構成情報を取得して，前記プログラム構成情報および前記各プロセスを実行する仮想マシンの識別情報をプログラムテーブルに登録する，プログラムテーブル管理部と，
前記仮想マシン管理装置上に生成した仮想マシンで実行されているプロセスから通知を受信する，通知受信部と，
前記プログラムテーブルを参照して，前記通知受信部が受信した通知に対応するプロセスに関する処理の要求を前記仮想マシンスケジュール管理部へ送信する，通知処理部とを備えて，
前記仮想マシンスケジュール管理部は，
前記仮想マシンに対するＣＰＵ割当のスケジュールを決定する，スケジューリング部と，
前記通知処理部から受信した前記要求が前記プログラムの起動要求である場合に，当該起動対象のプログラムを構成する前記第１プロセスを実行する第１仮想マシンを生成する処理と，前記通知処理部から受信した前記要求が前記第１プロセスに関連する第２プロセス以降のプロセスの実行要求である場合に，前記第２プロセス以降のプロセスを実行する仮想マシンを生成する処理とを行う，仮想マシン状態管理部と，
前記通知処理部からの通知にもとづいて，前記要求により実行が要求される要求先のプロセスを実行する仮想マシンを前記プログラムテーブルにより特定し，前記特定した仮想マシンへＣＰＵ割当を切り替える，仮想マシン切替部とを備えて，
前記第１仮想マシンは，
前記第１プロセスの実行時に，前記プログラム構成情報を前記プログラム管理部へ送信する処理と，要求元および要求先のプロセスを特定する情報を含むプロセス呼び出しの通知を前記プログラム管理部へ送信する処理とを行う，仮想マシンモニタ通知部を備え，
前記第２プロセス以降のプロセスを実行する各仮想マシンは，
要求元および前記処理したプロセスの返却先のプロセスを特定する情報を含むプロセス返却の通知を前記プログラム管理部へ送信する，仮想マシンモニタ通知部を備える
ことを特徴とする仮想マシンシステム。
【０１８２】
（付記２）  前記仮想マシン状態管理部は，前記通知受信部が前記プロセス呼び出しの通知を受信した場合に，前記受信されたプログラム構成情報にもとづくプログラムテーブルを参照して，前記プロセス呼び出しの呼び出し先である前記第２プロセス以降のプロセスを特定して，前記特定したプロセスを実行する仮想マシンの生成を行う
ことを特徴とする前記付記１に記載の仮想マシンシステム。
【０１８３】
（付記３）  前記仮想マシン状態管理部は，前記通知受信部が，前記第２プロセス以降のプロセスの各属性情報を含むプログラム構成情報を受信した場合に，前記受信されたプログラム構成情報にもとづくプログラムテーブルを参照して，前記第２プロセス以降のプロセスとして前記属性情報に対応するプロセスを実行する仮想マシンの生成を行う
ことを特徴とする前記付記１または２に記載の仮想マシンシステム。
【０１８４】
（付記４）  前記仮想マシン状態管理部は，前記プログラムの実行に関連するプロセスであって前記プログラムのプロセスと独立して実行される独立プロセスの情報を含むプログラム構成情報を受信した場合に，前記受信されたプログラム構成情報にもとづくプログラムテーブルを参照して，前記独立プロセスを実行する仮想マシンの生成を行い，
前記スケジューリング部は，前記生成された独立プロセスを実行する仮想マシンのスケジューリングを行う
ことを特徴とする前記付記１〜３のいずれか一項に記載の仮想マシンシステム。
【０１８５】
（付記５）  前記仮想マシンスケジュール管理部は，
前記仮想マシン毎のＣＰＵ消費時間を取得する処理と，前記プログラムテーブルをもとに，前記第２プロセス以降のプロセスを実行する各仮想マシンの前記ＣＰＵ消費時間を，前記第１仮想マシンのＣＰＵ消費時間に加算する処理とを行う消費時間計算部を備えて，
前記スケジューリング部は，前記仮想マシンのＣＰＵ割当のスケジュールを決定する際に，前記第１仮想マシンのＣＰＵ消費時間として前記消費時間計算部により加算されたＣＰＵ消費時間を用いてスケジュールを決定する
ことを特徴とする前記付記１〜４のいずれか一項に記載の仮想マシンシステム。
【０１８６】
（付記６）  前記仮想マシン状態管理部は，前記生成された第１仮想マシンおよび前記第２プロセス以降のプロセスを実行する各仮想マシンに，仮想マシン間のメッセージ通信を行う仮想マシン間通信部を生成する
ことを特徴とする前記付記１〜５のいずれか一項に記載の仮想マシンシステム。
【０１８７】
（付記７）  前記スケジューリング部は，前記独立プロセスを実行する仮想マシンが生成されている場合に，所定のスケジュール期間内に前記独立プロセスを実行する仮想マシンのスケジュールを設定し，前記設定後に前記第１仮想マシンおよび他の仮想マシンのスケジュールを決定する
ことを特徴とする前記付記４に記載の仮想マシンシステム。
【０１８８】
（付記８）  前記仮想マシン状態管理部が，前記プログラムの第１プロセスを実行する第１仮想マシンを複数生成かつ前記複数の仮想マシンが実行するプロセスが前記第２プロセス以降のプロセスを共有している場合に，
前記消費時間計算部は，前記プログラムテーブルをもとに，前記複数の第１仮想マシンによって共有されたプロセスを実行する仮想マシンのＣＰＵ消費時間を，前記共有する第１仮想マシンの各々のＣＰＵ消費時間に加算する
ことを特徴とする前記付記５に記載の仮想マシンシステム。
【０１８９】
（付記９）  前記プログラム構成情報は，前記プログラムを構成する前記第２プロセス以降のプロセスの実行イメージを含む情報である
ことを特徴とする前記付記１〜８のいずれか一項に記載の仮想マシンシステム。
【０１９０】
（付記１０）  前記プログラム構成情報は，前記プログラムを構成する前記第２プロセス以降のプロセスを実行する仮想マシンの実行イメージを含む情報である
ことを特徴とする前記付記１〜８のいずれか一項に記載の仮想マシンシステム。
【０１９１】
（付記１１）  プロセスを実行する複数の仮想マシンを構築して，前記構築した仮想マシンにＣＰＵを割り当てて，各仮想マシンのプロセスの実行を管理する仮想マシン管理装置が実行する仮想マシン管理方法であって，
前記仮想マシン管理装置が，プログラムの実行を管理するプログラム管理部と，前記プログラムを構成する複数のプロセスを各々で実行する複数の仮想マシンへのＣＰＵ割当を，スケジュールにもとづいて管理する仮想マシンスケジュール管理部と，プログラムテーブルとを備えて，
前記プログラム管理部が，前記プログラムの起動要求を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムの起動要求が通知された場合に，前記プログラムを構成するプロセスであって前記起動要求を受けて実行する第１プロセスを実行する第１仮想マシンを生成する処理ステップと，
前記プログラム管理部が，前記第１仮想マシンから，前記第１プロセスの識別情報，前記プログラムを構成する前記第１プロセス以外の第２プロセス以降のプロセスを特定する情報を含むプログラム構成情報を取得する処理ステップと，
前記プログラム管理部が，前記プログラム構成情報および前記各プロセスを実行する仮想マシンの識別情報を前記プログラムテーブルに格納する処理ステップと，
前記プログラム管理部が，前記第１プロセスから，前記第１プロセスに関連する第２プロセス以降のプロセスの実行要求を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記第２プロセス以降のプロセスを実行する仮想マシンを生成する処理ステップと，
前記プログラム管理部が，前記第１プロセスから前記第２プロセス以降のプロセスの呼び出し通知を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムテーブルを参照して，前記呼び出し通知に対応するプロセスを実行する仮想マシンへＣＰＵ割当を切り替える処理ステップと，
前記プログラム管理部が，前記第２プロセスから前記呼び出し通知に関する処理の返却通知を受信する処理ステップと，
前記仮想マシンスケジュール管理部が，前記プログラムテーブルを参照して，前記返却通知に対応するプロセスを実行する仮想マシンへＣＰＵ割当を切り替える処理ステップとを備える
ことを特徴とする仮想マシン管理方法。
【符号の説明】
【０１９２】
１  仮想マシンシステム
１０  仮想マシン管理装置
１１  プログラム管理部
１１１  通知受信部
１１３  プログラムテーブル管理部
１１５  通知処理部
１３  プログラムテーブル
１５  仮想マシンスケジュール管理部
１５１  仮想マシン切替部
１５３  仮想マシン状態管理部
１５５  スケジューリング部
１５７  消費時間計算部
１７  仮想マシン間通信部
２  第１仮想マシン（メインＶＭ）
２１  仮想マシンモニタ通知部
２３  仮想マシン間通信部
３  仮想マシン（サブＶＭ）
３１  仮想マシンモニタ通知部
３３  仮想マシン間通信部
４  仮想マシン（他ＶＭ）
【図１】
0005458998.tif 000002
【図２】
0005458998.tif 000003
【図３】
0005458998.tif 000004
【図４】
0005458998.tif 000005
【図５】
0005458998.tif 000006
【図６】
0005458998.tif 000007
【図７】
0005458998.tif 000008
【図８】
0005458998.tif 000009
【図９】
0005458998.tif 000010
【図１０】
0005458998.tif 000011
【図１１】
0005458998.tif 000012
【図１２】
0005458998.tif 000013
【図１３】
0005458998.tif 000014
【図１４】
0005458998.tif 000015
【図１５】
0005458998.tif 000016
【図１６】
0005458998.tif 000017