(57)【要約】  【課題】  仮想計算機システムの仮想計算機モニタ（ＶＭＭ）の外部割込み制御において、仮想計算機上のゲストオペレーティングシステム（ＯＳ）への外部割込みの伝達を速くし、ゲストＯＳのプロセッサ間割り込み送信の遅れをなくす。  【解決手段】  外部割込みの割込みベクタを、仮想計算機上のゲストＯＳの使用する割込みベクタの集合と、ＶＭＭの使用する割込みベクタに分離する。ＶＭＭは、この割込みベクタの区分に従ってゲストＯＳへ伝達する外部割込みか、ＶＭＭ内で処理する外部割込みかを判定し、割込みベクタの変換を行わない。また、ゲストＯＳのプロセッサ間割り込みを送信する際に、ＶＭＭは介入せず、ゲストＯＳにプロセッサ間割込みを送信するための特定のメモリ領域を直接アクセスさせる。【選択図】  図１
2006209386.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、メモリと、I／Ｏデバイスとを有する物理計算機と、前記メモリに格納され前記プロセッサによって実行される仮想計算機モニタと仮想計算機のゲストオペレーティングシステムとを有し、前記仮想計算機モニタは、前記プロセッサに発生する外部割込みが前記ゲストオペレーティングシステムに伝達すべき外部割込みか前記仮想計算機モニタ用の外部割込みかを判定する仮想計算機システムにおいて、前記仮想計算機モニタによって実行される方法であって、
発生した前記外部割込みについて設定された割込みベクタを取得し、
前記割込みベクタが前記ゲストオペレーティングシステムが使用する割込みベクタの集合に属すれば前記ゲストオペレーティングシステムに伝達し、
取得した前記割込みベクタが前記割込みベクタの集合に属さない割込みベクタであり、かつ前記仮想計算機モニタ用の割込みベクタであれば、前記仮想計算機モニタ内部の処理のための制御プログラムを呼び出すことを特徴とする仮想計算機システムの外部割込み制御方法。
【請求項２】
複数のプロセッサと、メモリと、I／Ｏデバイスとを有する物理計算機と、前記メモリに格納され前記プロセッサによって実行される仮想計算機モニタと仮想計算機のゲストオペレーティングシステムとを有し、前記仮想計算機モニタは、前記プロセッサに発生する外部割込みが前記ゲストオペレーティングシステムに伝達すべき外部割込みか前記仮想計算機モニタ用の外部割込みかを判定する仮想計算機システムにおいて、前記仮想計算機モニタによって実行される方法であって、
発生した前記外部割込みについて設定された割込みベクタを取得し、
前記割込みベクタが前記プロセッサに発生する外部割込みとは独立に前記ゲストオペレーティングシステムが内部的に発生させる仮想外部割込みについて設定された割込みベクタと一致すれば、前記仮想計算機モニタ内部の処理のための制御プログラムを呼び出し、
取得した前記割込みベクタが前記仮想外部割込みについて設定された割込みベクタ以外の前記ゲストオペレーティングシステムが使用する割込みベクタの集合に属すれば前記ゲストオペレーティングシステムに伝達することを特徴とする仮想計算機システムの外部割込み制御方法。
【請求項３】
前記ゲストオペレーティングシステムがプロセッサ間割込みを他プロセッサに送信するときには、前記仮想計算機モニタが介入せずに、前記ゲストオペレーティングシステムがプロセッサ間割込み用メモリ領域に直接前記割込みベクタを含むコマンドを書き込むようにさせることを特徴とする請求項１又は２記載の仮想計算機システムの外部割込み制御方法。
【請求項４】
複数のプロセッサと、メモリと、I／Ｏデバイスとを有する物理計算機と、前記メモリに格納され前記プロセッサによって実行される仮想計算機モニタと仮想計算機のゲストオペレーティングシステムとを有し、前記仮想計算機モニタは、前記プロセッサに発生する外部割込みが前記ゲストオペレーティングシステムに伝達すべき外部割込みか前記仮想計算機モニタ用の外部割込みかを判定する仮想計算機システムにおいて、前記仮想計算機モニタは、
発生した前記外部割込みについて設定された割込みベクタを取得する手段と、
前記割込みベクタが前記ゲストオペレーティングシステムが使用する割込みベクタの集合に属すれば前記ゲストオペレーティングシステムに伝達する手段と、
取得した前記割込みベクタが前記割込みベクタの集合に属さない割込みベクタであり、かつ前記仮想計算機モニタ用の割込みベクタであれば、前記仮想計算機モニタ内部の処理のための制御プログラムを呼び出す手段とを有することを特徴とする仮想計算機システム。
【請求項５】
複数のプロセッサと、メモリと、I／Ｏデバイスとを有する物理計算機と、前記メモリに格納され前記プロセッサによって実行される仮想計算機モニタと仮想計算機のゲストオペレーティングシステムとを有し、前記仮想計算機モニタは、前記プロセッサに発生する外部割込みが前記ゲストオペレーティングシステムに伝達すべき外部割込みか前記仮想計算機モニタ用の外部割込みかを判定する仮想計算機システムにおいて、前記仮想計算機モニタは、
発生した前記外部割込みについて設定された割込みベクタを取得する手段と、
前記割込みベクタが前記プロセッサに発生する外部割込みとは独立に前記ゲストオペレーティングシステムが内部的に発生させる仮想外部割込みについて設定された割込みベクタと一致すれば、前記仮想計算機モニタ内部の処理のための制御プログラムを呼び出す手段と、
取得した前記割込みベクタが前記仮想外部割込みについて設定された割込みベクタ以外の前記ゲストオペレーティングシステムが使用する割込みベクタの集合に属すれば前記ゲストオペレーティングシステムに伝達する手段とを有することを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに係わり、特に仮想計算機および仮想計算機モニタ向けの外部割込みの制御方法に関する。
【背景技術】
【０００２】
複数プロセッサ構成の物理計算機が標準で使われるようになり、また、技術の発展によりプロセッサの高多重化も進んできている。今後、複数プロセッサ構成の物理計算機を用いる仮想計算機システムの重要性が増すと予測される。
【０００３】
仮想計算機システムの仮想計算機モニタは、物理計算機にあるプロセッサとＩ／Ｏデバイスを論理的に分割して各仮想計算機に割り当てる。各仮想計算機はこのように分割された論理区画上で動作する。
【０００４】
ある種の物理計算機は、外部割込みが発生したとき、Ｉ／Ｏデバイス、タイマ、プロセッサ間割込みなどの外部割込み生成源に設定された割込みベクタを仮想計算機モニタに伝えることにより、仮想計算機モニタが外部割込みの要因を識別することを可能とする。仮想計算機モニタは、割込みベクタにより仮想計算機向けの外部割込みを仮想計算機に伝達する。
【０００５】
特許文献１は、複数プロセッサ構成の物理計算機を用いる仮想計算機システムについて開示する。
【０００６】
【特許文献１】米国特許第６０７５９３８号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の仮想計算機システムでは、仮想計算機上のゲストオペレーティングシステム（ＯＳ）が外部割込み生成源に割込みベクタを設定するとき、および仮想計算機へ外部割込みを伝達するとき、いずれの場合にも仮想計算機モニタ（ＶＭＭ）は、割込みベクタの変換を行っていた。
【０００８】
このように仮想計算機に外部割込みを伝達するときにＶＭＭが割込みベクタの変換を行うので、発生した外部割込みの仮想計算機への伝達が遅れるという問題があった。特にゲストＯＳがあるプロセッサから他のプロセッサへプロセッサ間割込みを送信する際には、ＶＭＭは、例外を発生させて介入し、割込みベクタの変換を行うのでプロセッサ間割込みの送信が遅れるとともに、プロセッサ間割込みの発生に伴ってさらに割込みベクタの変換を行うのでプロセッサ間割込みの他ゲストＯＳへの伝達が遅れるという問題があった。仮想計算機に割り当てられるプロセッサの数が増えるほど、ゲストＯＳの送信するプロセッサ間割込みの数も増えるため、外部割込みの送信と伝達の遅れの影響も大きくなる。またＶＭＭの外部割込み制御のコードのうち、割込みベクタの変換に関するコード量が多いという問題があった。
【０００９】
本発明の目的は、仮想計算機への外部割込みの送信と伝達の遅れをなくするか小さくするとともに、ＶＭＭの外部割込み制御のコード量を減らすことにある。
【課題を解決するための手段】
【００１０】
本発明においては、外部割込みの割込みベクタを、仮想計算機上のゲストオペレーティングシステム（ＯＳ）が使用する割込みベクタの集合と、仮想計算機モニタ（ＶＭＭ）が使用する割込みベクタとに分離する。
【００１１】
外部割込みが発生しＶＭＭに制御が移ると、ＶＭＭはその外部割込みの割込みベクタを調べ、割込みベクタがゲストＯＳ用割込みベクタ集合に含まれると判定したときは、仮想計算機にその外部割込みの割込みベクタを変換せずに伝達し、ＶＭＭ用の割込みベクタと等しいと判定したときは、ＶＭＭ内部で処理し仮想計算機には伝達しない。
【００１２】
特に、ゲストＯＳがプロセッサ間割込みを他プロセッサに送信するときには、ＶＭＭは介在せず、ゲストＯＳがプロセッサ間割込みを送信するためのコマンドを書き込む特定のメモリ領域を直接アクセスするようにさせる。
【発明の効果】
【００１３】
本発明によれば、仮想計算機モニタ（ＶＭＭ）の外部割込み制御において、割込みベクタの変換を行わないことにより、ゲストＯＳへの外部割込みの伝達の遅れを小さくすることと、ゲストＯＳのプロセッサ間割込み送信の遅れがなくなることと、ＶＭＭの外部割込み制御のコード量が減ることという効果がある。
【発明を実施するための最良の形態】
【００１４】
以下、本発明を適用する一実施形態について図面を用いて説明する。
【００１５】
図１は、本発明を適用した仮想計算機システムの一実施形態を示す構成図である。物理計算機１００は、プロセッサ１１０−０，１１０−１，１１０−２，１１０−３、Ｉ／Ｏデバイス１５０−１，１５０−２，１５０−３，１５０−４、およびファームウェア１６０を有する。プロセッサ１１０−０，１１０−１，１１０−２，１１０−３は、それぞれプロセッサ間割込み機構１１１−０，１１１−１，１１１−２，１１１−３と、タイマ１１２−０，１１２−１，１１２−２，１１２−３を有する。
【００１６】
仮想計算機モニタ（ＶＭＭ）２００は、プロセッサ１１０及びＩ／Ｏデバイス１５０を論理的に分割して、仮想計算機３００−１，３００−２を構築する。プロセッサ１１０−０，１１０−１と、Ｉ／Ｏデバイス１５０−１，１５０−２は、仮想計算機３００−１に割り当てられる物理資源２３０−１である。プロセッサ１１０−２，１１０−３と、Ｉ／Ｏデバイス１５０−３，１５０−４は、仮想計算機３００−２に割り当てられる物理資源２３０−２である。
【００１７】
仮想計算機３００−１と３００−２は、それぞれ割り当てられたプロセッサ１１０と同じ数の仮想プロセッサ３１０を有する。以下、プロセッサ１１０−０，１１０−１，１１０−２，１１０−３のいずれかを指すときには、プロセッサ１１０と表記する。他の構成要素についても同様である。
【００１８】
仮想計算機３００−１の仮想プロセッサ３１０−０，３１０−１はそれぞれプロセッサ１１０−０，１１０−１に対応し、仮想計算機３００−２の仮想プロセッサ３１０−２，３１０−３はそれぞれプロセッサ１１０−２，１１０−３に対応する。各仮想プロセッサ３１０は、仮想計算機３００から見える各プロセッサ１１０に対応する論理プロセッサである。
【００１９】
仮想計算機３００−１の仮想プロセッサ３１０−０，３１０−１は、それぞれ仮想タイマ３１１−０，３１１−１を有し、仮想計算機３００−２の仮想プロセッサ３１０−２，３１０−３はそれぞれ仮想タイマ３１１−２，３１１−３を有する。各仮想タイマ３１１は、対応するタイマ１１２をタイマ源とする論理的タイマである。
【００２０】
仮想計算機３００−１の上でゲストオペレーティングシステム（ＯＳ）３３０−１が動作し、仮想計算機３００−２の上でゲストＯＳ３３０−２が動作する。
【００２１】
本実施形態のＶＭＭ２００は、本発明に関連するものとして、外部割込みが発生すると起動し、発生した外部割込みの割込みベクタを調べ、その割込みベクタに対応する処理を行う外部割込みハンドラ２１０と、複数のプロセッサ１１０間でプロセッサ間割込みを使ってメッセージ交換を行う制御プログラムとしてプロセッサ間通信部２２０を有する。
【００２２】
ゲストＯＳ３３０は、物理計算機１００の割り当てられた図示しないメモリ領域に格納され、割り当てられた仮想プロセッサ３１０によって実行される。ＶＭＭ２００は、物理計算機１００のメモリに格納され、プロセッサ１１０によって実行される。
【００２３】
図２は、外部割込みの種別を示す割込みベクタの概念図である。外部割込み生成源５００に対して割込みベクタが設定される。割込みベクタは割込みの種別を示す番号を格納する。外部割込み生成源５００に割込みベクタが設定され外部割込みの宛先とするプロセッサ１１０が指定されると、外部割込み生成源５００は、指定されたプロセッサ１１０に対して設定された割込みベクタの外部割込みを生成する。
【００２４】
プロセッサ１１０はそれぞれ独立した割込みベクタ集合５０４を有する。割込みベクタ集合５０４は、番号の順に割込みベクタを配列したものである。複数の外部割込み生成源５００の外部割込みの宛先を同一のプロセッサ１１０とするときには、それぞれの外部割込み生成源５００に異なる割込みベクタを設定することによって、そのプロセッサ１１０は、発生した外部割込み生成源５００を特定することができる。
【００２５】
例えば外部割込み生成源５００−１と５００−４は、ともに宛先をプロセッサ１１０−０とするが、それぞれの外部割込み生成源５００に異なる割込みベクタを設定することにより、プロセッサ１１０−０は、発生した外部割込みが外部割込み生成源５００−１と外部割込み生成源５００−４のどちらであるかを判定することができる。外部割込み生成源５００−２と５００−３についても同様である。外部割込み生成源５００−１と５００−２は、宛先のプロセッサ１１０が異なるので、両者に同一番号の割込みベクタを設定しても構わない。
【００２６】
図２は、プロセッサ１１０−０と１１０−１について例示するが、プロセッサ１１０−２とプロセッサ１１０−３についても同様である。
【００２７】
図３、図４、及び図５をもとに、ゲストＯＳ３３０が使用する割込みベクタと、ＶＭＭ ２００が使用する割込みベクタを分離する２つの方法について説明する。各プロセッサについて割込みベクタを分離する方法は同じであるため、本実施形態は、プロセッサ１１０−１について説明する。
【００２８】
まず図３をもとに、ファームウェア１６０用の割込みベクタを使用して、ゲストＯＳ３３０の使用する割込みベクタとＶＭＭ２００の使用する割込みベクタを分離する第１の方法について説明する。ファームウェア１６０は、ゲストＯＳ３３０が立ち上がるまでの間にプロセッサ１１０をイニシャライズする物理計算機１００の機構である。
【００２９】
外部割込み生成源５００からプロセッサ１１０−１に伝達される外部割込みの割込みベクタの集合５０４−１は、ファームウェア用割込みベクタの集合６００とゲストＯＳ用割込みベクタの集合６０１に分離される。
【００３０】
ＶＭＭ２００は、その起動時にファームウェア用割込みベクタ集合６００の中でファームウェア１６０が使用しない割込みベクタを確保し、ＶＭＭ用割込みベクタ６０２とする。
【００３１】
ＶＭＭ２００は、ＶＭＭ自身の制御のために他プロセッサ１１０からプロセッサ１１０−１にプロセッサ間割込みを送信するときは、ＶＭＭ用割込みベクタ６０２のみを使用する。ＶＭＭ用割込みベクタ６０２は、ＶＭＭ ２００とファームウェア１６０の間で共用せず、ＶＭＭ ２００が占有的に使用する。
【００３２】
ＶＭＭ２００は、ゲストＯＳ用割込みベクタを使用しないので、プロセッサ１１０−１で発生した外部割込みの割込みベクタが、ゲストＯＳの使用する割込みベクタの集合６０１−１に含まれるか否かを調べることにより、発生した外部割込みを仮想計算機３００−１の仮想プロセッサ３１０−１に伝達するか、ＶＭＭ ２００あるいはファームウェア１６０が外部割込みとして処理し、仮想計算機３００−１の仮想プロセッサ３１０−１に伝達しないかを直ちに判定することができる。
【００３３】
次に、図４と図５をもとに、仮想外部割込み生成源についてゲストＯＳ３３０が設定する割込みベクタを利用して、ゲストＯＳ３３０の使用する割込みベクタとＶＭＭ２００の使用する割込みベクタを分離する第２の方法について説明する。仮想計算機３００は、プロセッサ１１０が有する物理的な外部割込み生成源に１対１に対応する仮想外部割込み生成源を仮想プロセッサ３１０ごとに有する。
【００３４】
本実施例では、仮想外部割込み生成源が仮想タイマ３１１であるとし、物理的な外部割込み生成源がタイマ１１２であるとする。ただし、本発明はこれに限定されるものではない。また仮想外部割込みをどのように実現するかについては、本発明の主目的ではないため、その詳細を説明しない。
【００３５】
図４は、仮想プロセッサ３１０の仮想タイマ３１１に対してゲストＯＳ３３０が設定する割込みベクタを、物理的なタイマ１１２の外部割込みと、ＶＭＭ ２００自身がプロセッサ間通信を行う際のプロセッサ間割込みとによって共有する方法を示す概念図である。
【００３６】
ＶＭＭ２００は、仮想計算機３００−１上でゲストＯＳ３３０−１が起動するまでは、プロセッサ間通信を行う際に発生させるプロセッサ間割込みの割込みベクタとして、任意の割込みベクタを使用する。
【００３７】
仮想計算機３００−１上でゲストＯＳ３３０−１が起動すると、ゲストＯＳ３３０−１は、仮想プロセッサ３１０−１の仮想タイマ３１１−１に割込みベクタ７００を設定する。仮想タイマ３１１はソフトウェア的なタイマであるので、その仮想外部割込みは、物理的なタイマ１１２の外部割込みとは関係なく発生し得る。
【００３８】
ＶＭＭ２００は、割込みベクタ７００を内部的にＶＭＭ用割込みベクタ７０１として保持するとともに、プロセッサ１１０−１のタイマ１１２−１にこの割込みベクタ７００を設定する。ここで割込みベクタ７００とＶＭＭ用割込みベクタ７０１は、同一番号の割込みベクタである。
【００３９】
ＶＭＭ２００は、仮想計算機３００−１にプロセッサ１１０−１のタイマ１１２−１を使用させず、仮想プロセッサ３１０−１の仮想タイマ３１１−１を使用させることにより、割込みベクタ７００を利用する。すなわちＶＭＭ２００は、ＶＭＭ用割込みベクタ７０１を、プロセッサ１１０−１のタイマ１１２−１の外部割込みと、ＶＭＭ２００のプロセッサ間通信部２２０がＶＭＭ自身のプロセッサ間通信のために他プロセッサ１１０からプロセッサ１１０−１へ送信するプロセッサ間割込みとの間で共有する。ＶＭＭ２００は、同一のＶＭＭ用割込みベクタ７０１を用いても両割込みを区別することができる。
【００４０】
図５は、ゲストＯＳ３３０が仮想タイマ３１１に設定する割込みベクタ７００を利用して、ゲストＯＳ３３０の使用する割込みベクタ７００とＶＭＭ２００の使用するＶＭＭ用割込みベクタ７０１を分離する方法を示す概念図である。ＶＭＭ用割込みベクタ７０１の外部割込みは、物理的なタイマ１１２からの外部割込みか、あるいはＶＭＭ２００自身のプロセッサ間通信用のプロセッサ間割込みであり、仮想計算機３００−１には伝達しない。従ってゲストＯＳ用割込みベクタ集合６０１−１に含まれる外部割込みの割込みベクタを、ＶＭＭ用割込みベクタ７０１と等しいか否か調べることにより、発生した外部割込みを仮想計算機３００−１の仮想プロセッサ３１０−１に伝達するか、ＶＭＭ ２００の外部割込みとしてＶＭＭが処理し、仮想計算機３００−１の仮想プロセッサ３１０−１の外部割込みとしてゲストＯＳ３３０−１に伝達しないかを直ちに判定することができる。
【００４１】
図６と図７は、それぞれ、第１の方法および第２の方法を実現するために、ＶＭＭ２００の外部割込みハンドラ２１０が外部割込みの伝達先を判定する処理の流れを示すフローチャートである。すなわち図６は、ファームウェア１６０用の割込みベクタを利用してゲストＯＳ３３０の割込みベクタと、ＶＭＭ２００の割込みベクタを分離する場合の処理手順を示す。図７は、ゲストＯＳ３３０の割込みベクタの中で、仮想外部割込み生成源（本実施例では仮想タイマ）にゲストＯＳ３３０が設定する割込みベクタを利用して、ゲストＯＳ３３０の割込みベクタとＶＭＭ２００の割込みベクタを分離する場合の処理手順を示す。ただし、ここで図６と図７は処理手順の一例であり、より効率のよい処理手順もあり得る。
【００４２】
図６は、第１の方法を採用する場合の、ＶＭＭ２００の外部割込みハンドラ２１０が外部割込みの伝達先を判定する処理の流れを示すフローチャートである。プロセッサ１１０の１つで外部割込みが発生すると、ＶＭＭ２００の外部割込みハンドラ２１０が実行を開始する（ステップ８０１）。外部割込みハンドラ２１０は、発生した外部割込みの割込みベクタを取得する（ステップ８０２）。
【００４３】
以下のステップ（８０３〜８０７）は、取得した割込みベクタの伝達先を決め、決めた伝達先にその割込みベクタを伝達する処理の流れを示す。従来の方法は、割込みベクタの伝達先を決めるだけでなく割込みベクタの変換を行う必要があったが、本発明によれば、割込みベクタの伝達先を決めるだけでよい。
【００４４】
外部割込みハンドラ２１０は、取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれるかどうかを判定する（ステップ８０３）。取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれる場合には、外部割込みハンドラ２１０は、この割込みベクタを変換せずに、直ちに該当する仮想計算機３００の仮想プロセッサ３１０に伝達する（ステップ８０４）。
【００４５】
取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれない場合には、外部割込みハンドラ２１０は、この割込みベクタがＶＭＭ用割込みベクタ６０２と等しいかどうか判定する（ステップ８０５）。取得した割込みベクタがＶＭＭ用割込みベクタ６０２と等しい場合には、外部割込みハンドラ２１０は、ＶＭＭ２００が自身のプロセッサ間通信を行うために発生させたプロセッサ間割込みと判定し、ＶＭＭ２００のプロセッサ間通信部２２０を呼び出す（ステップ８０６）。取得した割込みベクタがＶＭＭ用割込みベクタ６０２と異なる場合には、外部割込みハンドラ２１０は、ファームウェア１６０に伝達すべき外部割込みと判定し、この割込みベクタをファームウェア１６０に伝達する（ステップ８０７）。
【００４６】
図７は、第２の方法を採用する場合の、ＶＭＭ２００の外部割込みハンドラ２１０が外部割込みの伝達先を判定する処理の流れを示すフローチャートである。仮想外部割込み生成源が仮想的な外部割込みを生成する方法は本発明の主題ではないため、説明を省略する。
【００４７】
プロセッサ１１０の１つで外部割込みが発生すると、ＶＭＭ２００の外部割込みハンドラ２１０が実行を開始する（ステップ９０１）。外部割込みハンドラ２１０は、発生した外部割込みの割込みベクタを取得する（ステップ９０２）。
【００４８】
以下のステップ（ステップ９０３〜９０７）は、取得した割込みベクタの伝達先を決め、決めた伝達先に該割込みベクタを伝達する処理の流れを示す。従来の方法は、割込みベクタの伝達先を決めるだけでなく割込みベクタの変換を行う必要があったが、本発明によれば、割込みベクタの伝達先を決めるだけでよい。
【００４９】
外部割込みハンドラ２１０は、取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれるか否かを判定する（ステップ９０３）。取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれない場合には、外部割込みハンドラ２１０は、ファームウェア１６０に伝達すべき外部割込みと判定し、この割込みベクタをファームウェア１６０に伝達する（ステップ９０４）。
【００５０】
取得した割込みベクタがゲストＯＳ用割込みベクタ集合６０１に含まれる場合には、外部割込みハンドラ２１０は、この割込みベクタがＶＭＭ用割込みベクタ７０１と等しいかどうか判定する（ステップ９０５）。取得した割込みベクタがＶＭＭ用割込みベクタ７０１と等しい場合には、外部割込みハンドラ２１０は、ＶＭＭ２００が自身のプロセッサ間通信を行うために発生させたプロセッサ間割込み、あるいはプロセッサ１１０の物理的なタイマ１１２の外部割込みと判定し、ＶＭＭ２００のプロセッサ間通信２２０と、この割込みベクタを設定した物理的なタイマ１１２の外部割込みサービスルーチンを呼び出す（ステップ９０６）。取得した割込みベクタがＶＭＭ用割込みベクタ７０１と異なる場合には、外部割込みハンドラ２１０は、この割込みベクタを変換せず、仮想計算機３００の仮想プロセッサ３１０に伝達する（ステップ９０７）。
【００５１】
図８は、ＶＭＭ２００自身がプロセッサ間通信の際に送信するプロセッサ間割込み、ゲストＯＳ３３０が送信するプロセッサ間割込み、およびＩ／Ｏデバイス１５０から仮想プロセッサ３１０への外部割込みに関する全体の処理の流れを示す図である。以下第１の方法のファームウェア１６０の割込みベクタを利用してゲストＯＳ３３０とＶＭＭ２００の割込みベクタを分離する場合について説明する。第２の方法のＯＳの割込みベクタの中で仮想外部割込み生成源にゲストＯＳ３３０が設定する割込みベクタを利用してゲストＯＳ３３０とＶＭＭの割込みベクタを分離する場合も全く同様の処理の流れとなる。なお図８で示す処理の流れは一例であり、本発明を限定するものではない。
【００５２】
まずＶＭＭ２００自身がプロセッサ間通信を行う際に送信するプロセッサ間割込みについて説明する。ＶＭＭ２００のプロセッサ間通信部２２０が、プロセッサ１１０−０からプロセッサ１１０−１へのメッセージ送信を目的として、プロセッサ１１０−０からプロセッサ１１０−１へプロセッサ間割込みを送信する場合を説明する。プロセッサ１１０−１上でこのプロセッサ間割込み以外の外部割込みは発生しないものと仮定する。
【００５３】
ＶＭＭ２００のプロセッサ間通信部２２０は、プロセッサ１１０−０上のプロセッサ間割込みを送信するための特定のメモリ領域（プロセッサ間割込み用メモリ領域）に、プロセッサ１１０−１にＶＭＭ用の割込みベクタ６０２の外部割込みを発生させるためのコマンドを書き込む（１００１）。プロセッサ１１０−０のプロセッサ間割込み機構１１１−０は、コマンドを受け取ると、書き込まれた割込みベクタの外部割込みをプロセッサ１１０−０へ送信する（１００５）。
【００５４】
プロセッサ１１０−１で外部割込みが発生すると、ＶＭＭ２００の外部割込みハンドラ２１０に制御が移る（１００４）。外部割込みハンドラ２１０は、発生した外部割込みの割込みベクタがＶＭＭ用割込みベクタ６０２と等しいと判定し、ＶＭＭ２００のプロセッサ間通信部２２０を呼び出す（１００２）。プロセッサ間通信部２２０は呼び出されると、要求された処理を行う。
【００５５】
次に図８を参照してゲストＯＳ３３０が送信するプロセッサ間割込みについて説明する。仮想計算機３００−１上のゲストＯＳ３３０−１が仮想プロセッサ３１０−０から仮想プロセッサ３１０−１へプロセッサ間割込みを送信する場合について説明する。
【００５６】
ＶＭＭ２００は、仮想計算機３００−１を構築するときに、仮想プロセッサ３１０−０のプロセッサ間割込み用メモリ領域へのコマンドの書き込みは、ＶＭＭ２００を介入させず、プロセッサ１１０−０のプロセッサ間割込み用メモリ領域に対して直接行われるように設定している。プロセッサ１１０−１上でこのプロセッサ間割込み以外の外部割込みは発生しないものと仮定する。
【００５７】
ゲストＯＳ３３０−１は、仮想プロセッサ３１０−０から仮想プロセッサ３１０−１へプロセッサ間割込みを送信するために、仮想プロセッサ３１０−０のプロセッサ間割込み領域に割込みベクタを含むコマンドを書き込む。この書き込みはプロセッサ１１０−０のプロセッサ間割込み用メモリ領域に対して直接行われる（１０００）。プロセッサ１１０−０のプロセッサ間割込み機構１１１−０は、このコマンドを受け取ると、ゲストＯＳ３３０−１が指定した割込みベクタの外部割込みをプロセッサ１１０−１へ送信する（１００５）。
【００５８】
プロセッサ１１０−１で外部割込みが発生すると、ＶＭＭ ２００の外部割込みハンドラ２１０に制御が移る（１００４）。外部割込みハンドラ２１０は、発生した外部割込みを仮想計算機３００−１の仮想プロセッサ３１０−１に伝達する外部割込みと判定し、割込みベクタを変換せずに外部割込みを直ちに仮想プロセッサ３１０−１へ伝達する（１００３）。
【００５９】
次にＩ／Ｏデバイス１５０から仮想計算機へ送信される外部割込みについて説明する。仮想計算機３００−１に割り当てられたＩ／Ｏデバイス１５０−２から仮想計算機３００−１の仮想プロセッサ３１０−１に外部割込みが伝達される場合について説明する。
【００６０】
Ｉ／Ｏデバイス１５０の宛先プロセッサは、プロセッサ１１０−１に設定されている。プロセッサ１１０−１上でこの外部割込み以外の外部割込みは発生しないものと仮定する。Ｉ／Ｏデバイス１５０−２からの外部割込みはプロセッサ１１０−１に伝達される（１００６）。
【００６１】
プロセッサ１１０−１で外部割込みが発生すると、ＶＭＭ ２００の外部割込みハンドラ２１０に制御が移る（１００４）。外部割込みハンドラ２１０は、発生した外部割込みを仮想プロセッサ３１０−１に伝達する外部割込みと判定し、割込みベクタを変換せずにこの外部割込みを直ちに仮想計算機３００−１の仮想プロセッサ３１０−１へ伝達する（１００３）。
【００６２】
以上述べたように、本実施形態によれば、仮想計算機モニタ（ＶＭＭ）の外部割込み制御において割込みベクタの変換を行わないことにより、ゲストＯＳ３３０への外部割込みの伝達の遅れを小さくし、ゲストＯＳ３３０のプロセッサ間割込み送信の遅れをなくし、ＶＭＭの外部割込み制御のコード量を減らすことができる。
【図面の簡単な説明】
【００６３】
【図１】実施形態の仮想計算機システムの構成図である。
【図２】外部割込みの種別を示す割込みベクタの概念図である。
【図３】実施形態のゲストＯＳ用割込みベクタとＶＭＭ用割込みベクタを分離する第１の方法を説明する概念図である。
【図４】ゲストＯＳが仮想外部割込み生成源に設定する割込みベクタを、ＶＭＭ用割込みベクタとして使用する第２の方法を説明する概念図である。
【図５】実施形態のゲストＯＳ用割込みベクタとＶＭＭ用割込みベクタを分離する第２の方法を説明する概念図である。
【図６】第１の方法を採用したときのＶＭＭの外部割込みハンドラが外部割込みの伝達先を判定する処理を示すフローチャートである。
【図７】第２の方法を採用したときのＶＭＭの外部割込みハンドラが外部割込みの伝達先を判定する処理を示すフローチャートである。
【図８】実施形態のＶＭＭのプロセッサ間割込み、ゲストＯＳのプロセッサ間割込み、およびＩ／Ｏデバイスから仮想プロセッサへの外部割込みに関する全体の処理の流れを示す図である。
【符号の説明】
【００６４】
１００：物理計算機、１１０：プロセッサ、１５０：Ｉ／Ｏデバイス、１６０：ファームウェア、２００：仮想計算機モニタ、２１０：ＶＭＭ外部割込みハンドラ、２２０：ＶＭＭプロセッサ間通信部、３００：仮想計算機、３１０：仮想プロセッサ、３３０：ゲストオペレーティングシステム
【図１】
2006209386.tif 000003
【図２】
2006209386.tif 000004
【図３】
2006209386.tif 000005
【図４】
2006209386.tif 000006
【図５】
2006209386.tif 000007
【図６】
2006209386.tif 000008
【図７】
2006209386.tif 000009
【図８】
2006209386.tif 000010