(57)【要約】【課題】  仮想計算機システムにおいて、プロセス切り替え時のコンテキスト退避／回復処理は、システムのオーバーヘッドとなる。【解決手段】  仮想計算機に物理ＣＰＵを占有的に割り当てるＣＰＵ占有モードでは、物理ＣＰＵ上で走行する論理ＣＰＵプロセスが固定的であるため、プロセス切り替えのたびにコンテキストを退避／回復する必要はない。切り替え元プロセスがＣＰＵ占有モードの論理ＣＰＵプロセスである場合、コンテキストの退避を一旦保留しておく。連続的に再び同じ論理ＣＰＵプロセスに切り替わった場合は、退避／回復をスキップする。間にＶＭＭ制御用ＶＭの論理ＣＰＵプロセスが走行した場合、退避を遅らせた論理ＣＰＵプロセスを記録しておくことで、遅れて退避をさせる。【選択図】図１０
2010134496.tif 000002
【特許請求の範囲】
【請求項１】
物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とする仮想計算機制御部と、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおいて、
前記仮想計算機制御メモリは、第１の仮想計算機用の第１のデータと、第２の仮想計算機用の第２のデータとを有し、
前記制御部は、前記第１の仮想計算機が動作するときに、前記第１のデータを、前記物理ＣＰＵ内の内部メモリに格納し、
（ａ）前記第１の仮想計算機が動作を終了するときに、前記第１のデータを前記内部メモリに保持し、
（ｂ）次に実行させる第２の仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定し、
（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動する
ことを特徴とした仮想計算機システム。
【請求項２】
前記判定の際、
（ｄ）前記第２の仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いるならば、前記第１のデータを前記仮想計算機制御メモリに移動（退避）し、前記第２の仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記物理ＣＰＵ内の前記内部メモリへ移動（回復）させ、
（ｅ）前記第２の仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略する
ことを特徴とした請求項１記載の仮想計算機システム。
【請求項３】
前記第２の仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いるのは、前記第２の仮想計算機が前記第１の仮想計算機とは別の仮想計算機であることを特徴とする請求項２記載の仮想計算機システム。
【請求項４】
前記第２の仮想計算機が、前記仮想計算機制御メモリから前記内部メモリへ、新たなデータを用いないのは、前記第２の仮想計算機が、前記第１の仮想計算機を制御する制御用仮想計算機であり、かつ、前記制御用仮想計算機が前記仮想計算機制御メモリから前記内部メモリへ、新たなデータを用いない場合であることを特徴とする請求項２記載の仮想計算機システム。
【請求項５】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記占有モードの場合に前記（ａ）〜（ｃ）の動作を実行することを特徴とする請求項１に記載の仮想計算機システム。
【請求項６】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記ＣＰＵ占有モードの場合に前記（ａ）〜（ｅ）の動作を実行することを特徴とする請求項２から５の何れかに記載の仮想計算機システム。
【請求項７】
物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とするハイパバイザと、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおけるハイパバイザにおいて、
前記仮想計算機のスケジュールの切り替えを行う処理部を有し、
（ａ）前記処理部は、前記仮想計算機のプロセスが終了したときに、該プロセスのデータを前記物理ＣＰＵ内の内部メモリに保持するよう指示し、
（ｂ）次に実行させる仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定し、
（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動する
ことを特徴としたハイパバイザ。
【請求項８】
前記判定の際、
（ｄ）前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いるならば、前記プロセスのデータを前記仮想計算機制御メモリに移動（退避）し、前記次に実行させる仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記内部メモリへ移動（回復）させ、
（ｅ） 前記次に実行させる仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略する
ことを特徴とした請求項７記載のハイパバイザ。
【請求項９】
前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに新たなデータを用いるのは、前記次に実行させる仮想計算機が前記仮想計算機とは別の仮想計算機であることを特徴とする請求項８記載のハイパバイザ。
【請求項１０】
前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリへ新たなデータを用いないのは、前記次に実行させる仮想計算機が、前記仮想計算機を制御する制御用仮想計算機であり、かつ、前記制御用仮想計算機が前記仮想計算機制御メモリから前記内部メモリへ新たなデータを用いない場合であることを特徴とする請求項８記載のハイパバイザ。
【請求項１１】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記ＣＰＵ占有モードの場合に前記（ａ）〜（ｃ）の動作を実行することを特徴とする請求項７に記載のハイパバイザ。
【請求項１２】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記ＣＰＵ占有モードの場合に前記（ａ）〜（ｅ）の動作を実行することを特徴とする請求項８から１０の何れかに記載のハイパバイザ。
【請求項１３】
物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とするハイパバイザと、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおけるスケジューリング方法において、
（ａ）前記仮想計算機のプロセスが終了したときに、該プロセスのデータを前記物理ＣＰＵ内の内部メモリに保持するよう指示するステップと、
（ｂ）次に実行させる仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定するステップと、
（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動させるステップ
を有することを特徴としたスケジューリング方法。
【請求項１４】
前記判定ステップの際に、
（ｄ）前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いないならば、前記プロセスのデータを前記仮想計算機制御メモリに移動（退避）し、前記次に実行させる仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記内部メモリへ移動（回復）させるステップと、
（ｅ） 前記次に実行させる仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略するステップ
を有することを特徴とした請求項１３記載のスケジューリング方法。
【請求項１５】
前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに新たなデータを用いるのは、前記次に実行させる仮想計算機が前記仮想計算機とは別の仮想計算機であることを特徴とする請求項１４記載のスケジューリング方法。
【請求項１６】
前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリへ新たなデータを用いないのは、前記次に実行させる仮想計算機が、前記仮想計算機を制御する制御用仮想計算機であり、かつ、前記制御用仮想計算機が前記仮想計算機制御メモリから前記内部メモリへ新たなデータを用いない場合であることを特徴とする請求項１４記載のスケジューリング方法。
【請求項１７】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記ＣＰＵ占有モードの場合に前記（ａ）〜（ｃ）の動作を実行することを特徴とする請求項１３に記載のスケジューリング方法。
【請求項１８】
前記仮想計算機は、前記複数の仮想計算機が前記物理ＣＰＵを共有するＣＰＵ共有モードと、前記複数の仮想計算機のうちの特定の仮想計算機が前記物理ＣＰＵを占有するＣＰＵ占有モードとを有し、
前記制御部は、前記ＣＰＵ占有モードの場合に前記（ａ）〜（ｅ）の動作を実行することを特徴とする請求項１３から１６の何れかに記載のスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機システム、特に物理計算機を論理的に分割して複数の仮想計算機として使用する仮想計算機システムにおける、仮想計算機のスケジューリングに関するものである。
【背景技術】
【０００２】
近年、様々な機械や機器に組み込まれて特定の機能を実現するための制御を行うコンピュータシステム、いわゆる組み込みシステムが注目されており、その適用分野が拡大している。組み込みシステムに用いられる組み込みソフトウェアは、処理要求を受け付けた後、特定の時間内に応答して処理を行う、いわゆるリアルタイム性が要求される。このため、組み込みシステムでは、リアルタイムＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を採用する場合が多い。
【０００３】
リアルタイムＯＳでは、前述した通り、特定の時間内での応答を保証しなければならない。そのため、一つのアプリケーション処理を複数の処理単位に分割して、実行権を切り替えて同時並列的に処理する、いわゆるマルチスレッド機能やマルチタスク機能が不可欠な技術として採用される。ここで、プログラムを実行する実体であるこの一つの処理単位のことを一般的にプロセスと呼ぶ。
【０００４】
複数のプロセスが切り替えられる際には、通常、ＣＰＵにおけるプロセスの処理に用いられる「コンテキスト」の切り替えが行われる。ここでコンテキストとは、プロセス毎に対応づけられており、レジスタセット（汎用レジスタ、浮動小数点レジスタ、ステータスレジスタ、プログラムカウンタ等）における現在のフラグ状態や、各プロセスを実行するための情報のことである。コンテキストが切り替わる際、今まで実行していたプロセスのコンテキストを保存し、新しく実行するプロセスのコンテキストを読み出す必要がある。切り替え動作の際に要する時間をオーバーヘッドといい、オーバーヘッドは、コンテキストが切り替わる度に発生する。
【０００５】
物理計算機上のリアルタイムＯＳでこれらのコンテキスト切り替えにかかるオーバーヘッドを削減するための技術として、例えば特許文献１には、リアルタイムＯＳを用いたマルチタスク処理装置について記載がある。具体的には、各プロセスに対応して占有される複数のレジスタバンクを設け、コンテキスト等の退避／ 回復をレジスタバンクの切り替えにより行い、スケジュール時間を短縮する方式が述べられている。
【０００６】
このコンテキストの切り替えにかかるオーバーヘッドの問題は、物理計算機に限らず、仮想計算機システムの仮想化層ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）でも存在する。ＶＭＭは一般的に、各ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）の論理ＣＰＵをそれぞれ一つのプロセスとして扱い、システム内で複数のアクティブなプロセスが同時に存在することによりリアルタイム性を実現している。したがって、ＶＭＭにおいても、プロセス切り替え時のコンテキスト退避／回復処理は、システムのオーバーヘッドとなる。
【０００７】
物理計算機上で複数のＯＳを動作させる仮想計算機システムにおける、コンテキストの退避／回復処理に関する技術としては、例えば特許文献２に記載がある。
【０００８】
特許文献２では、ＶＭＭがハードウェアのエミュレーションを行うＶＭ方式ではなく、ＯＳの外部に割り込みを振り分けるためのＯＳ切り替えプログラムを設ける方式により、複数のＯＳを共存させる。このＯＳ切り替え時の、コンテキスト退避／回復のオーバーヘッドを削減するための技術として、ＯＳに通信用のハンドラ機能を設け、ＯＳ間での処理要求を割り込みにより処理する方式が述べられている。
【０００９】
【特許文献１】特開平７−１４１２０８号『マルチタスク処理装置』
【特許文献２】特開２００１−２８２５５８『マルチオペレーティング計算機システム』
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上記特許文献１で述べられている、物理計算機に対するコンテキスト切り替えのオーバーヘッド削減の方式は、仮想計算機システムのＶＭＭに対しても適用可能である。当該方式の適用により、外部メモリへのコンテキストの退避／回復処理が発生しないため、その分、高速なコンテキスト切り替えを実現することが可能となる。しかし通常、レジスタバンクとして提供されるハードウェア・リソースには制限があるため、仮想計算機システムのように、取り扱うべきコンテキストの数が多いシステムでは、レジスタバンクとして必要となるレジスタ量が多大となり、あまり現実的な構成とは言えない。
【００１１】
また上記特許文献２で述べられている方式は、ＯＳの改変を伴うため、その上で動くアプリケーションにも改変が必要になり、場合によっては業務用重要なアプリケーションが動作しなくなるといった問題を抱えている。
【００１２】
本発明では、ＶＭ方式の仮想計算機システムにおいて、ＯＳの改変などを伴うことなく、コンテキスト切り替えによるオーバーヘッドの削減を図る。
【課題を解決するための手段】
【００１３】
切り替え元プロセスがＣＰＵ占有モードの論理ＣＰＵプロセスである場合、ＯＳ動作時に必要なコンテキストの退避を一旦保留しておく。連続的に再び同じ論理ＣＰＵプロセスに切り替わった場合は、退避／回復をスキップする。その間にＶＭＭ制御用ＶＭの論理ＣＰＵプロセスが走行した場合、退避を遅らせた論理ＣＰＵプロセスを記録しておくことで、遅れて退避をさせる。
【発明の効果】
【００１４】
本発明によると、仮想計算機システムにおいて、ＶＭＭ上のプロセス切り替えの際、ＶＭに割り当てた論理ＣＰＵプロセスのコンテキスト切り替えによるオーバーヘッドを削減することができる。また各プロセスのコンテキストに矛盾が生じることもない。これによりＣＰＵリソースの効率的な運用が可能となり、汎用的な処理性能の向上が見込める。
【発明を実施するための最良の形態】
【００１５】
本願発明の仮想計算機システムは、物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とする仮想計算機制御部と、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおいて、前記仮想計算機制御メモリは、第１の仮想計算機用の第１のデータと、第２の仮想計算機用の第２のデータとを有し、前記制御部は、前記第１の仮想計算機が動作するときに、前記第１のデータを、前記物理ＣＰＵ内の内部メモリに格納し、（ａ）前記第１の仮想計算機が動作を終了するときに、前記第１のデータを前記内部メモリに保持し、（ｂ）次に実行させる第２の仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定し、（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動することを特徴とする。
【００１６】
前記判定の際、（ｄ）前記第２の仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いるならば、前記第１のデータを前記仮想計算機制御メモリに移動（退避）し、前記第２の仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記物理ＣＰＵ内の前記内部メモリへ移動（回復）させ、（ｅ）前記第２の仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略することを特徴とする。
【００１７】
また、本願発明のハイパバイザは、物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とするハイパバイザと、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおけるハイパバイザにおいて、前記仮想計算機のスケジュールの切り替えを行う処理部を有し、（ａ）前記処理部は、前記仮想計算機のプロセスが終了したときに、該プロセスのデータを前記物理ＣＰＵ内の内部メモリに保持するよう指示し、（ｂ）次に実行させる仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定し、（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動することを特徴とする。
【００１８】
前記判定の際、（ｄ）前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いないならば、前記プロセスのデータを前記仮想計算機制御メモリに移動（退避）し、前記次に実行させる仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記内部メモリへ移動（回復）させ、（ｅ） 前記次に実行させる仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略することを特徴とする。
【００１９】
また、本願発明のスケジューリング方法は、物理ＣＰＵと、前記物理ＣＰＵを論理的に分割して複数の仮想計算機とするハイパバイザと、前記仮想計算機を前記制御部が制御するためのデータを格納する仮想計算機制御メモリとを備える、仮想計算機システムにおけるスケジューリング方法において、 （ａ）前記仮想計算機のプロセスが終了したときに、該プロセスのデータを前記物理ＣＰＵ内の内部メモリに保持するよう指示するステップと、（ｂ）次に実行させる仮想計算機が、前記仮想計算機制御メモリに格納されているデータを用いるか否かを判定するステップと、（ｃ）判定にしたがって前記内部メモリ内のデータを、前記内部メモリと前記仮想計算機制御メモリとの間で移動させるステップを有することを特徴とする。
【００２０】
前記判定ステップの際に、（ｄ）前記次に実行させる仮想計算機が、前記仮想計算機制御メモリから前記内部メモリに、新たなデータを用いないならば、前記プロセスのデータを前記仮想計算機制御メモリに移動（退避）し、前記次に実行させる仮想計算機が用いるデータを、前記仮想計算機制御メモリから前記内部メモリへ移動（回復）させるステップと、（ｅ） 前記次に実行させる仮想計算機が、新たなデータを用いないならば、前記仮想計算機制御メモリと前記内部メモリとの間の前記移動（退避と回復）を省略するステップを有することを特徴とする。以上のように、物理ＣＰＵの論理分割方式の特徴を利用することで、ＯＳ動作時に必要なコンテキストの退避／回復を完全にスキップできるスケジューリングの方法を考案した。これにより、ＯＳの改変などを伴うことなく、コンテキスト切り替えに起因するオーバーヘッドの削減を実現する。
【００２１】
具体的には、仮想計算機に物理ＣＰＵを占有的に割り当てるＣＰＵ占有モードでは、物理ＣＰＵ上で走行する論理ＣＰＵプロセスが固定的であるため、プロセス切り替えのたびにコンテキストを退避／回復する必要がない。コンテキストの退避／回復処理が不要な場合は、退避／回復処理をスキップすることでオーバーヘッドを削減する。
【００２２】
以下、図面を使用して本発明の実施例を記す。
【００２３】
図１〜図７が本発明の一実施形態におけるデータ構造を、図８〜図１６が処理方式を表す。図面番号の順に従って、データ構造、処理方式の順に記す。
【００２４】
図１は、本発明を適用した仮想計算機システムの一実施形態を表す構成図である。
【００２５】
本実施形態のＶＭＭ５００は物理計算機上で動作するソフトウェアであり、物理ＣＰＵ６００，６０１，６０２，６０３などの物理計算機資源を論理的に分割してＶＭ１００，２００，３００を構築し、それらを管理・制御する機能をもつ。図１では、ハイパバイザ５００をVMMとした。
【００２６】
物理ＣＰＵの論理的な分割とは、具体的には、一つもしくは複数の物理ＣＰＵを、複数の論理ＣＰＵ、（ここでは１２０，１２１，２２０，２２１，３２０，３２１）で共有し、その共有した論理ＣＰＵを物理ＣＰＵへ一定の時間間隔で切り替えることである。
【００２７】
ＶＭＭ５００は各論理ＣＰＵをそれぞれ一つのプロセスとして扱い、スケジューリング（物理ＣＰＵに割り当てる論理ＣＰＵの選択）をこのプロセス単位で行う。このプロセスによるスケジューリングを実現するために、ＶＭＭはプロセス制御ブロック５１０およびスケジューリング制御テーブル５２０の二つのデータ構造と、プロセススケジューリング処理５３０を有する。
【００２８】
ＶＭＭのスケジューリング処理によりＶＭが構築され、各ＶＭ上でゲストＯＳ１１０，２１０，３１０が動作できる。
【００２９】
本発明の実施形態では、ＶＭ１やＶＭ２などのユーザが定義したＶＭの他に、ＶＭＭ制御用のＶＭ３００が存在する。ＶＭ３００はＶＭＭ制御専用のＶＭであり、ゲストＯＳ上でＶＭＭ管理用のミドルウェアを動作したり、Ｉ／Ｏなどの物理リソースの論理分割を制御したりする役割を担う。
【００３０】
仮想計算機システムは、ＶＭに割り当てるメモリ１３０，２３０，３３０とは別に、ＶＭＭがＶＭの制御に使用するメモリ領域４００を有する。
【００３１】
物理CPU内の内部メモリ６２０，６２１，６２２，６２３には、動作中のプロセスのコンテキスト６１０，６１１，６１２，６１３を保持している。これに対して、ＶＭ制御用メモリは、プロセス切り替え時のコンテキストの格納が用途の一つである。本発明の実施形態では、ＶＭの論理ＣＰＵごとにコンテキスト領域４１０，４１１，４２０，４２１，４３０，４３１を設ける。
【００３２】
図２に示すように論理ＣＰＵのコンテキスト領域には、論理ＣＰＵのレジスタ情報４１０−１や論理ＣＰＵのＶＭ制御構造４１０−２を格納する。
【００３３】
この論理ＣＰＵコンテキスト領域は、物理ＣＰＵのコンテキスト６１０，６１１，６１２，６１２と対応付けられる。
【００３４】
図３に示すように、物理ＣＰＵのコンテキストには、レジスタ状態６１０−１とＶＭ制御構造へのポインタ６１０−２があり、それぞれが論理ＣＰＵのレジスタ情報４１０−１とＶＭ制御構造４１０−２と対応する。これらの情報は、プロセス切り替えを契機として、物理ＣＰＵとメモリ領域の間でレジスタ情報が退避／回復されたり、ＶＭ制御構造のポインタが書き替えられたりする。この処理の詳細は図８で具体例を用いて示す。
【００３５】
次にＶＭＭデータ部の詳細なデータ構造と、プロセススケジューリングの二つのモードである、ＣＰＵ占有モードとＣＰＵ共有モードについて記す。
【００３６】
図６および図７は、ＶＭＭデータ部の詳細なデータ構造および、ＣＰＵ占有モード（図６）／共有モード（図７）と呼ぶ二つのスケジューリングモードを表す図である。データ構造、スケジューリングモードの順にその詳細を記す。プロセス制御ブロックは、前述したプログラムを実行する処理単位であるプロセスを、具現化したデータ構造である。プロセスはプログラムの実行に対して、アドレス空間と物理ＣＰＵを提供する。プロセスには、仮想計算機のプログラムを実行し、ＶＭの仮想的なＣＰＵを具体化する論理ＣＰＵプロセス７１０，７１１，７２０，７２１，７３０，７３１の他に、ＶＭＭ内部のシステム処理を行うＶＭＭ制御用プロセス７４０，７４１，７４２がある。
【００３７】
図４に示すように、各プロセス制御ブロックは、スケジューリングモードやＶＭ番号といったプロセスの識別情報７１０−１、当該論理ＣＰＵのコンテキスト領域へのポインタ７１０−２、コンテキストの退避／回復スキップを制御するためのフラグ７１０−３を有する。以降では、単にプロセスといった場合、それを具現化したプロセス制御ブロックのことを指すものとする。
【００３８】
図５のスケジューリング制御テーブル８００，８０１，８０２，８０３は、物理ＣＰＵごとに設けられ、当該物理ＣＰＵにスケジュールされたプロセスに関する情報を有する。図５に示す、当該物理ＣＰＵで現在走行しているプロセスの情報８００−１、および当該物理ＣＰＵで最後に走行した論理ＣＰＵプロセスの情報８００−２が、これに相当する。
【００３９】
図６のＣＰＵ占有モードでは、論理ＣＰＵプロセスが、特定の一つの物理ＣＰＵ上で占有的にスケジュールされる。
【００４０】
図６では、ＣＰＵ占有モードのＶＭ１の論理ＣＰＵプロセス７１０，７１１が、それぞれ物理ＣＰＵ６００，６０１に占有的にスケジュールされている。ただしＣＰＵ占有モードであっても、ＶＭＭの内部的な処理を行うための、ＶＭＭ制御用ＶＭの論理ＣＰＵプロセス７３０，７３１や、ＶＭＭの制御用プロセス７４０，７４１，７４２は、物理ＣＰＵの占有状態に関係なく、論理ＣＰＵプロセスより優先的に当該物理ＣＰＵにスケジュールされる。
【００４１】
一方、図７のＣＰＵ共有モードでは、論理ＣＰＵプロセスは、占有モードの論理ＣＰＵが排他的に使用する物理ＣＰＵを除く任意の物理ＣＰＵのうち、いずれか一つにてスケジュールされる。図７では、物理ＣＰＵ６００，６０１がＣＰＵ占有モードとして使用されている。そのため、ＣＰＵ共有モードのＶＭ２の論理ＣＰＵプロセス７２０，７２１は、物理ＣＰＵ６０２，６０３に動的にスケジュールされる。ＣＰＵ占有モードの場合と同じく、ＶＭＭ制御用ＶＭの論理ＣＰＵプロセス７３０，７３１や、ＶＭＭの制御用プロセス７４０，７４１，７４２は、論理ＣＰＵプロセスより優先的に当該物理ＣＰＵにスケジュールされる。
【００４２】
本実施例ではＣＰＵ占有モードへの適用を想定して、その実現方式を述べる。
【００４３】
以下、本発明の処理方式について記す。
【００４４】
図８は従来のコンテキストの退避／回復処理の概念図である。図９はこのうちのパターン１についてタイムチャートで示している。
【００４５】
今、ＣＰＵ占有モードの物理ＣＰＵ６００に対し、プロセススケジューリング処理５３０は、論理ＣＰＵプロセス７１０を占有的にスケジュールしている。論理ＣＰＵプロセス７１０がＶＭ１のプログラムの実行を終えると、プロセススケジューリング処理５３０は次のプロセスを選択する。例えばここでＶＭＭ制御用プロセス７４０が選択されたとする。論理ＣＰＵプロセス７１０がここで一旦処理を中断するため、プロセススケジューリング処理５３０は、処理を中断する時点での物理ＣＰＵのコンテキストを退避させる。具体的には、対応する論理ＣＰＵのコンテキスト領域４１０に対し、物理ＣＰＵのレジスタ状態６１０−１を論理ＣＰＵのレジスタ情報４１０−１として格納し、ＶＭ制御構造へのポインタ６１０−２によって参照されているＶＭ制御構造４１０−２へのポインタを解除する。ポインタの解除とは、ＶＭ制御構造へのポインタ６１０−２に書き込まれていたＶＭ１用のアドレスをＶＭＭ制御用のアドレスに書き換える（もしくは消す）ことを指す。
【００４６】
ＶＭＭ制御用プロセス７４０が処理を終えた後、次に何らかの論理ＣＰＵプロセスが選択されるが、ＣＰＵ占有モードであるため、ここで選択される論理ＣＰＵプロセスは、再びＶＭ１の論理ＣＰＵプロセスであるか、あるいはＶＭＭ制御用ＶＭの論理ＣＰＵプロセスのいずれかである。
【００４７】
ここではＶＭ１の論理ＣＰＵプロセス７１０が再び選択されたとする。すると、論理ＣＰＵプロセス７１０がプログラムの実行を始める前に、プロセススケジューリング処理５３０は対応する領域から先ほど退避したコンテキストを回復させる。具体的には、対応する論理ＣＰＵのコンテキスト領域４１０から、論理ＣＰＵのレジスタ情報４１０−１を再び物理ＣＰＵのレジスタに６１０−１に復元し、ＶＭ制御構造４１０−２を参照できるようにＶＭ制御構造へのポインタ６１０−２へ登録、つまりアドレスを書き換える（もしくは書き込む）。
【００４８】
また、もし、論理ＣＰＵプロセス７１０が処理を終え、次に選択されたプロセスがＶＭＭ制御用ＶＭの論理ＣＰＵプロセス７３０であるとすると、論理ＣＰＵプロセス７１０のコンテキストは再び専用の領域へ退避され、ＶＭＭ制御用ＶＭのコンテキストが回復（復元）される。
【００４９】
これが従来のプロセス切り替えにおける、コンテキスト退避／回復の処理である。この退避／回復は、論理ＣＰＵプロセスがスケジュールされるたびに行われる。
【００５０】
パターン２はＶＭＭ制御用プロセス７４０の処理の後に、ＶＭ１の論理ＣＰＵプロセスが連続走行せず、ＶＭＭ制御用ＶＭの論理ＣＰＵプロセスが選択された場合を示している。プロセスの走行順序以外は変わりなく、パターン１と同様に、コンテキストの退避／回復が論理ＣＰＵプロセスのスケジュールのたびに行われる。
【００５１】
図１０は、本発明の導入により、コンテキストの退避／回復がどのように改善されるかを示した概念図である。図１１はこのうちパターン１についてタイムチャートで示している。
【００５２】
図８のパターン１では、ＶＭＭ制御用プロセス７４０を介して、連続して同じ論理ＣＰＵプロセス７１０が走行したにも関わらず、プロセス切り替えの度にコンテキストを退避／回復していた。これに対し、本発明（図１０）では、プロセス切り替え時にまず、当該プロセスのコンテキストの退避を一旦保留する。具体的には、プロセススケジューリング処理５３０が、物理ＣＰＵのコンテキスト退避、すなわちＣＰＵのレジスタ状態の格納やＶＭ制御構造へのポインタの書き換えを行わずに、プロセス制御ブロックへ退避／回復スキップフラグを立てるように指示をする。これにより、再び連続して同じ論理ＣＰＵプロセスが走行した場合は、コンテキスト領域からコンテキストを再度移動する必要がなくなる（回復を行わない）。つまり、同一論理ＣＰＵプロセスが連続走行する場合は、一回の退避／回復処理をスキップ（省略）することができ、無駄な処理（オーバーヘッド）を省くことができる。
【００５３】
パターン２ではＶＭ１の論理ＣＰＵプロセス７１０の間に、ＶＭＭ制御用ＶＭの論理ＣＰＵプロセス７３０が走行している。パターン１と同じように、ＶＭ１の論理ＣＰＵプロセスの退避を一旦保留しておくが、間に別の論理ＣＰＵプロセスが走行した時点で、保留しておいたＶＭ１の論理ＣＰＵプロセスのコンテキストを遅れて退避させる。なお、退避を保留したことや同一のプロセスが走行したことの判定手順については、図１２〜図１４において詳細を述べる。
【００５４】
コンテキストの退避を保留しても、必要なときには遅れて退避させることで、ＶＭＭ制御用ＶＭのあとで再びＶＭ１の論理ＣＰＵプロセスがスケジュールされた場合も、矛盾なくコンテキストは回復できる。
【００５５】
図１２〜図１４はＶＭＭのプロセススケジューリング処理５３０が、コンテキストの退避／回復をスキップするためのアルゴリズムを表したフローチャートである。処理フローは（１）切り替え元プロセスのコンテキスト退避の要否判定（図１２）、（２）切り替え先プロセスのコンテキスト回復の要否判定（図１３）、（３）当該物理ＣＰＵ上で前回走行した論理ＣＰＵプロセスの更新（図１４）の３つに分けられる。それぞれについて順に記す。
【００５６】
（１）最初にＶＭＭのプロセススケジューリング処理５３０は、切り替え元プロセス（現在走行中のプロセス）のコンテキスト退避の要否判定を行う。（図１２）
スケジューリング制御テーブルから切り替え元のプロセス８００−１を取得し、切り替え元プロセスのプロセスの識別情報７１０−１から、論理ＣＰＵプロセスかどうかを判定する。具体的には、プロセス識別情報７１０−１はそのプロセスの種類を一意に特定できるためのＩＤを含んでおり、これが論理ＣＰＵを示しているかどうか確認する。
【００５７】
切り替え元プロセスが論理ＣＰＵプロセスでない場合は、コンテキストの退避は必要ないので、（２）の処理に移行する。
【００５８】
切り替え元プロセスが論理ＣＰＵプロセスである場合、次にプロセスの識別情報７１０−１から、切り替え元プロセスのＶＭが「ＣＰＵ占有モードであり、かつ、（ＶＭＭ制御用ＶＭでない）ユーザ定義ＶＭ」かどうかを判定する。
【００５９】
切り替え元プロセスのＶＭが、ＣＰＵ占有モードであったか、またはＶＭＭ制御用のＶＭであった場合はスキップできないと判定し、コンテキストを退避する。すなわち、図１５に示すように、コンテキスト領域へのポインタ７１０−２から対応するコンテキスト領域４１０を取得して、物理ＣＰＵのレジスタ状態６１０−１を論理ＣＰＵのレジスタ情報４１０−１として格納し、ＶＭ制御構造へのポインタ６１０−２によって参照されているＶＭ制御構造４１０−２へのポインタを解除する。このとき、レジスタ情報に関しては、コンテキストを退避する論理ＣＰＵプロセスがＶＭＭ制御用ＶＭのものであった場合は、例えばＣＰＵ固有情報が格納されたレジスタなどを除き、ＶＭの走行に影響するものだけを退避する。
【００６０】
切り替え元プロセスのＶＭが、ＣＰＵ占有モードであり、かつＶＭ１やＶＭ２などのユーザが定義したＶＭであった場合は、退避／回復をスキップできる可能性がある。プロセススケジューリング処理５３０は、物理ＣＰＵコンテキスト６１０をそのまま保持し、コンテキスト退避／回復スキップフラグ７１０−３をオンにして退避を保留する。
【００６１】
（２）次にＶＭＭのプロセススケジューリング処理５３０は、切り替え先プロセスのコンテキスト回復の要否判定を行う。（図１３）
まず、切り替え先プロセスのプロセスの識別情報７１０−１から、論理ＣＰＵプロセスかどうかを判定する。（１）の最初の動作と同じである。
【００６２】
切り替え先プロセスが論理ＣＰＵプロセスではない場合は、コンテキストの回復は必要ないので、（３）の処理に移行する。
【００６３】
切り替え先プロセスが論理ＣＰＵプロセスである場合は、スケジューリング制御テーブルから前回論理ＣＰＵプロセス８００−２を取得し、切り替え先プロセスが前回論理ＣＰＵプロセス（当該物理ＣＰＵで最後に走行した論理ＣＰＵプロセス）と等しいかどうかの判定を行う。条件が成立しない場合とする場合の処理について、それぞれ（２．１）、（２．２）に記す。
【００６４】
（２．１）切り替え先プロセスと前回論理ＣＰＵプロセスが等しくない場合は、回復をスキップできない。このとき、前回論理ＣＰＵプロセスの退避／回復スキップフラグのオン／オフにより動作が異なる。
【００６５】
前回論理ＣＰＵプロセスの退避／回復スキップフラグがオンである場合は、（１）で退避を保留しておいたが、同じ論理ＣＰＵプロセスが連続で走行しなかったケースである。このため、退避を保留した前回論理ＣＰＵプロセスのコンテキストをこの時点で退避して、退避／回復スキップフラグをオフにする。
【００６６】
退避／回復スキップフラグがオフである場合は、前回論理ＣＰＵプロセスのコンテキストは退避してある状態なので、何もしない。
【００６７】
どちらにしても、最後に切り替え先のコンテキストを回復する。図１６に示すように、コンテキスト領域へのポインタ７１０−２から対応するコンテキスト領域４１０を取得して、論理ＣＰＵのレジスタ情報４１０−１を物理ＣＰＵのレジスタに６１０−１に復元し、ＶＭ制御構造４１０−２を参照できるようにＶＭ制御構造へのポインタ６１０−２へ登録しする。このとき、レジスタ情報は、コンテキストを退避する論理ＣＰＵプロセスがＶＭＭ制御用ＶＭのものであった場合は、前述通り必要なものに限定して退避させたものを回復する。切り替え先のコンテキスト回復処理を終えると、（３）の処理に移行する。
【００６８】
（２．２）切り替え先プロセスと前回論理ＣＰＵプロセスが等しい場合は、回復をスキップできる可能性がある。
【００６９】
しかし、前回論理ＣＰＵプロセスの退避／回復スキップフラグがオフである場合は、ＣＰＵ共有モードなどで退避を保留しなかった場合なのでスキップできない。この場合は、切り替え先のコンテキストを回復し、（３）の処理に移行する。
【００７０】
前回論理ＣＰＵプロセスのスキップフラグがオンである場合が、回復をスキップできるケースである。これは、（１）で退避を保留しておき、再び同じ論理ＣＰＵプロセスが走行する場合なので、退避／回復スキップフラグをオフにし、前回論理ＣＰＵプロセスのコンテキスト退避処理や切り替え先プロセスのコンテキスト回復処理は行わず、退避／回復をスキップする。
【００７１】
（３）最後にＶＭＭのプロセススケジューリング処理５３０は、前回論理ＣＰＵプロセスの更新処理を行う。（図１４）
切り替え先のプロセスが論理ＣＰＵプロセスである場合、当該物理ＣＰＵのスケジューリング制御テーブル８００の前回論理ＣＰＵプロセス情報８００−２を、切り替え先プロセスに更新する。
【００７２】
これら図１２〜図１４の処理は全てプロセススケジューリング処理５３０が行う。
【００７３】
以上のように、ＣＰＵ占有モードにおいては、コンテキストの退避／回復のスキップによって、オーバーヘッドの削減に貢献できる。
【００７４】
この方式はＣＰＵ共有モードにも適用が可能である。しかしながら、ＣＰＵ共有モードは上に述べたように、任意の物理ＣＰＵのうち、いずれか一つにスケジュールするため、同一の論理ＣＰＵプロセスが連続走行する可能性は少なく、多くの場合でコンテキストを退避／回復させなくてはならない。よって共有モードに退避をスキップする機能を持たせる意味は少ないが、処理のタイミングによっては、退避／回復をスキップすることも有効である。
【産業上の利用可能性】
【００７５】
ＶＭＭのコンテキスト切り替えによるオーバーヘッドを削減することができる。これによって、ＣＰＵリソースの効率的な運用が可能となり、汎用的な処理性能の向上が見込める。特にデータベースシステムなど、Ｉ／Ｏ割り込みによるプロセス切り替えが頻発に起こるシステムにおいて、性能の向上が期待でき、仮想計算機システムの適応範囲の拡大が可能となる。
【図面の簡単な説明】
【００７６】
【図１】本発明の一実施形態における、仮想計算機システム構成図である。
【図２】本発明の一実施形態における、論理ＣＰＵコンテキスト領域の構成を示す図である。
【図３】本発明の一実施形態における、物理ＣＰＵコンテキストの構成を示す図である。
【図４】本発明の一実施形態における、プロセス制御ブロックの構成を示す図である。
【図５】本発明の一実施形態における、スケジューリング制御テーブルの構成を示す図である。
【図６】本発明の一実施形態における、ＶＭＭ内部のデータ構造と、プロセススケジューリングのＣＰＵ占有モードを示す図である。
【図７】本発明の一実施形態における、ＶＭＭ内部のデータ構造と、プロセススケジューリングのＣＰＵ共有モードを示す図である。
【図８】本発明の一実施形態における、本発明導入前のコンテキスト退避／回復の概念を表す図である。
【図９】図８のパターン１の処理をタイムチャートで表した図である。
【図１０】本発明の一実施形態における、本発明導入後のコンテキスト退避／回復の概念を表す図である。
【図１１】図１０のパターン１の処理をタイムチャートで表した図である。
【図１２】本発明の一実施形態における、コンテキスト退避／回復処理のスキップアルゴリズムのうち、切り替え元プロセスの退避要否の判定処理について表したフローチャート図である。
【図１３】本発明の一実施形態における、コンテキスト退避／回復処理のスキップアルゴリズムのうち、切り替え先プロセスの回復要否の判定処理について表したフローチャート図である。
【図１４】本発明の一実施形態における、コンテキスト退避／回復処理のスキップアルゴリズムのうち、前回論理ＣＰＵプロセス情報の更新処理について表したフローチャート図である。
【図１５】図１２記載のコンテキスト退避処理の詳細について、抜粋して表したフローチャート図である。
【図１６】図１３記載のコンテキスト回復処理の詳細について、抜粋して表したフローチャート図である。
【符号の説明】
【００７７】
１００，２００，３００  仮想計算機（ＶＭ）
１１０，２１０，３１０  ゲストオペレーティングシステム（ＯＳ）
１２０，１２１，２２０，２２１，３２０，３２１  論理ＣＰＵ
１３０，２３０，３３０  ＶＭ用メモリ
４００  ＶＭＭ制御用のメモリ領域
４１０，４１１，４２０，４２１，４３０，４３１  論理ＣＰＵコンテキスト格納用領域
４１０−１  論理ＣＰＵのレジスタ情報
４１０−２  論理ＣＰＵのＶＭ制御構造
５００  仮想マシンモニタ（ＶＭＭ）
５１０  プロセス制御ブロック
５２０  スケジューリング制御テーブル
５３０  プロセススケジューリング処理
６００，６０１，６０２，６０３  物理ＣＰＵ
６１０，６１１，６１２，６１３  物理ＣＰＵコンテキスト
６１０−１  物理ＣＰＵレジスタ状態
６１０−２  ＶＭ制御構造へのポインタ
６２０，６２１，６２２  物理ＣＰＵ内部メモリ
７１０，７１１，７２０，７２１，７３０，７３１，７４０，７４１，７４２  各プロセス制御ブロック
７１０−１  プロセス識別情報
７１０−２  コンテキスト格納領域へのポインタ
７１０−３  コンテキスト退避／回復スキップフラグ
８００，８０１，８０２，８０３  各スケジューリング制御テーブル
８１０−１  当該物理ＣＰＵで現在走行中のプロセス
８１０−２  当該物理ＣＰＵで最後に走行した論理ＣＰＵプロセス
【図１】
2010134496.tif 000003
【図２】
2010134496.tif 000004
【図３】
2010134496.tif 000005
【図４】
2010134496.tif 000006
【図５】
2010134496.tif 000007
【図６】
2010134496.tif 000008
【図７】
2010134496.tif 000009
【図８】
2010134496.tif 000010
【図９】
2010134496.tif 000011
【図１０】
2010134496.tif 000012
【図１１】
2010134496.tif 000013
【図１２】
2010134496.tif 000014
【図１３】
2010134496.tif 000015
【図１４】
2010134496.tif 000016
【図１５】
2010134496.tif 000017
【図１６】
2010134496.tif 000018