(57)【要約】  割り込みタイマを含む割り込みコントローラを含む物理プロセッサと、前記物理プロセッサと物理メモリを含む計算機資源を複数の仮想計算機に割り当てる仮想化部とを含み、前記仮想化部が、物理プロセッサを仮想化した仮想プロセッサを複数の仮想計算機に割り当て、物理プロセッサのうちのひとつを、プロセッサ共有モードとプロセッサ占有モードと、のいずれか一方を設定し、プロセッサ共有モードとプロセッサ占有モードの何れか一方を設定した物理プロセッサの割り込みタイマを、タイマ共有モードとタイマ占有モードの何れか一方に設定する。
2016084237.tif 000002
【特許請求の範囲】
【請求項１】
割り込みタイマを含む割り込みコントローラと、前記割り込みコントローラを含む物理プロセッサと、前記物理プロセッサと物理メモリを含む物理計算機と、前記物理計算機の計算機資源を複数の仮想計算機に割り当てる仮想化部とを含む仮想計算機システムで、前記仮想化部が前記物理プロセッサの割り当てを制御する仮想計算機システムの制御方法であって、
前記仮想化部が、前記割り込みタイマを仮想化した仮想割り込みタイマと、前記割り込みコントローラを仮想化した仮想割り込みコントローラとを含む前記物理プロセッサの計算機資源を割り当てた仮想プロセッサと、前記物理メモリの計算機資源を割り当てた仮想メモリとを生成し、前記複数の仮想計算機を生成する第１のステップと、
前記仮想化部が、前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、複数の前記仮想プロセッサで共有するプロセッサ共有モードと、前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、特定の仮想プロセッサで占有するプロセッサ占有モードと、のいずれか一方のプロセッサスケジューリングモードを設定する第２のステップと、
前記仮想化部が、前記プロセッサ共有モードとプロセッサ占有モードの何れか一方を設定した前記物理プロセッサの割り込みタイマを、複数の仮想計算機のタイマイベントで共有するタイマ共有モードと、前記特定の仮想プロセッサの仮想タイマで占有するタイマ占有モードの何れか一方のタイマスケジューリングモードを前記プロセッサスケジューリングモードに連動して設定する第３のステップと、
を含むことを特徴とする仮想計算機システムの制御方法。
【請求項２】
請求項１に記載の仮想計算機システムの制御方法であって、
前記仮想化部が、前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ共有モードとプロセッサ占有モードとの間で切り替える第４のステップと、
前記仮想化部が、前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを切り替える第５のステップと、
をさらに含むことを特徴とする仮想計算機システムの制御方法。
【請求項３】
請求項２に記載の仮想計算機システムの制御方法であって、
前記第２のステップは、
前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、複数の前記仮想プロセッサで共有するプロセッサ共有モードに設定し、
前記第３のステップは、
前記プロセッサ共有モードの前記プロセッサスケジューリングモードに連動して、前記物理プロセッサの割り込みタイマを、複数の仮想計算機のタイマイベントで共有するタイマ共有モードに設定し、
前記第４のステップは、
前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ共有モードから前記プロセッサ占有モードに切り替えて、
前記第５のステップは、
前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを前記タイマ共有モードから前記タイマ占有モードへ切り替えることを特徴とする仮想計算機システムの制御方法。
【請求項４】
請求項２に記載の仮想計算機システムの制御方法であって、
前記第２のステップは、
前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、特定の前記仮想プロセッサで占有するプロセッサ占有モードに設定し、
前記第３のステップは、
前記プロセッサ占有モードの前記プロセッサスケジューリングモードに連動して、前記物理プロセッサの割り込みタイマを、前記特定の仮想プロセッサの仮想タイマで占有するタイマ占有モードに設定し、
前記第４のステップは、
前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ占有モードから前記プロセッサ共有モードに切り替えて、
前記第５のステップは、
前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを前記タイマ占有モードから前記タイマ共有モードへ切り替えることを特徴とする仮想計算機システムの制御方法。
【請求項５】
請求項３に記載の仮想計算機システムの制御方法であって、
前記第５のステップは、
前記タイマ共有モードで前記物理プロセッサの割り込みタイマに設定されていたタイマイベントを、前記タイマ共有モードに設定された他の物理プロセッサへ移動させてからタイマ占有モードへ切り替えることを特徴とする仮想計算機システムの制御方法。
【請求項６】
請求項３に記載の仮想計算機システムの制御方法であって、
前記物理プロセッサの割り込みコントローラは、タイマ割り込みの発生後に前記割り込みタイマへ新たな値を書き込むまでカウントを停止し、
前記第５のステップは、
前記タイマ共有モードからタイマ占有モードへ切り替える前記物理プロセッサの割り込みコントローラがタイマ割り込みを発生した後に、前記タイマ共有モードからタイマ占有モードへの前記タイマスケジューリングモードの切り替えを実行することを特徴とする仮想計算機システムの制御方法。
【請求項７】
請求項３に記載の仮想計算機システムの制御方法であって、
前記プロセッサ共有モードでは、前記複数の仮想プロセッサで物理プロセッサを時分割共有するために所定の周期でタイマ割り込みを発生する時計チックタイマを前記タイマイベントに含み、
前記第５のステップは、
前記タイマ共有モードからタイマ占有モードへ切り替える前記物理プロセッサの前記割り込みタイマの時計チックタイマのタイマイベントを無効にした後に、前記タイマ共有モードからタイマ占有モードへの前記タイマスケジューリングモードの切り替えを実行することを特徴とする仮想計算機システムの制御方法。
【請求項８】
割り込みタイマを含む割り込みコントローラと、
前記割り込みコントローラを含む物理プロセッサと、
前記物理プロセッサと物理メモリを含む物理計算機と、
前記物理計算機の計算機資源を複数の仮想計算機に割り当てる仮想化部とを含む仮想計算機システムであって、
前記仮想化部は、
前記割り込みタイマを仮想化した仮想割り込みタイマと、前記割り込みコントローラを仮想化した仮想割り込みコントローラとを含む前記物理プロセッサの計算機資源を割り当てた仮想プロセッサと、前記物理メモリの計算機資源を割り当てた仮想メモリとを含む前記複数の仮想計算機を生成し、
前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、複数の前記仮想プロセッサで共有するプロセッサ共有モードと、前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、特定の仮想プロセッサで占有するプロセッサ占有モードと、のいずれか一方のプロセッサスケジューリングモードを設定し、
前記プロセッサ共有モードとプロセッサ占有モードの何れか一方を設定した前記物理プロセッサの割り込みタイマを、複数の仮想計算機のタイマイベントで共有するタイマ共有モードと、前記特定の仮想プロセッサの仮想タイマで占有するタイマ占有モードの何れか一方のタイマスケジューリングモードを前記プロセッサスケジューリングモードに連動して設定することを特徴とする仮想計算機システム。
【請求項９】
請求項８に記載の仮想計算機システムであって、
前記仮想化部は、
前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ共有モードとプロセッサ占有モードとの間で切り替え、
前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを切り替えることを特徴とする仮想計算機システム。
【請求項１０】
請求項９に記載の仮想計算機システムであって、
前記仮想化部は、
前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、複数の前記仮想プロセッサで共有するプロセッサ共有モードに設定し、
前記プロセッサ共有モードの前記プロセッサスケジューリングモードに連動して、前記物理プロセッサの割り込みタイマを、複数の仮想計算機のタイマイベントで共有するタイマ共有モードに設定し、
前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ共有モードから前記プロセッサ占有モードに切り替えて、
前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを前記タイマ共有モードから前記タイマ占有モードへ切り替えることを特徴とする仮想計算機システム。
【請求項１１】
請求項９に記載の仮想計算機システムであって、
前記仮想化部は、
前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、特定の前記仮想プロセッサで占有するプロセッサ占有モードに設定し、
前記プロセッサ占有モードの前記プロセッサスケジューリングモードに連動して、前記物理プロセッサの割り込みタイマを、前記特定の仮想プロセッサの仮想タイマで占有するタイマ占有モードに設定し、
前記物理プロセッサの前記プロセッサスケジューリングモードをプロセッサ占有モードから前記プロセッサ共有モードに切り替えて、
前記プロセッサスケジューリングモードに連動して前記タイマスケジューリングモードを前記タイマ占有モードから前記タイマ共有モードへ切り替えることを特徴とする仮想計算機システム。
【請求項１２】
請求項１０に記載の仮想計算機システムであって、
前記仮想化部は、
前記タイマ共有モードで前記物理プロセッサの割り込みタイマに設定されていたタイマイベントを、前記タイマ共有モードに設定された他の物理プロセッサへ移動させてからタイマ占有モードへ切り替えることを特徴とする仮想計算機システム。
【請求項１３】
請求項１０に記載の仮想計算機システムであって、
前記物理プロセッサの割り込みコントローラは、タイマ割り込みの発生後に前記割り込みタイマへ新たな値を書き込むまでカウントを停止し、
前記タイマ共有モードからタイマ占有モードへ切り替える前記物理プロセッサの割り込みコントローラがタイマ割り込みを発生した後に、前記タイマ共有モードからタイマ占有モードへの前記タイマスケジューリングモードの切り替えを実行することを特徴とする仮想計算機システム。
【請求項１４】
請求項１０に記載の仮想計算機システムであって、
前記プロセッサ共有モードでは、前記複数の仮想プロセッサで物理プロセッサを時分割共有するために所定の周期でタイマ割り込みを発生する時計チックタイマを前記タイマイベントに含み、
前記タイマ共有モードからタイマ占有モードへ切り替える前記物理プロセッサの前記割り込みタイマの時計チックタイマのタイマイベントを無効にした後に、前記タイマ共有モードからタイマ占有モードへの前記タイマスケジューリングモードの切り替えを実行することを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想ＣＰＵに物理ＣＰＵの割り込みタイマを動的に占有して割り当てる仮想計算機システムに関する。
【背景技術】
【０００２】
計算機に搭載するＣＰＵソケット数やＣＰＵソケットあたりのＣＰＵコア数が増加してきている。このようにＣＰＵコアの数が増えている計算機を有効に使う方法の１つに仮想計算機システムがある。仮想計算機システムは、仮想計算機モニタ（またはハイパーバイザ）が物理計算機の有する資源を用いて複数の仮想計算機を構築し、各々の仮想計算機の上で独立にオペレーティングシステムを稼働させることができるプラットフォームのことである。仮想計算機システムを用いると、物理計算機の資源を有効に活用したり、ソフトウェアの管理や保守などが容易になったりする等の多くの利点があり、普及が進んでいる。ここで仮想計算機の上で稼働するプログラムのことを特にゲストと呼び、仮想計算機システム（仮想計算機モニタなど）のことを特にホストと呼ぶ。【０００３】
仮想計算機システムでは、仮想計算機モニタは、物理ＣＰＵのスケジューリングモードとして、ＣＰＵ共有モードとＣＰＵ占有モードを持つ。物理計算機の物理ＣＰＵ数が少なかったときは、物理ＣＰＵよりも多くの仮想ＣＰＵで物理ＣＰＵを時分割共有するＣＰＵ共有モードが多く使われていた。しかし、物理計算機の物理ＣＰＵ数またはＣＰＵコア数が増えるにつれて、各仮想ＣＰＵに１つの特定の物理ＣＰＵコアを占有させるＣＰＵ占有モードが広まっている。ＣＰＵ占有モードは、特にインメモリデータベースやリアルタイム制御などレイテンシー(処理の遅延)に対する要求の厳しいアプリケーションで使われ始めている。【０００４】
これらのアプリケーションは、ＣＰＵの割り込みタイマを多用する。ここで、ＣＰＵの割り込みタイマは、ＣＰＵ本体に内蔵されている割り込みコントローラが持つタイマのことである。当該タイマは、固定周波数で減算する残りカウンタで構成され、残りカウンタに値を書き込むと、残りカウンタは減算を開始し、ゼロになると割り込みコントローラが所属するＣＰＵにタイマ割り込みを生成して、次に残りカウンタに値が書き込まれるまで稼働を停止するインターバルタイマ機能を持つ。【０００５】
特許文献１では、仮想計算機システムにおいて、物理計算機のタイマを共有して、仮想計算機のタイマを仮想的に実現する基本的な方法が述べられている。【０００６】
特許文献２や特許文献３では、仮想計算機システムにおいて、仮想計算機のタイマが実際の時間に対して遅れたときに追いつく為のタイマ仮想化の方法が述べられている。【０００７】
また、特許文献４ではメモリやキャッシュへのアクセス状況に応じてコンテキストを特定のＣＰＵにスケジュールする方法が述べられている。【０００８】
特許文献５では、仮想計算機の物理計算機間の移動に伴い、移動対象の仮想計算機に占有割り当てしたＩ／Ｏを移動させる方法が述べられている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−１７１２９３号公報
【特許文献２】米国特許第７４７５００２号明細書
【特許文献３】米国特許第８５３３７０９号明細書
【特許文献４】米国特許第７７０７５７８号明細書
【特許文献５】米国特許第８４８９６９９号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記特許文献１〜５のような従来の仮想計算機システムでは、仮想計算機の仮想ＣＰＵの割り込みタイマを、物理ＣＰＵの割り込みタイマを用いてエミュレーションしていたが、これらのエミュレーションのオーバヘッドが大きく、前述のアプリケーションの稼働に影響を及ぼすことがあった。【００１１】
すなわち、上記従来の仮想計算機システムでは、ある仮想ＣＰＵが特定の物理ＣＰＵを占有するときに、仮想ＣＰＵに物理ＣＰＵが持つハードウェア資源を占有させることができるが、物理ＣＰＵの割り込みタイマは占有されていなかった。【００１２】
このため、仮想ＣＰＵの割り込みタイマを、物理ＣＰＵの割り込みタイマを用いてエミュレーションしていたが、このエミュレーションのオーバヘッドが大きく、仮想ＣＰＵ上で稼働するアプリケーションに影響を及ぼすことがあった。【００１３】
また、物理ＣＰＵの割り込みタイマは、アプリケーションの稼働に関係なく、ホスト処理の起動やタイムアウトの検出、一定周期の時計チックタイマなどでも使用され、ＣＰＵ時間を費やすだけでなくＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）やキャッシュのデータの追い出しが発生し、ＴＬＢやキャッシュへの要求も厳しい前述のアプリケーションでは、性能の低下を招く場合があった。【００１４】
仮想計算機上のアプリケーションの負荷は動的に変動するので、ＣＰＵ占有モードとＣＰＵ共有モードの切り替えは動的に行う必要があるが、物理ＣＰＵの割り込みタイマについては、その物理ＣＰＵの割り込みタイマを使う各機能を誤稼働させずに、特定の１つの仮想ＣＰＵの割り込みタイマによる占有を動的に開始させたり、終了させたりすることができないという問題があった。【００１５】
そこで、本発明では、仮想計算機システムにおいて、物理ＣＰＵのスケジューリングモードの動的な切り替えと連動して、仮想ＣＰＵの割り込みタイマによる物理ＣＰＵの割り込みタイマの占有を制御することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、割り込みタイマを含む割り込みコントローラと、前記割り込みコントローラを含む物理プロセッサと、前記物理プロセッサと物理メモリを含む物理計算機と、前記物理計算機の計算機資源を複数の仮想計算機に割り当てる仮想化部とを含む仮想計算機システムで、前記仮想化部が前記物理プロセッサの割り当てを制御する仮想計算機システムの制御方法であって、前記仮想化部が、前記割り込みタイマを仮想化した仮想割り込みタイマと、前記割り込みコントローラを仮想化した仮想割り込みコントローラとを含む前記物理プロセッサの計算機資源を割り当てた仮想プロセッサと、前記物理メモリの計算機資源を割り当てた仮想メモリとを生成し、前記複数の仮想計算機を生成する第１のステップと、前記仮想化部が、前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、複数の前記仮想プロセッサで共有するプロセッサ共有モードと、前記複数の仮想計算機に割り当てた物理プロセッサのうちのひとつを、特定の仮想プロセッサで占有するプロセッサ占有モードと、のいずれか一方のプロセッサスケジューリングモードを設定する第２のステップと、前記仮想化部が、前記プロセッサ共有モードとプロセッサ占有モードの何れか一方を設定した前記物理プロセッサの割り込みタイマを、複数の仮想計算機のタイマイベントで共有するタイマ共有モードと、前記特定の仮想プロセッサの仮想タイマで占有するタイマ占有モードの何れか一方のタイマスケジューリングモードを前記プロセッサスケジューリングモードに連動して設定する第３のステップと、を含む。
【発明の効果】
【００１７】
本発明によれば、仮想ＣＰＵが特定の物理ＣＰＵを占有しているときに、仮想ＣＰＵの占有と連動して、仮想ＣＰＵの割り込みタイマに特定の物理ＣＰＵの割り込みタイマを占有させる。これにより、仮想ＣＰＵの割り込みタイマのエミュレーションのオーバヘッドを最小にすることができ、仮想ＣＰＵ上のプログラムの稼働に関係なく発生していたホスト用タイマによるＴＬＢやキャッシュのデータの追い出しを抑止して物理ＣＰＵの性能を確保することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施例を示し、仮想計算機システムの一例を示すブロック図である。
【図２】本発明の実施例を示し、タイマ管理部とスケジューラの構成の一例を示すブロック図である。
【図３Ａ】本発明の実施例を示し、ＣＰＵ共有モードの物理ＣＰＵのスケジューリングの一例を示す図である。
【図３Ｂ】本発明の実施例を示し、ＣＰＵ共有モードとＣＰＵ占有モードの物理ＣＰＵが共存するスケジューリングの一例を示す図である。
【図４Ａ】本発明の実施例を示し、タイマ共有モードにおけるタイマ管理部と各タイマ状態を示す図である。
【図４Ｂ】本発明の実施例を示し、タイマ共有モード及びタイマ占有モードにおけるタイマ管理部と各タイマの状態を示す図である。
【図５】本発明の実施例を示し、タイマ共有モードの物理ＣＰＵのスケジューラとタイマ管理部の一例を示す図である。
【図６】本発明の実施例を示し、タイマイベントの期限と、タイマ共有モードの物理ＣＰＵの割り込みタイマの残りカウンタの関係を示すグラフである。
【図７】本発明の実施例を示し、タイマイベントの期限とタイマ共有モードの物理ＣＰＵの割り込みタイマの残りカウンタの関係を示すグラフである。
【図８Ａ】本発明の実施例を示し、タイマ共有モードの物理ＣＰＵにおける、仮想ＣＰＵの割り込みタイマの残りカウンタの更新処理の一例を示すフローチャートである。
【図８Ｂ】本発明の実施例を示し、タイマ共有モードの物理ＣＰＵにおける、仮想ＣＰＵのタイマ割り込みの伝達処理の一例を示すフローチャートの前半部である。
【図８Ｃ】本発明の実施例を示し、タイマ共有モードの物理ＣＰＵにおける、仮想ＣＰＵのタイマ割り込みの伝達処理の一例を示すフローチャートの後半部である。
【図９Ａ】本発明の実施例を示し、タイマ占有モードの物理ＣＰＵにおける、仮想ＣＰＵの割り込みタイマの残りカウンタの更新処理のフローチャートである。
【図９Ｂ】本発明の実施例を示し、タイマ占有モードの物理ＣＰＵにおける、仮想ＣＰＵの割り込みタイマのタイマ割り込みの伝達処理のフローチャートである。
【図１０Ａ】本発明の実施例を示し、物理ＣＰＵの割り込みタイマのタイマスケジューリングモードの動的変更処理のフローチャートの前半部である。
【図１０Ｂ】本発明の実施例を示し、物理ＣＰＵの割り込みタイマのタイマスケジューリングモードの動的変更処理のフローチャートの後半部である。
【図１０Ｃ】本発明の実施例を示し、物理ＣＰＵの割り込みタイマのタイマスケジューリングモードの動的変更処理のフローチャートである。
【発明を実施するための形態】
【００１９】
以下、本発明を適用した一実現形態を、図面を用いて詳細に説明する。
【００２０】
図１は本発明を適用した仮想計算機システムの一例を示すブロック図である。仮想計算機システムは、物理計算機１と、仮想計算機モニタ１００と、仮想計算機２００ａ〜２００ｃ（１〜３）とを含む。なお、以下では仮想計算機の総称をアルファベットの添え字のない符号２００で示し、個々の仮想計算機をアルファベットの添え字を付した符号２００ａ〜２００ｃで識別する。また、他の構成要素も同様であり、アルファベットの添え字のない符号で構成要素の種別を特定し、アルファベットの添え字を付した符号で個々の構成要素を特定する。
【００２１】
物理計算機１は、物理ＣＰＵ１０ａ〜１０ｄ（０〜３）と、メモリ０５０と、Ｉ／Ｏ割り込みコントローラ０６０と、１つ以上のＩ／Ｏデバイス７０及びシステム時刻８０とを含む。なお、物理ＣＰＵ１０ａ〜１０ｄ（０〜３）は、マルチコアプロセッサのプロセッサコアで構成してもよい。
【００２２】
物理ＣＰＵ１０ａ〜１０ｄ（０〜３）は、それぞれＣＰＵ本体に内蔵される割り込みコントローラ３０ａ〜３０ｄを含む。割り込みコントローラ３０ａは、割り込みの生成源から外部割り込みを受け取り、物理ＣＰＵ０（１０ａ）に外部割り込みを伝達する機能と、複数の物理ＣＰＵ１０を含む計算機システムにおいて、他の物理ＣＰＵ１０との間でプロセッサ間割り込みを送受信する機能を提供する。割り込みコントローラ３０ａは更に、割り込みタイマ４０ａを含む。なお、割り込みコントローラ３０ａは、例えば、ＬＯＣＡＬ  ＡＰＩＣ（Advanced Programmable Interrupt Controller）として物理ＣＰＵ１０ａに実装される。また、割り込みタイマ４０ａは、例えば、ＬＯＣＡＬ  ＡＰＩＣ  ＴＩＭＥＲとして割り込みコントローラ３０ａに実装される。
【００２３】
物理ＣＰＵ０（１０ａ）は外部割り込みマスク２０ａを含む。外部割り込みマスク２０ａは、当該マスクを閉じることで物理ＣＰＵ０（１０ａ）に伝達された外部割り込みを保留させたまま一時的に無視することができる機能を提供する。オペレーティングシステムなどのプログラムは、外部割り込みマスクを、実行中に外部割り込みが発生すると正常稼働を保証できない処理の開始と終了の間で使用する。なお、他の物理ＣＰＵ１〜３（１０ｂ〜１０ｄ）も同様であり、割り込みコントローラ３０と割り込みタイマ４０及び外部割り込みマスク２０を含む。
【００２４】
ここで、物理ＣＰＵは、標準でＣＰＵ仮想化アシスト機能を含むが、本発明は、物理ＣＰＵがＣＰＵ仮想化アシスト機能を含むか否かは問わないので、説明を単純にする為に、図１ではＣＰＵ仮想化アシスト機能を省略する。
【００２５】
メモリ５０は、プログラムとデータを格納する揮発性記憶装置として使用する。
【００２６】
Ｉ／Ｏ割り込みコントローラ６０は、Ｉ／Ｏデバイス７０から物理ＣＰＵ１０へのコマンド完了通知などを外部割り込みとして物理ＣＰＵ１０の割り込みコントローラ３０に伝達する機能を提供する。
【００２７】
Ｉ／Ｏデバイス７０は、ディスクドライブを動かすディスクコントローラや、ネットワークを通して外部の計算機システムと通信する為のネットワークインタフェースを含む。
【００２８】
システム時刻８０は、仮想計算機モニタ１００が現在時刻や経過時間を取得する為に使用する全ての物理ＣＰＵ１０の間で共通の時刻を提供する。なお、システム時刻８０は、ＲＴＣ（Real Time Clock）やＨＰＥＴ（High Precision Event Timer）等を用いることができる。
【００２９】
仮想計算機モニタ１００は、物理計算機１が有する計算機資源を制御して、汎用オペレーティングシステムに代表されるプログラムが、１つの計算機として認識するプログラム実行環境である１以上の仮想計算機２００を生成する。仮想計算機モニタ１００は、仮想計算機２００上でプログラムを稼働させ、物理計算機１と比較して、少しの性能低下とタイミングの違いを除けば物理計算機１と同等にプログラムを稼働させる役割を提供する制御プログラムである。仮想計算機モニタ１００は、スケジューラ１１０とタイマ管理部１２０を有する。なお、仮想計算機モニタ１００に代わって、ハイパーバイザ等の仮想化部を採用しても良い。
【００３０】
仮想計算機モニタ１００は、物理計算機１が有する計算機資源を制御して、仮想ＣＰＵ０（２１０ａ）と仮想ＣＰＵ１（２１０ｂ）と、仮想メモリ２５０と、仮想Ｉ／Ｏデバイス２６０と、仮想Ｉ／Ｏ割り込みコントローラ２７０を有する仮想計算機２００ａ〜２００ｃ（１〜３）を構築する。
【００３１】
仮想ＣＰＵ０（２１０ａ）は、割り込みコントローラ３０ａを仮想化した割り込みコントローラ２２０ａを含む。割り込みコントローラ（仮想割り込みコントローラ）２２０ａは、物理ＣＰＵ１０の割り込みコントローラ３０と同様に、割り込みタイマ４０ａを仮想化した割り込みタイマ（仮想割り込みタイマ）２３０ａを含む。仮想ＣＰＵ１（２１０ｂ）も同様の構成である。
【００３２】
仮想計算機２００ａ〜２００ｃ上では、それぞれ汎用オペレーティングシステム２０１が稼働する。汎用オペレーティングシステム２０１のことを特にゲストオペレーティングシステム２０１と呼ぶ。
【００３３】
以上に関しては、仮想計算機２（２００ｂ）と仮想計算機３（２００ｃ）も同様に構成される。
【００３４】
仮想計算機モニタ１００は、ターミナル制御や仮想計算機システム管理などの仮想計算機システムを制御する処理を行う為に、専用のプロセスを含む。これらの処理を特にホスト処理と呼び、ホスト処理を提供する専用のプロセスをホストプロセスと呼ぶ。実施例では、仮想計算機モニタ１００はホストプロセス１（１５０ａ）、ホストプロセス２（１５０ｂ）、ホストプロセス３（１５０ｃ）、及びホストプロセス４（１５０ｄ）の計４つのホストプロセスが稼働する。
【００３５】
仮想計算機モニタ１００のスケジューラ１１０と、タイマ管理部１２０の各機能部はプログラムとしてメモリ５０にロードされる。
【００３６】
ＣＰＵ１０は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、ＣＰＵ１０は、タイマ管理プログラムに従って処理することでタイマ管理部１２０として機能する。他のプログラムについても同様である。さらに、ＣＰＵ１０は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００３７】
仮想計算機モニタ１００の各機能を実現するプログラム、テーブル等の情報は、ストレージサブシステムや不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００３８】
図２は、実施例における、スケジューラ１１０とタイマ管理部１２０に関わる詳細な構成を示すブロック図である。図２では、物理ＣＰＵ０（１０ａ）、ホストプロセス１（１５０ａ）、及び仮想計算機１（２００）の仮想ＣＰＵ０（２１０ａ）とこれらに直接関わる構成要素のみを抜粋している。図２の内容は他の物理ＣＰＵ１０や、仮想ＣＰＵ２１０や、ホストプロセス１５０に対しても同様に当てはまる。
【００３９】
物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａは、タイマ周波数４２ａと、周波数４２ａに応じた周期で設定された値を減算する残りカウンタ４１ａで構成される。残りカウンタ４１ａに値を書き込むと、残りカウンタ４１ａは減算を開始し、ゼロになると割り込みコントローラ３０ａが物理ＣＰＵ０（１０ａ）にタイマ割り込みを生成する。そして、残りカウンタ４１ａの割り込みコントローラ３０ａは、タイマ割り込みを生成した後、次に残りカウンタ４１ａに値が書き込まれるまで稼働を停止する。この機能をインターバルタイマ機能と呼ぶ。
【００４０】
システム時刻８０は、システム時刻周波数８２と、周波数８２の周期で単調増加するシステム時刻カウンタ８１で構成される。システム時刻カウンタ８１の読み取り値は、時分秒の形式ではなくてもよい。
【００４１】
仮想計算機モニタ１００のスケジューラ１１０が、仮想ＣＰＵ２１０をいずれかの物理ＣＰＵ１０に割り当てることで、当該仮想ＣＰＵ２１０上のプログラムが実行される。また、ホストプロセス１５０をいずれかの物理ＣＰＵ１０に割り当てることで、当該ホストプロセス１５０上のプログラムが実行される。
【００４２】
スケジューラ１１０は、物理ＣＰＵ１０ａについて、ＣＰＵ占有モードとＣＰＵ共有モードの２値を設定するＣＰＵスケジューリングモード１１１ａを設ける。また、スケジューラ１１０は、ホストプロセス１５０等を実行するためのランキュー１１２ａ等を設定する。なお、ＣＰＵスケジューリングモード１１１ａは、物理ＣＰＵ１０ａ〜１０ｄ毎に設けることができ、後述の図３Ａのように、物理ＣＰＵ１０ａ〜１０ｄ毎にＣＰＵスケジューリングモード１１１ａ〜１１１ｄが設けられる。また、ランキュー１１２ａも、物理ＣＰＵ１０ａ〜１０ｄ毎に設けることができる。
【００４３】
ここで、ＣＰＵ占有モードは、ひとつの仮想ＣＰＵ２１０がひとつの物理ＣＰＵ１０を占有するモードで、ＣＰＵ共有モードは複数の仮想ＣＰＵ２１０がひとつの物理ＣＰＵ１０を共有するモードである。
【００４４】
また、スケジューラ１１０は、物理ＣＰＵ１０ａについて、タイマイベントを格納するタイマキュー１２２ａを有する。なお、タイマキューは、物理ＣＰＵ１０ａ〜１０ｄ毎に設けることができ、後述の図４Ａで示すように、物理ＣＰＵ１０ａ〜１０ｄ毎にタイマキュー１２２ａ〜１２２ｄが設定される。
【００４５】
仮想計算機モニタ１００のタイマ管理部１２０は、物理ＣＰＵ１０ａの割り込みタイマ４０ａを用いて仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａを仮想的に実現したり、ホストプロセス１５０を指定した時刻に起動したり、稼働しているプログラムのタイムアウトを検出したり、各処理のＣＰＵ使用量を測定したり、統計情報を更新したりする役割を提供する。
【００４６】
タイマ管理部１２０は、上記各機能を実現する為に、各構成要素に対してタイマに関わるデータ構造を持たせる。
【００４７】
タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａにタイマ占有モードとタイマ共有モードの２値から成るタイマスケジューリングモード１２１ａを設ける。なお、タイマスケジューリングモード１２１ａは、物理ＣＰＵ１０ａ〜１０ｄ毎にそれぞれ１つ設けることができ、後述の図４Ａのように、物理ＣＰＵ１０ａ〜１０ｄ毎にタイマスケジューリングモード１２１ａ〜１２１ｄが設けられる。
【００４８】
ここで、タイマ占有モードは、ひとつの仮想ＣＰＵ２１０の割り込みタイマ２３０がひとつの物理ＣＰＵ１０の割り込みタイマ４０を占有するモードで、タイマ共有モードは複数の仮想ＣＰＵ２１０のタイマイベントがひとつの物理ＣＰＵ１０の割り込みタイマ４０を共有するモードである。
【００４９】
タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）を複数の仮想ＣＰＵ２１０の間で時分割共有する為に、一定周期でタイマ割り込みを発生する時計チックタイマのタイマイベント１３０ａを設定する。時計チックタイマのタイマイベント１３０ａは、システム時刻８０を時間軸とする開始時刻１３１ａと期限１３２ａ、周期１３３ａ、及び有効または無効のステータス１３４ａで構成される。なお、時計チックタイマは、システムタイマとしてもよい。また、時計チックタイマのタイマイベント１３０は、物理ＣＰＵ１０毎に設定され、例えば、後述の図４Ａのように時計チックタイマのタイマイベント１３０ａ〜１３０ｄを設けることができる。
【００５０】
タイマ管理部１２０は、ホストプロセス１（１５０ａ）を指定した時刻に起動したり、当該ホストプロセス１（１５０ａ）のタイムアウトを検出する為に、ホストプロセス１（１５０ａ）にタイマイベント１６０ａを対応付ける。タイマイベント１６０ａはシステム時刻８０を時間軸とする期限１６１ａ、及び有効または無効のステータス１６２ａで構成される。
【００５１】
仮想計算機１（２００）の仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａは、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａと同様に残りカウンタ２３１ａとタイマ周波数２３２ａで構成される。
【００５２】
タイマ管理部１２０は、割り込みタイマ２３０ａのエミュレーションを支援する為に、タイマイベント２４０ａを仮想ＣＰＵ０（２１０ａ）に対応付ける。タイマイベント２４０ａは、システム時刻８０を時間軸とする残りカウンタ更新時刻２４１ａと、期限２４２ａと、及び有効または無効のステータス２４３ａで構成される。
【００５３】
本実施例では、説明を単純にする為に、物理ＣＰＵ１０ａの割り込みタイマ４０ａの周波数と、仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの周波数は等しいとするが、異なっていてもよい。
【００５４】
物理ＣＰＵ１０のＣＰＵスケジューリングモード１１１を詳細に説明する。ある仮想ＣＰＵ２１０が特定の物理ＣＰＵ１０を占有するときは、当該物理ＣＰＵ１０はＣＰＵ占有モードで稼働し、特定の１つの仮想ＣＰＵ２１０には占有されない物理ＣＰＵ１０はＣＰＵ共有モードで稼働する。
【００５５】
図３Ａは全ての物理ＣＰＵがＣＰＵ共有モードで稼働するときのスケジューリングの状態を表すである。図３Ｂは物理ＣＰＵ０（１０ａ）と物理ＣＰＵ１（１０ｂ）がＣＰＵ占有モードで稼働するときのスケジューリングの状態を表す図である。
【００５６】
図３Ａ及び図３Ｂにおいて、ＣＰＵ共有モードの物理ＣＰＵ１０上では任意の仮想ＣＰＵ２１０とホストプロセス１５０が稼働可能である。ＣＰＵ共有モードの物理ＣＰＵ１０のスケジューリングは、基本的に物理ＣＰＵ１０ごとに独立して行われるスケジューリングと、負荷の状況に応じた負荷分散によるスケジューリングがある。
【００５７】
物理ＣＰＵ１０ごとに独立して行うスケジューリングは、ある一時点では仮想ＣＰＵ２１０やホストプロセス１５０を１つの物理ＣＰＵ１０のランキュー１１２に対応付けることで可能にする。
【００５８】
一方、負荷分散は物理ＣＰＵ１０ごとのランキュー１１２と仮想ＣＰＵ２１０やホストプロセス１５０との対応付けを動的に変更することで行う。負荷分散の手法については、公知または周知の手法を採用すれば良いので、ここでは詳細は問わない。
【００５９】
図３Ａでは、例えば物理ＣＰＵ０（１０ａ）は、ホストプロセス１（１５０ａ）と、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）及び仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）の間で時分割共有される。物理ＣＰＵ１（１０ｂ）、物理ＣＰＵ２（１０ｃ）、及び物理ＣＰＵ３（１０ｄ）も同様である。
【００６０】
ＣＰＵ占有モードの物理ＣＰＵ１０上では、当該物理ＣＰＵ１０を占有する仮想ＣＰＵ２１０のみが稼働可能である。当該物理ＣＰＵ１０がＣＰＵ共有モードのときに稼働していた仮想ＣＰＵ２１０やホストプロセス１５０は、当該物理ＣＰＵ１０がＣＰＵ占有モードを開始するときに、他のＣＰＵ共有モードの物理ＣＰＵ１０に移動させる。
【００６１】
図３Ｂでは、例えば物理ＣＰＵ０（１０ａ）は、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）によって占有されている。図３Ａで、物理ＣＰＵ０（１０ａ）上で稼働していた仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）とホストプロセス１（１５０ａ）は共に、ＣＰＵ共有モードの物理ＣＰＵ２（１０ｃ）上へ移動して稼働している。
【００６２】
物理ＣＰＵ１０のＣＰＵスケジューリングモード１１１ａの切り替えは、ＣＰＵ共有モードからＣＰＵ占有モードへの切り替え、または、ＣＰＵ占有モードからＣＰＵ共有モードへの切り替えを共に動的に行うことができる。
【００６３】
図３Ａから図３Ｂへ切り替えるときは、つまり、物理ＣＰＵ０（１０ａ）と物理ＣＰＵ１（１０ｂ）をＣＰＵ共有モードからＣＰＵ占有モードに動的に切り替えるときは、次のように行う。
【００６４】
物理ＣＰＵ０（１０ａ）を例に取り上げると、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）上で稼働していた仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）と、ホストプロセス１（１５０ａ）を、共に物理ＣＰＵ２（１０ｃ）に移動させる。
【００６５】
そして、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）のＣＰＵスケジューリングモード１１１ａをＣＰＵ占有モードに変更して、仮想計算機１（２００）の仮想ＣＰＵ０（２１０ａ）による占有を開始させる。物理ＣＰＵ１（１０ｂ）も同様である。
【００６６】
次に、図３Ｂから図３Ａへ切り替えるときは、つまり、物理ＣＰＵ０（１０ａ）と物理ＣＰＵ１（１０ｂ）をＣＰＵ占有モードからＣＰＵ共有モードへ動的に切り替えるときは、次のように行う。
【００６７】
物理ＣＰＵ０（１０ａ）を例に取り上げると、仮想計算機モニタ１００は、まず物理ＣＰＵ０（１０ａ）をＣＰＵ占有モードからＣＰＵ共有モードに切り替える。すると、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）の負荷が物理ＣＰＵ２（１０ｃ）と物理ＣＰＵ３（０１０ｄ）の負荷よりも低いことが検出する。
【００６８】
仮想計算機モニタ１００は、負荷分散によって物理ＣＰＵ２（１０ｃ）から仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）とホストプロセス１（１５０ａ）を物理ＣＰＵ０（１０ａ）に移動する。物理ＣＰＵ１０ａのＣＰＵスケジューリングモード１１１ａの動的な切り替えに伴う仮想ＣＰＵ２１０やホストプロセス１５０の移動のパターンは、その時々で変わりうるものであり、予め決まっているものではない。物理ＣＰＵ１（１０ｂ）についても同様である。
【００６９】
仮想計算機モニタ１００は、各物理ＣＰＵ１０の割り込みタイマ４０のタイマスケジューリングモード１２１ａを、対応する物理ＣＰＵ１０のＣＰＵスケジューリングモード１１１ａと連動させる。
【００７０】
例えば、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）の割り込みタイマ２３０ａのタイマスケジューリングモード１２１ａを、物理ＣＰＵ０（１０ａ）のＣＰＵスケジューリングモード１１１ａと連動させる。
【００７１】
仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）がＣＰＵ共有モードのときは、割り込みタイマ４０ａのタイマスケジューリングモード１２１ａをタイマ共有モードとし、物理ＣＰＵ０（１０ａ）がＣＰＵ占有モードのときは、割り込みタイマ４０ａのタイマスケジューリングモード１２１ａをタイマ占有モードとする。
【００７２】
つまり、割り込みタイマ４０ａのタイマスケジューリングモード１２１ａは動的に切り替え可能である。この切り替えは、仮想計算機モニタ１００のタイマ管理部１２０がスケジューリング切り替え要求を受け取ることによって行う。
【００７３】
仮想計算機モニタ１００は、ＣＰＵスケジューリングモード１１１とタイマスケジューリングモード１２１の動的な切り替えを行う為に、物理ＣＰＵ０（１０ａ）に対してスケジューリングモード切り替え要求１２３ａを設定する。タイマ管理部１２０は、受け付けたスケジューリング切り替え要求をスケジューリングモード切り替え要求１２３ａに設定する。物理ＣＰＵ１〜３（１０ｂ〜１０ｄ）についても、それぞれスケジューリングモード切り替え要求１２３ｂ〜１２３ｄを設定する。
【００７４】
図４Ａ、図４Ｂは、物理ＣＰＵ１０のスケジューリングの状態がそれぞれ図３Ａ、図３Ｂのときのタイマの状態の概念図である。図４Ａは、タイマ共有モードにおけるタイマ管理部１２０と各タイマの状態を示す図である。図４Ｂは、タイマ共有モード及びタイマ占有モードにおけるタイマ管理部１２０と各タイマの状態を示す図である。
【００７５】
図４Ａは、全ての物理ＣＰＵ１０の割り込みタイマ４０がタイマ共有モードのときを表し、図４Ｂは物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａと物理ＣＰＵ１（１０ｂ）の割り込みタイマ４０ｂがタイマ占有モードで、物理ＣＰＵ２（１０ｃ）の割り込みタイマ４０ｃと物理ＣＰＵ３（１０ｄ）の割り込みタイマ４０ｄがタイマ共有モードのときの状態を表す。
【００７６】
割り込みタイマ４０がタイマ共有モードの物理ＣＰＵ１０上では、当該物理ＣＰＵ１０の割り込みタイマ４０が、当該物理ＣＰＵ１０を共有する仮想ＣＰＵ２１０の割り込みタイマ２３０のタイマイベント２４０と、ホストプロセス１５０のタイマイベント１６０と、当該物理ＣＰＵ１０の時計チックタイマのタイマイベント１３０の間で共有される。
【００７７】
図４Ａでは、例えば物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａ上では、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａと、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント及びホストプロセス１（１５０ａ）のタイマイベント１６０ａが、タイマキュー１２２ａに入れて管理される。なお、図中、仮想計算機１＝ＶＭ１で表し、仮想ＣＰＵ０＝ＶＣＰＵ０で表し、物理ＣＰＵ０＝ＰＣＰＵ０で表す。
【００７８】
物理ＣＰＵ０（１０ａ）の時計チックタイマのタイマイベント１３０ａは、タイマキュー１２２ａに入れずに管理される。時計チックタイマのタイマイベント１３０ａをタイマキュー１２２ａへ入れないのは、時計チックタイマのタイマイベント１３０ａが物理ＣＰＵ１０間で移動することがない為である。
【００７９】
割り込みタイマ４０がタイマ占有モードの物理ＣＰＵ１０上では、当該物理ＣＰＵ１０の割り込みタイマ４０は、当該物理ＣＰＵ１０を占有する仮想ＣＰＵ２１０の割り込みタイマ２３０によって占有される。
【００８０】
図４Ｂで示すように、タイマ占有モードでは、仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａのタイマイベント２４０ａは用いられずに無効化され、当該物理ＣＰＵ１０ａの時計チックタイマのタイマイベント１３０ａも無効化される。当該物理ＣＰＵ１０ａのタイマキュー１２２ａに入っていたタイマイベントは他のタイマ共有モードの物理ＣＰＵ１０ｃのタイマキューに移動されている。
【００８１】
図４Ｂでは、例えばタイマ占有モードの物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａは、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａに占有される。また、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａはタイマキュー１２２ａから取り出されて無効にされ、時計チックタイマのタイマイベント１３０ａも無効にされる。
【００８２】
図４Ｂでは、上記図４Ａでタイマキュー１２２ａに入っていたホストプロセス１（１５０ａ）のタイマイベント１６０ａと、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ｃは共に物理ＣＰＵ２（１０ｃ）のタイマキュー１２２ｃに入れられている。
【００８３】
以降では、タイマ共有モードの物理ＣＰＵ１０上での、仮想ＣＰＵ２１０の割り込みタイマ２３０ａの更新と、当該物理ＣＰＵ１０の割り込みコントローラ３０のタイマ割り込みに連動した仮想ＣＰＵ２１０へのタイマ割り込みの伝達処理について説明する。
【００８４】
その次に、タイマ占有モードの物理ＣＰＵ１０上での、仮想ＣＰＵ２１０の割り込みタイマ２３０ａの更新と当該物理ＣＰＵ１０の割り込みコントローラ３０ａからのタイマ割り込みに連動した仮想ＣＰＵ２１０へのタイマ割り込みの伝達処理について説明する。最後に、物理ＣＰＵ１０の割り込みタイマ４０のタイマスケジューリングモード１２１ａの動的な切り替えの処理について説明する。
【００８５】
まず、図４Ａの物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａを例に取り上げ、タイマ共有モードの物理ＣＰＵ１０ａ上での、仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａの更新と、当該物理ＣＰＵ１０の割り込みコントローラ３０ａからのタイマ割り込みに連動した仮想ＣＰＵ２１０へのタイマ割り込みの伝達処理について説明する。
【００８６】
図５は、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの残りカウンタ２３１ａを更新する直前のスケジューラ１１０とタイマ管理部１２０の状態を示す図である。図６は、タイマイベントの期限と、タイマ共有モードの物理ＣＰＵ１０の割り込みタイマの残りカウンタ４１ａの関係を示すグラフである。
【００８７】
図６では、有効なタイマイベントとしてのホストプロセス１のタイマイベント１６０ａと、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａの関係を時系列順に示すグラフである。
【００８８】
物理ＣＰＵ０（１０ａ）上では、図５で示すように、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）が稼働している。また、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａと、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの残りカウンタ２３１ａは共にゼロで、それぞれ対応するタイマイベント２４０ａと２４０ｃのステータス２４３ａとステータス２４３ｃは共に無効である。
【００８９】
ホストプロセス１（１５０ａ）のタイマイベント１６０ａの期限１６１ａには値が設定されてステータス１６２ａは有効であり、物理ＣＰＵ０（１０ａ）のタイマキュー１２２ａに挿入されている。また、物理ＣＰＵ０（１０ａ）の時計チックタイマのタイマイベント１３０ａは、期限１３２ａには値が設定されステータス１３４ａは有効である。
【００９０】
ここで、図６において、時計チックタイマのタイマイベント１３０ａの期限１３２ａと、ホストプロセス１（１５０ａ）のタイマイベント１６０ａの期限１６１ａでは、時計チックタイマのタイマイベント１３０ａの期限１３２ａの方が先に到来する。このため、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａには、時計チックタイマのタイマイベント１３０ａの期限１３２ａが設定されている。
【００９１】
仮想ＣＰＵ０（２１０ａ）上で稼働するゲストオペレーティングシステム２０１が割り込みタイマ２３０ａの残りカウンタ２３１ａに値を書き込み、最終的に図７の状態になるまでを、図８Ａに従って説明する。
【００９２】
図７は、タイマイベントの期限とタイマ共有モードの物理ＣＰＵ１０の割り込みタイマ４０の残りカウンタ４１の関係を示すグラフである。図８Ａは、タイマ共有モードの物理ＣＰＵ１０ａにおける、仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａの残りカウンタの更新処理の一例を示すフローチャートである。
【００９３】
図８Ａにおいて、仮想ＣＰＵ０（２１０ａ）上で稼働するゲストオペレーティングシステム２０１が、割り込みタイマ２３０ａの残りカウンタ２３１ａに値の更新を要求する（ステップ６０１）。
【００９４】
仮想計算機モニタ１００は、仮想ＣＰＵ２１０ａの残りカウンタ２３１ａの更新要求をトラップして、タイマ管理部１２０に制御を移す（ステップ６０２）。仮想計算機モニタ１００は、この時点でタイマ管理部１２０を起動しても良い。
【００９５】
タイマ管理部１２０は、更新を要求された値を仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａの残りカウンタ２３１ａに設定する（ステップ６０３）。
【００９６】
タイマ管理部１２０は、システム時刻８０のシステム時刻カウンタ８１の値を読み取って現在時刻を取得する。そして、タイマ管理部１２０は、仮想ＣＰＵ０（２１０ａ）に対応付けられたタイマイベント２４０ａの残りカウンタ更新時刻２４１ａに、取得した現在時刻を設定し、次の式Ａに基づいてタイマイベント２４０ａの期限２４２ａを更新する（ステップ６０４）。
【００９７】
タイマイベント（２４０ａ）の期限（２４２ａ）  
＝  現在時刻  ＋（割り込みタイマ（２３０ａ）の残りカウンタ（２３１ａ）  
×  システム時刻周波数（８２））／  割り込みタイマ周波数（２３２ａ）                                                            （式Ａ）
【００９８】
なお、上記（式A）において、物理ＣＰＵ１０ａの割り込みタイマ４０ａの周波数と、仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの周波数２３２ａが等しい場合、式Ａ等の算出において、システム時刻周波数８２を不要としてもよい。なお、後述の式Ｂ、Ｄについても同様である。
【００９９】
ところで、仮想計算機２００を複数の物理計算機１間で移動する計算機システムにおいては、仮想ＣＰＵ２１０は、移行の前後で同じ周波数で動作することが前提となる。その一方で、物理ＣＰＵ１０の周波数は、物理計算機１に依存するため、移行の前後で異なることがある。
【０１００】
従って、仮想計算機２００を複数の物理計算機１間で移動する計算機システムにおいては、物理ＣＰＵ１０の割り込みタイマ４０のタイマ周波数４２と、仮想ＣＰＵ２１０の割り込みタイマ２３０のタイマ周波数２３２が、異なることが多々発生する。本発明では、上記式Ａ等により、上述のようなタイマ周波数の差を考慮した上で、仮想ＣＰＵ２１０に物理ＣＰＵ１０の割り込みタイマ４０を動的に占有させることを可能にする。
【０１０１】
そして、タイマ管理部１２０は、タイマイベント２４０ａのステータス２４３ａを有効に設定して、タイマキュー１２２ａに挿入する（ステップ６０５）。タイマ管理部１２０は、タイマキュー１２２ａの中で、タイマイベントの期限を比較して、システム時刻８０の時間軸で昇順（期限の早い順）に並べ変える。
【０１０２】
図７の状況では、タイマ管理部１２０が、タイマイベント２４０ａをタイマキュー１２２ａに挿入したときは、タイマキュー１２２ａには既にホストプロセス１（１５０ａ）のタイマイベント１６０ａが挿入されている。
【０１０３】
タイマ管理部１２０は、上述のようにタイマキュー１２２ａ内の期限の比較を行って、タイマイベント１６０ａの期限１６１ａよりも、タイマイベント２４０ａの期限２４２ａの方が、期限が近いと判定し、タイマイベント２４０ａをタイマキュー１２２ａの先頭に移動させる。
【０１０４】
タイマ管理部１２０は、タイマキュー１２２ａへのタイマイベント１６０ａの挿入を終えると、タイマキュー１２２ａの先頭のタイマイベント２４０ａの期限２４２ａと、時計チックタイマのタイマイベント１３０ａの期限１３２ａを比較する。タイマ管理部１２０は、いずれか近いほうのタイマイベントの期限を直近の期限として取得する（ステップ６０６）。
【０１０５】
タイマ管理部１２０は、システム時刻８０のシステム時刻カウンタ８１を読み取り、現在時刻を取得し、直近の期限から現在時刻を引いて残り時間を算出する。そして、タイマ管理部１２０は、次の式Ｂにより期限までの残り時間を割り込みタイマ４０ａのカウント数（残りカウント）に変換する。
【０１０６】
タイマ管理部１２０は、式Ｂで算出した値（残りカウント）を物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａに設定する（ステップ６０７）。
【０１０７】
残りカウント  ＝  （残り時間  ×  割り込みタイマ周波数４２ａ）
／  システム時刻周波数８２ａ                （式Ｂ）
【０１０８】
以上の処理により、図５、図６の状態で図８Ａのフローチャートを実行すると、ホストプロセス１のタイマイベント１６０ａの残りカウントが設定されていた割り込みタイマ４０ａの残りカウンタ４１ａには、タイマキュー１２２ａの先頭に移動したタイマイベント２４０ａの期限２４２ａに対応した値が設定される。これにより、図７の状態となる。
【０１０９】
ここで、時計チックタイマのタイマイベント１３０ａは、従来の仮想計算機システムでは、タイマイベント１３０ａの期限１３２ａを更新する際の一時的な場合を除いて、常に有効である。したがって、タイマキュー１２２ａが空であっても物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａが止まることはなく、少なくとも一定周期で割り込みコントローラ３０ａがタイマ割り込みを生成し続ける。
【０１１０】
また、上記処理によって、ゲストＯＳ２０１は仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａの残りカウンタ２３１ａに関する更新処理が完了したことを判定できる。
【０１１１】
次に、図７の状態から現在時刻が進み、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａのカウントアップで割り込みコントローラ３０ａでタイマ割り込みが発生する。当該タイマ割り込みを仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）に伝達するまでを、図８Ｂ、図８Ｃのフローチャートに基づいて説明する。
【０１１２】
図８Ｂは、タイマ共有モードの物理ＣＰＵ１０における、仮想ＣＰＵ２１０のタイマ割り込みの伝達処理の一例を示すフローチャートの前半部である。図８Ｃは、同じく伝達処理の一例を示すフローチャートの後半部である。
【０１１３】
前記図８Ａの処理によって、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａが更新されると、残りカウンタ４１ａは周波数４２ａの周期で減算を開始する。
【０１１４】
割り込みコントローラ３０ａは、残りカウンタ４１ａの値がゼロになると、タイマ割り込みを発生して物理ＣＰＵ０（１０ａ）に通知する（ステップ６２０）。当該タイマ割り込みは仮想計算機モニタ１００に伝達され、仮想計算機モニタ１００はタイマ管理部１２０を起動する（ステップ６２１）。なお、タイマ管理部１２０が既に起動している場合、仮想計算機モニタ１００はタイマ管理部１２０の制御を開始する。
【０１１５】
タイマ管理部１２０は、システム時刻８０のシステム時刻カウンタ８１を読み取り、現在時刻を取得する（ステップ６２２）。タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）のタイマキュー１２２ａが空であるか否かを判定する（ステップ６２３）。タイマキュー１２２ａが空でなければステップ６２４へ進み、空であれば図８Ｃのステップ６３１へ進む。
【０１１６】
タイマ管理部１２０は、タイマキュー１２２ａを参照して、先頭のタイマイベントの期限と現在時刻を比較する（ステップ６２４）。そして、タイマ管理部１２０は、タイマキュー１２２ａの先頭のタイマイベントの期限が現在時刻を過ぎているか否かを判定する。
【０１１７】
タイマキュー１２２ａの先頭のタイマイベントの期限が現在時刻を過ぎていればステップ６２５へ進み、タイマイベントの期限が現在時刻を過ぎていなければ図８Ｃのステップ６３１へ進む。
【０１１８】
ステップ６２５では、先頭のタイマイベントの期限が現在時刻を過ぎているので、タイマ管理部１２０が、当該タイマイベントをタイマキュー１２２ａから取り出して、ステータス２４３を無効にする。
【０１１９】
ステップ６２６では、タイマ管理部１２０が、ステップ６２５で取り出したタイマイベントが仮想ＣＰＵ２１０ａのタイマイベント２４０ａであるか否かを判定する。仮想ＣＰＵ２１０ａのタイマイベント２４０ａであればステップ６２６へ進み、そうでなければステップ６２８へ進む。
【０１２０】
ステップ６２７では、仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａであるのでタイマ管理部１２０は、仮想ＣＰＵ０（２１０ａ）にタイマ割り込みを通知する。仮想ＣＰＵ０（２１０ａ）は割り込みを受け付けると、タイマイベント２４０ａに対応する所定の処理を実行する。
【０１２１】
一方、ステップ６２８では、タイマ管理部１２０が、ステップ６２５で取り出したタイマイベントがホストプロセス１のタイマイベント１６０ａで、期限１６１ａを過ぎているか（実行開始）否かを判定する。期限１６１ａを過ぎていればステップ６２９へ進み、そうでなければステップ６２９へ進み、そうでなければ図８Ｃのステップ６３１へ進む。
【０１２２】
ステップ６２９では、タイマイベント１６０ａで要求されるホストプロセス１５０ａの処理が実行される。
【０１２３】
ステップ６３０では、タイマ管理部１２０が、タイマキュー１２２ａが空であるか、または、タイマキュー１２２ａの先頭のタイマイベントの期限が現在時刻よりも後であるか否かを判定する。タイマキュー１２２ａが空ではなく、または、先頭のタイマイベントの期限が現在時刻よりも前であれば、ステップ６２４に戻って上記処理を繰り返し、そうでなければ図８Ｃのステップ６３１に進む。
【０１２４】
ステップ６２４以降では、タイマキュー１２２ａが空になるか、あるいはタイマキュー１２２ａの先頭のタイマイベントの期限が現在時刻よりも後になるまで、タイマ管理部１２０が上記処理を繰り返す。
【０１２５】
次に、図８Ｃのステップ６３１でタイマ管理部１２０は、物理ＣＰＵ０（１０ａ）の時計チックタイマのタイマイベント１３０ａの期限１３２ａと現在時刻を比較する（ステップ６３１）。タイマ管理部１２０は、タイマイベント１３０ａの期限１３２ａが過ぎていればステップ６３２へ進み、そうでなければステップ６３４へ進む。
【０１２６】
図６の例では、期限１３２ａのほうが現在時刻よりも後なので、ステップ６３４へ移行する。もし、タイマイベント１３０ａの期限１３２ａを現在時刻が過ぎていたならば、時計チックタイマによって要求された処理が実行される（ステップ６３２）。
【０１２７】
タイマ管理部１２０は、タイマイベント１３０ａの期限１３２ａを次の式Ｃにより更新する（ステップ６３３）。
【０１２８】
期限（１３２ａ）  
＝  開始時刻１３１ａ  
＋（（周期１３３ａ  ＋  現在時刻  −  開始時刻１３１ａ）
／  周期１３３ａ）×  周期１３３ａ                      （式Ｃ）
【０１２９】
タイマ管理部１２０は、先ほど仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの残りカウンタ２３１ａを更新したときと同様に、物理ＣＰＵ０（１０ａ）のタイマキュー１２２ａの先頭のタイマイベントの期限と、時計チックタイマのタイマイベント１３０ａの期限１３２ａを比較して、近いほうの期限を取得する（ステップ６３４）。
【０１３０】
タイマ管理部１２０は、取得した期限の単位を上記式Ｂと同様にしてカウント数に変換し、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａに設定する（ステップ６３５）。
【０１３１】
上記処理によって、タイマ共有モードの物理ＣＰＵ１０において、タイマ管理部１２０は、割り込みコントローラ３０ａが発生したタイマ割り込みをタイマイベントに応じた計算機資源へ通知して、タイマイベントに応じた処理を実行することができる。タイマイベントが仮想ＣＰＵ２１０ａのタイマイベント２４０ａの場合は、タイマ管理部１２０がタイマ割り込みを仮想ＣＰＵ２１０ａへ通知して所定の処理を実行させることができる。
【０１３２】
そして、タイマ管理部１２０は、物理ＣＰＵ１０の割り込みタイマ４０ａの残りカウンタ４１ａに新たな期限を設定して、次のタイマ割り込みを準備することができる。
【０１３３】
次に、図４Ｂの物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａを例に取り上げ、タイマ占有モードの物理ＣＰＵ１０ａ上での、仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａの更新と当該物理ＣＰＵ１０ａの割り込みコントローラ３０ａからのタイマ割り込みに連動した仮想ＣＰＵ２１０ａへのタイマ割り込みの伝達処理の一例を、図９Ａ、図９Ｂのフローチャートにしたがって説明する。
【０１３４】
図９Ａは、タイマ占有モードの物理ＣＰＵ１０ａにおける、仮想ＣＰＵ２１０ａの割り込みタイマの残りカウンタの更新処理の一例を示すフローチャートである。
【０１３５】
図９Ｂは、タイマ占有モードの物理ＣＰＵ１０ａにおける、仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａのタイマ割り込みの伝達処理の一例を示すフローチャートである。
【０１３６】
図４Ｂで示したように、物理ＣＰＵ０（１０ａ）上では、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）のみが稼働している。仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａがタイマ占有モードのときは、割り込みタイマ４０ａの状態をそのまま、仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａの状態として、仮想ＣＰＵ０（２１０ａ）の上で稼働するゲストオペレーティングシステム２０１に認識させる。
【０１３７】
図９Ａにおいて、仮想ＣＰＵ０の上で稼働するゲストオペレーティングシステム２０１が割り込みタイマ２３０ａの残りカウンタ２３１ａに値を書き込む要求を発行する（ステップ６５０）。
【０１３８】
仮想計算機モニタ１００のタイマ管理部１２０は、ゲストオペレーティングシステム２０１の書き込み要求をトラップし、残りカウンタ２３１ａの値を直接に物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａに書き込む（ステップ６５１）。
【０１３９】
以上のように、タイマ占有モードでは、タイマ管理部１２０によって、残りカウンタ２３１ａの値が、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａにそのまま書き込まれる。
【０１４０】
図９Ｂにおいて、残りカウンタ４１ａは、値を書き込まれると周波数４２ａの周期で減算を開始する。そして、減算を繰り返して残りカウンタ４１ａがゼロになると、割り込みコントローラ３０ａがタイマ割り込みを発生し、物理ＣＰＵ０（１０ａ）に通知する（ステップ６５２）。仮想計算機モニタ１００は、タイマ割り込みを受け付けると、直接仮想ＣＰＵ０（２１０ａ）に伝達する（ステップ６５３）。
【０１４１】
上記処理によって、タイマ占有モードの物理ＣＰＵ１０ａにおいて、タイマ管理部１２０は、割り込みコントローラ３０ａが発生したタイマ割り込みを直接仮想ＣＰＵ２１０ａへ通知して、タイマイベントに応じた処理を実行することができる。
【０１４２】
次に、物理ＣＰＵのＣＰＵ共有モードからＣＰＵ占有モードへの切り替えに伴い、当該物理ＣＰＵ１０の割り込みタイマをタイマ共有モードからタイマ占有モードに切り替える処理を具体的に説明する。
【０１４３】
以下では、図４Ａから図４Ｂへの切り替えで、物理ＣＰＵ０（１０ａ）をＣＰＵ共有モード（タイマ共有モード）からＣＰＵ占有モード（タイマ占有モード）へ切り替える例を図１０Ａ、図１０Ｂに示す。
【０１４４】
図１０Ａは、物理ＣＰＵ１０ａの割り込みタイマのタイマスケジューリングモード１２１の動的変更処理の一例を示すフローチャートの前半部である。図１０Ｂは、同じく物理ＣＰＵの割り込みタイマのタイマスケジューリングモードの動的変更処理のフローチャートの後半部である。
【０１４５】
物理ＣＰＵ０（１０ａ）上では、図４Ａに示したＣＰＵ共有モードのときは、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）と、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）、及びホストプロセス１（１５０ａ）が稼働している。そして、ＣＰＵ占有モードへ切り替えた図４Ｂでは、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）とホストプロセス１（１５０ａ）は、物理ＣＰＵ２（１０ｃ）へ移動した。
【０１４６】
図１０Ａにおいて、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）をＣＰＵ共有モードからＣＰＵ占有モードへ切り替えると、割り込みタイマ４０ａのスケジューリングモード切り替え要求１２３ａをセットする（ステップ６６０）。
【０１４７】
物理ＣＰＵ０（１０ａ）の割り込みコントローラ３０ａは、割り込みタイマ４０ａが現在カウント中のタイマイベントのカウントがゼロになると、タイマ割り込みを発生する。仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）がＣＰＵ占有モードを開始した後に、割り込みタイマ４０ａのカウントアップによるタイマ割り込みを割り込みコントローラ３０ａから受け取る（ステップ６６１）。
【０１４８】
物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａは、割り込み発生後に新たな値が設定されていないため、上記インターバルタイマ機能によってカウントを停止する（ステップ６６２）。
【０１４９】
仮想計算機モニタ１００は、タイマ管理部１２０を起動する。タイマ管理部１２０は、上述した図８Ｂ、図８Ｃのステップ６２２からステップ６３３までの処理を実行する。ただし、タイマ管理部１２０は、物理ＣＰＵ１０ａの割り込みタイマ４０ａの残りカウンタ４１ａの更新処理は実行しない（ステップ６６３）。また、タイマ管理部１２０は、割り込みタイマ４０ａがタイマ共有モードで上述の処理を実行する。
【０１５０】
物理ＣＰＵ１０ａの割り込みタイマ４０ａの残りカウンタ４１ａの更新処理を禁止することで、割り込みタイマ４０ａのカウントを停止した状態を維持する。
【０１５１】
タイマ管理部１２０は、スケジューリングモード切り替え要求１２３ａがセットされているか否かを判定する（ステップ６６４）。スケジューリングモード切り替え要求１２３ａがセットされている場合には図１０Ｂのステップ６６５へ進み、スケジューリングモード切り替え要求１２３ａがセットされていない場合にはステップ６７４へ進む。
【０１５２】
タイマ管理部１２０は、まず、スケジューリングモード切り替え要求１２３ａをクリアする（ステップ６６５）。次に、タイマ管理部１２０は、割り込みタイマ４０ａのタイマスケジューリングモード１２１ａをタイマ占有モードに変更する（ステップ６６６）。
【０１５３】
これによって、他の物理ＣＰＵ１０ｂ〜１０ｄから物理ＣＰＵ０（１０ａ）へのタイマイベントの移動を禁止する。
【０１５４】
次に、タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）を占有する仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａが、タイマキュー１２２ａに挿入されているか否かを判定する（ステップ６６７）。タイマイベント２４０ａが、タイマキュー１２２ａに挿入されている場合は、タイマ管理部１２０は、タイマイベント２４０ａを取り出しておく（ステップ６６８）。
【０１５５】
次に、タイマ管理部１２０は、タイマキュー１２２ａに挿入されている全てのタイマイベントをＣＰＵ共有モードの物理ＣＰＵ１０ｂ〜１０ｄに移動させる（ステップ６６９）。図４Ａでは、物理ＣＰＵ０のタイマキュー１２２ａに入っている仮想計算機２の仮想ＣＰＵ０のタイマイベント２４０ｃと、ホストプロセス１のタイマイベント１６０ａを、図４Ｂで示すようにタイマ共有モードの物理ＣＰＵ２のタイマキュー１２２ｃに移動させる。
【０１５６】
次に、タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）の時計チックタイマのタイマイベント１３０ａのステータス１３４ａを無効にして、当該タイマイベント１３０ａ停止させる（ステップ６７０）。
【０１５７】
タイマ管理部１２０は、次に、ステップ６６８でタイマキュー１２２ａから取り出した、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａのステータス２４３ａを参照して有効であるか否かを判定する（ステップ６７１）。ステータス２４３ａが有効であればステップ６７１へ進み、無効であれば処理を終了する。
【０１５８】
タイマ管理部１２０は、タイマイベント２４０ａのステータス２４３ａを無効にする（ステップ６７２）。
【０１５９】
次に、タイマ管理部１２０は、システム時刻８０のシステム時刻カウンタ８１から現在時刻を取得し、次の式Ｄによって、タイマイベント２４０ａの期限２４２ａを残りカウントに変換する。
【０１６０】
残りカウント
＝（期限（２４２ａ）  −  現在時刻）×  タイマ周波数（４２ａ）
／  システム時刻周波数（８２）
（式Ｄ）
【０１６１】
そして、タイマ管理部１２０は、上記算出した残りカウントを割り込みタイマ４０ａの残りカウンタ４１ａに設定し（ステップ６７３）、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａによる占有を開始する。
【０１６２】
一方、上記ステップ６６４の判定で、スケジューリングモード切り替え要求１２３ａがセットされていない場合、タイマ管理部１２０は、上述の図８Ｂ、図８Ｃのステップ６３４とステップ６３５の処理を実行して終了する（ステップ６７４）。具体的には、タイマ管理部１２０が、物理ＣＰＵ１０ａの割り込みタイマ４０ａの残りカウンタ４１ａを更新して、処理を終了する。
【０１６３】
以上の処理によってＣＰＵ共有モードの物理ＣＰＵ０（１０ａ）をＣＰＵ占有モードへ移行させるのに伴って、割り込みタイマ４０ａのスケジューリングモードをタイマ共有モードからタイマ占有モードへ動的に切り替えることが可能となる。
【０１６４】
ここで、割り込みタイマ４０ａはタイマのカウントアップ後、新たな値が設定されなければカウントを停止するインターバル機能を備える。本実施例では、割り込みタイマ４０ａがカウントアップして、割り込みコントローラ３０ａがタイマ割り込みを発生した後に、割り込みタイマ４０ａを停止した状態でタイマ共有モードからタイマ占有モードへ移行する。これにより、既にカウントが開始されているタイマイベントを確実に完了させた後に、割り込みタイマ４０ａの占有モードを動的に変更することが可能となる。
【０１６５】
なお、割り込みタイマ４０ａの占有モードでは、共有モードのときに設定された仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａは、上述のステップ６７２にて無効化されているので、割り込みタイマ４０ａはカウントを停止した状態を維持する。
【０１６６】
次に、物理ＣＰＵ１０のＣＰＵ占有モードからＣＰＵ共有モードへの切り替えに伴い、当該物理ＣＰＵ１０の割り込みタイマ４０をタイマ占有モードからタイマ共有モードに切り替える処理を具体的に説明する。この処理は、図４Ｂから図４Ａへの切り替えにおいて、物理ＣＰＵ０（１０ａ）を例に取り上げ、図１０Ｃのフローチャート基づいて説明する。図１０Ｃは、物理ＣＰＵ１０の割り込みタイマ４０のタイマスケジューリングモード１２１の動的変更処理のフローチャートである。
【０１６７】
物理ＣＰＵ０（１０ａ）をＣＰＵ占有モードからＣＰＵ共有モードに変更すると、仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）による物理ＣＰＵ０（１０ａ）の占有が終了する。以降は任意の仮想ＣＰＵ２１０とホストプロセス１５０が物理ＣＰＵ０（１０ａ）上で稼働可能になる。
【０１６８】
上記では、その後に負荷分散によって、仮想計算機２（２００ｂ）の仮想ＣＰＵ０（２１０ａ）とホストプロセス１（１５０ａ）が、物理ＣＰＵ０（１０ａ）に戻った例を示す。
【０１６９】
図１０Ｃにおいて、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）がＣＰＵ占有モードからＣＰＵ共有モードに切り替えると、割り込みタイマ４０ａのスケジューリングモード切り替え要求１２３ａをセットする（ステップ６８０）。
【０１７０】
物理ＣＰＵ０（１０ａ）の割り込みコントローラ３０ａは、割り込みタイマ４０ａが現在カウント中のタイマイベント（残りカウンタ４１ａ）のカウントがゼロになると、タイマ割り込みを発生する。仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）がＣＰＵ占有モードを終了した後、割り込みタイマ４０ａのカウントアップによるタイマ割り込みを割り込みコントローラ３０ａから受け取る（ステップ６８１）。
【０１７１】
物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａは、割り込み発生後に新たな値が設定されていないため、上記インターバル機能によってカウントを停止する（ステップ６８２）。
【０１７２】
仮想計算機モニタ１００は、図９Ｂに示したステップ６５３と同様に、タイマ割り込みを直接仮想ＣＰＵ０（２１０ａ）に伝達する（ステップ６８３）。次に、仮想計算機モニタ１００は、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａのスケジューリングモード切り替え要求１２３ａがセットされているかを判定する（ステップ６８４）。スケジューリングモード切り替え要求１２３ａがセットされていればステップ６８５へ進み、セットされていなければ処理を終了する。
【０１７３】
仮想計算機モニタ１００は、タイマ管理部１２０を起動する（ステップ６８５）。タイマ管理部１２０は、スケジューリングモード切り替え要求１２３ａをクリアする（ステップ６８６）。
【０１７４】
次に、タイマ管理部１２０は、物理ＣＰＵ０（１０ａ）の時計チックタイマのタイマイベント１３０ａのステータス１３４ａを有効にして、タイマイベント１３０ａを再開させる（ステップ６８７）。
【０１７５】
そして、タイマ管理部１２０は、タイマイベント１３０ａの期限１３２ａを上述の（式Ａ）によって更新する（ステップ６８８）。この時点で、物理ＣＰＵ０（１０ａ）において有効なタイマイベントは、時計チックタイマのタイマイベント１３０ａのみである。このため、当該期限１３２ａから、システム時刻８０のシステム時刻カウンタ８１を読み取って取得した現在時刻を減算することで、残りカウントを算出する。タイマ管理部１２０は、残りカウントから上述の（式Ｂ）で算出した値を物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの残りカウンタ４１ａに設定する（ステップ６８９）。
【０１７６】
ここで、これまで物理ＣＰＵ０（１０ａ）を占有していた仮想計算機１（２００ａ）の仮想ＣＰＵ０（２１０ａ）のタイマイベント２４０ａは、上述のステップ６７１にて無効化されている。
【０１７７】
最後に、タイマ管理部１２０は物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａのタイマスケジューリングモード１２１ａをタイマ共有モードに変更して、物理ＣＰＵ０（１０ａ）の割り込みタイマ４０ａの仮想ＣＰＵ０（２１０ａ）の割り込みタイマ２３０ａによる占有を終了する（ステップ６８９）。
【０１７８】
以上の処理によってＣＰＵ占有モードの物理ＣＰＵ０（１０ａ）をＣＰＵ共有モードへ移行させるのに伴って、割り込みタイマ４０ａのスケジューリングモードをタイマ占有モードからタイマ共有モードへ動的に切り替えることが可能となる。
【０１７９】
上記、タイマ共有モードからタイマ占有モードへの動的切換と同様に、割り込みタイマ４０ａのインターバル機能を利用して、タイマ占有モードからタイマ共有モードへ動的に切り替える。これにより、既にカウントが開始されているタイマイベントを確実に完了させた後に、割り込みタイマ４０ａの占有モードを動的に変更することが可能となる。
【０１８０】
以上説明したように、本実施例によれば、特定の仮想ＣＰＵ２１０による物理ＣＰＵ１０の占有と連動して、物理ＣＰＵ１０の割り込みタイマ４０を仮想ＣＰＵ２１０の割り込みタイマ２３０に占有させることができる。これにより、仮想ＣＰＵの割り込みタイマのエミュレーションのオーバヘッドを最小にすることができ、仮想ＣＰＵ上のプログラムの稼働に関係なく発生していたホスト用タイマによるＴＬＢやキャッシュのデータの追い出しを抑止して物理ＣＰＵの性能を確保することができる。
【０１８１】
また、本実施例では、割り込みタイマ４０ａのインターバル機能によって、割り込みコントローラ３０ａがタイマ割り込みを生成した後でかつ自身の残りカウンタに値が書き込まれる前までは、動作を停止していることを利用し、ＣＰＵスケジューリングモードに連動してタイマスケジューリングモードのタイマ占有モードとタイマ共有モードを動的に切り替える。
【０１８２】
なお、ＣＰＵスケジューリングモードに連動したタイマスケジューリングモードの切り替えは、ＣＰＵ共有モードに連動してタイマ共有モードが設定され、ＣＰＵ占有モードに連動してタイマ占有モードが設定される。
【０１８３】
タイマ共有モードからタイマ占有モードへの切換では、当該割り込みタイマ４０ａを用いていた時計チックタイマを停止させ、物理ＣＰＵの割り込みタイマを用いていたホストプロセス１のタイマイベント１６０ａやタイムアウト検出用のタイマ等のタイマイベントを、ＣＰＵ共有モードの他の物理ＣＰＵに移動させる。最後に前記の仮想ＣＰＵ２１０の割り込みタイマ２３０の残りカウンタ２３１ａの現在値を物理ＣＰＵ１０ａの割り込みタイマ４０ａの残りカウンタ４１ａに書き込むことで、仮想ＣＰＵ２１０の割り込みタイマ２３０ａによる物理ＣＰＵ１０ａの割り込みタイマ４０ａの占有を開始させる。
【０１８４】
仮想ＣＰＵ２１０ａの割り込みタイマ２３０ａが、物理ＣＰＵ１０ａの割り込みタイマ４０ａを占有している間は、仮想ＣＰＵ２１０上のプログラムが割り込みタイマ２３０ａの残りカウンタ２３１ａに値を書き込む。当該書き込み要求は仮想計算機モニタ１００にトラップされる。仮想計算機モニタ１００は、書き込み値を直接物理ＣＰＵ１０ａの割り込みタイマ４０ａの残りカウンタ４１ａに書き込む。物理ＣＰＵ１０ａの割り込みタイマ４０ａは、残りカウンタ４１ａへの書き込みによって減算を開始し、ゼロになると割り込みコントローラ３０ａはタイマ割り込みを生成する。
【０１８５】
また、タイマ占有モードでは、時計チックタイマのタイマイベント１３０と仮想ＣＰＵ２１０ａのタイマイベント２４０ａを無効にするため、タイマ割り込みの発生を抑制して、ＴＬＢやキャッシュの追い出しを防いで物理ＣＰＵ１０の性能を確保することができる。
【０１８６】
また、タイマ占有モードでは、少なくともひとつの物理ＣＰＵ１０をタイマ共有モードに設定する。これにより、ホストプロセス１５０のタイマイベント１６０や時計チックタイマのタイマイベント１３０ａを確実に実行して、タイムアウト検出用のタイマや時計チックタイマ等を継続して稼働させることが可能となる。
【０１８７】
一方、物理ＣＰＵ１０ａをＣＰＵ占有モードからＣＰＵ共有モードへ動的に切り替える際も、物理ＣＰＵ１０ａの割り込みタイマ４０ａのカウントアップによって割り込みコントローラ３０ａがタイマ割り込みを生成した後に、インターバル機能によってカウントを停止することを利用する。
【０１８８】
仮想計算機モニタ１００は、物理ＣＰＵ１０ａの割り込みコントローラ３０ａからタイマ割り込みを受け取ると、タイマ割り込みを直接仮想ＣＰＵ２１０に伝達する。仮想計算機モニタ１００は、仮想ＣＰＵ２１０の割り込みタイマ２３０ａを、残りカウンタ２３１ａをゼロにして停止させる。仮想計算機モニタ１００は、物理ＣＰＵ１０ａの割り込みタイマ４０ａを用いていた時計チックタイマのタイマイベント１３０ａを再開させ、物理ＣＰＵ１０ａでホストプロセス１の起動やタイムアウト検出用のタイマや、他の仮想ＣＰＵの割り込みタイマ４０を処理するのを許可し、仮想ＣＰＵ２１０の割り込みタイマ２３０による物理ＣＰＵ１０ａの割り込みタイマ４０ａの占有を終了させる。
【０１８９】
仮想計算機システムで少なくとも１つの物理ＣＰＵ１０の割り込みタイマ４０は、特定の仮想ＣＰＵ２１０の割り込みタイマ２３０に占有させないようにすることで、物理ＣＰＵ１０の割り込みタイマ４０を用いて、ホストプロセスの起動やタイムアウト検出のタイマを継続して稼動させることができる。
【０１９０】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０１９１】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１９２】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【図１】
2016084237.tif 000003
【図２】
2016084237.tif 000004
【図３Ａ】
2016084237.tif 000005
【図３Ｂ】
2016084237.tif 000006
【図４Ａ】
2016084237.tif 000007
【図４Ｂ】
2016084237.tif 000008
【図５】
2016084237.tif 000009
【図６】
2016084237.tif 000010
【図７】
2016084237.tif 000011
【図８Ａ】
2016084237.tif 000012
【図８Ｂ】
2016084237.tif 000013
【図８Ｃ】
2016084237.tif 000014
【図９Ａ】
2016084237.tif 000015
【図９Ｂ】
2016084237.tif 000016
【図１０Ａ】
2016084237.tif 000017
【図１０Ｂ】
2016084237.tif 000018
【図１０Ｃ】
2016084237.tif 000019
【国際調査報告】
2016084237.tif 000020
2016084237.tif 000021