(57)【特許請求の範囲】
【請求項１】
割込みの発行元のデバイスとして指定されている指定デバイスにアクセスして指定デバイスからの割込み有無を確認する割込み有無確認関数が各々に含まれる複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する計算機システムであって、
割込み番号が含まれる割込みを受付ける割込みコントローラと、
２以上のＯＳに共用されている割込み番号が含まれる割込みがあった場合に動作する共用割込み応答処理部と、
割込み番号ごとに、割込み番号を使用するＯＳと、２以上のＯＳに共用されている割込み番号が含まれる割込みがあった場合に前記割込みコントローラから前記共用割込み応答処理部に出力される共用割込み用割込みベクタとが記述される割込み番号情報を記憶する記憶部と、
いずれかのＯＳより出力された、当該ＯＳが使用を開始する割込み番号が記述される使用開始割込み番号情報を入力し、前記使用開始割込み番号情報に記述される割込み番号が他のＯＳに使用されているか否かを前記割込み番号情報を参照して判断し、当該割込み番号が他のＯＳに使用されている場合に、当該割込み番号と、前記割込み番号情報において当該割込み番号に対して記述されている共用割込み用割込みベクタとが記述され、更に、前記共用割込み用割込みベクタの出力先として前記共用割込み応答処理部が記述される共用割込み制御情報を前記割込みコントローラに設定し、前記使用開始割込み番号情報の出力元のＯＳを当該割込み番号を使用するＯＳとして前記割込み番号情報に追記する割込み番号管理部とを有し、
前記割込みコントローラは、
受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致するかを判断し、受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致する場合に、前記共用割込み制御情報に従って、前記共用割込み応答処理部に前記共用割込み用割込みベクタを出力し、
前記共用割込み応答処理部は、
前記割込みコントローラから前記共用割込み用割込みベクタを入力した場合に、前記割込み番号情報において前記共用割込み用割込みベクタに対して記述されている２以上のＯＳのＯＳごとに、各ＯＳの割込み有無確認関数を実行して各ＯＳの指定デバイスからの割込み有無を判定し、指定デバイスからの割込みがあったＯＳに、前記割込みコントローラが受け付けた割込みを処理させることを特徴とする計算機システム。
【請求項２】
前記計算機システムでは、
各ＯＳに、指定デバイスからの割込みを処理する割込みハンドラが含まれ、前記複数のＯＳが、複数個のプロセッサにより動作しており、
前記割込み番号管理部は、
前記共用割込み制御情報を前記割込みコントローラに設定した場合に、前記使用開始割込み番号情報の出力元のＯＳを実行するプロセッサを前記割込み番号情報に追記し、
前記共用割込み応答処理部は、
前記割込みコントローラから前記共用割込み用割込みベクタを入力し、指定デバイスからの割込みがあったＯＳが判明した後に、前記割込み番号情報の記述に基づき、指定デバイスからの割込みがあったＯＳを実行するプロセッサを特定し、特定したプロセッサに、指定デバイスからの割込みがあったＯＳの割込みハンドラを実行させることを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記計算機システムでは、
前記複数のＯＳに含まれる各割込み有無確認関数は、指定デバイス内のレジスタのレジスタ情報にアクセスして指定デバイスからの割込み有無を確認し、
前記計算機システムは、更に、
各割込み有無確認関数がアクセスしたレジスタ情報を蓄積するレジスタ情報蓄積部を有し、
各プロセッサは、
前記レジスタ情報蓄積部に蓄積されていているレジスタ情報を用いて、指定デバイスからの割込みがあったＯＳの割込みハンドラを実行することを特徴とする請求項２に記載の計算機システム。
【請求項４】
前記記憶部は、
前記割込み番号情報として、割込み番号ごとに、割込み番号を使用するＯＳと前記共用割込み用割込みベクタとに加えて、割込み番号を使用するＯＳの指定デバイスの優先度が記述される情報を記憶し、
前記共用割込み応答処理部は、
前記割込みコントローラから前記共用割込み用割込みベクタを入力した場合に、前記割込み番号情報において前記共用割込み用割込みベクタに対して記述されている２以上のＯＳのうちの指定デバイスの優先度の高いＯＳから順に、指定デバイスからの割込み有無を判定することを特徴とする請求項１に記載の計算機システム。
【請求項５】
いずれかのＯＳを実行するプロセッサが、前記共用割込み応答処理部を実行することを特徴とする請求項２に記載の計算機システム。
【請求項６】
前記記憶部は、
前記割込み番号情報として、割込み番号ごとに、割込み番号を使用するＯＳと前記共用割込み用割込みベクタとに加えて、割込み番号を使用するＯＳの指定デバイスの優先度が記述される情報を記憶し、
前記割込み番号情報において指定デバイスの優先度が最も高いＯＳを実行するプロセッサが、前記共用割込み応答処理部を実行することを特徴とする請求項２に記載の計算機システム。
【請求項７】
前記計算機システムは、
前記複数のＯＳの制御を行う仮想計算機モニタを有する仮想計算機システムであり、
前記共用割込み応答処理部と前記割込み番号管理部は、前記仮想計算機モニタを実行するプロセッサにより実行されることを特徴とする請求項２に記載の計算機システム。
【請求項８】
割込みの発行元のデバイスとして指定されている指定デバイスにアクセスして指定デバイスからの割込み有無を確認する割込み有無確認関数が各々に含まれる複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作し、
割込み番号が含まれる割込みを受付ける割込みコントローラと、
プロセッサと、
割込み番号ごとに、割込み番号を使用するＯＳと、２以上のＯＳに共用されている割込み番号が含まれる割込みがあった場合に前記割込みコントローラから前記プロセッサに出力される共用割込み用割込みベクタとが記述される割込み番号情報を記憶する記憶装置とが含まれる計算機システムが行う割込み制御方法であって、
前記プロセッサが、いずれかのＯＳより出力された、当該ＯＳが使用を開始する割込み番号が記述される使用開始割込み番号情報を入力し、前記使用開始割込み番号情報に記述される割込み番号が他のＯＳに使用されているか否かを前記記憶装置の前記割込み番号情報を参照して判断し、当該割込み番号が他のＯＳに使用されている場合に、当該割込み番号と、前記割込み番号情報において当該割込み番号に対して記述されている共用割込み用割込みベクタとが記述され、更に、前記共用割込み用割込みベクタの出力先として前記プロセッサが記述される共用割込み制御情報を前記割込みコントローラに設定し、前記使用開始割込み番号情報の出力元のＯＳを当該割込み番号を使用するＯＳとして前記割込み番号情報に追記する割込み番号管理処理と、
前記割込みコントローラが、受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致するかを判断し、受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致する場合に、前記共用割込み制御情報に従って、前記プロセッサに前記共用割込み用割込みベクタを出力する共用割込み用割込みベクタ出力処理と、
前記プロセッサが、前記割込みコントローラから前記共用割込み用割込みベクタを入力し、前記割込み番号情報において前記共用割込み用割込みベクタに対して記述されている２以上のＯＳのＯＳごとに、各ＯＳの割込み有無確認関数を実行して各ＯＳの指定デバイスからの割込み有無を判定し、指定デバイスからの割込みがあったＯＳに、前記割込みコントローラが受け付けた割込みを処理させる共用割込み応答処理とを有することを特徴とする割込み制御方法。
【請求項９】
割込みの発行元のデバイスとして指定されている指定デバイスにアクセスして指定デバイスからの割込み有無を確認する割込み有無確認関数が各々に含まれる複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作し、
割込み番号が含まれる割込みを受付ける割込みコントローラと、
プロセッサと、
割込み番号ごとに、割込み番号を使用するＯＳと、２以上のＯＳに共用されている割込み番号が含まれる割込みがあった場合に前記割込みコントローラから前記プロセッサに出力される共用割込み用割込みベクタとが記述される割込み番号情報を記憶する記憶装置とが含まれる計算機システムにおいて、
いずれかのＯＳより出力された、当該ＯＳが使用を開始する割込み番号が記述される使用開始割込み番号情報を入力し、前記使用開始割込み番号情報に記述される割込み番号が他のＯＳに使用されているか否かを前記記憶装置の前記割込み番号情報を参照して判断し、当該割込み番号が他のＯＳに使用されている場合に、当該割込み番号と、前記割込み番号情報において当該割込み番号に対して記述されている共用割込み用割込みベクタとが記述され、更に、前記共用割込み用割込みベクタの出力先として前記プロセッサが記述される共用割込み制御情報を前記割込みコントローラに設定し、前記使用開始割込み番号情報の出力元のＯＳを当該割込み番号を使用するＯＳとして前記割込み番号情報に追記する割込み番号管理処理を、前記プロセッサに実行させ、
前記割込みコントローラが、
受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致するかを判断し、受付けた割込みに含まれる割込み番号が前記共用割込み制御情報に記述されている割込み番号と一致すると判断して、前記共用割込み制御情報に従って、前記プロセッサに前記共用割込み用割込みベクタを出力した場合に、
前記割込みコントローラから前記共用割込み用割込みベクタを入力し、前記割込み番号情報において前記共用割込み用割込みベクタに対して記述されている２以上のＯＳのＯＳごとに、各ＯＳの割込み有無確認関数を実行して各ＯＳの指定デバイスからの割込み有無を判定し、指定デバイスからの割込みがあったＯＳに、前記割込みコントローラが受け付けた割込みを処理させる共用割込み応答処理を、前記プロセッサに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する環境における割込み制御技術に関する。
【背景技術】
【０００２】
本明細書では、複数のＯＳが動作する環境として、仮想計算機システムを例にして説明を行う。
従来の仮想計算機システムは、複数個の周辺デバイスからの割込みを同一の割込み番号で割込み制御装置に通知する割込み管理装置が、割込み発生デバイスを特定するためにデバイス識別レジスタを有しており、ＯＳ間制御部（仮想計算機モニタに相当）が該レジスタを参照することで、共通の割込み番号による割込みをどのデバイスが発生したかを判定する。
または、ＯＳ間制御部が、割込み番号を共用している全てのデバイスを直接アクセスして割込み発生デバイスを特定する（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−２２９０３８号公報  第３−４項、第６項、第１図
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の仮想計算機システムでは、共通の割込み番号の割込みを発行できるのは、割込み管理装置がサポートするＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスのみであり、割込み管理装置が対応していない新たなＩ／Ｏデバイスは共通の割込み番号の割込みを発行できないという課題がある。
また、割込み番号を共用する全てのＩ／Ｏデバイスを直接アクセスする方法では、仮想計算機モニタのリリース後にユーザが新たな未サポートのＩ／Ｏデバイスを装着する場合は仮想計算機モニタの修正及び再リリースによる追従が必要であるという課題がある。
【０００５】
この発明は、かかる課題に鑑みたものであり、複数のＯＳが動作する計算機システムにおいて、各ＯＳが任意のタイミングで新たなデバイスに対して新たな割込み番号の使用を開始することができ、当該割込み番号が既に他のＯＳにより使用されている場合であっても２以上のＯＳの間で割込み番号を共用することができる仕組みを実現することを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る計算機システムは、
複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する計算機システムであって、
割込み番号が含まれる割込みを受付ける割込みコントローラと、
２以上のＯＳに共用されている共用割込み番号が含まれている割込みがあった場合に当該割込みを処理するＯＳを割込み処理ＯＳとして特定する共用割込み応答処理部と、
いずれかのＯＳより出力された、当該ＯＳが使用を開始する割込み番号が示される使用開始割込み番号情報を入力し、前記使用開始割込み番号情報に示される割込み番号が他のＯＳに使用されているか否かを判断し、当該割込み番号が他のＯＳに使用されている場合に、当該割込み番号を共用割込み番号に指定し、当該共用割込み番号と前記共用割込み応答処理部とを対応付ける共用割込み制御情報を前記割込みコントローラに設定する割込み番号管理部とを有し、
前記割込みコントローラは、
前記共用割込み制御情報に基づき、受付けた割込みに含まれる割込み番号が共用割込み番号に該当するかを判断し、受付けた割込みに含まれる割込み番号が共用割込み番号に該当する場合に前記共用割込み応答処理部に当該割込みの割込み処理ＯＳを特定させることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、ＯＳが使用を開始する割込み番号が他のＯＳに使用されているか否かを判断し、他のＯＳに使用されている場合には、当該割込み番号を共用割込み番号として指定するとともに当該共用割込み番号と共用割込み応答処理部との対応付けを割込みコントローラに設定する。
そして、割込みコントローラが受付けた割込みに含まれる割込み番号が共用割込み番号に該当する場合に、共用割込み応答処理部に当該割込みの割込み処理ＯＳを特定させる。
このため、各ＯＳは任意のタイミングで新たなデバイスに対して新たな割込み番号の使用を開始することができ、当該割込み番号が既に他のＯＳにより使用されている場合であっても、適切な割込み処理ＯＳに割込みを処理させることができ、２以上のＯＳの間で割込み番号を共用することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る仮想計算機システムの構成例を示す図。
【図２】実施の形態１に係る共用割込み管理テーブルのデータ構成例を示す図。
【図３】実施の形態１に係る共用割込み管理テーブルを設定する手順を示すフローチャート図。
【図４】実施の形態１に係る割込み元判定手段を登録する手順を示すフローチャート図。
【図５】実施の形態１に係る共用割込み処理手順を示すフローチャート図。
【図６】実施の形態２に係る仮想計算機モニタの構成例を示す図。
【図７】実施の形態２に係る共用割込み注入先決定部の処理手順を示すフローチャート図。
【図８】実施の形態２に係るゲストＯＳのデバイスドライバの割込みハンドラの処理手順を示すフローチャート図。
【図９】実施の形態３に係る共用割込み管理テーブルのデータ構成例を示す図。
【図１０】実施の形態３に係る割込み元判定手段等を登録する手順を示すフローチャート図。
【図１１】実施の形態３に係る共用割込み処理手順を示すフローチャート図。
【図１２】実施の形態４に係る仮想計算機モニタの構成例を示す図。
【図１３】実施の形態４に係る共用割込み管理テーブルのデータ構成例を示す図。
【図１４】実施の形態４に係る割込み元判定手段等を登録する手順を示すフローチャート図。
【図１５】実施の形態４に係る共用割込み処理手順を示すフローチャート図。
【図１６】実施の形態１に係る割込みコントローラ登録情報の例を示す図。
【図１７】実施の形態１〜４に係る物理計算機の構成例示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
実施の形態１〜４では、マルチコア構成の仮想計算機システムにおいて、共用割込み番号の割込みを使用する新たなＩ／Ｏデバイスへの追従を、仮想計算機モニタを変更せずに行うこと、及び、割込み処理のオーバヘッドを抑える構成を説明する。
なお、共用割込み番号とは、２以上のＯＳに共用されている割り込み番号である。
また、共用割込み番号を共用するＯＳを番号共用ＯＳともいう。
【００１０】
図１は、本実施の形態における仮想計算機システム５００の構成を示す図である。
実施の形態１〜４では、複数のＯＳが動作するマルチコア構成の計算機システムの例として、仮想計算機システム５００を説明する。
【００１１】
物理計算機１００は、プロセッサ１１０−０、１１０−１、１１０−２、１１０−３、割込みコントローラ１２０、Ｉ／Ｏデバイス（例えばＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）デバイス）１３０−０、１３０−１、メモリ１４０、ディスク装置１５０（以下、単にディスクとも表記する）を有する。
なお、ディスク装置１５０もＩ／Ｏデバイス１３０として動作する場合もあるが、ディスク装置１５０は後述する共用割込み管理テーブル２５０を記憶する役割を有するため、Ｉ／Ｏデバイス１３０とは別に示している。
【００１２】
プロセッサ１１０−０、１１０−１、１１０−２、１１０−３は、それぞれプロセッサ間割込み制御部１１１−０、１１１−１、１１１−２、１１１−３を有する。
割込みコントローラ１２０は、外部割込みを割込みベクタに変換してプロセッサに出力する装置であり、割込み番号に対する割込みベクタ及び出力先プロセッサの設定はプログラム可能である。
より具体的には、割込みコントローラ１２０は、割込みを受付け、受付けた割込みに含まれる割込み番号が共用割込み番号か否かを判断し、受付けた割込みに含まれる割込み番号が共用割込み番号である場合に、当該割込みを処理するゲストＯＳ（割込み処理ＯＳ）を仮想計算機モニタ２００に特定させる。
一方、受付けた割込みに含まれる割込み番号が共用割込み番号でない場合に、当該割込み番号に対応するゲストＯＳに当該割込みを処理させる。
なお、割込みコントローラ１２０により実施される処理は、割込み受付け処理に対応する。
【００１３】
仮想計算機モニタ（ＶＭＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）２００は、プロセッサ１１０−０〜１１０−３及びＩ／Ｏデバイス１３０−０〜１３０−１を論理的に分割して、仮想計算機（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）３００−０、３００−１を構築する。
プロセッサ１１０−０、１１０−１とＩ／Ｏデバイス１３０−０は、仮想計算機３００−０に割り当てられる。
プロセッサ１１０−２、１１０−３とＩ／Ｏデバイス１３０−１は、仮想計算機３００−１に割り当てられる。
また、仮想計算機モニタ２００は、プロセッサ１１０−０〜１１０−３の全てで実行されるものとする。
また、以下ではプロセッサ１１０−０が仮想計算機モニタ２００のブートプロセッサであるとして説明を行う。
Ｉ／Ｏデバイス１３０−０及びＩ／Ｏデバイス１３０−１は、ゲストＯＳから直接アクセス可能、かつ、ゲストＯＳ間で共用されないＩ／Ｏデバイスであり、仮想計算機モニタ２００によるエミュレートは行わない。
【００１４】
仮想計算機モニタ２００は、外部割込みハンドラ２１０、プロセッサ間通信制御部２２０、割込み注入部２３０、共用割込み注入先決定部２４０、共用割込み管理テーブル２５０及びコントローラ登録部２８０を有する。
【００１５】
外部割込みハンドラ２１０は、外部割込み発生時に起動され、ゲストＯＳ４００への割込みを横取りする。
プロセッサ間通信制御部２２０は、プロセッサ間でメッセージ通信を行う。
割込み注入部２３０は、横取りした割込みを、ゲストＯＳ４００に注入する処理を行う。
共用割込み注入先決定部２４０は、外部割込みハンドラ２１０が横取りした、共用割込み番号による割込み（以下、共用割込みと表記する）について、どのゲストＯＳ４００のどのプロセッサ１１０に注入するかを決定するものである。
なお、外部割込みハンドラ２１０、割込み注入部２３０及び共用割込み注入先決定部２４０により行われる処理は共用割込み応答処理に相当する。
このため、仮想計算機モニタ２００を実行するプロセッサ１１０−０〜１１０−３、すなわち、共用割込み応答処理を実行するプロセッサ１１０−０〜１１０−３は、共用割込み応答処理部の例に相当する。
なお、図１では作図上の理由からプロセッサ１１０−０を共用割込み番号処理部と表記しているが、プロセッサ１１０−１〜１１０−３も同様に共用割込み応答処理部として機能する。
共用割込み応答処理は、より具体的には、割込みコントローラ１２０から共用割込み番号が含まれる割込みを処理するゲストＯＳ（割込み処理ＯＳ）を特定するよう指示され、当該共用割込み番号と後述の共用割込み管理テーブル２５０とに基づき、当該共用割込み番号を共用する番号共用ＯＳを特定し、特定した各番号共用ＯＳを用いて各番号共用ＯＳに指定されているＩ／Ｏデバイス１３０からの割込み有無を判定し、指定されているＩ／Ｏデバイス１３０からの割込みがあった番号共用ＯＳを割込み処理ＯＳとして特定し、共用割込み管理テーブル２５０において割込み処理ＯＳに対応付けられているプロセッサに割込み処理ＯＳの割込みハンドラ４１１を実行させる処理である。
【００１６】
共用割込み管理テーブル２５０は、共用割込みの割込み処理ＯＳを特定し、共用割込みの注入先を決定するのに必要な情報を、割込み番号ごとに管理するテーブルである。
共用割込み管理テーブル２５０の詳細は後述する。
【００１７】
コントローラ登録部２８０は、各ゲストＯＳ４００が割込みコントローラ１２０に送信した使用開始割込み番号情報を入力する。
使用開始割込み番号情報は、各ゲストＯＳ４００が使用を開始しようとする割込み番号と、各ゲストＯＳ４００の割込みハンドラ４１１の割込みベクタと、各ゲストＯＳ４００を実行するプロセッサ１１０が示される情報である。
更に、コントローラ登録部２８０は、入力した使用開始割込み番号情報に示される割込み番号が他のゲストＯＳ４００に使用されているか否かを判断し、当該割込み番号が他のゲストＯＳ４００に使用されている場合に、入力した使用開始割込み番号情報に示される割込み番号を共用割込み番号と指定し、仮想計算機モニタ２００（共用割込み応答処理）を実行するプロセッサ１１０（例えば、プロセッサ１１０−０）と当該共用割込み番号とを対応付ける情報（共用割込み制御情報の例）を割込みコントローラ１２０に登録する。
一方、割込み番号が他のゲストＯＳ４００に使用されていない場合は、コントローラ登録部２８０は、使用開始割込み番号情報を割込みコントローラ１２０に転送する。
なお、コントローラ登録部２８０により実施される処理は、割込み番号管理処理に相当する。
このため、コントローラ登録部２８０、すなわち、仮想計算機モニタ２００を実行するプロセッサ１１０−０〜１１０−３は、割込み番号管理部の例でもある。
なお、図１では作図上の理由からプロセッサ１１０−０を割込み番号管理部と表記しているが、プロセッサ１１０−１〜１１０−３も同様に割込み番号管理部として機能する。
【００１８】
ここで、本実施の形態における、共用割込み管理テーブル２５０のデータ構成の例を図２に示す。
図２において、「共用割込み用割込みベクタ」は、仮想計算機モニタ２００が共用割込みを横取りするのに使用する割込みベクタ（以下、共用割込み用割込みベクタと表記）を保持する。
共用割込み用割込みベクタには、仮想計算機モニタ２００が、共用割込み専用にあらかじめ確保している割込みベクタが使用される。
「登録元ＯＳ」は、共用割込みを使用するゲストＯＳの識別子を保持し、「注入先プロセッサ」、「割込みベクタ」は、該ゲストＯＳが該共用割込みに対して設定した、割込みベクタ出力先プロセッサ及び割込みベクタの情報を保持する。
「割込み元判定手段」は、ゲストＯＳから与えられた割込み元判定手段を保持する。
【００１９】
図２の設定例では、割込み番号１７番の割込みについて、ゲストＯＳ４００−０は、注入先プロセッサをプロセッサ１１０−０、注入する割込みベクタを４９番として設定し、ゲストＯＳ４００−１は、注入先プロセッサをプロセッサ１１０−１、注入する割込みベクタを６５番として設定している。
割込み番号１７番の割込みは、ゲストＯＳ４００−０とゲストＯＳ４００−１が共用しており、該割込みは、仮想計算機モニタ２００が、２４１番の割込みベクタで横取りする。
また、割込み番号１６番は、ゲストＯＳ４００−０のみが使用している。
更に、割込み番号１８番は、いずれのゲストＯＳでも未使用である。
なお、割込み番号１８番の行にあるように、割込み番号が未使用であっても、共用割込み用割込みベクタはあらかじめ設定されている。
また、割込み番号１７番の行に明らかなように、共用割込み管理テーブル２５０は、２以上のＯＳに共用されている共用割込み番号（割込み番号１７番）と、共用割込み番号を共用する番号共用ＯＳ（ゲストＯＳ４００−０とゲストＯＳ４００−１）と、各番号共用ＯＳを実行するプロセッサ（プロセッサ１１０−０とプロセッサ１１０−１）とを対応付ける情報であり、共用割込み番号情報の例である。
【００２０】
なお、図１では、仮想計算機モニタ２００が共用割込み管理テーブル２５０を参照することを明示する意味で、仮想計算機モニタ２００内に共用割込み管理テーブル２５０を示しているが、物理計算機１００レベルでは、共用割込み管理テーブル２５０はディスク１５０に格納されており、仮想計算機モニタ２００実行時に、例えば、仮想計算機モニタ２００のブートプロセッサが、ディスク１５０からメモリ１４０にロードし、プロセッサ１１０−０〜１１０−３がメモリ１４０から読み出して共用割込み管理テーブル２５０を参照する。
【００２１】
仮想計算機３００−０上ではゲストＯＳ４００−０が動作し、仮想計算機３００−１上ではゲストＯＳ４００−１が動作する。
【００２２】
ゲストＯＳ４００−０は、シングルプロセッサまたはマルチプロセッサ上で動作するＯＳである。
一例として、本実施の形態では、ゲストＯＳ４００−０は、プロセッサ１１０−０をブートプロセッサとして利用するマルチプロセッサ型ＯＳである。
ゲストＯＳ４００−０のデバイスドライバ４１０−０は、Ｉ／Ｏデバイス１３０−０のドライバである。
デバイスドライバ４１０−０は、Ｉ／Ｏデバイス１３０−０からの割込み処理を行う割込みハンドラ４１１−０と、割込み元判定手段４１２−０を有している。
割込み元判定手段４１２−０は、Ｉ／Ｏデバイス１３０−０が有する割込み状態レジスタを参照してＩ／Ｏデバイス１３０−０からの割込み有無を確認し、割込みが発生していた場合は真、発生していなかった場合は偽を返す、仮想計算機モニタ２００のコンテキストで実行可能な関数である。
上述のように、ゲストＯＳ４００−０には、割込みの発行元のデバイスとしてＩ／Ｏデバイス１３０−０が指定されている。
Ｉ／Ｏデバイス１３０−０は、ゲストＯＳ４００−０の割込みの発行元のデバイスとして指定されたデバイスであり、指定デバイスの例である。
また、指定デバイスにアクセスし、指定デバイスからの割込み有無を確認する関数である割込み元判定手段４１２−０は、割込み有無確認関数の例である。
【００２３】
また、ゲストＯＳ４００−１は、シングルプロセッサまたはマルチプロセッサ上で動作するＯＳである。
一例として、本実施の形態では、ゲストＯＳ４００−１は、プロセッサ１１０−２をブートプロセッサとして利用するマルチプロセッサ型ＯＳである。
ゲストＯＳ４００−１は、Ｉ／Ｏデバイス１３０−１のドライバであるデバイスドライバ４１０−１を有しており、デバイスドライバ４１０−１は、Ｉ／Ｏデバイス１３０−１からの割込み処理を行う割込みハンドラ４１１−１と、割込み元判定手段４１２−１を有している。
割込み元判定手段４１２−１は、Ｉ／Ｏデバイス１３０−１が有する割込み状態レジスタを参照してＩ／Ｏデバイス１３０−１からの割込み有無を確認し、割込みが発生していた場合は真、発生していなかった場合は偽を返す、仮想計算機モニタ２００のコンテキストで実行可能な関数である。
上述のように、ゲストＯＳ４００−１には、割込みの発行元のデバイスとしてＩ／Ｏデバイス１３０−１が指定されている。
Ｉ／Ｏデバイス１３０−１は、ゲストＯＳ４００−１の割込みの発行元のデバイスとして指定されたデバイスであり、指定デバイスの例である。
また、指定デバイスにアクセスし、指定デバイスからの割込み有無を確認する関数である割込み元判定手段４１２−１は、割込み有無確認関数の例である。
【００２４】
なお、本実施の形態では、一例として、プロセッサが４個、Ｉ／Ｏデバイスが２個、仮想計算機及びゲストＯＳが２個の構成を示しているが、仮想計算機内のゲストＯＳが一つであり、プロセッサ及びＩ／Ｏデバイスが、ゲストＯＳに対して占有割り当てされる構成ならば、これらの構成要素の数は限定しない。
【００２５】
次に、本実施の形態における各構成要素の動作について説明する。
【００２６】
図３は、本実施の形態において、ゲストＯＳ４００による割込みコントローラ１２０の設定処理を、仮想計算機モニタ２００が捕捉して、共用割込み管理テーブル２５０の設定を行う処理のフローチャートである。
なお、以下では、コントローラ登録部２８０や共用割込み注入先決定部２４０等の仮想計算機モニタ２００内の要素が所定の動作を行うといった表現で説明を行う場合があるが、これは、仮想計算機モニタ２００が実行されているプロセッサ（例えば、ゲストＯＳ４００の場合は、ゲストＯＳ４００のブートプロセッサであるプロセッサ１１０−０）が、コントローラ登録部２８０や共用割込み注入先決定部２４０等として所定の動作（割込み番号管理処理や共用割込み応答処理）を行うという意味である。
【００２７】
まず、ステップＳ１０１において、ゲストＯＳ４００が、割込みコントローラ１２０に対して、割込み番号に出力先プロセッサと割込みベクタを設定する操作を行う。
つまり、ゲストＯＳ４００は、これから使用を開始する割込み番号と、当該ゲストＯＳ４００の割込みハンドラ４１１の割込みベクタと、当該ゲストＯＳ４００を実行するプロセッサ１１０が示される使用開始割込み番号情報を割込みコントローラ１２０に対して出力する。
次に、ステップＳ１０２で、仮想計算機モニタ２００が、ゲストＯＳ４００による割込みコントローラ１２０へのアクセスを捕捉する。
つまり、コントローラ登録部２８０が、割込みコントローラ１２０への入力に先立ち、使用開始割込み番号情報を入力する。
次に、ステップＳ１０３で、コントローラ登録部２８０が、使用開始割込み番号情報に含まれる割込み番号を他のゲストＯＳが使用中であるかどうかチェックする。
具体的には、共用割込み管理テーブル２５０の、該割込み番号の行の、登録元ＯＳの項をチェックし、他のゲストＯＳの登録の有無をチェックする。
ステップＳ１０３において、該割込み番号を使用する他のゲストＯＳが存在しない場合、ステップＳ１０４で、コントローラ登録部２８０は、ゲストＯＳ４００による割込みコントローラ１２０の操作をそのままエミュレーションする。
すなわち、コントローラ登録部２８０は、使用開始割込み番号情報をそのまま割込みコントローラ１２０に転送する。
割込みコントローラ１２０では、使用開始割込み番号情報に含まれる内容をそのまま登録する。
一方、ステップＳ１０３において、使用開始割込み番号情報に含まれる割込み番号を他のゲストＯＳが使用中の場合、ステップＳ１０５で、コントローラ登録部２８０は、当該割込み番号を共用割込み番号と指定し、割込みコントローラ１２０を操作し、該共用割込み番号に対し、出力先プロセッサとして仮想計算機モニタ２００が使用するプロセッサの一つ、例えば、仮想計算機モニタ２００のブートプロセッサを設定し、割込みベクタとして共用割込み用割込みベクタを設定する。
つまり、コントローラ登録部２８０は、共用割込み番号と共用割込み用割込みベクタと仮想計算機モニタ２００のブートプロセッサとを対応付ける情報（共用割込み制御情報の例）を割込みコントローラ１２０に設定する。
最後に、ステップＳ１０６で、コントローラ登録部２８０は、共用割込み管理テーブル２５０に対し、登録元ＯＳ、注入先プロセッサ、割込みベクタの登録を行い、終了する。
なお、本実施の形態では、割込みコントローラ１２０への情報の設定、共用割込み管理テーブル２５０の設定を、割込みコントローラ１２０へのアクセスを捕捉することにより行っているが、代わりに、ゲストＯＳからハイパーコールを呼び出すことにより行ってもよい。
【００２８】
図１６は、割込みコントローラ１２０に登録される割込みコントローラ登録情報の例を示す。
図１６（ａ）は、割込み番号１７番がゲストＯＳ４００−０にのみ使用される場合に、割込みコントローラ１２０に登録される割込みコントローラ登録情報を示している。
つまり、図１６（ａ）の割込みコントローラ登録情報では、ゲストＯＳ４００−０から出力された使用開始割込み番号情報そのままに、出力先プロセッサの欄にはゲストＯＳ４００−０を実行するプロセッサ１１０−０が示され、また、割込みベクタの欄には、ゲストＯＳ４００−０の割込みベクタ：４９番が示される。
図１６（ａ）の割込みコントローラ登録情報が割込みコントローラ１２０に登録されているときには、図２の共用割込み管理テーブル２５０の割込み番号１７番の行には、登録元ＯＳ：４００−０の行のみが登録されている。
図１６（ｂ）は、図１６（ａ）の割込みコントローラ登録情報が割込みコントローラ１２０に登録されている状態で、コントローラ登録部２８０が割込み番号１７番についての、ゲストＯＳ４００−１からの使用開始割込み番号情報を捕捉し、割込みコントローラ１２０に新たに共用割込みに関する情報を設定した場合の割込みコントローラ登録情報を示している。
この場合は、コントローラ登録部２８０は、共用割込み管理テーブル２５０を参照し、割込み番号１７番は既に他のゲストＯＳ（ＯＳ４００−０）により使用されていると判断する。
２つのゲストＯＳ４００により共用されるので、図１６（ｂ）の割込みコントローラ登録情報の出力先プロセッサの欄には仮想計算機モニタ２００を実行するプロセッサ１１０−０が示され、また、割込みベクタの欄には、共用割込み用割込みベクタ：２４１番が示される。
なお、図１６（ｂ）の割込み番号１７番の行の情報が共用割込み制御情報の例である。
図１６（ｂ）の割込みコントローラ登録情報が割込みコントローラ１２０に設定されると、コントローラ登録部２８０は、共用割込み管理テーブル２５０の割込み番号１７番の行を変更し、図２に示すように、割込み番号１７番の行に、登録元ＯＳ：４００−０の行と登録元ＯＳ：４００−１の行が設定されることになる。
【００２９】
図４は、本実施の形態において、ゲストＯＳ４００が、仮想計算機モニタ２００に対して、割込み元判定手段の登録を行う処理のフローチャートである。
【００３０】
まず、ステップＳ１１１において、ゲストＯＳ４００は、通常のデバイスドライバ初期化処理、例えば、割込みベクタに対する割込みハンドラの接続などの処理を実行する。
次に、ステップＳ１１２で、ゲストＯＳ４００は、仮想計算機モニタ２００に対して、デバイスドライバ４１０が有する割込み元判定手段４１２の登録を依頼する。
そして、ステップＳ１１３で、仮想計算機モニタ２００は、割込み番号と登録元ＯＳをキーとして、共用割込み管理テーブル２５０に対して、割込み元判定手段４１２を登録する。
【００３１】
図５は、本実施の形態において、共用割込みが発生した場合の割込み処理の手順を示すフローチャートである。
【００３２】
まず、ステップＳ１２１において、Ｉ／Ｏデバイス１３０が割込みを発行する。
次に、ステップＳ１２２では、割込みコントローラ１２０が、図１６に例示した割込みコントローラ登録情報を参照し、当該割込みに含まれる割込み番号が共用割込み番号であると判断し、仮想計算機モニタ２００のブートプロセッサ（例えば、プロセッサ１１０−０）に対して、共用割込み用割込みベクタを出力する。
次に、ステップＳ１２３において、仮想計算機モニタ２００のブートプロセッサが共用割込み用割込みベクタに基づき、仮想計算機モニタ２００の外部割込みハンドラ２１０を起動し、共用割込み注入先決定部２４０が呼び出される。
次に、ステップＳ１２４では、仮想計算機モニタ２００のブートプロセッサが共用割込み注入先決定部２４０を実行する。
つまり、仮想計算機モニタ２００のブートプロセッサが、共用割込み注入先決定部２４０として、共用割込み管理テーブル２５０に登録されている割込み元判定手段４１２を用いて、注入先プロセッサと注入する割込みベクタを特定する。
具体的には、共用割込み管理テーブル２５０の、発生した割込み番号の行に登録されている全ての割込み元判定手段４１２を順に実行し（関数である割込み元判定手段４１２を実行し）、真を返した割込み元判定手段４１２の行の、注入先プロセッサと割込みベクタの項の内容を取得する。
つまり、真を返した割込み元判定手段４１２の行の登録元ＯＳの欄に示されているゲストＯＳが共用割込みを処理させる割込み処理ＯＳであり、注入先プロセッサの欄に示されているプロセッサが割込み処理ＯＳを実行するプロセッサであり、割込みベクタの欄に示されている割込みベクタが割込み処理ＯＳの割込みハンドラの割込みベクタである。
【００３３】
ステップＳ１２５では、仮想計算機モニタ２００のブートプロセッサが、共用割込み注入先決定部２４０として、割込みを横取りしたプロセッサ即ち仮想計算機モニタ２００のブートプロセッサが、ステップＳ１２４で特定した注入先プロセッサと等しいかどうかチェックする。
ステップＳ１２５において、割込み注入先プロセッサが仮想計算機モニタ２００のブートプロセッサと等しくない場合、ステップＳ１２６で、仮想計算機モニタ２００のブートプロセッサは、プロセッサ間通信制御部２２０を用いて、割込み注入先プロセッサに対して、ステップＳ１２４で特定した割込みベクタを転送する。
次に、ステップＳ１２７では、割込み注入先プロセッサが、割込み注入部２３０として、ゲストＯＳ（割込み処理ＯＳ）に対して、ステップＳ１２４で特定した割込みベクタを注入し、最後に、ステップＳ１２８で、ゲストＯＳ（割込み処理ＯＳ）の割込みハンドラが起動する。
【００３４】
具体例として、共用割込み管理テーブル２５０が図２の通りに設定され、割込みコントローラ登録情報が図１６（ｂ）の通りに設定されている場合において、Ｉ／Ｏデバイス１３０−１が割込み番号１７番の割込みを発行した場合の例を以下に示す。
【００３５】
Ｉ／Ｏデバイス１３０−１が、共用割込みである割込み番号１７番の割込みを発行すると、ステップＳ１２２で、仮想計算機モニタ２００のブートプロセッサ（例えば、プロセッサ１１０−０）に対して、割込みコントローラ１２０から割込みベクタ２４１番が出力される。
次に、ステップＳ１２３において、仮想計算機モニタ２００の外部割込みハンドラ２１０が起動し、共用割込み注入先決定部２４０が呼び出される。
次に、ステップＳ７０４で、共用割込み注入先決定部２４０が、共用割込み管理テーブル２５０の、割込み番号１７番の行に登録されている割込み元判定手段４１２−０及び４１２−１を順に実行し、割込み判定手段４１２−１が真を返すので、注入先プロセッサはプロセッサ１１０−１、注入する割込みベクタは６５番と決定される。
ステップＳ１２５では、割込みを横取りしたプロセッサが、ステップＳ１２４で特定した注入先プロセッサと等しくないと判定され、ステップＳ１２６で、プロセッサ間通信制御部２２０により、注入先プロセッサであるプロセッサ１１０−１に対して、割込みベクタ６５番が転送される。
次に、ステップＳ１２７では、割込み注入部２３０が、ゲストＯＳ４００−１に対して、割込みベクタ６５番を注入し、最後に、ステップＳ１２８で、ゲストＯＳ４００−１の割込みハンドラが起動する。
【００３６】
以上に示すように、本実施の形態では、Ｉ／Ｏデバイスの割込み状態レジスタを参照して割込みの有無の判定を行う割込み元判定手段を、ゲストＯＳが仮想計算機モニタに登録し、共用割込みの発生時には、仮想計算機モニタが割込み元判定手段を実行することにより、割込み元デバイス即ち割込み注入先プロセッサの特定を行う。
これにより、仮想計算機モニタの変更を行わずに、新たなＩ／Ｏデバイスへの追従を効率的に行うことができる。
また、本実施の形態では、ゲストＯＳが使用を開始する割込み番号が他のゲストＯＳに使用されているか否かを判断し、他のゲストＯＳに使用されている場合には、当該割込み番号を共用割込み番号として指定するとともに当該共用割込み番号を仮想計算機モニタと対応付ける情報を割込みコントローラに設定する。
そして、割込みコントローラは、受付けた割込みに含まれる割込み番号が共用割込み番号に該当する場合に仮想計算機モニタに割込み処理ＯＳを特定させる。
このため、当該割込み番号が既に他のＯＳにより使用されている場合であっても、適切な割込み処理ＯＳに割込みを処理させることができ、２以上のＯＳの間で割込み番号を共用することができる。
【００３７】
以上、本実施の形態では、
物理計算機上で仮想計算機モニタが動作し、仮想計算機モニタによって構築される仮想計算機上でゲストＯＳが動作する仮想計算機システムであって、
制御対象Ｉ／Ｏデバイスからの割込みの有無を検査する「割込み元判定手段」を有するデバイスドライバを備えるゲストＯＳと、
ゲストＯＳによる割込み番号の使用状況やゲストＯＳ間で共用される割込み番号の割込みの注入先ゲストＯＳを判定するための情報などを保持する「共用割込み管理テーブル」と、ゲストＯＳによる割込みコントローラの操作を横取りするか、または、ゲストＯＳから依頼されて、共用される割込み番号の割込みの注入先ゲストＯＳを決定するための情報を前記共用割込み管理テーブルに対して登録する手段と、ゲストＯＳからの前記割込み元判定手段の登録を受け付ける手段と、共用される割込み番号の割込みの発生時に、該割込みを横取りし、該割込み番号に関連付けられた前記割込み元判定手段を実行して、割込み発生元のＩ／Ｏデバイスを特定し、前記共用割込み管理テーブルから該割込みの注入先ゲストＯＳのプロセッサ及び割込みベクタを特定する「共用割込み注入先決定部」を備える仮想計算機モニタ
を備える仮想計算機システムを説明した。
【００３８】
また、本実施の形態では、
前記割込み元判定手段が、該割込み元判定手段を有するデバイスドライバの制御対象Ｉ／Ｏデバイスにアクセスして割込みの有無を判定する、前記仮想計算機モニタのコンテキストで実行可能な関数であることを説明した。
【００３９】
また、本実施の形態で説明した仮想計算機システムを、以下のステップを備える割込み制御方法としても把握することができる。
仮想計算機モニタが、ゲストＯＳによる割込みコントローラの操作を横取りするか、または、ゲストＯＳから依頼されて、共用される割込み番号の割込みの注入先ゲストＯＳを決定するための情報を前記共用割込み管理テーブルに対して登録するステップと、
ゲストＯＳが、仮想計算機モニタに対して、前記割込み元判定手段を登録するステップと、
共用される割込み番号の割込みの発生時に、仮想計算機モニタが、該割込みを横取りし、該割込み番号に関連付けられた前記割込み元判定手段を実行して、割込み発生元のＩ／Ｏデバイスを特定し、前記共用割込み管理テーブルから該割込みの注入先ゲストＯＳのプロセッサ及び割込みベクタを特定するステップ。
【００４０】
また、本実施の形態で説明した仮想計算機システムを、以下のステップを計算機に実行させるためのプログラムとしても把握することができる。
仮想計算機モニタが、ゲストＯＳによる割込みコントローラの操作を横取りするか、または、ゲストＯＳから依頼されて、共用される割込み番号の割込みの注入先ゲストＯＳを決定するための情報を前記共用割込み管理テーブルに対して登録するステップと、
ゲストＯＳが、仮想計算機モニタに対して、前記割込み元判定手段を登録するステップと、
共用される割込み番号の割込みの発生時に、仮想計算機モニタが、該割込みを横取りし、該割込み番号に関連付けられた前記割込み元判定手段を実行して、割込み発生元のＩ／Ｏデバイスを特定し、前記共用割込み管理テーブルから該割込みの注入先ゲストＯＳのプロセッサ及び割込みベクタを特定するステップ。
【００４１】
実施の形態２．
実施の形態１では、仮想計算機モニタ２００が割込み注入先プロセッサを決定する際と、割込みを注入されたゲストＯＳのデバイスドライバが割込み処理を行う際に、それぞれＩ／Ｏデバイスの割込み状態レジスタを参照していたが、本実施の形態では、割込み状態レジスタの参照回数を一回にまとめる構成と動作を説明する。
【００４２】
図６は、実施の形態２における、仮想計算機モニタ２００の構成を示す図である。
本実施の形態において、仮想計算機モニタ２００は、新たに、割込み状態レジスタ保存領域２６０を有する。
仮想計算機モニタ２００が有するその他の構成要素ないし仮想計算機モニタ２００以外の構成要素は、実施の形態１と同一であり、説明を省略する。
割込み状態レジスタ保存領域２６０は、割込み元判定手段４１２にて読み出した、Ｉ／Ｏデバイスの割込み状態レジスタの内容（以下、レジスタ情報という）を退避する領域である。
このように、割込み状態レジスタ保存領域２６０はレジスタ情報の蓄積領域であり、レジスタ情報蓄積部の例である。
なお、割込み状態レジスタ保存領域２６０は、例えば、メモリ１４０に構成されることが考えられる。
【００４３】
本実施の形態における、共用割込み注入先決定部２４０が実行する、割込み判定手段４１２の処理手順のフローチャートを、図７に示す。
【００４４】
共用割込み注入先決定部２４０は、ステップＳ２０１でＩ／Ｏデバイス１３０の割込み状態レジスタを参照し、その内容を所定のメモリ領域に保持する。
次に、ステップＳ２０２で、共用割込み注入先決定部２４０は、メモリ１４０内の所定領域に保持している割込み状態レジスタの内容をチェックし、該Ｉ／Ｏデバイス１３０が割込み発生元であるかどうか調べる。
ステップＳ２０２において、該Ｉ／Ｏデバイス１３０が割込み発生元であると判定した場合、ステップＳ２０３で、メモリ１４０上に保持している割込み状態レジスタの内容を、メモリ内の他の領域である割込み状態レジスタ保存領域２６０に退避する。
そして、ステップＳ２０４で返り値を真として、終了する。
また、ステップＳ２０２において、該Ｉ／Ｏデバイス１３０が割込み発生元でないと判定した場合、ステップＳ２０５で、返り値を偽として、終了する。
【００４５】
本実施の形態における、割込みハンドラ４１１の処理手順のフローチャートを、図８に示す。
割込みハンドラ４１１は、ステップＳ２１１において、Ｉ／Ｏデバイス１３０内の割込み状態レジスタを直接参照する代わりに、割込み状態レジスタ保存領域２６０を参照し、その値を使用して、通常の割込みハンドラの処理をステップＳ２１２で実行する。
【００４６】
以上に示すように、本実施の形態では、Ｉ／Ｏデバイスの割込み状態レジスタへのアクセスは、仮想計算機モニタ２００による一回のみであり、ゲストＯＳのデバイスドライバは、メモリ上に退避された割込み状態レジスタの内容を参照する。
これにより、Ｉ／Ｏデバイスへの合計アクセス回数が減り、オーバヘッドを削減することができる。
また、割込み状態レジスタが、読み取り時に自動クリアされるＩ／Ｏデバイスに対応可能となる。
【００４７】
本実施の形態では、
前記仮想計算機モニタは、さらに、Ｉ／Ｏデバイスの割込み状態レジスタの内容を保存するための「割込み状態レジスタ保存領域」を備え、
共用される割込み番号の割込みの発生時に、前記仮想計算機モニタが、共用割込み注入先決定部の実行時にＩ／Ｏデバイスの割込み状態レジスタの内容を読み出した際に、該レジスタの内容を前記割込み状態レジスタ保存領域に退避し、
該割込みを処理するデバイスドライバの割込みハンドラでは、前記割込み状態レジスタ保存領域から、割込み状態レジスタの内容を取得することを説明した。
【００４８】
実施の形態３．
本実施の形態においては、Ｉ／Ｏデバイス間で優先度（以下、デバイス優先度と表記）を定めておき、デバイス優先度の高いＩ／Ｏデバイスの割込み処理のオーバヘッドを削減する構成と動作を説明する。
【００４９】
実施の形態３における、共用割込み管理テーブル２５０のデータ構成の例を図９に示す。
【００５０】
本実施の形態において、共用割込み管理テーブル２５０は、新たに、「デバイス番号」と「デバイス優先度」の項を有する。
仮想計算機モニタ２００が有するその他の構成要素ないし仮想計算機モニタ２００以外の構成要素は、実施の形態２と同一であり、説明を省略する。
共用割込み管理テーブル２５０において、「デバイス番号」は、デバイスの識別子を保持する。
例えば、ＰＣＩデバイスの場合、ＢＤＦ番号（バス番号、デバイス番号、ファンクション番号）が格納される。「デバイス優先度」は、デバイス優先度を保持する。
図９の設定例では、ゲストＯＳ４００−０が利用するＩ／Ｏデバイス１３０−０は、デバイス優先度が３０であり、ゲストＯＳ４００−１が利用するＩ／Ｏデバイス１３０−１は、デバイス優先度が６０である。
なお、本実施の形態では、デバイス優先度は、値が大きいほど高いものとする。
デバイス優先度の設定は、一例として、ゲストＯＳのデバイスドライバから設定してもよいし、仮想計算機モニタ２００が決定してもよい。
【００５１】
図１０は、本実施の形態において、ゲストＯＳ４００が、仮想計算機モニタ２００の共用割込み管理テーブル２５０に対して、デバイス番号及びデバイス優先度の登録を行う処理のフローチャートである。
【００５２】
ステップＳ１１１は、実施の形態１のフローチャートＳ１１０のステップＳ１１１と同一であり、説明を省略する。
次に、ステップＳ３０１で、ゲストＯＳ４００は、仮想計算機モニタ２００に対して、割込み番号と登録元ＯＳをキーとして、共用割込み管理テーブル２５０に対して、割込み元判定手段、デバイス番号、デバイス優先度の登録を依頼する。
そして、ステップＳ３０２で、仮想計算機モニタ２００は、ゲストＯＳ４００から与えられた割込み番号と登録元ＯＳをキーとして、共用割込み管理テーブル２５０に対して、割込み元判定手段４１２、デバイス番号、デバイス優先度を登録する。
この際、共用割込み管理テーブル２５０の、同一の割込み番号に属する各行は、デバイス優先度の値で整列して登録される。
整列順序は昇順でもよいし、降順でもよい。
図９の設定例では、一例として、共用割込み管理テーブル２５０の、割込み番号１７番に属する各行を、デバイス優先度の昇順で整列している。
【００５３】
図１１は、本実施の形態において、共用割込みが発生した場合の割込み処理の手順を示すフローチャートである。
【００５４】
ステップＳ３１１以外のステップは、実施の形態１のフローチャートＳ１２０の各ステップと同一であり、説明を省略する。
ステップＳ３１１では、共用割込み注入先決定部２４０が、共用割込み管理テーブル２５０に登録されている割込み元判定手段４１２を用いて、注入先プロセッサと注入する割込みベクタを特定する。
具体的には、共用割込み管理テーブル２５０の、発生した割込み番号の行に登録されている全ての割込み元判定手段を、デバイス優先度が高いものから順に実行し、真を返した割込み元判定手段の行の、注入先プロセッサと割込みベクタの項の内容を取得する。
【００５５】
以上に示すように、本実施の形態では、共用割込みの発生時には、優先度の高いＩ／Ｏデバイスから順に割込み元判定手段が実行されるので、優先度の高いＩ／Ｏデバイスほど、共用割込み発生時の割込み処理のオーバヘッドを削減することができる。
【００５６】
以上、本実施の形態では、
前記共用割込み管理テーブルは、さらに、Ｉ／Ｏデバイスの識別子である「デバイス番号」と、Ｉ／Ｏデバイス間での割込み処理の優先順位を定める「デバイス優先度」を保持する項を有し、
前記デバイス番号の値は、該デバイスを使用するゲストＯＳによって前記仮想計算機モニタに対して登録され、
前記デバイス優先度の値は、該デバイスを使用するゲストＯＳによって前記仮想計算機モニタに対して登録されるか、または、前記仮想計算機モニタによって決定され、
前記共用割込み管理テーブルの割込み元判定手段は、前記仮想計算機モニタによって、割込み番号ごとに、前記デバイス優先度の順で整列して登録され、
共用される割込み番号の割込みの発生時には、前記仮想計算機モニタが、該割込み番号に関連付けられた前記割込み元判定手段を、前記デバイス優先度が高い順に実行することを説明した。
【００５７】
実施の形態４．
本実施の形態においては、デバイス優先度が最も高いＩ／Ｏデバイスの割込み処理のオーバヘッドを削減する構成と動作を説明する。
【００５８】
図１２は、実施の形態４における、仮想計算機モニタ２００の構成を示す図である。
本実施の形態において、仮想計算機モニタ２００は、新たに、外部割込み受付プロセッサ管理部２７０を有する。
さらに、共用割込み管理テーブル２５０は、新たに、「共用割込み受付プロセッサ」の項を有する。
仮想計算機モニタ２００が有するその他の構成要素ないし仮想計算機モニタ２００以外の構成要素は、実施の形態３と同一であり、説明を省略する。
外部割込み受付プロセッサ管理部２７０は、仮想計算機モニタ２００が、共用割込みをどのプロセッサで受け付けるかを設定するものである。
【００５９】
実施の形態４における、共用割込み管理テーブル２５０のデータ構成の例を図１３に示す。
「共用割込み受付プロセッサ」の項は、共用割込みを受け付けるプロセッサの識別子を保持する。
図１３の設定例では、ゲストＯＳ４００−０が有する、デバイス優先度３０のＩ／Ｏデバイス１３０−０と、ゲストＯＳ４００−１が有する、デバイス優先度６０のＩ／Ｏデバイス１３０−１が、割込み番号１７番の割込みを共用しており、該割込みは、仮想計算機モニタ２００が、プロセッサ１１０−２にて、２４１番の割込みベクタで横取りする。
【００６０】
図１４は、本実施の形態において、ゲストＯＳ４００が、仮想計算機モニタ２００の共用割込み管理テーブル２５０に対して、デバイス番号及びデバイス優先度の登録を行う処理のフローチャートである。
ステップＳ１１１からステップＳ３０２までは、実施の形態３のフローチャートＳ３００の各ステップと同一であり、説明を省略する。
【００６１】
ステップＳ４０１では、共用割込み管理テーブル２５０の、ステップＳ３０１より取得した割込み番号の行を参照し、デバイス優先度が最も高いＩ／Ｏデバイスを有するゲストＯＳが、出力先プロセッサとして指定するプロセッサを、共用割込み受付先プロセッサとして登録する。
また、ステップＳ４０２では、仮想計算機モニタ２００が、割込みコントローラ１２０を操作し、該割込み番号に対して、出力先プロセッサとして「共用割込み受付プロセッサ」の内容を設定し、割込みベクタとして「共用割込み用割込みベクタ」の内容を設定する。
例えば、図１３の共用割込み管理テーブル２５０の設定例では、割込み番号１７番の割込みについて、デバイス優先度が最も高いＩ／ＯデバイスはＩ／Ｏデバイス１３０−１であり、そのＩ／Ｏデバイスを使用するゲストＯＳ４００−１は、プロセッサ１１０−２を注入先プロセッサとして設定している。
よって、ステップＳ４０１では、プロセッサ１１０−２が共用割込み受付プロセッサの項に設定される。
そして、ステップＳ４０２で、仮想計算機モニタ２００は、割込みコントローラ１２０を操作し、割込み番号１７番に対して、出力先プロセッサとしてプロセッサ１１０−２を設定し、割込みベクタとして２４１番を設定する。
【００６２】
図１５は、本実施の形態において、共用割込みが発生した場合の割込み処理の手順を示すフローチャートである。
ステップＳ４１１及びＳ４１２以外のステップは、実施の形態３のフローチャートＳ３１０の各ステップと同一であり、説明を省略する。
【００６３】
共用割込みが発生すると、ステップＳ４１１で、割込みコントローラ１２０は、仮想計算機モニタ２００による設定に従い、共用割込み受付プロセッサに対して、共用割込み用割込みベクタを出力する。
その後、ステップＳ４１２では、仮想計算機モニタ２００は、ステップＳ３１１で特定した注入先プロセッサと、共有割込み受付先プロセッサが等しいかどうかチェックする。
例えば、図１３の共用割込み管理テーブル２５０の設定例における、動作例について説明する。
Ｉ／Ｏデバイス１３０−１が割込み番号１７番の割込みを発生した場合、ステップＳ４１１にて、共用割込み受付プロセッサであるプロセッサ１１０−２に対して、割込みベクタ２４１番が出力される。
そして、注入先プロセッサと共用割込み受付プロセッサが等しいため、ステップＳ１２６における割込みベクタの転送は行わずに、ステップＳ１２７で、割込みベクタをゲストＯＳ４００−１に注入する。
また、Ｉ／Ｏデバイス１３０−０が割込み番号１７番の割込みを発生した場合、ステップＳ４１１にて、共用割込み受付プロセッサであるプロセッサ１１０−２に対して、割込みベクタ２４１番が出力さる。
そして、注入先プロセッサが１１０−０であり、共用割込み受付プロセッサと異なるため、ステップＳ１２６で、割込みベクタを注入先プロセッサに転送し、ステップＳ１２７で、割込みベクタをゲストＯＳ４００−０に注入する。
【００６４】
以上に示すように、本実施の形態では、共用割込みの発生時には、その割込み番号を使用するＩ／Ｏデバイスの中で、デバイス優先度が最も高いＩ／Ｏデバイスを有するゲストＯＳのプロセッサが、割込みを受け付けるので、割込みの転送が不要であり、デバイス優先度が最も高いＩ／Ｏデバイスの割込み処理のオーバヘッドを削減することができる。
【００６５】
以上、本実施の形態では、
前記仮想計算機モニタは、さらに、共用される割込み番号の割込みを、前記仮想計算機モニタがどのプロセッサで受け付けるかを決定する「外部割込み受付プロセッサ管理部」を備え、
前記共用割込み管理テーブルは、さらに、共用される割込み番号の割込みを受け付けるプロセッサを保持する「共用割込み受付プロセッサ」の項を有し、
前記仮想計算機モニタは、割込み番号ごとに、デバイス優先度が最も高いＩ／Ｏデバイスを使用するゲストＯＳによって指定されるプロセッサを、前記共用割込み管理テーブルの前記共用割込み受付プロセッサの項に登録し、
前記仮想計算機モニタは、割込みコントローラを操作して、割込み番号ごとに、前記共用割込み管理テーブルの前記共用割込み受付プロセッサの項の内容を、割込みを受け付けるプロセッサとして設定することを説明した。
【００６６】
最後に、実施の形態１〜４に示した仮想計算機システム５００のハードウェア構成例、つまり、図１に示した物理計算機１００の構成例をより詳細に説明する。
なお、図１７の構成は、あくまでも物理計算機１００の構成の一例を示すものであり、物理計算機１００の構成は図１７に記載の構成に限らず、他の構成であってもよい。
【００６７】
図１７において、物理計算機１００は、プロセッサ１１０たるＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０、割込みコントローラ９０７と接続され、これらのハードウェアデバイスを制御する。
通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０は、図１に示すＩ／Ｏデバイス１３０として割込みを発生させる場合がある。
磁気ディスク装置９０２は、図１に示すディスク装置１５０の例である。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６と接続していてもよい。
また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例であり、図１に示すメモリ１４０に対応する。
ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００６８】
通信ボード９１５は、ネットワークに接続される。
例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続される。
【００６９】
磁気ディスク装置９２０には、仮想計算機モニタ９２１、ゲストＯＳ９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１、仮想計算機モニタ９２１、ゲストＯＳ９２２により実行される。
【００７０】
ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
物理計算機１００の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムにより物理計算機１００が起動され、その後、仮想計算機モニタ９２１、ゲストＯＳ９２２が起動される。
【００７１】
仮想計算機モニタ９２１には、実施の形態１〜４で説明した外部割込みハンドラ２１０、プロセッサ間通信制御部２２０、割込み注入部２３０、共用割込み注入先決定部２４０、コントローラ登録部２８０等のソフトウェアモジュールが含まれる。
また、ゲストＯＳ９２２には、実施の形態１〜４で説明したデバイスドライバ４１０等が含まれる。
プログラム群９２３には、実施の形態１〜４に示されゲストＯＳにより実施されるアプリケーションプログラム等が含まれる。
【００７２】
更に、ファイル群９２４には、実施の形態１〜４の説明において、「〜の判断」、「〜の判定」、「〜の実行」、「〜の比較」、「〜の登録」、「〜の更新」、「〜の設定」、「〜の選択」、「〜の特定」、「〜の指定」、「〜の入力」、「〜の出力」、「〜の転送」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜４で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００７３】
また、実施の形態１〜４の説明において「〜処理」として説明しているものは「〜ステップ」、「〜手順」であってもよい。
また、「〜処理」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、ソフトウェアとファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。
【符号の説明】
【００７４】
１１０  プロセッサ、１１１  プロセッサ間割込み制御部、１２０  割込みコントローラ、１３０  Ｉ／Ｏデバイス、１４０  メモリ、１５０  ディスク装置、２００  仮想計算機モニタ、２１０  外部割込みハンドラ、２２０  プロセッサ間通信制御部、２３０  割込み注入部、２４０  共用割込み注入先決定部、２５０  共用割込み管理テーブル、２６０  割込み状態レジスタ保存領域、２７０  外部割込み受付プロセッサ管理部、２８０  コントローラ登録部、４００  ゲストＯＳ、４１０  デバイスドライバ、４１１  割込みハンドラ、４１２  割込み元判定手段、５００  仮想計算機システム。
【図１】
0005611060.tif 000002
【図２】
0005611060.tif 000003
【図３】
0005611060.tif 000004
【図４】
0005611060.tif 000005
【図５】
0005611060.tif 000006
【図６】
0005611060.tif 000007
【図７】
0005611060.tif 000008
【図８】
0005611060.tif 000009
【図９】
0005611060.tif 000010
【図１０】
0005611060.tif 000011
【図１１】
0005611060.tif 000012
【図１２】
0005611060.tif 000013
【図１３】
0005611060.tif 000014
【図１４】
0005611060.tif 000015
【図１５】
0005611060.tif 000016
【図１６】
0005611060.tif 000017
【図１７】
0005611060.tif 000018