(57)【要約】【課題】x86互換計算機で提供されている標準機能のみを用いた占有Ｉ／Ｏデバイスの割り込みオーバヘッドの削減と共有Ｉ／Ｏデバイスに必要なエミュレータの実行を両立する。【解決手段】ＶＭＭが１つ以上のＣＰＵで割り込み横取りフラグを無効化して割り込み受信時にＯＳの割り込みハンドラコードを実行させ、１つ以上のＣＰＵで割り込み横取りフラグを有効化して割り込み受信時にＶＭＭ内のエミュレータを実行させる。仮想計算機に対してＩ／Ｏデバイスが占有、かつ、ＣＰＵが割り込み横取り無効化で割り当てられている場合は、該当する物理Ｉ／Ｏデバイスの割り込みの宛先を、該当する割り込み横取り無効の物理ＣＰＵに設定する。仮想計算機に対してＩ／Ｏデバイスが共有、又は、ＣＰＵが割り込み横取り無効化で割り当てられている場合は、該当する物理Ｉ／Ｏデバイスの割り込みの宛先を割り込み横取りが有効な物理ＣＰＵに設定する。【選択図】図１１Ａ
2010128911.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理ＣＰＵと、物理メモリとを備えた物理計算機で仮想計算機を提供する仮想化部を実行し、前記仮想化部は所定のエミュレータを含んで前記仮想計算機上でＯＳを稼動させる仮想計算機の制御方法であって、
前記物理ＣＰＵは、前記仮想計算機の割り込み受信時に実行される割り込みハンドラを設定可能な物理ＣＰＵであり、
前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップと、
前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップと、
を含むことを特長とする仮想計算機の制御方法。
【請求項２】
請求項１に記載の仮想計算機の制御方法であって、
前記物理計算機は１つ以上の物理Ｉ／Ｏデバイスを含み、
前記仮想化部は、前記仮想計算機に１つ以上の仮想ＣＰＵと１つ以上の仮想Ｉ／Ｏデバイスを提供し、
前記仮想化部が、前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが単一の仮想計算機によって直接利用される第１の形態または前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第２の形態で割り当てるステップと、
前記仮想化部が、前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時にＯＳを実行する第３の形態または前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時に前記エミュレータを実行する第４の形態で割り当てるステップと、をさらに含み、
前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップは、
前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが単一の仮想計算機による直接利用を許す第１の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時にＯＳを実行する第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込み受信時に前記物理ＣＰＵでＯＳを実行させ、
前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップは、
前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記エミュレータによって複数の仮想計算機で間接利用する第２の形態で割り当てられているか、或いは 前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時に前記エミュレータを実行する第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込み受信時に前記物理ＣＰＵでエミュレータを実行させることを特徴とする仮想計算機の制御方法。
【請求項３】
請求項２に記載の仮想計算機の制御方法であって、
前記物理ＣＰＵは、ＶＴ−ｘ又はＡＭＤ−Ｖに対応したｘ８６互換の物理ＣＰＵで構成されて、前記物理ＣＰＵはマスク可能割り込みの受信時に前記エミュレータを実行させる割り込み横取り機能としてExternal Interrupt Exiting又はIntercept INTRを有し、
少なくとも１つの前記物理ＣＰＵで前記割り込み横取り機能を無効化するステップと、
少なくとも１つの前記物理ＣＰＵで前記割り込み横取り機能を有効化するステップと、をさらに含み、
前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込みを、前記割り込み横取り機能を無効化した前記物理ＣＰＵで受け取ってＯＳを実行させ、
前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられているか、或いは 前記仮想計算機を構成する仮想ＣＰＵに対して物理ＣＰＵが前記第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込みを、前記割り込み横取り機能を有効化した物理ＣＰＵで受け取って前記エミュレータを実行させることを特徴とする仮想計算機の制御方法。
【請求項４】
請求項２に記載の仮想計算機の制御方法であって、
前記物理計算機は、前記物理Ｉ／Ｏデバイスの割り込みの宛先となる物理ＣＰＵを規定するモジュールを有し、
前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ前記ＯＳが当該仮想Ｉ／Ｏデバイスの割り込みの宛先を前記モジュールを参照して変更し、かつ前記宛先に指定された仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を当該物理ＣＰＵに変更することを特徴とする仮想計算機の制御方法。
【請求項５】
請求項２に記載の仮想計算機の制御方法であって、
前記物理ＣＰＵは、マスク可能割り込みの受信時に実行される割り込みハンドラを設定可能なＣＰＵであり、
前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスの割り込みの宛先となる仮想ＣＰＵに対して、前記物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込みを受信した前記エミュレータに、当該物理ＣＰＵに対してマスク可能な物理割り込みを送信させることを特徴とする仮想計算機の制御方法。
【請求項６】
請求項２に記載の仮想計算機の制御方法であって、
前記物理ＣＰＵは、マスク不能割り込みの受信時に前記エミュレータを実行可能なＣＰＵであり、
前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップは、
前記第３の形態で割り当てられた前記物理ＣＰＵに前記エミュレータを実行させる場合に、当該物理ＣＰＵに対してマスク不能割り込みを送信することを特徴とする仮想計算機の制御方法。
【請求項７】
複数の物理ＣＰＵと物理メモリと１つ以上の物理Ｉ／Ｏデバイスを有する物理計算機で所定のエミュレータを含む仮想計算機を提供し、前記仮想計算機上でＯＳを稼動させる仮想計算機の制御プログラムであって、
前記物理計算機は、前記物理Ｉ／Ｏデバイスの割り込みの宛先物理ＣＰＵを規定するモジュールを有し、
前記物理ＣＰＵは、割り込み受信時に実行される割り込みハンドラを設定可能であり、
前記仮想計算機に１つ以上の仮想ＣＰＵと１つ以上の仮想Ｉ／Ｏデバイスを提供する手順と、
前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが単一の仮想計算機によって直接利用される第１の形態、または前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第２の形態で割り当てる手順と、
前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時にＯＳを実行する第３の形態、または前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時に前記エミュレータを実行する第４の形態で割り当てる手順と、
前記仮想ＣＰＵに対する物理ＣＰＵの割当形態が、前記割り込み受信時に前記ＯＳを実行させる第３の形態の場合のときに、前記割り込み受信時に実行される割り込みハンドラを前記ＯＳに設定する手順と、
前記仮想ＣＰＵに対する物理ＣＰＵの割当形態が、前記第４の形態の場合のときに、前記割り込み受信時に実行される割り込みハンドラを前記エミュレータに設定する手順と、
前記仮想Ｉ／Ｏデバイスに対する物理Ｉ／Ｏデバイスの割当形態が、前記第２の形態のときに、当該物理Ｉ／Ｏデバイスの割り込み宛先を、前記第４の形態で割り当てられた前記物理ＣＰＵに設定する手順と、
前記仮想Ｉ／Ｏデバイスに対する物理Ｉ／Ｏデバイスの割当形態が、前記第１の形態であって、かつ当該仮想Ｉ／Ｏデバイスの割り込みの宛先の仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、当該物理ＣＰＵに設定する手順と、
前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスの割り込みの宛先の仮想ＣＰＵに対して前記物理ＣＰＵが前記第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、前記第４の形態で割り当てられた物理ＣＰＵに設定する手順と、
を前記物理計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項８】
請求項７に記載の仮想計算機の制御プログラムであって、
前記仮想ＣＰＵに対する前記物理ＣＰＵの割当形態の指示を受け付ける手順と、
前記仮想Ｉ／Ｏデバイスに対する物理Ｉ／Ｏデバイスの割当形態の指示を受け付ける手順と、
をさらに有することを特徴とする仮想計算機の制御プログラム。
【請求項９】
請求項７に記載の仮想計算機の制御プログラムであって、
全ての前記物理ＣＰＵを前記第３の形態で利用する構成を異常と判定する手順をさらに有することを特徴とする仮想計算機の制御プログラム。
【請求項１０】
請求項７に記載の仮想計算機の制御プログラムであって、
前記物理ＣＰＵは、ＶＴ−ｘ又はＡＭＤ−Ｖに対応したｘ８６互換の物理ＣＰＵであって、マスク可能割り込みの受信時にエミュレータを実行させる割り込み横取り機能としてExternal Interrupt Exiting 又は Intercept INTRを有し、
前記仮想計算機は、仮想割り込みコントローラとして仮想ＰＩＣ及び仮想ＡＰＩＣを含み、
前記ＯＳが前記仮想ＰＩＣを使用中の場合に、前記仮想計算機に割り当てた物理Ｉ／Ｏデバイスの割り込みの宛先を、前記第４の形態の物理ＣＰＵに設定する手順と、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想計算機に割り当てた物理Ｉ／Ｏデバイスが前記第２の形態の場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、前記第４の形態の物理ＣＰＵに設定する手順と、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想計算機を構成する仮想Ｉ／Ｏデバイスの割り込みの宛先の仮想ＣＰＵに対して前記物理ＣＰＵが前記第３の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、当該物理ＣＰＵに設定する手順と、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想計算機を構成する仮想Ｉ／Ｏデバイスの割り込みの宛先仮想ＣＰＵに対して物理ＣＰＵが前記第４の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、前記第４の形態で割り当てられた前記物理ＣＰＵに設定する手順と、
を有することを特徴とする仮想計算機の制御プログラム。
【請求項１１】
請求項７に記載の仮想計算機の制御プログラムであって、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ前記ＯＳが当該仮想Ｉ／Ｏデバイスの割り込みの宛先を変更し、かつ前記宛先に指定された仮想ＣＰＵに対して前記物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を当該物理ＣＰＵに設定する手順を有することを特徴とする仮想計算機の制御プログラム。
【請求項１２】
請求項７に記載の仮想計算機の制御プログラムであって、
前記物理ＣＰＵは、マスク可能割り込みの受信時に実行される割り込みハンドラを設定可能なＣＰＵであり、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスに関する割り込みの宛先の仮想ＣＰＵに対して、前記物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みを受信した前記エミュレータが、当該物理ＣＰＵに対してマスク可能な物理割り込みを送信する手順を有することを特徴とする仮想計算機の制御プログラム。
【請求項１３】
請求項７に記載の仮想計算機の制御プログラムであって、
前記物理ＣＰＵは、マスク不能割り込みの受信時に前記エミュレータを実行可能であって、
前記第３の形態で割り当てられた物理ＣＰＵに前記エミュレータを実行させる場合に、前記マスク不能割り込みを当該物理ＣＰＵに送信する手順を有することを特徴とする仮想計算機の制御プログラム。
【請求項１４】
複数の物理ＣＰＵとメモリと１つ以上の物理Ｉ／Ｏデバイスを有し、前記物理Ｉ／Ｏデバイスの割込みの宛先を設定可能な計算機装置であって、
前記物理Ｉ／Ｏデバイスは、前記割り込みを伝達する物理ＣＰＵの識別子を格納する割り込み先格納部と、
仮想ＣＰＵと仮想Ｉ／Ｏデバイスを生成して１つ以上のＯＳを稼動させる仮想計算機を提供する仮想化部と、を備え、
前記仮想化部は、
所定の処理を代行するエミュレータと、
前記物理ＣＰＵの仮想ＣＰＵに対する割当形態として、割り込み受信時にＯＳコードを実行させる第３の形態又は、前記割り込み受信時に前記エミュレータを実行させる第４の形態を前記物理ＣＰＵ毎に保持する第１の情報と、
前記仮想ＣＰＵと物理ＣＰＵとの対応関係を保持する第２の情報と、
前記各物理Ｉ／Ｏデバイスの割当形態として、単一仮想計算機による直接利用を許す第１の形態 又は、前記エミュレータによって複数の仮想計算機で間接利用する第２の形態 を保持する第３の情報と、
前記仮想Ｉ／Ｏデバイスと物理Ｉ／Ｏデバイスとの対応関係を保持する第４の情報と、を有し、
前記エミュレータは、
前記物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられた場合に、前記物理Ｉ／Ｏデバイスの割り込み宛先を前記第４の形態で割り当てられた物理ＣＰＵに設定し、
前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスの割り込み宛先となる仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、前記物理Ｉ／Ｏデバイスの割り込みの宛先を当該物理ＣＰＵに設定し、
前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスの割り込み宛先となる仮想ＣＰＵに対して物理ＣＰＵが前記第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を前記第４の形態で割り当てられた物理ＣＰＵに設定することを特徴とする計算機装置。
【請求項１５】
請求項１４に記載の計算機装置であって、
前記仮想計算機を構成する仮想ＣＰＵと仮想Ｉ／Ｏデバイスに対する物理ＣＰＵと物理Ｉ／Ｏデバイスの対応関係を受け付けるインターフェースをさらに有し、
前記インターフェースは、
前記仮想計算機を構成する仮想ＣＰＵの数を受け付け、
前記仮想ＣＰＵに対する物理ＣＰＵの割当形態として、前記第３の形態と第４の形態の何れか一方を受け付け、
前記仮想Ｉ／Ｏデバイスに対する物理Ｉ／Ｏデバイスの割当形態として、前記第１の形態と第２の形態の何れか一方を受け付けることを特徴とする計算機装置。
【請求項１６】
請求項１４に記載の計算機装置であって、
前記エミュレータは、
前記物理ＣＰＵの全てが前記第３の形態に設定された場合に異常と判定することを特徴とする計算機装置。
【請求項１７】
請求項１４に記載の計算機装置であって、
前記物理ＣＰＵは、ＶＴ−ｘ又はＡＭＤ−Ｖに対応したｘ８６互換の物理ＣＰＵであって、かつ、マスク可能割り込みの受信時に前記エミュレータを機能させる割り込み横取り機能としてExternal Interrupt Exiting 又は Intercept INTRを有し、
前記エミュレータは、
仮想割り込みコントローラとして仮想ＰＩＣ及び仮想ＡＰＩＣを含み、
前記ＯＳが前記仮想ＰＩＣを使用中の場合に、前記仮想計算機に割り当てられた物理Ｉ／Ｏデバイスの割り込み宛先を、前記第４の形態で割り当てられた物理ＣＰＵに設定し、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込み宛先を、前記第４の形態で割り当てられた物理ＣＰＵに設定するエミュレータと、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスの割り込みの宛先の仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、当該物理ＣＰＵに設定し、
前記ＯＳが前記仮想ＡＰＩＣを使用中で、かつ前記仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ かつ 当該仮想Ｉ／Ｏデバイスの割り込みの宛先の仮想ＣＰＵに対して物理ＣＰＵが前記第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を、前記第４の形態で割り当てられた物理ＣＰＵに設定することを特徴とする計算機装置。
【請求項１８】
請求項１４に記載の計算機装置であって、
前記エミュレータは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第１の形態で割り当てられ、かつ前記ＯＳが当該仮想Ｉ／Ｏデバイスの割り込みの宛先を変更し、かつ前記宛先に指定された仮想ＣＰＵに対して前記物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みの宛先を 当該物理ＣＰＵに設定することを特徴とする計算機装置。
【請求項１９】
請求項１４に記載の計算機装置であって、
前記物理ＣＰＵは、マスク可能割り込みの受信時に実行されるコードを設定可能なＣＰＵであり、
前記エミュレータは、
前記仮想計算機を構成する仮想Ｉ／Ｏデバイスに対して物理Ｉ／Ｏデバイスが前記第２の形態で割り当てられ、かつ当該仮想Ｉ／Ｏデバイスに関する割り込みの宛先の仮想ＣＰＵに対して物理ＣＰＵが前記第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスの割り込みを受信したときに、当該物理ＣＰＵに対してマスク可能な物理割り込みを送信することを特徴とする計算機装置。
【請求項２０】
請求項１４に記載の計算機装置であって、
前記物理ＣＰＵは、マスク不能割り込みの受信時にエミュレータを実行可能なＣＰＵであり、
前記エミュレータは、
前記第３の形態で割り当てられた前記物理ＣＰＵに当該エミュレータを実行させる場合に、当該物理ＣＰＵに対してマスク不能割り込みを送信することを特徴とする計算機装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機システムに関し、仮想計算機上で稼動するＯＳに対して、Ｉ／Ｏデバイスの割り込みを伝達する技術に関する。
【背景技術】
【０００２】
サーバ台数の増加と共に運用に関する複雑さが増加しており、運用コストが問題化し、運用コストを低減する技術として複数サーバを１台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機技術が知られている。仮想計算機技術では、例えば、ハイパバイザなどのファームウェア（またはミドルウェア）が、物理計算機を複数の論理区画（ＬＰＡＲ：Logical PARtition）に分割し、各ＬＰＡＲに対して計算機資源（ＣＰＵ、メモリ、Ｉ／Ｏデバイス）を割り当て、各ＬＰＡＲ上でそれぞれＯＳを動作させる。あるいは、一つのサーバ上で一つのホストＯＳ（物理計算機を直接使用するＯＳ）を実行し、このホストＯＳ上稼動するハイパバイザが同様の分割処理を行って、複数のゲストＯＳ（ホストＯＳ上で稼動するＯＳ）を稼動させる。仮想計算機技術は、従来複数のサーバで稼動していたＯＳ及びＯＳ上で稼動するソフトウェアを、１台のサーバで稼動させることを可能にしており、サーバ統合を実現している。
【０００３】
またハイパバイザなどの仮想計算機技術は、汎用機（MainFrame）等の大型計算機で用いられてきた技術であるが、近年のマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。
【０００４】
仮想計算機技術を採用したサーバ等の計算機は、ゲスト（ゲストＯＳ及び、ゲストＯＳ上で稼動するソフトウェアの総称）を稼動させる複数の仮想計算機（Virtual Machine）と、仮想計算機の制御を行う仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭとする）とを有する。
【０００５】
一般に、ゲストは計算機のハードウェアを占有する前提で作られている。従って、仮想計算機技術によってサーバ統合を実現する上では、各仮想計算機に、各ゲストが計算機を占有する場合と同じ動作をさせる必要がある。本要件を満たすためにＶＭＭは、ゲストに含まれる特権命令（ハードウェアを操作する命令）や、ハードウェア操作の完了通知である割り込みのエミュレーションを行う。本エミュレーションに伴うオーバヘッドによって性能低下が生じるため、本エミュレーションには高速性が求められる。
【０００６】
仮想計算機は、仮想ＣＰＵ、仮想化された物理メモリ、仮想Ｉ／Ｏデバイスといった仮想部品から構成される。ＶＭＭは各仮想部品を、物理部品（物理ＣＰＵ、物理メモリ、物理Ｉ／Ｏデバイス）を占有／共有などの形態で割り当てて実現する。占有は１つの物理部品を１つの仮想計算機だけに割り当てる形態で、エミュレータ実行の一部が不要となる。共有は物理部品を複数の仮想計算機に割り当てる形態で、エミュレータの実行が不可欠となる。高性能が重視される場合は占有が用いられ、リソースの高効率利用が重視される場合は共有が用いられる。
【０００７】
従来、エミュレータはソフトウェアで実現されるケースが多く、ハードウェアによるエミュレーション支援は、メインフレーム等の高価な計算機に限られていた。従って大多数の計算機では、仮想計算機を利用する際に、ソフトウェア実行に伴う顕著なオーバヘッドが存在していた。しかし、安価かつ広範に普及しているIntel及びAMDのx86互換ＣＰＵを備える計算機に於いても、顕著なオーバヘッドを改善すべく、徐々に仮想化機能のエミュレーションを支援するハードウェアが下記のように登場しつつある。
【０００８】
（１）ＣＰＵによる命令実行に関しては、IntelのVT-x機能やAMDのAMD-V機能が命令実行を支援する。（２）ＣＰＵによるメモリ操作に関しては、IntelのEPT(Extended Page Table)やAMDのNested Page Tableがアドレス変換を支援する。（３）Ｉ／Ｏデバイスによるメモリ操作に関しては、IntelのVT-dやAMDのIOMMUがアドレス変換を支援する。（４）ＣＰＵによるＩ／Ｏデバイス操作に関しては、PCI-SIGのSR-IOVがデバイス操作を支援する。
【０００９】
上記ハードウェアによる仮想化機能の支援（ＶＭＸ：Virtual Machine Extensions）については、例えば、非特許文献１のChapter 29-3には、x86互換ＣＰＵに実装されたExternal Interrupt Exiting 機能を用いる割り込み伝達技術（以下、従来技術１）が記載されている。External Interrupt Exitingとは、物理Ｉ／Ｏデバイスの割り込みを契機にＶＭＭ等の仮想化ソフトを実行させる機能である。仮想化ソフトは全てのＣＰＵに対してExternal Interrupt Exitingを有効にし、物理Ｉ／Ｏデバイスの割り込みを全て受け取る。割り込みを受けた仮想化ソフトは割り込みの発生源を特定し、占有Ｉ／Ｏデバイスであれば、仮想ＣＰＵの処理をＯＳの割り込みハンドラへ分岐させる。共有Ｉ／Ｏデバイスであればエミュレータを実行し、仮想ＣＰＵの処理をＯＳの割り込みハンドラへ分岐させる。
【００１０】
また、特許文献１米には、汎用機向けの割り込み伝達技術（以下、従来技術２）が記載されている。本技術ではＣＰＵが、占有Ｉ／Ｏデバイスから伝達される割り込みと、共有Ｉ／Ｏデバイスから伝達される割り込みを区別し、前者であれば仮想化ソフトを介さずに直接ＯＳの割り込みハンドラに分岐する機能を有する。本機能を用いる場合、後者であればＣＰＵが仮想化ソフトを呼び出す。仮想化ソフトは、ＣＰＵに対してＩ／Ｏデバイスの割り当て形態を設定し、共有Ｉ／Ｏデバイスからの割り込みに対してエミュレータを実行させる。またエミュレータ実行後は、仮想化ソフトが仮想ＣＰＵをＯＳの割り込みハンドラに分岐させる。
【特許文献１】米国特許第5,109,489号明細書
【非特許文献１】”Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide Part 2”、［online］、２００８年９月、Intel  Corp、［平成２０年１０月１日検索］、インターネット＜ＵＲＬ：http://download.intel.com/design/processor/manuals/253669.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところがx86互換計算機に於いては、（５）Ｉ／ＯデバイスによるＣＰＵ操作に該当する割り込み伝達に関しては、下記の理由から支援機能が存在しない。一般に、ＣＰＵの支援機能の追加は動作周波数の低下や消費電力の増加を招く。x86互換ＣＰＵはサーバから組み込み機器まで広範な用途で同一仕様のＣＰＵが使用されるため、動作周波数や消費電力が悪化する恐れのある支援機能は、オーバヘッドが顕著でない限り敬遠される。割り込み伝達のオーバヘッドは他より１桁程度小さいため、支援機能の提供が敬遠されている。
【００１２】
各種支援機能の登場によって顕著なオーバヘッドが削減され、仮想計算機に付随するオーバヘッドは（５）が主要因になりつつある。従ってオーバヘッドの更なる改善のためには、x86互換計算機に於ける割り込み伝達のオーバヘッド削減が課題となる。
【００１３】
上記従来技術１では、Ｉ／Ｏデバイスの割り当て形態と無関係に、仮想化ソフトが割り込みを受け、ＣＰＵの処理をＯＳのハンドラに分岐させる。上記従来技術１は、共有Ｉ／Ｏデバイスに対しては必要最低限の処理となるが、占有Ｉ／Ｏデバイスに対しては本質的に仮想化ソフトを呼び出す必要が無い。従って占有Ｉ／Ｏデバイスに対する割り込み伝達のオーバヘッド削減が課題となる。
【００１４】
上記従来技術２では、動作周波数や消費電力が大きな問題になっていなかった汎用機を前提とし、ハードウェア支援機能による高速化を実現している。本支援機能は、今日、広く普及しているx86互換計算機ではサポート予定が無いため、本技術の適用に必要なハードウェアの制限緩和が課題となる。
【００１５】
上記問題点を鑑みて本発明では、x86互換計算機でポートされている標準機能のみを用いた、占有Ｉ／Ｏデバイスの割り込みオーバヘッドの削減と共有Ｉ／Ｏデバイスに必要なエミュレータ実行の両立を目的とする。
【課題を解決するための手段】
【００１６】
本発明は、複数の物理ＣＰＵと、物理メモリとを備えた物理計算機で仮想計算機を提供する仮想化部を実行し、前記仮想化部は所定のエミュレータを含んで前記仮想計算機上でＯＳを稼動させる仮想計算機の制御方法であって、前記物理ＣＰＵは、前記仮想計算機の割り込み受信時に実行される割り込みハンドラを設定可能な物理ＣＰＵであり、物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップと、前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップと、を含む。
【００１７】
また、前記物理計算機は１つ以上の物理Ｉ／Ｏデバイスを含み、前記仮想化部は、前記仮想計算機に１つ以上の仮想ＣＰＵと１つ以上の仮想Ｉ／Ｏデバイスを提供し、前記仮想化部が、前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが単一の仮想計算機によって直接利用される第１の形態または前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第２の形態で割り当てるステップと、前記仮想化部が、前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時にＯＳを実行する第３の形態または前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時に前記エミュレータを実行する第４の形態で割り当てるステップと、をさらに含み、前記物理ＣＰＵのうち少なくとも１つの前記第一の物理ＣＰＵで前記割り込み受信時に前記ＯＳを実行させるステップは、前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが単一の仮想計算機による直接利用を許す第１の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時にＯＳを実行する第３の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込み受信時に前記物理ＣＰＵでＯＳを実行させ、前記前記物理ＣＰＵのうち少なくとも１つの第二の物理ＣＰＵで前記割り込み受信時に前記エミュレータを実行させるステップは、前記仮想計算機を構成する前記仮想Ｉ／Ｏデバイスに対して前記物理Ｉ／Ｏデバイスが前記エミュレータによって複数の仮想計算機で間接利用する第２の形態で割り当てられているか、或いは 前記仮想計算機を構成する前記仮想ＣＰＵに対して前記物理ＣＰＵが割り込み受信時に前記エミュレータを実行する第４の形態で割り当てられている場合に、当該物理Ｉ／Ｏデバイスからの割り込み受信時に前記物理ＣＰＵでエミュレータを実行させる。
【発明の効果】
【００１８】
本発明では第１の形態で割り当てられた占有Ｉ／Ｏデバイスの割り込みを割り込み横取りが無効のＣＰＵで受ける場合の割り込み伝達オーバヘッドを削減し、第２の形態で割り当てられた共有Ｉ／Ｏデバイスの割り込みは必ず割り込み横取りが有効のＣＰＵで受けるためエミュレータを実行できる。これにより、占有Ｉ／Ｏデバイスの割り込みオーバヘッドの削減と共有Ｉ／Ｏデバイスに必要なエミュレータの実行を両立させることができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００２０】
本実施形態では、仮想計算機に対するＣＰＵの割当に関して、物理ＣＰＵを単一の仮想計算機で占有しかつ割り込みの横取りを無効とする Exclusive形態(以下、単にExclusiveと記載)と、物理ＣＰＵを複数の仮想計算機で共有かつ割り込みの横取りを有効とするShare形態(以下、Shareと記載)のみを許す。
【００２１】
＜１．ハードウェア構成＞
図１は、本発明の第１実施形態を示し、仮想計算機システムを動作させる物理計算機１の構成を示す。物理計算機１は、仮想化支援機能であるＶＴ−ｘ又はＡＭＤ−Ｖに対応したｘ８６（またはＩＡ−３２）互換のＣＰＵ（またはプロセッサ）６０を２つ以上（または２ソケット以上）有し、これらのＣＰＵ６０−１〜６０−ｎはＦＳＢ（Front Side Bus）等に代表されるＣＰＵ間インターフェース１４０を介してノースブリッジ１２０（またはメモリコントローラ）に接続される。１番目のＣＰＵであるＣＰＵ６０−１は、起動直後から動作を開始するＢＳＰ(Boot Strap Processor)であり、２番目以降のＣＰＵであるＣＰＵ６０−２〜６０−ｎは、ＢＳＰの指示を受けてから動作を開始するＡＰ(Application Processor)である。なお、以下の説明では個々のＣＰＵを６０−１〜６０−ｎとし、ＣＰＵの総称をＣＰＵ６０とする。
【００２２】
ノースブリッジ１２０には、メモリバス１６０を介してメモリ１１０が接続され、また、バス１８０を介してＩ／Ｏデバイス１７０が接続される。Ｉ／Ｏデバイス１７０はＬＡＮ１９０に接続されるネットワークアダプタ、ディスク装置２００等に接続されるＳＣＳＩアダプタ、ＳＡＮ２１０（Storage  Area  Network）に接続されるファイバーチャネルアダプタなどで構成される。
【００２３】
ＣＰＵ６０はノースブリッジ１２０を介してメモリ１１０にアクセスし、ノースブリッジ１２０からＩ／Ｏデバイス１７０−１〜１７０−ｎにアクセスして所定の処理を行う。なお、Ｉ／Ｏデバイス１７０ａ〜１７０ｎとしては、Ｉ／Ｏデバイス１７０−１がネットワーク１９０に接続されたネットワークアダプタで構成され、Ｉ／Ｏデバイス１７０−２がＨＤＤ２００に接続されたディスクアダプタ（例えば、ＳＣＳＩ）で構成され、Ｉ／Ｏデバイス１７０−ｎがＳＡＮ２１０を介してストレージ装置に接続されたファイバーチャネルアダプタ（またはＨＢＡ：Host Bus Adapter）で構成された例を示す。また、以下の説明では、個々のＩ／Ｏデバイスを１７０−１〜１７０−ｎとし、Ｉ／Ｏデバイスの総称をＩ／Ｏデバイス１７０とする。
【００２４】
なお、ノースブリッジ１２０はメモリ１１０を制御するとともに、グラフィックコントローラを含んでオペレータとの間で入出力を行うコンソール１５０にも接続され、画像の表示を行うことができる。
【００２５】
メモリ１１０には、仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭ）２０がロードされ、このＶＭＭ２０が実現する仮想計算機３０が、ＯＳ４０を実行する。ＯＳ４０は仮想計算機３０上で、任意のＡＰ５０（Application）を実行する。
【００２６】
割り込み伝達に関して、Ｉ／Ｏデバイス１７０は、割り込みを伝達する宛先ＣＰＵや伝達手段などを規定する割り込みパラメータ２２０を有する。Ｉ／Ｏデバイス１７０で割り込みが生じると、バス１８０を介してこの割り込みがノースブリッジ１２０に伝達される。ノースブリッジはＰＩＣ９０（Programmable Interrupt Controller）とＩＯＡＰＩＣ８０（I/O Advanced PIC）を有している。割り込みパラメータ２２０の設定がＭＳＩ（Message Signaled Interrupt）を無効にしている場合は、割り込みがＰＩＣ９０に貯蔵され、更にＩＯＡＰＩＣ８０のレジスタ設定に従ってＣＰＵ６０内のＬＡＰＩＣ７０（Local Advanced PIC）にも貯蔵される。割り込みパラメータ２２０の設定がＭＳＩを有効にしている場合は、割り込みはＬＡＰＩＣ７０にのみ貯蔵される。貯蔵された割り込みは、ＣＰＵ６０が割り込みを許可した時に消費され、ＣＰＵ６０は割り込み受信時の処理を開始する。
【００２７】
なお、ＶＭＭ２０は、記憶媒体としてのＨＤＤ２００やストレージ装置に格納され、物理計算機１の起動時にメモリ１１０へロードされてＣＰＵ６０に実行される。
【００２８】
また、図１では、ノースブリッジ１２０にメモリコントローラを内蔵した例を示したが、ＣＰＵ６０にメモリコントローラを備えても良く、この場合、各ＣＰＵ６０がメモリバス１６０を備えてメモリ１１０に接続される。
【００２９】
＜２．ソフトウェア構成＞
次に、物理計算機１上で仮想計算機３０を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図２を参照しながら詳述する。
【００３０】
物理計算機１上では、複数の仮想計算機３０−１〜３０−ｎを管理するＶＭＭ２０が稼動している。各仮想計算機（仮想化部）３０では、ＶＭＭ２０が仮想ＣＰＵ６００−１〜６００−ｎ及び仮想Ｉ／Ｏデバイス１７００−１〜１７００−ｎを提供し、ＯＳ４０−１〜４０−ｎが１つ以上稼動する。またＯＳ４０の上では、アプリケーション（ＡＰ５０）が１つ以上稼動する。なお、以下の説明では、個々の仮想計算機を３０−１〜３０−ｎとし、仮想計算機の総称を仮想計算機３０とする。同様に、個々のＯＳを４０−１〜４０−ｎとし、ＯＳの総称をＯＳ４０とし、個々の仮想ＣＰＵを仮想ＣＰＵ６００−１〜６００−ｎとし、仮想ＣＰＵの総称を仮想ＣＰＵ６００とし、個々の仮想Ｉ／Ｏデバイスを仮想Ｉ／Ｏデバイス１７００−１〜１７００−ｎとし、仮想Ｉ／Ｏデバイスの総称を仮想Ｉ／Ｏデバイス１７００とする。１番目の仮想ＣＰＵである仮想ＣＰＵ６００−１は、仮想計算機の起動直後から動作を開始する仮想ＢＳＰ(Boot Strap Processor)であり、２番目以降の仮想ＣＰＵであるＣＰＵ６００−２〜６００−ｎは、仮想ＢＳＰの指示を受けてから動作を開始する仮想ＡＰ(Application Processor)である。
【００３１】
ＯＳ４０は、Ｉ／Ｏデバイス１７０の割り込みを受けてＩ／Ｏデバイス１７０を制御する割り込みハンドラ３００を有する。なお、以下の説明では、個々の割り込みハンドラを３００−１〜３００−ｎとし、割り込みハンドラの総称を割り込みハンドラ３００とする。
【００３２】
ＶＭＭ２０は、ＣＰＵ６０、Ｉ／Ｏデバイス１７０、割り込み伝達などをエミュレーションするエミュレータ３１０と、物理割り込みを契機に呼び出される物理割り込み受信部３９０と、物理ＣＰＵ６０と物理Ｉ／Ｏデバイス１７０の仮想ＣＰＵ６００と仮想Ｉ／Ｏデバイス１７００に対する割り当てを規定するリソース管理表４１０を有する。
【００３３】
エミュレータ３１０は、ＰＩＣ９０の共有割り当てを実現するＰＩＣエミュレータ３２０と、ＡＰＩＣ（ＩＯＡＰＩＣ８０とＬＡＰＩＣ７０の総称）の共有割り当てを実現するＡＰＩＣエミュレータ３３０と、Ｉ／Ｏデバイス１７０の共有割り当てを実現するＩ／Ｏエミュレータ３４０と、ＣＰＵの共有割り当てを実現するＣＰＵ割り当て時間管理部３５０と、物理Ｉ／Ｏデバイスの割り込みの宛先を適切な物理ＣＰＵに保つ物理割り込み宛先管理部３６０と、仮想計算機の動作を開始／終了させるＡＣＴ／ＤＥＡＣＴ部３７０と、ＣＰＵ３０とＩ／Ｏデバイス１７０などの割り当てインターフェースを制御するコンソール制御部３８０を含む。
【００３４】
ＰＩＣエミュレータ３２０は、各仮想計算機３０に２つずつ含まれる各仮想ＰＩＣに対応した仮想ＰＩＣレジスタ４７０−１〜４７０−ｓを有する。仮想ＰＩＣレジスタ４７０−１〜４７０−ｓには、図示しない割り込みを貯蔵するＩＲＲ（Interrupt Request Register）などが含まれる。なお、ｘ８６互換の物理計算機１では、ノースブリッジ１２０のＰＩＣ９０は２つのＰＩＣで構成されるため、各仮想計算機３０の仮想ＰＩＣも２つのＰＰＩＣで構成する。
【００３５】
ＡＰＩＣエミュレータ３３０は、各仮想ＣＰＵ６００に１つ含まれる仮想ＬＡＰＩＣに対応した仮想ＬＡＰＩＣレジスタ４８０−１〜４８０−ｔと、各仮想計算機３０に１つ以上割り当てられる各仮想ＩＯＡＰＩＣに対応した仮想ＩＯＡＰＩＣレジスタ４８５−１〜４０８−ｔを有する。仮想ＬＡＰＩＣレジスタ４８０−１〜４８０−ｔには、割り込みを貯蔵するＩＲＲ（図示省略）などが含まれる。仮想ＩＯＡＰＩＣレジスタ４８５−１〜４８５−ｕには、割り込みの宛先ＣＰＵを規定する宛先フィールドなどが含まれる。
【００３６】
Ｉ／Ｏエミュレータ３４０は、ネットワークアダプタやファイバーチャネルアダプタなどの動作をエミュレーションするモジュールである。また、Ｉ／Ｏエミュレータ３４０は、仮想割り込みの伝達に備えて、各仮想Ｉ／Ｏデバイス１７００の仮想割り込みパラメータ４９０−１〜４９０−ｕを保持する。
【００３７】
ＣＰＵ割当時間管理部３５０は、全ての仮想ＣＰＵ６００を予め設定した比率で実行させるために、仮想ＣＰＵ６００に対する物理ＣＰＵ６０の割り当て時間を管理し、持ち時間を使い切った仮想ＣＰＵ６００を一時停止させ、他の仮想ＣＰＵ６００の動作を再開させる。
【００３８】
物理割り込み宛先管理部３６０は、仮想計算機３０の動作開始（ＡＣＴ）時、仮想計算機の動作終了（ＤＥＡＣＴ）時、または仮想割り込みパラメータ４９０の変更時などに、物理Ｉ／Ｏデバイス１７０の割り込み宛先を変更する。物理Ｉ／Ｏデバイス１７０が共有割り当ての場合は、割り込みの宛先をShareのＣＰＵ６０に変更する。物理Ｉ／Ｏデバイス１７０が占有割り当ての場合は、対応する仮想Ｉ／Ｏデバイス１７００の割り込みの宛先がShareの仮想ＣＰＵ６００であれば、同物理Ｉ／Ｏデバイス１７０の割込みの宛先をいずれかのShareの物理ＣＰＵ６０に設定し、対応する仮想Ｉ／Ｏデバイス１７００の割り込みの宛先がExclusiveの仮想ＣＰＵ６００であれば、同物理Ｉ／Ｏデバイス１７０の割込みの宛先を、同仮想ＣＰＵ６００に割り当てられたExclusiveの物理ＣＰＵ６０に設定する。
【００３９】
ＡＣＴ／ＤＥＡＣＴ部３７０は、仮想計算機の開始または終了時に、物理Ｉ／Ｏデバイス１７０やエミュレータ内のデータの初期化またはリセットを行う。
【００４０】
コンソール制御部３８０は、ユーザがＣＰＵ６０にＩ／Ｏデバイス１７０を割り当てるために使用するコンソール１５０を制御する。
【００４１】
物理割り込み受信部３９０は、物理Ｉ／Ｏデバイス１７０の割り込みを受信して、割り込みを発した物理Ｉ／Ｏデバイス１７０を特定し、物理Ｉ／Ｏデバイス１７０−１〜１７０−ｕ毎に予め設定したエミュレータを呼び出す。例えば、割り込みを発した物理Ｉ／Ｏデバイス１７０が共有割り当てされたネットワークアダプタであれば、Ｉ／Ｏエミュレータ３４０を呼び出してネットワークアダプタをエミュレーションさせる。
【００４２】
リソース管理表４１０は、ＣＰＵ６０やＩ／Ｏデバイス１７０の割り当てを規定する表であり、物理ＣＰＵ６０の割り当てを規定する物理ＣＰＵ管理表４２０と、物理Ｉ／Ｏデバイス１７０の割り当てを規定する物理Ｉ／Ｏデバイス管理表４３０と、仮想ＣＰＵ６００の割り当てを規定する仮想ＣＰＵ管理表４４０と、仮想Ｉ／Ｏデバイス１７００の割り当てを規定する仮想Ｉ／Ｏデバイス管理表４５０と、リソースが確定する前の割り当て内容を保持する割当仮入力表４６０から成る。
【００４３】
物理計算機１は、ｘ８６互換のＣＰＵ６０を２つ以上有し、１つ以上の物理Ｉ／Ｏデバイス１７０と、１つ以上の物理ＩＯＡＰＩＣ８０と、コンソール１５０を有する。
【００４４】
ＣＰＵ６０−１〜６０−ｎは割り込み横取りフラグ６１−１〜６１−ｎ、物理ＬＡＰＩＣ７０−１〜７０−ｎを有する。
【００４５】
割り込み横取りフラグ６１−１〜６１−ｎは、当該フラグが有効な場合にはＣＰＵ６０がマスク可能割り込みを受けた時にＶＭＭ２０の有する物理割り込み受信部３９０を呼び出す。一方、当該フラグが無効な場合には、ＣＰＵ６０がマスク可能割り込みを受けた時にＯＳ４０の割り込みハンドラ３００を呼び出す。
【００４６】
物理ＬＡＰＩＣ７０−１〜７０−ｎは、タイマ７１−１〜７１−ｎと割り込み用ＩＤ７２−１〜７２−ｎを含む。タイマ７１−１〜７１−ｎはＣＰＵ割り当て時間管理部３５０によるＣＰＵ時間の計測に使用される。割り込み用ＩＤ７２−１〜７２−ｎは、物理ＬＡＰＩＣ７０−１〜７０−ｎを一意に区別するための数値であり、物理割り込みの宛先を規定するために使用される。
【００４７】
物理Ｉ／Ｏデバイス１７０は、シリアルポート（ＲＳ２３２Ｃ）等の一部の旧式デバイスを除いて、物理割り込みパラメータ２２０−１〜２２０−ｎを含む。
【００４８】
物理ＩＯＡＰＩＣ８０は、旧式デバイスのために 物理Ｉ／Ｏデバイス１７０の外に物理割り込みパラメータ２２０を保持する装置である。
【００４９】
コンソール１５０は、仮想計算機３０に対してＣＰＵの割り当てをExclusive/Shareから選択させ、Ｉ／Ｏデバイスの割り当てを占有／共有から選択させるユーザインターフェースである。
【００５０】
図３はＶＭＭ２０が管理するメモリ１１０の一例を示す。
【００５１】
ＶＭＭ２０は、メモリ１１０上に自身を配置する領域と、仮想計算機３０が使用する領域を割り当てる。例えば図３のように、ＶＭＭ２０は、自身にアドレスＡＤ０〜ＡＤ１を割り当て、仮想計算機３０−１にアドレスＡＤ１〜ＡＤ２を、仮想計算機３０−ｎにアドレスＡＤ３〜ＡＤ４を割り当てる。
【００５２】
各仮想計算機３０の領域には、各ＯＳ４０と各ＯＳの割り込みハンドラ３００が含まれる。
【００５３】
ＶＭＭ２０が使用する領域には、エミュレータ３１０と、物理割り込み受信部３９０と、リソース管理表４１０が割り当てられる。
【００５４】
図４はＩ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれる項目の構成図である。割り込みパラメータ２２０は、ＭＳＩ Enable２２２、ＭＳＩパラメータ２２４、ＭＳＩ−Ｘ Enable２２６、ＭＳＩ−Ｘパラメータリスト２２８から成る。
【００５５】
ＭＳＩ Enable２２２とＭＳＩ−Ｘ Enable２２６は、それぞれＭＳＩとＭＳＩ−Ｘを有効化または無効化するフラグである。ＭＳＩ Enable２２２を１に、ＭＳＩ−Ｘ Enable２２６を０にすれば、割り込みの宛先指定にはＭＳＩパラメータ２２４が使用され、割り込みはＬＡＰＩＣ７０のみに貯蔵される。ＭＳＩ Enable２２２を０に、ＭＳＩ−Ｘ Enable２２６を１にすれば、割り込みの宛先指定にはＭＳＩパラメータリスト２２８が使用され、割り込みはＬＡＰＩＣ７０のみに貯蔵される。ＭＳＩ Enable２２２を０に、ＭＳＩ−Ｘ Enable２２６を０にすれば、割り込みの宛先指定には物理ＩＯＡＰＩＣ８０のレジスタ設定値が使用され、割り込みはノースブリッジ１２０のＰＩＣ９０とＣＰＵ６０のＬＡＰＩＣ７０の両方に貯蔵される。
【００５６】
ＭＳＩパラメータ２２４は、宛先２３０−１〜２３０−Ｎとベクタ２４０−１〜２４０−Ｎを含む。宛先２３０−１〜２３０−Ｎは、割り込みを受けるべきＣＰＵ６０の割り込み用ＩＤ７２を規定する。ベクタ２４０は、割り込みを受けたＣＰＵ６０が割り込みハンドラ３００又は物理割り込み受信部３９０に分岐する際に渡す数値であり、割り込みを起こしたＩ／Ｏデバイスの識別に用いられる。
【００５７】
ＭＳＩ−Ｘパラメータリスト２２８は、複数の宛先２３０−１〜２３０−Ｎとベクタ２４０−１〜２４０−Ｎを含む。ＭＳＩ−ＸにはＩ／Ｏデバイス１７０による割り込みの理由に応じて、異なる宛先２３０とベクタ２４０で割り込みを伝達する機能がある。本機能を実現するために、割り込みの理由に対応したエントリが複数存在し、各エントリに宛先２３０とベクタ２４０を指定できる。
【００５８】
図５はリソース管理表４１０を構成する割当仮入力表４６０のフォーマットを示す構成図である。割当仮入力表４６０は、物理Ｉ／Ｏデバイス使用形態４３３と、仮想計算機３０の構成情報を保持する。仮想計算機３０の構成情報として、仮想計算機番号４４１、稼動状態４６２、割り当てメモリ量４６３、ExclusiveＣＰＵ数４６４、ShareＣＰＵ数４６５、仮想Ｉ／Ｏデバイス１７００の割り当て有無４６６を保持する。
【００５９】
物理Ｉ／Ｏデバイス使用形態４３３は、物理Ｉ／Ｏデバイス１７０毎に占有割り当てで使用するか、共有割り当てで使用するかの分類を保持する。
【００６０】
仮想計算機番号４４１は、仮想計算機３０に付加した通し番号を保持する。
【００６１】
稼動状態４６２は、仮想計算機３０が稼動開始（ＡＣＴ）したか、稼動終了（ＤＥＡＣＴ）しているかを保持する。
【００６２】
割り当てメモリ量４６３は、仮想計算機３０に割り当てるメモリ１１０の量を保持する。
【００６３】
ExclusiveＣＰＵ数４６４とShareＣＰＵ数４６５は、仮想計算機３０に割り当てるＣＰＵ数を規定する、ExclusiveＣＰＵ数４６４はExclusiveＣＰＵの数を保持し、ShareＣＰＵ数４６５は、ShareＣＰＵの数を保持する。
【００６４】
仮想Ｉ／Ｏデバイス１７００の割り当て有無４６６は、仮想計算機３０に対する物理Ｉ／Ｏデバイス１７０−１〜１７０−ｎの割り当ての有無を保持する。物理Ｉ／Ｏデバイス１７の使用形態４３３が占有割り当ての場合は、１つの仮想計算機にしか割り当てできないが、共有割り当ての場合は割り当てる仮想計算機の数に制限はない。図示の例では、仮想Ｉ／Ｏデバイス１７００の割り当て有無４６６が「○」であれば、当該仮想計算機にデバイス名（デバイス１〜Ｎ）が割り当てられていることを示す。
【００６５】
割当仮入力表４６０は、主としてＤＥＡＣＴ状態の仮想計算機３０の構成規定に用いられ、ＡＣＴするまで設定値は仮想計算機３０の構成に反映されない。また、ＡＣＴ状態の仮想計算機３０の構成を動的に変更するホットプラグ機能を使用する場合も同様に、ホットプラグ開始を選択するまで設定値は仮想計算機３０の構成に反映されない。割当仮入力表４６０の情報は、ＡＣＴ時又はホットプラグ時に物理ＣＰＵ管理表４２０、物理Ｉ／Ｏデバイス管理表４３０、仮想ＣＰＵ管理表４４０、仮想Ｉ／Ｏデバイス管理表４５０に反映され、仮想計算機３０の構成に反映される。
【００６６】
なお、割当仮入力表４６０をコンソール１５０に表示して、仮想ＣＰＵや仮想Ｉ／Ｏデバイスの設定を入力する割り当てインターフェースとして使用することができる。
【００６７】
図６はリソース管理表４１０を構成する物理ＣＰＵ管理表４２０のフォーマットを示す構成図である。物理ＣＰＵ管理表４２０は、物理ＣＰＵ毎に利用形態を保持するため、物理ＣＰＵ番号４２１と物理ＣＰＵ利用形態４２２を有する。
【００６８】
物理ＣＰＵ番号４２１は、各物理ＣＰＵ６０に付加した通し番号（識別子）である。物理ＣＰＵ利用形態４２２は、各物理ＣＰＵ６０を 占有かつ割り込み横取りフラグが無効のExclusiveで使用するか、共有かつ割り込み横取りフラグが有効のShareで使用するかを保持する。
【００６９】
図７はリソース管理表４１０を構成する物理Ｉ／Ｏデバイス管理表４３０のフォーマットを示す構成図である。物理Ｉ／Ｏデバイス管理表４３０は、物理Ｉ／Ｏデバイス毎に利用形態と状態を保持するため、物理Ｉ／Ｏデバイス番号４３１と物理Ｉ／Ｏデバイス使用形態４３３と、初期化フラグ４３４を有する。
【００７０】
物理Ｉ／Ｏデバイス番号４３１は、各物理Ｉ／Ｏデバイスに付加した通し番号（識別子）である。
【００７１】
物理Ｉ／Ｏデバイス利用形態４３４は、前述の通り、各物理Ｉ／Ｏデバイス１７０を 占有で使用するか、共有で使用するかを保持する。
【００７２】
初期化フラグ４３４は、共有割当の各物理Ｉ／Ｏデバイス１７０に対して、初期化されているか未初期化であるかを保持する。
【００７３】
図８はリソース管理表４１０を構成する仮想ＣＰＵ管理表４４０のフォーマットを示す構成図である。仮想ＣＰＵ管理表４４０は、仮想ＣＰＵ６００毎に利用形態を保持するため、仮想計算機番号４４１と、仮想ＣＰＵ番号４４２と物理ＣＰＵ番号４２１を有する。
【００７４】
仮想ＣＰＵ番号４４２は、仮想計算機内の各仮想ＣＰＵ６００に付加した通し番号（識別子）である。
【００７５】
物理ＣＰＵ番号４２１は、ExclusiveのＣＰＵ６０を割り当てた場合に限って、割り当てた物理ＣＰＵ６０の通し番号を保持する。ShareのＣＰＵ６０を割り当てた場合は、本フィールドは無効である。
【００７６】
図９はリソース管理表４１０を構成する仮想Ｉ／Ｏデバイス管理表４５０のフォーマットを示す構成図である。仮想Ｉ／Ｏデバイス管理表４５０は、仮想Ｉ／Ｏデバイス１７００−１〜１７００−ｎ毎に割り当て情報と割り込みの宛先を保持するため、仮想計算機番号４４１と、仮想Ｉ／Ｏデバイス番号４５２と物理Ｉ／Ｏデバイス番号４３１を有する。
【００７７】
仮想Ｉ／Ｏデバイス番号４５２は、仮想計算機３０内の各仮想Ｉ／Ｏデバイス１７００に付加した通し番号（識別子）である。
【００７８】
物理Ｉ／Ｏデバイス番号４３１は、当該仮想Ｉ／Ｏデバイス１７００に占有又は共有で割り当てられた物理Ｉ／Ｏデバイスの番号（通し番号）を保持する。
【００７９】
＜３．ＶＭＭによる割り込み伝達処理＞
次に、ゲスト（ゲストＯＳ４０またはゲストＯＳ４０上で稼動するアプリケーション５０の総称）の動作に合わせてＶＭＭ２０が行う割り込み伝達処理の一例について、以下、フローチャートを参照しながら説明する。
【００８０】
＜３．１．ＶＭＭによる割り込み伝達処理の概要＞
図１０Ａ〜図１０Ｃは、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートである。本フローチャートは複数のＣＰＵ６０の利用を前提としており、各ＣＰＵ６０は、本フローチャートに従って独立して動作する。なお、図１０Ａは、処理の全体を示すフローチャートを示し、図１０Ｂ、図１０Ｃは図１０Ａの要因判定処理の詳細を示すフローチャートで、図１０Ｂが要因判定処理の前半を示し、図１０Ｃが要因判定処理の後半を示す。
【００８１】
まず、図１０ＡのＳ１００１では、物理ＣＰＵ６０の数や物理Ｉ／Ｏデバイス１７０の種類と数を認識してＶＭＭ２０内のデータを初期化し、Ｓ１０００に進む。
【００８２】
Ｓ１０００では、ＶＭＭ２０が割り込みを待つ。割り込みがあればＳ１００５に進み、割り込みが無ければＳ１０００に戻る。
【００８３】
Ｓ１００５では、ＶＭＭ２０が割り込みの原因を判定する。割り込みがコンソール１５０からの割り込みであれば、Ｓ１０１０に進む。その他の割り込みであればＳ１０００に進む。
【００８４】
Ｓ１０１０では、割り込みを起こしたコンソール操作が、ＡＣＴ指示であるか否かを判定する。ＡＣＴ指示であればＳ１０３０に進み、ＡＣＴ指示でなければＳ１０２０に進む。
【００８５】
Ｓ１０２０では、コンソール１５０からのユーザの入力を受け取って割当仮入力表４６０のデータを更新し、同データをコンソール１５０に表示し、Ｓ１０００に戻る。
【００８６】
Ｓ１０３０では、仮想計算機３０の動作開始処理（ＡＣＴ処理）を行い、仮想計算機３０にＣＰＵ６０とＩ／Ｏデバイス１７０などのリソースを割り当て、ＯＳ４０のコードの実行を準備し、Ｓ１０３５に進む。
【００８７】
Ｓ１０３５では、仮想計算機３０のＡＣＴ処理に成功していればＳ１１３０に進み、ＡＣＴ処理に失敗していればＳ１０００に進む。
【００８８】
Ｓ１１３０では、ＶＴ−ｘのＶＭｅｎｔｒｙやＡＭＤ−ＶのＶＭＲＵＮ命令等を用いて、ＣＰＵ６０が実行する処理をゲスト（ＯＳ４０又はＡＰ５０）のコードに分岐させ、Ｓ１０４０に進む。
【００８９】
Ｓ１０４０では、ＶＭＭ２０がＶＴ−ｘ又はＡＭＤ−Ｖの機能を利用して、ＶＭＭ２０の介入（ＶＭｅｘｉｔ）を要するイベントが生じたか否かを判定する。ゲストでＶＭｅｘｉｔが生じた場合は要因判定処理のＳ１０６０（図１０Ｂ）に進み、VMexitが生じない場合はＳ１０５０に進む。Ｓ１０５０では、ゲストコード中の命令を１命令実行し、Ｓ１０４０に戻る。
【００９０】
ゲストでＶＭｅｘｉｔが発生すると、ＶＭＭ２０が図１０Ｂの要因判定処理（Ｓ１０６０）に進み、要因判定処理では後述するようにＶＭｅｘｉｔの発生要因に応じた処理を行った後、Ｓ１０００またはＳ１１３０に戻る。
【００９１】
ここで、仮想化支援機能を備えたＣＰＵ６０では、ゲスト（ＯＳ４０またはＡＰ５０）を実行する動作モード（ＶＭＸノンルートモード）と、ＶＭＭ２０を実行する動作モード（ＶＭＸルートモード）の何れかに設定される。
【００９２】
ＶＭＸモードのＶＭＸルートモードとＶＭＸノンルートモードの遷移については、上記非特許文献１に記載されるとおりである。ここでは、概要のみについて説明する。通常動作モードからＶＭＸモードへ移行する際には、ＶＭＭ２０がＶＭＸＯＮ命令を発行し、物理ＣＰＵ６０の動作モードをＶＭＸモードに移行させる。そして、ＶＭＸモードへ移行したＶＭＭ２０はＶＭ−ｅｎｔｒｙ命令（ＶＭＬＡＵＮＣＨ命令またはＶＭＲＥＳＵＭＥ命令）を発行し、ＶＭＸルートモードからＶＭＸノンルートモードへ移行する。このＶＭＸルートモードからＶＭＸノンルートモードへの遷移をＶＭ−ｅｎｔｒｙという。
【００９３】
逆に、ＶＭＸノンルートモードからＶＭＸルートモードへの遷移は、ＶＭ−ｅｘｉｔという。このＶＭ−ｅｘｉｔは、ゲストが特権命令を発行したときなどの所定の要因で物理ＣＰＵ６０がＶＭＭ２０へＶＭ−ｅｘｉｔを通知する。ＶＭＭ２０がＶＭ−ｅｘｉｔを検知すると、所定のエミュレーションを行ってゲストの処理を完了した後、ＶＭ−ｅｎｔｒｙ命令を発行してＶＭＸノンルートモードからＶＭＸルートモードへ切り替える。
【００９４】
次に、図１０ＡのＳ１０５０でＶＭｅｘｉｔ発生した場合の処理を図１０Ｂ、図１０Ｃにより説明する。
【００９５】
ゲストでＶＭｅｘｉｔが発生すると、ＶＭＭ２０は図１０ＢのＳ１０６０の処理を行う。Ｓ１０６０では、ＶＭｅｘｉｔの原因がコンソール１５０からの割り込みであるか否かを判定する。コンソール１５０からの割り込みであればＳ１１４０に進み、それ以外であればＳ１０７０に進む。
【００９６】
Ｓ１１４０では、コンソール操作の内容がＤＥＡＣＴ指示であるか否かを判定する。ＤＥＡＣＴ指示であればＳ１１５０に進み、それ以外であればＳ１１６０に進む。
【００９７】
Ｓ１１５０では、ＶＭＭ２０が仮想計算機３０の動作終了処理（ＤＥＡＣＴ処理）を行い、仮想計算機３０に割り当てたＣＰＵ６０、Ｉ／Ｏデバイス１７０などのリソースを解放し、Ｓ１１７０に進む。
【００９８】
Ｓ１１７０では、ＶＭＭ２０は動作させる仮想ＣＰＵ６００の有無を判定し、動作させるべき仮想ＣＰＵ６００があれば図１０ＡのＳ１１３０に戻って、ゲストの実行を再開する。一方、動作させる仮想ＣＰＵ６００がない場合には、図１０ＡのＳ１０００に戻って割り込みが発生するまで待機する。
【００９９】
Ｓ１１６０では、コンソール操作の内容がＡＣＴ指示であるか否かを判定する。ＡＣＴ指示であればＳ１１８０に進み、それ以外であればＳ１１９０に進む。
【０１００】
Ｓ１０９０では、コンソール１５０からユーザの入力を受け取って割当仮入力表４６０のデータを更新し、同データをコンソールに表示し、Ｓ１１３０に進む。
【０１０１】
Ｓ１１８０では、仮想計算機の動作開始処理（ＡＣＴ処理）を行い、仮想計算機にＣＰＵ６０、Ｉ／Ｏデバイス１７０などのリソースを割り当て、ＯＳ４０のコードの実行を準備し、図１０ＡのＳ１１３０に進む。
【０１０２】
Ｓ１０７０では、ＶＭｅｘｉｔの原因がＯＳ４０による仮想ＡＰＩＣ（仮想ＬＡＰＩＣまたは仮想ＩＯＡＰＩＣ）の設定変更の指示であるか否かを判定する。仮想ＡＰＩＣの設定変更指示であればＳ１２００に進み、それ以外であればＳ１０７２に進む。
【０１０３】
Ｓ１２００では、ＯＳ４０の指示に従って仮想ＬＡＰＩＣレジスタ４８０又は仮想ＩＯＡＰＩＣレジスタ４８５の設定値を変更し、Ｓ１２１０に進む。
【０１０４】
Ｓ１２１０では、仮想計算機３０の割り込みモードを判定する。仮想計算機３０の割り込みモードとは、ＯＳ４０による割り込みコントローラ（ＰＩＣ又はＡＰＩＣ）の利用方法であり、ＰＩＣのみを利用するＰＩＣモードと、ＡＰＩＣのみを利用するＡＰＩＣモードが存在する。ＰＩＣモードでは、全ての割り込みがＢＳＰ（Boot Strap Processor）と呼ばれる単一のＣＰＵのみに送信される。一方、ＡＰＩＣモードでは、必要に応じて割り込みを複数のＣＰＵ６０に振り分けて送信できる。本ステップでは、仮想計算機３０の割り込みモードを、仮想ＬＡＰＩＣレジスタ４８０および仮想ＩＯＡＰＩＣレジスタ４８５から判定し、Ｓ１１２０に進む。
【０１０５】
Ｓ１１２０では、仮想計算機３０の割り込みモードがＡＰＩＣモードであればＳ１２３０に進み、ＰＩＣモードであればＳ１２５０に進む。
【０１０６】
Ｓ１２３０では、可能な範囲で、仮想計算機３０に占有割り当てられた物理Ｉ／Ｏデバイス１７０に関して、割り込みパラメータ２２０の宛先２３０を、ExclusiveのＣＰＵ６０の割り込みＩＤ７２にする。
【０１０７】
Ｓ１２５０では、仮想計算機３０に占有割り当てされた物理Ｉ／Ｏデバイス１７０の全てに関して、割り込みパラメータ２２０の宛先２３０を、ShareのＣＰＵ６０の割り込みＩＤ７２にする。
【０１０８】
Ｓ１０７２では、ＶＭｅｘｉｔの原因がＯＳ４０による仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０の変更指示であるか否かを判定する。仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０の変更指示であればＳ１０７４に進み、それ以外は図１０ＣのＳ１０８０に進む。
【０１０９】
Ｓ１０７４では、仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０を変更する。仮想Ｉ／Ｏデバイス１７００のＭＳＩ−Ｘが有効になった場合は更に、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を変更して物理Ｉ／Ｏデバイス１７０のＭＳＩ−Ｘも有効にする。また、仮想Ｉ／Ｏデバイス１７００のＭＳＩが有効になった場合は更に、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を変更して物理Ｉ／Ｏデバイス１７０のＭＳＩも有効にする。以上を終えた後、上述のＳ１２１０に進む。
【０１１０】
図１０ＣのＳ１０８０では、ＶＭｅｘｉｔの原因が共有割り当てされた物理Ｉ／Ｏデバイス１７０の割り込みであるか否かを、ベクタ２４０等を用いて判定する。共有割り当てされた物理Ｉ／Ｏデバイス１７０の割り込みであればＳ１２６０に進み、それ以外であればＳ１０９０に進む。
【０１１１】
Ｓ１２６０では、Ｉ／Ｏエミュレータ３４０を実行して仮想計算機３０が物理Ｉ／Ｏデバイス１７０を占有する場合と同じ応答をＯＳ４０に返し、Ｓ１２７０に進む。
【０１１２】
Ｓ１２７０では、Ｉ／Ｏエミュレータ３４０の実行過程で仮想計算機３０に仮想の割り込みを起こす必要が生じた場合にＳ１３００に進み、仮想の割り込みを起こす必要が生じなかった場合には図１０ＡのＳ１１３０に進む。
【０１１３】
Ｓ１０９０では、ＶＭｅｘｉｔの原因が占有割り当てされた物理Ｉ／Ｏデバイス１７０の割り込みであるか否かを、ベクタ２４０等を用いて判定する。占有割り当てされた物理Ｉ／Ｏデバイス１７０の割り込みであればＳ１３００に進み、それ以外であればＳ１１００に進む。
【０１１４】
Ｓ１３００では、仮想計算機３０に於ける割り込み発生に対応してＰＩＣエミュレータ３２０又はＡＰＩＣエミュレータ３３０を実行し、当該仮想割り込みを仮想ＰＩＣレジスタ４７０や仮想ＬＡＰＩＣレジスタ４８０に貯蔵するか、或いは仮想ＣＰＵ６００に伝達して 仮想ＣＰＵ６００をＯＳ４０の割り込みハンドラ３００に分岐させる。
【０１１５】
Ｓ１１００では、ＶＭｅｘｉｔの原因がタイマ割り込みであるか否かを、ベクタ２４０等を用いて判定する。タイマ割り込みであればＳ１３１０に進み、それ以外であればＳ１１１０に進む。
【０１１６】
Ｓ１１１０では、VMexitの原因がマスク不能割り込みの一種であるINIT割り込みであるかを判定する。INIT割り込みであればＳ１３３０に進み、それ以外であればＳ１１２０に進む。
【０１１７】
Ｓ１３１０では、ＶＭＭ２０はＣＰＵ割り当て時間管理部３５０を実行し、仮想ＣＰＵ６００がＣＰＵ時間を使い切ったか否かを判定する。仮想ＣＰＵ６００が割り当て時間を使いきった場合はＳ１３２０に進み、使い切っていなければＳ１１３０に進む。
【０１１８】
Ｓ１３２０では、ＣＰＵ割り当て時間管理部３５０を実行して次に稼動すべき仮想ＣＰＵ６００を特定し、稼動する仮想ＣＰＵ６００を切り替えてＳ１３３０に進む。
【０１１９】
Ｓ１３３０では、切り替え後の仮想ＣＰＵ６００に対して、仮想ＰＩＣレジスタ４７０や仮想ＬＡＰＩＣレジスタ４８０に割り込みが貯蔵され、伝達が保留されているか否かを判定する。割り込み伝達が保留されている場合はＳ１３４０に進み、それ以外は図１０ＡのＳ１１３０に進む。
【０１２０】
Ｓ１３４０では、ＰＩＣエミュレータ３２０又はＡＰＩＣエミュレータ３３０を実行して、伝達が保留されている割り込みの中に即時伝達可能な割り込みが存在するか否かを判定し、可能であれば割り込みを仮想ＰＩＣレジスタ４７０や仮想ＬＡＰＩＣレジスタ４８０から削除してＯＳ４０の割り込みハンドラ３３０に伝達する。
【０１２１】
Ｓ１１２０では、上記原因以外のＶＭｅｘｉｔの原因に応じたエミュレータ３１０を実行する。
【０１２２】
上記処理によりＶＭＭ２０は、共有で割り当てたＩ／Ｏデバイス１７０の操作及び割り込みに対して漏れなくＩ／Ｏエミュレータ３４０を実行できる。また、仮想計算機３０が占有のＩ／Ｏデバイス１７０とExclusiveのＣＰＵ６０で構成されていれば、ＶＭｅｘｉｔを起こさない高速な割り込み伝達が可能となり、他の組み合わせに対しても漏れなく割り込みを伝達できる。
【０１２３】
＜３．２．仮想計算機のＡＣＴ／ＤＥＡＣＴ処理＞
上記図１０ＡのＳ１０３０及び図１０ＢのＳ１１８０でＶＭＭ２０が行うＡＣＴ処理の詳細に関して、図１１Ａ及び図１１Ｂを用いて説明する。
【０１２４】
図１１ＡのＳ１４００では、ＶＭＭ２０がＡＣＴする仮想計算機３０を構成する仮想ＣＰＵ６００や仮想Ｉ／Ｏデバイス１７００の割り当てに関して、割当仮入力表４６０の内容の正当性を後述するようにチェックし、Ｓ１４１０に進む。
【０１２５】
Ｓ１４１０では、上記Ｓ１４００のチェックの結果、割当仮入力表４６０に指定された構成に異常があれば図１１ＢのＳ１５７０に進み、異常が無ければＳ１４２０に進む。
【０１２６】
Ｓ１４２０では、割当仮入力表４６０に指定された割り当て情報を、実際の割り当てに使用するために、コンソール１５０からの入力に基づいて物理ＣＰＵ管理表４２０、物理Ｉ／Ｏデバイス管理表４３０、仮想ＣＰＵ管理表４４０、仮想Ｉ／Ｏデバイス管理表４５０を更新し、Ｓ１４３０に進む。
【０１２７】
Ｓ１４３０では、ＡＣＴする仮想計算機３０が占有で使用する全ての物理Ｉ／Ｏデバイス１７０について、割り込みパラメータ２２０の宛先２３０をShareのＣＰＵ６０の割り込み用ＩＤ７２に変更し、Ｓ１４４０に進む。本処理はｘ８６互換計算機の割り込みモードの初期値が、ＰＩＣモードであることに起因する。ノースブリッジ１２０のＰＩＣ９０はＣＰＵ６０のＬＡＰＩＣ７０と違って物理計算機１に２つ１組しか存在しないため占有割り当てができない。従って仮想計算機３０がＰＩＣモードで動作する間は、割り込み発生時にＰＩＣエミュレータ３２０を実行させる必要があるので、割り込み発生時にＶＭＭ２０が実行されるShareのＣＰＵ６０で割り込みを受ける。
【０１２８】
Ｓ１４４０では、物理計算機１内の共有割り当てで使用する物理Ｉ／Ｏデバイス１７０全てについて、割り込みパラメータ２２０の宛先２３０をShareのＣＰＵ６０の割り込み用ＩＤ７２に変更し、Ｓ１４５０に進む。
【０１２９】
Ｓ１４５０〜Ｓ１４９０のループでは、仮想計算機３０に割り当てた仮想Ｉ／Ｏデバイス１７００を全て初期化する。
【０１３０】
Ｓ１４６０では、仮想Ｉ／Ｏデバイス１７００が共有割り当てされているか否かを判定し、共有割り当てされていればＳ１４７０に進み、占有割り当てされていればＳ１４８０に進む。
【０１３１】
Ｓ１４７０では、Ｉ／Ｏエミュレータ３４０内の各種データや物理Ｉ／Ｏデバイス１７０の各種レジスタを初期値に変更して、仮想Ｉ／Ｏデバイス１７００を初期化し、Ｓ１４９０に進む。
【０１３２】
Ｓ１４８０では、Ｉ／Ｏエミュレータ３４０内の仮想割り込みパラメータ４９０を初期化し、物理Ｉ／Ｏデバイス１７０をリセットして、仮想Ｉ／Ｏデバイス１７００を初期化し、Ｓ１４９０に進む。Ｓ１４９０で全ての仮想Ｉ／Ｏデバイス１７００について初期化が完了すると、ＶＭＭ２０は図１１ＢのＳ１５００の処理に進む。
【０１３３】
図１１ＢのＳ１５００〜Ｓ１５５０のループでは、仮想計算機３０に割り当てられた仮想ＣＰＵ６００を全て初期化する。
【０１３４】
Ｓ１５１０では、ＶＭＭ２０が仮想ＣＰＵ管理表４４０と物理ＣＰＵ管理表４２０を参照して、仮想ＣＰＵ６００がExclusiveかShareかを判定する。仮想ＣＰＵ６００が割り当てられた物理ＣＰＵ６０がExclusiveであればＳ１５３０に進み、ShareであればＳ１５２０に進む。
【０１３５】
Ｓ１５２０では、仮想ＣＰＵ６００の割り込み横取りフラグ６１を有効化（フラグをセット）し、Ｓ１５４０に進む。本処理は物理ＣＰＵ６０がＶＴ−ｘ対応ＣＰＵであれば、ＶＭＣＳ（Virtual Machine Control Structure）内のExternal Interrupt Exiting フィールドを１に設定して実現する。物理ＣＰＵ６０がＡＭＤ−Ｖ対応ＣＰＵであれば、ＶＭＣＢ（Virtual Machine Control Block）内のIntercept INTRフィールドを１に設定して実現する。
【０１３６】
Ｓ１５３０では、ＶＭＭ２０が仮想ＣＰＵ６００の割り込み横取りフラグを無効化（フラグをリセット）し、Ｓ１５４０に進む。本処理は物理ＣＰＵ６０がＶＴ−ｘ対応ＣＰＵであれば、ＶＭＣＳ（Virtual Machine Control Structure）内のExternal Interrupt Exiting フィールドを０に設定して実現する。物理ＣＰＵ６０がＡＭＤ−Ｖ対応ＣＰＵであれば、ＶＭＣＢ（Virtual Machine Control Block）内のIntercept INTRフィールドを０に設定して実現する。
【０１３７】
Ｓ１５４０では、仮想ＣＰＵ６００に付随するレジスタなどのデータ構造を初期化し、Ｓ１５５０に進む。
【０１３８】
Ｓ１５６０では、ＡＣＴ処理に成功した旨を示すために、割当仮入力表４６０の該当する仮想計算機番号４４１の稼動状態４６２をＡＣＴに変更する。また、ＣＰＵ時間割当管理部３５０を実行して、ＡＣＴする仮想計算機３０に割り当てられた仮想ＣＰＵ６００にＣＰＵ時間を使わせる。すなわち、Ｓ１５６０の処理の後に、図１１Ｂの処理から図１０ＡのＳ１１３０の処理に進んで、割り当てられた仮想ＣＰＵ６００でゲストの実行を開始する。
【０１３９】
一方、Ｓ１５７０では、ＡＣＴ処理に失敗した旨を示すために、割当仮入力表４６０の稼動状態４６２をＤＥＡＣＴのまま維持する。この処理が終わると、図１１Ｂの処理から図１０ＡのＳ１１３０の処理に進んで、コンソール１５０からの割り込みを受け付ける以前のゲストの実行を再開する。
【０１４０】
上記図１１Ａ、図１１ＢのＡＣＴ処理によって、コンソール１５０から仮想計算機３０の起動指令によって割り込みが発生すると、ＶＭＭ２０は指令された仮想計算機３０を起動した後に、ゲストの実行に移行する。
【０１４１】
上記図１１ＡのＳ１４００で行う割当仮入力表のチェック処理に関して、図１６を用いて説明する。
【０１４２】
図１６のＳ２１１０では、ＶＭＭ２０がＡＣＴ済み及びＡＣＴ中の仮想計算機３０について、割当仮入力表４６０のExclusiveＣＰＵ数４６４の合計が物理ＣＰＵ６０の総数を下回るか否かを判定する。ExclusiveＣＰＵ数４６４の合計が物理ＣＰＵ６０の総数を下回る場合はＳ２１２０に進み、等しいか上回る場合はＳ２１５０に進む。本実施形態では、共有Ｉ／Ｏデバイスを扱うために、ShareのＣＰＵ６０を１つ以上必要とし、ExclusiveのＣＰＵ数４６４の合計は物理ＣＰＵ６０の総数を下回る様に割り当てを制限する。
【０１４３】
Ｓ２１２０では、割当仮入力表４６０の仮想Ｉ／Ｏデバイス１７００の割り当て有無４６６と物理Ｉ／Ｏデバイス使用形態４３３を参照し、他の仮想計算機３０が既に占有している物理Ｉ／Ｏデバイス１７０を二重に割り当てていないかを判定する。二重に割り当てた場合はＳ２１５０に進み、それ以外であればＳ２１４０に進む。
【０１４４】
Ｓ２１４０では、仮想計算機３０の構成が正常と決定する。
【０１４５】
Ｓ２１５０では、仮想計算機３０の構成が異常と決定する。
【０１４６】
以上の処理により、物理ＣＰＵ６０と物理Ｉ／Ｏデバイス１７０に対する仮想ＣＰＵ３００と仮想Ｉ／Ｏデバイス１７００の割当数が正常であるか否かを判定する。例えば、全ての物理ＣＰＵ６０がExclusiveの場合には、仮想計算機３０の構成は以上と判定されて、コンソール１５０に異常の発生を通知する。なお、この異常の通知は、コンソール１５０の割り当てインターフェースに出力するようにしても良い。
【０１４７】
上記図１１のＳ１４７０でＶＭＭ２０が行う仮想Ｉ／Ｏデバイス１７００の初期化処理に関して、図１７を用いて説明する。
【０１４８】
Ｓ２２００では、ＶＭＭ２０が物理Ｉ／Ｏデバイス管理表４３０の初期化フラグ４３４を参照し、仮想Ｉ／Ｏデバイス１７００に割り当てられた共有物理Ｉ／Ｏデバイスが初期化未了であればＳ２２１０に進み、初期化済みであれば２２２０に進む。
【０１４９】
Ｓ２２１０では、仮想Ｉ／Ｏデバイス１７００に割り当てられた共有物理Ｉ／Ｏデバイス（物理Ｉ／Ｏデバイス１７０）をリセットして初期化する。
【０１５０】
Ｓ２２２０では、Ｉ／Ｏデバイスエミュレータ３４０内の、仮想Ｉ／Ｏデバイス１７００に関するデータ構造を初期化し、物理Ｉ／Ｏデバイス１７０のリセット直後の状態と一致させる。
【０１５１】
上記図１０ＢのＳ１１５０でＶＭＭ２０が行うＤＥＡＣＴ処理に関して、図１２を用いて説明する。
【０１５２】
Ｓ１６００では、ＶＭＭ２０がＤＥＡＣＴ（終了）する仮想計算機３０に占有で割り当てられていた物理Ｉ／Ｏデバイス１７０を全てリセットし、Ｓ１６１０に進む。
【０１５３】
Ｓ１６１０〜Ｓ１６４０のループでは、ＤＥＡＣＴする仮想計算機３０に割り当てられていた仮想ＣＰＵ６００の全てに対して、終了処理を行う。
【０１５４】
Ｓ１６２０では、ＶＭＭ２０で仮想ＣＰＵ６００の割り当てがExclusiveかShareかを判定する。仮想ＣＰＵ６００の割り当てがExclusiveであればＳ１６３０に進み、ShareであればＳ１６４０に進む。
【０１５５】
Ｓ１６３０では、ＶＭＭ２０が物理ＣＰＵ管理表４２０を更新して、これまでExclusiveで割り当てていたＣＰＵ６０の物理ＣＰＵ利用形態４２２を Shareに変更する。
【０１５６】
Ｓ１６５０では、ＶＭＭ２０が仮想ＣＰＵ管理表４４０に含まれる、ＤＥＡＣＴする仮想計算機３０の割り当て情報を全てクリアし、Ｓ１６６０に進む。
【０１５７】
Ｓ１６６０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス管理表４５０に含まれる、ＤＥＡＣＴする仮想計算機３０の割り当て情報を全てクリアする。
【０１５８】
以上の処理によって、コンソール１５０から指示された仮想計算機３０を終了し、物理ＣＰＵ６０とＩ／Ｏデバイス１７０を解放する。
【０１５９】
ＡＣＴ処理またはＤＥＡＣＴに関連して、ＶＭＭ２０は、仮想ＣＰＵ６００及び仮想Ｉ／Ｏデバイス１７００のホットプラグに対応しても構わない。ホットプラグに対応する場合は、ＶＭＭ２０は、仮想計算機３０に関するホットプラグ後のＣＰＵ６０、Ｉ／Ｏデバイス１７０の割り当てをユーザから受け取る。ＣＰＵ６０、Ｉ／Ｏデバイス１７０が増加するホットアッドの場合は、ＡＣＴ処理の一部を実行して仮想ＣＰＵ６００、仮想Ｉ／Ｏデバイス１７００及び、対応する物理ＣＰＵ６０、Ｉ／Ｏデバイス１７０をＡＣＴ時同様に初期化する。一方、ＣＰＵ６０、Ｉ／Ｏデバイス１７０が減少するホットリムーブの場合は、ＤＥＡＣＴ処理の一部を実行して仮想ＣＰＵ６００、仮想Ｉ／Ｏデバイス１７００及び、対応する物理ＣＰＵ６０、Ｉ／Ｏデバイス１７０の終了処理を行う。
【０１６０】
＜３．３．物理Ｉ／Ｏデバイスの割り込み宛先変更処理＞
上記図１０ＢのＳ１２３０で行う占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をExclusiveのＣＰＵ６０に変更する処理に関して、図１３を用いて説明する。
【０１６１】
Ｓ１７００〜Ｓ１７９０のループでは、ＶＭＭ２０が仮想計算機３０に割り当てられた仮想Ｉ／Ｏデバイス１７００全てに対して設定を読み込んで、必要に応じて物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を変更する。
【０１６２】
Ｓ１７１０では、仮想Ｉ／Ｏデバイス管理表４５０と物理Ｉ／Ｏデバイス管理表４３０を用いて、仮想Ｉ／Ｏデバイス１７００が着目している仮想計算機３０に占有で割り当てられているかを判定する。占有で割り当てられている場合はＳ１７２０に進み、それ以外はＳ１７９０に進む。
【０１６３】
Ｓ１７２０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０を参照し、仮想Ｉ／Ｏデバイス１７００のＭＳＩ−Ｘが有効となっているか否かを判定する。ＶＭＭ２０は判定結果がＭＳＩ−Ｘが有効であればＳ１７５０に進み、ＭＳＩ−Ｘが無効であればＳ１７３０に進む。
【０１６４】
Ｓ１７３０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０の宛先２３０と、仮想ＬＡＰＩＣレジスタ４８０の割り込み用ＩＤ７２と、仮想ＣＰＵ管理表４２０を用いて、仮想Ｉ／Ｏデバイス１７００の割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであればＳ１７４０に進み、ShareのＣＰＵであればＳ１７９０に進む。
【０１６５】
Ｓ１７４０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス１７００に割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩパラメータ２２４の宛先２３０を、割り込みを受ける仮想ＣＰＵ６００に割り当てられたExclusiveのＣＰＵの割り込み用ＩＤ７２に変更する。また、同ＭＳＩパラメータ２２４のベクタ２４０を、ＯＳ４０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に指定したベクタ２４０と一致させる。
【０１６６】
Ｓ１７５０〜Ｓ１７８０のループでは、物理Ｉ／Ｏデバイス１７０のＭＳＩ−Ｘパラメータリスト２２８について、設定の確認と変更を行う。
【０１６７】
Ｓ１７６０では、仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に含まれるＭＳＩ−Ｘパラメータに指定された宛先２３０と、仮想ＬＡＰＩＣレジスタ４８０の割り込み用ＩＤ７２と、仮想ＣＰＵ管理表４２０を用いて、仮想Ｉ／Ｏデバイス１７００の割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであればＳ１７７０に進み、ShareのＣＰＵであればＳ１７８０に進む。
【０１６８】
Ｓ１７７０では、仮想Ｉ／Ｏデバイス１７００に割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリスト２２８の宛先２３０を、割り込みを受ける仮想ＣＰＵ６００に割り当てられたExclusiveのＣＰＵの割り込み用ＩＤ７２に変更する。また、同ＭＳＩ−Ｘパラメータリスト２２８のベクタ２４０を、ＯＳ４０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に指定したベクタ２４０と一致させる。
【０１６９】
上記処理によって、占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をExclusiveのＣＰＵ６０に変更することができる。
【０１７０】
上記図１１ＡのＳ１４３０で行う占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をShareのＣＰＵ６０に変更するＶＭＭ２０の処理に関して、図１４を用いて説明する。
【０１７１】
Ｓ１９００〜Ｓ２０１０のループでは、ＶＭＭ２０が仮想計算機３０に割り当てられた仮想Ｉ／Ｏデバイス１７００全てに対して設定を読み込み、必要に応じて物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を変更する。
【０１７２】
Ｓ１９１０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス管理表４５０と物理Ｉ／Ｏデバイス管理表４３０を参照して、仮想Ｉ／Ｏデバイス１７００が着目している仮想計算機３０に占有で割り当てられているか否かを判定する。仮想Ｉ／Ｏデバイス１７００が占有で割り当てられている場合はＳ１９２０に進み、それ以外はＳ２０１０に進む。
【０１７３】
Ｓ１９２０では、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を参照し、物理Ｉ／Ｏデバイス１７０がＭＳＩ−Ｘを有効にされているか否かを調べる。ＭＳＩ−Ｘが有効であればＳ１９６０に進み、ＭＳＩ−Ｘが無効であればＳ１９３０に進む。
【０１７４】
Ｓ１９３０では、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０の宛先２３０と、物理ＬＡＰＩＣ７０の割り込み用ＩＤ７２と、物理ＣＰＵ管理表４２０を参照して、物理Ｉ／Ｏデバイス１７０の割り込みを受ける物理ＣＰＵ６０がExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであればＳ１９４０に進み、ShareのＣＰＵであればＳ２０１０に進む。
【０１７５】
Ｓ１９４０では、ＶＭＭ２０が物理ＣＰＵ管理表４２０からShareのＣＰＵ６０を１つ選択してＳ１９５０に進む。本実施形態ではShareのＣＰＵ数が０になる構成を禁止しているため、ShareのＣＰＵ６０は必ず見つかる。
【０１７６】
Ｓ１９５０では、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩパラメータ２２４の宛先２３０を、上記Ｓ１９４０で選択したShareのＣＰＵ６０の割り込み用ＩＤ７２に変更する。また、同ＭＳＩパラメータ２２４のベクタ２４０を、ＶＭＭ２０が割り込みの識別に使用するベクタに変更する。
【０１７７】
Ｓ１９６０〜Ｓ２０００のループでは、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０のＭＳＩ−Ｘパラメータリスト２２８について、設定確認と変更を行う。
【０１７８】
Ｓ１９６０では、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリスト２２８に指定された宛先２３０と、物理ＬＡＰＩＣ７０の割り込み用ＩＤ７２と、物理ＣＰＵ管理表４２０をＶＭＭ２０が参照して、物理Ｉ／Ｏデバイス１７０の割り込みを受ける物理ＣＰＵがExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける物理ＣＰＵ６０がExclusiveのＣＰＵであればＳ１９８０に進み、ShareのＣＰＵであればＳ２０００に進む。
【０１７９】
Ｓ１９８０では、ＶＭＭ２０が物理ＣＰＵ管理表４２０からShareのＣＰＵを１つ選択し、Ｓ１９９０に進む。本実施形態ではShareのＣＰＵ数が０になる構成を禁止しているため、ShareのＣＰＵは必ず見つかる。
【０１８０】
Ｓ１９９０では、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリスト２２８の宛先２３０を、上記Ｓ１９８０で選択したShareのＣＰＵ６０の割り込み用ＩＤ７２に変更する。また、同ＭＳＩ―Ｘパラメータリスト２２８のベクタ２４０を、ＶＭＭ２０が割り込みの識別に使用するベクタに変更する。
【０１８１】
上記処理により、占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をShareのＣＰＵ６０に変更することができる。
【０１８２】
上記図１１ＡのＳ１４４０でＶＭＭ２０が行う共有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をShareのＣＰＵ６０に変更する処理に関して、図１５を用いて説明する。
【０１８３】
Ｓ２０２０〜Ｓ２０３０のループでは、ＶＭＭ２０が物理計算機１内の物理Ｉ／Ｏデバイス１７０の全てに対して設定を確認し、必要に応じて割り込みパラメータ２２０を変更する。
【０１８４】
Ｓ２０２５では、ＶＭＭ２０が物理Ｉ／Ｏデバイス管理表４３０を参照して、物理Ｉ／Ｏデバイス１７０が共有割り当てで使用されているか否かを判定する。物理Ｉ／Ｏデバイス１７０が共有割り当てで使用されている場合はＳ１９２０に進み、それ以外はＳ２０３０に進む。
【０１８５】
Ｓ１９２０〜Ｓ２０００については、図１４に示した同符号の処理と同一であり、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩパラメータ２２４またはＭＳＩ−Ｘパラメータリスト２２８の更新を行うもので、説明は省略する。
【０１８６】
上記処理によって、共有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をShareのＣＰＵ６０に変更することができる。
【０１８７】
＜３．４．新規仮想割り込みの伝達処理＞
上記図１０ＣのＳ１３００でＶＭＭ２０が行う新規仮想割り込みの伝達処理に関して、図１８を用いて説明する。
【０１８８】
Ｓ２３００では、ＶＭＭ２０が仮想計算機３０の割り込みモードを、仮想ＬＡＰＩＣレジスタ４８０および仮想ＩＯＡＰＩＣレジスタ４８５から判定する。割り込みモードがＡＰＩＣモードであればＳ２３３０に進み、ＰＩＣモードであればＳ２３１０に進む。
【０１８９】
Ｓ２３１０では、ＶＭＭ２０が受け付けた割り込みを仮想ＰＩＣレジスタ４７０に貯蔵して割り込みを保留させ、Ｓ２３１２に進む。
【０１９０】
Ｓ２３１２では、ＶＭＭ２０がＰＩＣモード時の割り込みの宛先である仮想ＣＰＵ６００が動作中であるか否かを判定する。この判定は、宛先の仮想ＣＰＵ６００に対応する仮想ＢＳＰが、現在動作中であるか否かを判定する。仮想ＢＳＰが稼動中であればＳ２３１５へ進み、ＣＰＵ時間の割り当てを待っている状態であれば新規仮想割り込みの伝達処理を終了する。
【０１９１】
Ｓ２３１５では、ＶＭＭ２０は仮想ＣＰＵ６００に対応する仮想ＢＳＰが、本処理を実行中の物理ＣＰＵ６０で動作しているか否かを判定する。本処理（仮想ＣＰＵ６００に対応する仮想ＢＳＰ）を実行中の物理ＣＰＵ６０で動作している場合はＳ２３２０へ進み、他の物理ＣＰＵ６０で動作している場合はＳ２３２５へ進む。
【０１９２】
Ｓ２３２０では、仮想ＰＩＣレジスタ４７０に保留されている割り込みを、仮想ＣＰＵ６００に伝達可能であるか否かを判定し、伝達可能であれば、仮想ＰＩＣレジスタ４７０の割り込みをクリアして仮想ＣＰＵ６００をＯＳ４０の割り込みハンドラ３００の処理に分岐させる。
【０１９３】
Ｓ２３２５では、割り込み伝達処理を含むエミュレータ３１０を他の物理ＣＰＵ６０に実行させるために、マスク不能割り込み（ＮＭＩ：Non-Maskable Interrupt）の一種であるＩＮＩＴ割り込みを指定して物理ＩＰＩ（プロセッサ間割り込み）を送信する。ＩＮＩＴ割り込みを受けた物理ＣＰＵ６０は、割り込み横取りフラグ６１の設定に依らずＶＭＭ２０を実行するため、仮想割り込みの送り先がExclusiveの物理ＣＰＵ６０に対してもエミュレータを実行させることができる。
【０１９４】
Ｓ２３３０では、仮想Ｉ／Ｏデバイス１７００のエミュレーションを行うＩ／Ｏエミュレータ３４０の割り込みパラメータ４９０と、仮想ＬＡＰＩＣレジスタ４８０の割り込み用ＩＤ７２を参照し、仮想Ｉ／Ｏデバイス１７００の割り込みの宛先である仮想ＣＰＵ６００を特定してＳ２３４０に進む。
【０１９５】
Ｓ２３４０では、ＶＭＭ２０が仮想ＣＰＵ管理表４４０を参照して、仮想割り込みの宛先となる仮想ＣＰＵ６００がExclusiveかShareかを判定する。割り込みの宛先の仮想ＣＰＵ６００がExclusiveであればＳ２３７０に進み、ShareであればＳ２３５０に進む。
【０１９６】
Ｓ２３５０では、仮想ＣＰＵ６００が割り込みを仮想ＬＡＰＩＣレジスタ４８０に貯蔵して割り込みを保留させ、Ｓ２３６０に進む。
【０１９７】
Ｓ２３６０では、仮想ＬＡＰＩＣレジスタ４８０に保留されている割り込みを、仮想ＣＰＵ６００に伝達可能であるか否かを判定し、伝達可能であれば、仮想ＬＡＰＩＣレジスタ４８０の割り込みをクリアして 仮想ＣＰＵ６００の処理をＯＳ４０の割り込みハンドラ３００に分岐させる。
【０１９８】
Ｓ２３７０では、発生した仮想割り込みの宛先２３０とベクタ２４０を、仮想Ｉ／Ｏデバイス１７００のエミュレーションを行うＩ／Ｏエミュレータ３４０の割り込みパラメータ４９０から取得し、宛先となるExclusiveのＣＰＵに対してＩＰＩ（Inter Processor Interrupt）を送信する。本処理により、ExclusiveのＣＰＵ６０はＶＭＭ２０を呼ぶことなしに、ＯＳ４０の割り込みハンドラ３００にＩ／Ｏデバイス１７０の割り込みベクタ２４０を渡しつつ分岐する。
【０１９９】
＜４．まとめ＞
以上に示した実施形態によれば、割り込み横取りフラグ７１が有効であるShareのＣＰＵ６０と、割り込み横取りフラグ７１が無効であるExclusiveのＣＰＵ６０を組み合わせて使用し、物理Ｉ／Ｏデバイス１７０の利用形態と、物理Ｉ／Ｏデバイス１７０の割り込み宛先ＣＰＵ６０の利用形態に応じて、割り込みパラメータ２２０を変更することで、仮想計算機３０が占有Ｉ／Ｏデバイス１７０とExclusiveのＣＰＵ６０で構成される場合の割り込み伝達オーバヘッドを廃し、共有Ｉ／Ｏデバイス１７０の割り込みに対しては必ずエミュレータ３１０を実行できる。これにより、x86互換計算機でポートされている標準機能のみを用いて、占有Ｉ／Ｏデバイス１７０の割り込みオーバヘッドの削減と、共有Ｉ／Ｏデバイスに必要なエミュレータ３１０の実行の両立を実現できる。
【０２００】
さらに、本発明では、x86互換ＣＰＵ６０に搭載された、物理Ｉ／Ｏデバイス１０７によるマスク可能割り込みを横取りしてＯＳ４０の代わりにＶＭＭ２０を実行させる機能を使用する割り込み横取り機能と呼び、割り込み横取り機能を有効化または無効化するフラグを割り込み横取りフラグとする。割り込み横取り機能としては、ＩｎｔｅｌがＶＴ−ｘ機能の一環として提供している External Interrupt Exitingや、ＡＭＤがＡＭＤ−Ｖ機能の一環として提供しているIntercept INTRなどが該当する。
【０２０１】
本発明では、x86互換の物理ＣＰＵ６０を２つ以上使用し、x86互換の物理ＣＰＵ６０で割り込み受信時に実行されるコード（割り込みハンドラ）を設定し、Ｉ／Ｏデバイス１７０からの割り込みを受信すると、１つ以上のＣＰＵ６０で割り込み横取りフラグを無効化して割り込み受信時にＯＳの割り込みハンドラを実行させ、１つ以上のＣＰＵ６０で割り込み横取りフラグを有効化して割り込み受信時にＶＭＭ２０が有するエミュレータ３１０を実行させる。また、仮想ＣＰＵ６００に対する物理ＣＰＵ６０の割当形態として、割り込み横取りフラグが有効な形態と無効な形態を選択可能にする。
【０２０２】
仮想計算機３０に対して、ＣＰＵ６０が割り込み横取り有効化で割り当てられている場合は、当該仮想計算機３０が使用する物理Ｉ／Ｏデバイス１７０の割り込みの宛先を、割り込み横取りが有効な物理ＣＰＵ６０に設定する。
【０２０３】
仮想計算機３０に対して、Ｉ／Ｏデバイス１７０が占有割り当て、かつ、ＣＰＵ６０が割り込み横取り無効化で割り当てられている場合は、該当する物理Ｉ／Ｏデバイス１７０の割り込みの宛先を、該当する物理ＣＰＵ６０に設定する。
【０２０４】
仮想計算機３０に対して、Ｉ／Ｏデバイス１７０が共有割り当て、かつ、ＣＰＵ６０が割り込み横取り無効化で割り当てられている場合は、該当する物理Ｉ／Ｏデバイス１７０の割り込みの宛先を、割り込み横取りが有効なＣＰＵ６０に設定する。割り込みを契機に実行されるエミュレータ３１０は、仮想Ｉ／Ｏデバイス１７００の割り込みを受けるべき仮想ＣＰＵ６００に割り当てた物理ＣＰＵ６０に、ＩＰＩ（プロセッサ間割り込み）等の手段を用いてマスク可能割り込みを送信し、割り込みを伝達する。
【０２０５】
＜第２実施形態＞
以下では、本発明を、ノースブリッジ１２０で割り込みパラメータを差し替える割り込みリマップ機能と組み合わせる実施形態を説明する。以下では、添付図面に基づいて第１実施形態１との違いを説明する。
【０２０６】
＜１．ハードウェア構成＞
第２の実施形態のハードウェア構成は図１９に示すように、ノースブリッジ１２０に関連する要素のみが前記第１実施形態と異なる。ノースブリッジ１２０は、ＩｎｔｅｌのＶＴ−ｄ又はＡＭＤのＩＯＭＭＵに対応しており、割り込みパラメータを差し替える機能である割り込みリマップ機能１００が搭載される。
【０２０７】
＜２．ソフトウェア構成＞
図２０で示すようにソフトウェア構成及び制御対象のハードウェア要素は、図２０に示すように、物理計算機１及びＶＭＭ２０の、割り込みリマップ機能に関連する要素のみが前記第１実施形態と異なる。
【０２０８】
物理計算機１は割り込みリマップ機能１００を提供する。またＶＭＭ２０は、割り込みリマップ機能に対応した割り込みリマップ表４００を有する。
【０２０９】
メモリ１１０は、図２１に示すように、ＶＭＭ２０に割り当てたメモリに存在する割り込みリマップ表４００のみが前記第１実施形態と異なる。
【０２１０】
割り込みパラメータ２２０は、図２２に示すように、ＭＳＩパラメータ２２４とＭＳＩ−Ｘパラメータリスト２２８の内容のみが前記第１実施形態と異なる。
【０２１１】
ＭＳＩパラメータ２２４は、リマップＩＤ２８０を含む。リマップＩＤ２８０は、割り込みパラメータの差し替えに使用する割り込みリマップ表４００のエントリを特定する識別番号である。
【０２１２】
ＭＳＩ−Ｘパラメータリスト２２８は、複数のリマップＩＤ２８０を含む。ＭＳＩ−ＸにはＩ／Ｏデバイスによる割り込みの理由に応じて、異なる宛先２３０とベクタ２４０で割り込みを伝達する機能がある。本機能を実現するために、割り込みの理由に対応したエントリが複数存在し、各エントリにリマップＩＤ２８０を指定できる。
【０２１３】
割り込みリマップ表４００は、図２３に示すように、リマップＩＤ２８０に前記第１実施形態の図４に示した割り込みパラメータの宛先２３０とベクタ２４０が付随する表である。ノースブリッジ１２０がＶＴ−ｄに対応している場合は物理計算機１内の全ての物理デバイス１７０が単一の割り込みリマップ表を参照する。一方、ノースブリッジ１２０がＩＯＭＭＵに対応している場合は、単一の割り込みリマップ表を用いる代わりに物理Ｉ／Ｏデバイス１７０毎に異なる割り込みリマップ表を用いても構わない。
【０２１４】
＜３．ＶＭＭによる割り込み伝達処理の概要＞
次に、ゲストの動作に合わせてＶＭＭが行う割り込み伝達処理の一例について、以下、フローチャートを参照しながら説明する。
【０２１５】
＜３．１．ＶＭＭによる割り込み伝達処理の概要＞
前記第１実施形態の図１０Ａ〜図１０Ｃは、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートであり、本第２実施形態にも適用することができる。本フローチャートは、物理Ｉ／Ｏデバイス１７０の割り込みの宛先を変更するＳ１２３０とＳ１２５０を除いて前記第１実施形態と同一である。
【０２１６】
図１０ＢのＳ１２３０では、ＶＭＭ２０が仮想計算機３０に占有割り当てされた物理Ｉ／Ｏデバイス１７０に関して、割り込み発生時のエミュレータ実行が不要であれば、割り込みリマップ表４００の宛先２３０を、ExclusiveのＣＰＵ６０の割り込み用ＩＤ７２に設定する。
【０２１７】
Ｓ１２５０では、ＶＭＭ２０が仮想計算機３０に占有割り当てされた物理Ｉ／Ｏデバイス１７０全てに関して、割り込みリマップ表４００の宛先２３０を、ShareのＣＰＵ６０の割り込み用ＩＤ７２に設定する。
【０２１８】
＜３．２．仮想計算機のＡＣＴ／ＤＥＡＣＴ処理＞
前記第１実施形態の図１０Ａ、図１０ＢのＳ１０３０及び１１８０で行うＡＣＴ処理に関して、前記第１実施形態の図１１Ａ、図１１Ｂを用いて説明する。本フローチャートを本第２実施形態に適用する際には、物理Ｉ／Ｏデバイス１７０の割り込みの宛先を変更するＳ１４３０とＳ１４４０とＳ１００１を除いて前記第１実施形態と同一である。
【０２１９】
図１０ＡのＳ１００１では、物理ＣＰＵ数や物理Ｉ／Ｏデバイスの種類と数を認識してＶＭＭ２０内のデータを初期化し、物理Ｉ／Ｏデバイスの割り込みパラメータ２２０のリマップＩＤ２８０に連番を割り当てる。また割り込みリマップ表４００を初期化して、割り込みを物理ＣＰＵ６０に伝達可能とし、Ｓ１０００に進む。
【０２２０】
図１１ＡのＳ１４３０では、ＡＣＴする仮想計算機３０が占有で使用する全ての物理Ｉ／Ｏデバイス１７０について、割り込みリマップ表４００の宛先２３０をShareのＣＰＵ６０の割り込み用ＩＤ７２に変更し、Ｓ１４４０に進む。本処理はx86互換計算機の割り込みモードの初期値が、ＰＩＣモードであることに起因する。ノースブリッジ１２０のＰＩＣ９０はＣＰＵ６０のＬＡＰＩＣ７０と違って物理計算機１に２つ１組しか存在しないため占有割り当てができない。従って仮想計算機３０がＰＩＣモードで動作する間は、割り込み発生時にＰＩＣエミュレータ３２０を実行させる必要があるので、割り込み時にＶＭＭ２０が実行されるShareのＣＰＵ６０で割り込みを受ける。
【０２２１】
Ｓ１４４０では、物理計算機１内の共有割り当てで使用する物理Ｉ／Ｏデバイス１７０全てについて、割り込みリマップ表４００の宛先２３０をShareのＣＰＵ６０の割り込み用ＩＤ７２に変更し、Ｓ１４５０に進む。
【０２２２】
上記図１１ＡのＳ１４００で行う割当仮入力表のチェック処理は前記第１実施形態と同一であるため説明を省略する。
【０２２３】
上記図１１ＡのＳ１４７０で行う仮想Ｉ／Ｏデバイス１７００の初期化処理は前記第１実施形態と同一であるため説明を省略する。
【０２２４】
上記図１０ＢのＳ１１５０で行うＤＥＡＣＴ処理は前記第１実施形態と同一であるため説明を省略する。
【０２２５】
＜３．３．物理Ｉ／Ｏデバイスの割り込み宛先変更処理＞
上記図１０ＢのＳ１２３０で行う占有で割り当てられた物理Ｉ／Ｏデバイスの割り込みの宛先をExclusiveのＣＰＵに変更する処理に関して、前記第１実施形態の図１３を本第２実施形態に適用する例を説明する。
【０２２６】
Ｓ１７００〜Ｓ１７９０のループでは、仮想計算機３０に割り当てられた仮想Ｉ／Ｏデバイス１７００全てに対して設定を確認し、必要に応じて割り込みリマップ表４００を変更する。
【０２２７】
Ｓ１７１０では、仮想Ｉ／Ｏデバイス管理表４５０と物理Ｉ／Ｏデバイス管理表４３０を用いて、仮想Ｉ／Ｏデバイス１７００が着目している仮想計算機３０に占有で割り当てられているかを判定する。占有で割り当てられている場合はＳ１７２０に進み、それ以外はＳ１７９０に進む。
【０２２８】
Ｓ１７２０では、仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０を参照し、仮想Ｉ／Ｏデバイス１７００がＭＳＩ−Ｘを有効にしているか調べる。ＭＳＩ−Ｘが有効であればＳ１７５０に進み、ＭＳＩ−Ｘが無効であればＳ１７３０に進む。
【０２２９】
Ｓ１７３０では、仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０の宛先２３０と、仮想ＬＡＰＩＣレジスタ４８０の割り込み用ＩＤ７２と、仮想ＣＰＵ管理表４２０を用いて、仮想Ｉ／Ｏデバイス１７００の割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであるかを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵ６０であればＳ１７４０に進み、ShareのＣＰＵであればＳ１７９０に進む。
【０２３０】
Ｓ１７４０では、仮想Ｉ／Ｏデバイス１７００に割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩパラメータ２２４に指定されたリマップＩＤ２８０に対応する割り込みリマップ表４００のエントリ内の宛先２３０を、割り込みを受ける仮想ＣＰＵ６００に割り当てられたExclusiveのＣＰＵの割り込み用ＩＤ７２に変更する。また、割り込みリマップ表４００の同エントリのベクタ２４０を、ＯＳ４０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に指定したベクタ２４０と一致させる。
【０２３１】
Ｓ１７５０〜Ｓ１７８０のループでは、物理Ｉ／Ｏデバイス１７０のＭＳＩ−Ｘパラメータリスト２２８と割り込みリマップ表４００の組み合わせについて、設定確認と変更を行う。
【０２３２】
Ｓ１７６０では、仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に含まれるＭＳＩ−Ｘパラメータに指定された宛先２３０と、仮想ＬＡＰＩＣレジスタ４８０の割り込み用ＩＤ７２と、仮想ＣＰＵ管理表４２０を用いて、仮想Ｉ／Ｏデバイス１７００の割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであればＳ１７７０に進み、ShareのＣＰＵであればＳ１７８０に進む。
【０２３３】
Ｓ１７７０では、仮想Ｉ／Ｏデバイス１７００に割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリスト２２８に指定されたリマップＩＤ２８０に対応する割り込みリマップ表４００のエントリ内の宛先２３０を、割り込みを受ける仮想ＣＰＵ６００に割り当てられたExclusiveのＣＰＵの割り込み用ＩＤ７２に変更する。また、割り込みリマップ表４００の同エントリのベクタ２４０を、ＯＳ４０が仮想Ｉ／Ｏデバイス１７００の割り込みパラメータ４９０に指定したベクタ２４０と一致させる。上記処理によって、占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をExclusiveのＣＰＵ６０に変更することができる。
【０２３４】
上記図１０ＢのＳ１２５０及び図１１ＡのＳ１４３０で行う占有で割り当てられた物理Ｉ／Ｏデバイス１７０の割り込みの宛先をShareのＣＰＵに変更する処理に関して、前記第１実施形態の図１４を本第２実施形態に適用する例を説明する。
【０２３５】
Ｓ１９００〜Ｓ２０１０のループでは、ＶＭＭ２０が仮想計算機３０に割り当てられた仮想Ｉ／Ｏデバイス１７００全てに対して設定を確認し、必要に応じて割り込みリマップ表４００を変更する。
【０２３６】
Ｓ１９１０では、ＶＭＭ２０が仮想Ｉ／Ｏデバイス管理表４５０と物理Ｉ／Ｏデバイス管理表４３０を参照して、仮想Ｉ／Ｏデバイス１７００が着目している仮想計算機３０に占有で割り当てられているか否かを判定する。仮想Ｉ／Ｏデバイス１７００が占有で割り当てられている場合はＳ１９２０に進み、それ以外はＳ２０１０に進む。
【０２３７】
Ｓ１９２０では、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０を参照し、物理Ｉ／Ｏデバイス１７０がＭＳＩ−Ｘを有効にしているか否かを調べる。ＭＳＩ−Ｘが有効であればＳ１９６０に進み、ＭＳＩ−Ｘが無効であればＳ１９３０に進む。
【０２３８】
Ｓ１９３０では、ＶＭＭ２０が物理Ｉ／Ｏデバイスの割り込みパラメータ２２０のリマップＩＤ２８０と、割り込みリマップ表４００の該当エントリに指定された宛先２３０と、物理ＬＡＰＩＣの割り込み用ＩＤ７２と、物理ＣＰＵ管理表４２０を用いて、物理Ｉ／Ｏデバイスの割り込みを受ける物理ＣＰＵがExclusiveのＣＰＵ６０であるかを判定する。割り込みを受ける仮想ＣＰＵ６００がExclusiveのＣＰＵであればＳ１９４０に進み、ShareのＣＰＵであればＳ２０１０に進む。
【０２３９】
Ｓ１９４０では、ＶＭＭ２０が物理ＣＰＵ管理表４２０からShareのＣＰＵを１つ選び、Ｓ１９５０に進む。本実施形態ではShareのＣＰＵ数が０になる構成を禁止しているため、ShareのＣＰＵは必ず見つかる。
【０２４０】
Ｓ１９５０では、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩパラメータ２２４に指定されたリマップＩＤ２８０に対応する割り込みリマップ表４００のエントリ内の宛先２３０を、上記Ｓ１９４０で選択したShareのＣＰＵ６０の割り込み用ＩＤ７２に変更する。また、割り込みリマップ表４００の同エントリのベクタ２４０を、ＶＭＭ２０が割り込みの識別に使用するベクタに変更する。
【０２４１】
Ｓ１９６０〜Ｓ２０００のループでは、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０のＭＳＩ−Ｘパラメータリスト２２８と割り込みリマップ表４００の組み合わせについて、設定確認と変更を行う。
【０２４２】
Ｓ１９６０では、ＶＭＭ２０が物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリストに指定されたリマップＩＤ２８０と、割り込みリマップ表４００の該当エントリに指定された宛先２３０と、物理ＬＡＰＩＣ７０の割り込み用ＩＤ７２と、物理ＣＰＵ管理表４２０を用いて、物理Ｉ／Ｏデバイスの割り込みを受ける物理ＣＰＵがExclusiveのＣＰＵであるか否かを判定する。割り込みを受ける物理ＣＰＵ６０がExclusiveのＣＰＵであればＳ１９８０に進み、ShareのＣＰＵであればＳ２０００に進む。
【０２４３】
Ｓ１９８０では、ＶＭＭ２０が物理ＣＰＵ管理表４２０からShareのＣＰＵを１つ選び、Ｓ１９９０に進む。本実施形態ではShareのＣＰＵ数が０になる構成を禁止しているため、ShareのＣＰＵは必ず見つかる。
【０２４４】
Ｓ１９９０では、物理Ｉ／Ｏデバイス１７０の割り込みパラメータ２２０に含まれるＭＳＩ−Ｘパラメータリスト２２８に指定されたリマップＩＤ２８０に対応する割り込みリマップ表４００のエントリ内の宛先２３０を、Ｓ１９８０で選択したShareのＣＰＵ６０の割り込み用ＩＤ７２に変更する。また、割り込みリマップ表４００の同エントリのベクタ２４０を、ＶＭＭ２０が割り込みの識別に使用するベクタに変更する。
【０２４５】
上記図１１ＡのＳ１４４０で行う共有で割り当てられた物理Ｉ／Ｏデバイスの割り込みの宛先をShareのＣＰＵに変更する処理に関して、前記第１実施形態の図１５を本第２実施形態に適用する場合について説明する。
【０２４６】
図１５のＳ２０２０〜Ｓ２０３０のループでは、物理計算機１内の物理Ｉ／Ｏデバイス１７０全てに対して割り込みリマップ表４００の設定を確認し、必要に応じて割り込みリマップ表４００を変更する。
【０２４７】
Ｓ２０２５では、ＶＭＭ２０が物理Ｉ／Ｏデバイス管理表４３０を用いて、物理Ｉ／Ｏデバイス１７０が共有割り当てで使用されているか否かを判定する。物理Ｉ／Ｏデバイス１７０が共有割り当てで使用されている場合はＳ１９２０に進み、それ以外はＳ２０３０に進む。
【０２４８】
Ｓ１９２０〜Ｓ２０００については、前記第１実施形態の図１５の同番号の処理と同じため、説明を省略する。
【０２４９】
＜３．４．新規仮想割り込みの伝達処理＞
上記図１０ＣのＳ１３００で行う新規仮想割り込みは前記第１実施形態と同一であるため説明を省略する。
【０２５０】
＜４．まとめ＞
以上に示した第２の実施形態によれば、割り込み横取りフラグ７１が有効であるShareのＣＰＵと、割り込み横取りフラグが無効であるExclusiveのＣＰＵを組み合わせて使用し、Ｉ／Ｏデバイス１７０の利用形態とＩ／Ｏデバイス１７０の割り込み宛先ＣＰＵの利用形態に応じて、割り込みリマップ表４００を変更することで、仮想計算機３０が占有Ｉ／Ｏデバイス１７００とExclusiveのＣＰＵ６０で構成される場合の割り込み伝達オーバヘッドを廃し、共有Ｉ／Ｏデバイス１７０の割り込みに対しては必ずエミュレータ３１０を実行できる。
【産業上の利用可能性】
【０２５１】
以上のように、本発明は、ｘ８６互換のＣＰＵを備えた仮想計算機システム及び仮想化ソフトウェアに適用することができる。
【図面の簡単な説明】
【０２５２】
【図１】第１の実施形態を示し、仮想計算機システムを動作させる物理計算機のブロック図。
【図２】第１の実施形態を示し、仮想計算機システムのソフトウェアとハードウェアの要部を示すスタック図。
【図３】第１の実施形態を示し、メモリ領域のマップ。
【図４】第１の実施形態を示し、Ｉ／Ｏデバイスが保持する割り込みパラメータの構成図。
【図５】第１及び第２の実施形態を示し、ＣＰＵ及びＩ／Ｏデバイスの割り当てを仮決めする割当仮入力表の構成図。
【図６】第１及び第２の実施形態を示し、物理ＣＰＵの割り当てを規定する物理ＣＰＵ管理表の構成図。
【図７】第１及び第２の実施形態を示し、物理Ｉ／Ｏデバイスの割り当てを規定する物理Ｉ／Ｏデバイス管理表の構成図。
【図８】第１及び第２の実施形態を示し、仮想ＣＰＵの割り当てを規定する仮想ＣＰＵ管理表の構成図。
【図９】第１及び第２の実施形態を示し、仮想Ｉ／Ｏデバイスの割り当てを規定する仮想Ｉ／Ｏデバイス管理表の構成図。
【図１０Ａ】第１及び第２の実施形態を示し、ゲスト及びＶＭＭの動作概要を示すフローチャートで、前半部を示す。
【図１０Ｂ】第１及び第２の実施形態を示し、ゲスト及びＶＭＭの動作概要を示すフローチャートで、中盤部を示す。
【図１０Ｃ】第１及び第２の実施形態を示し、ゲスト及びＶＭＭの動作概要を示すフローチャートで、後半部を示す。
【図１１Ａ】第１及び第２の実施形態を示し、仮想計算機のＡＣＴ（動作開始）処理を示すフローチャートで、前半部を示す。
【図１１Ｂ】第１及び第２の実施形態を示し、仮想計算機のＡＣＴ（動作開始）処理を示すフローチャートで、後半部を示す。
【図１２】第１及び第２の実施形態を示し、仮想計算機のＤＥＡＣＴ（動作終了）処理を示すフローチャート。
【図１３】第１及び第２の実施形態を示し、占有Ｉ／Ｏデバイスの割り込み宛先をExclusiveのＣＰＵに変更する処理を示すフローチャート。
【図１４】第１及び第２の実施形態を示し、占有Ｉ／Ｏデバイスの割り込み宛先をShareのＣＰＵに変更する処理を示すフローチャート。
【図１５】第１及び第２の実施形態を示し、共有Ｉ／Ｏデバイスの割り込み宛先をShareのＣＰＵに変更する処理を示すフローチャート。
【図１６】第１及び第２の実施形態を示し、割当仮入力表の妥当性確認処理を示すフローチャート。
【図１７】第１及び第２の実施形態を示し、仮想Ｉ／Ｏデバイスの初期化処理を示すフローチャート。
【図１８】第１及び第２の実施形態を示し、仮想割り込み発生時の対応処理を示すフローチャート。
【図１９】第２の実施形態を示し、仮想計算機システムを動作させる物理計算機のブロック図。
【図２０】第２の実施形態を示し、仮想計算機システムのソフトウェアとハードウェアの要部を示すスタック図。
【図２１】第２の実施形態を示し、メモリ領域のマップ。
【図２２】第２の実施形態を示し、Ｉ／Ｏデバイスが保持する割り込みパラメータの構成図。
【図２３】第２の実施形態を示し、割り込みリマップ表の構成図。
【符号の説明】
【０２５３】
１０ 物理計算機
２０ ＶＭＭ
３０ 仮想計算機
４０ ＯＳ
５０ ＡＰ（アプリケーション）
６０ ＣＰＵ
６１ 割り込み横取りフラグ
７０ ＬＡＰＩＣ
８０ ＩＯＡＰＩＣ
９０ ＰＩＣ
１００ 割り込みリマップ機能
１１０ メモリ
１２０ ノースブリッジ
１４０ ＣＰＵ間インターフェース
１５０ コンソール
１７０ 物理Ｉ／Ｏデバイス
２２０ 割り込みパラメータ
２３０ 宛先
２４０ ベクタ
２８０ リマップＩＤ
３００ 割り込みハンドラ
３１０ エミュレータ
３２０ ＰＩＣエミュレータ
３３０ ＡＰＩＣエミュレータ
３４０ Ｉ／Ｏエミュレータ
３５０ ＣＰＵ割当時間管理部
３６０ 物理割り込み宛先管理部
３７０ ＡＣＴ／ＤＥＡＣＴ部
３８０ コンソール制御部
３９０ 物理割り込み受信部
４００ 割り込みリマップ表
４１０ リソース管理表
４２０ 物理ＣＰＵ管理表
４３０ 物理Ｉ／Ｏデバイス管理表
４４０ 仮想ＣＰＵ管理表
４５０ 仮想Ｉ／Ｏデバイス管理表
４６０ 割当仮入力表
４７０ 仮想ＰＩＣレジスタ
４８０ 仮想ＬＡＰＩＣレジスタ
４９０ 仮想割り込みパラメータ
【図１】
2010128911.tif 000003
【図２】
2010128911.tif 000004
【図３】
2010128911.tif 000005
【図４】
2010128911.tif 000006
【図５】
2010128911.tif 000007
【図６】
2010128911.tif 000008
【図７】
2010128911.tif 000009
【図８】
2010128911.tif 000010
【図９】
2010128911.tif 000011
【図１０Ａ】
2010128911.tif 000012
【図１０Ｂ】
2010128911.tif 000013
【図１０Ｃ】
2010128911.tif 000014
【図１１Ａ】
2010128911.tif 000015
【図１１Ｂ】
2010128911.tif 000016
【図１２】
2010128911.tif 000017
【図１３】
2010128911.tif 000018
【図１４】
2010128911.tif 000019
【図１５】
2010128911.tif 000020
【図１６】
2010128911.tif 000021
【図１７】
2010128911.tif 000022
【図１８】
2010128911.tif 000023
【図１９】
2010128911.tif 000024
【図２０】
2010128911.tif 000025
【図２１】
2010128911.tif 000026
【図２２】
2010128911.tif 000027
【図２３】
2010128911.tif 000028