本発明のさまざまな実施形態の説明は、例示の目的で提示されるが、網羅的であるよう意図されておらず、開示された実施形態に限られるよう意図されてもいない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
実施形態は、バス接続デバイスがターゲット・プロセッサを直接アドレス指定できるようにするという有益な効果を有することができる。したがって、ターゲット・プロセッサIDを選択する発行元のバス接続されたモジュールによって、割り込み信号のターゲットが、マルチプロセッサ・コンピュータ・システムの特定のプロセッサ(すなわち、ターゲット・プロセッサ)にされてよい。例えば、プロセッサが、前に割り込みに関連する活動を実行した割り込み信号のターゲット・プロセッサとして選択されてよい。同じプロセッサが割り込み信号も処理している場合、この割り込みに関連するすべてのデータがすでにプロセッサによって利用可能であるか、またはローカル・キャッシュに格納されているか、あるいはその両方であることができ、大きいキャッシュ・トラフィックを必要とせずに各プロセッサに対する高速なアクセスを可能にするため、各活動と同じプロセッサによって割り込み信号を処理することは、性能上の利点をもたらすことができる。
したがって、最終的に割り込みを処理するプロセッサが、キャッシュ・トラフィック最小化のような性能の観点から、このタスクに最適であるという保証がない、割り込み信号のブロードキャストを回避することができる。割り込み信号をすべてのプロセッサに提示し、各プロセッサが割り込み信号を処理しようとし、1つのプロセッサがその権利を獲得するのではなく、割り込み信号をターゲット・プロセッサに直接提供し、割り込み信号処理の効率を向上させることができる。
実施形態は、割り込みテーブル・エントリ(IRTE:interrupt table entries)を含む割り込みテーブル(IRT:interrupt table)を提供するという有益な効果を有することができ、各エントリが、論理プロセッサIDへの割り込みターゲットIDのマッピングを提供する。したがって、これらのエントリは、論理プロセッサIDへの割り込みターゲットIDごとに、一意の割り当てを定義することができる。実施形態によれば、割り込みターゲットIDは、仮想プロセッサIDの形態で提供されてよい。実施形態によれば、割り込みターゲットIDは、使用される個別のプロセッサを識別するためにゲスト・オペレーティング・システムによって使用される任意のその他のIDであってよい。
実施形態によれば、IRTは、バス接続デバイスで割り込みターゲットIDを論理プロセッサIDにマッピングすることに使用するために、メモリ内で提供される。実施形態によれば、IRTは、単一の位置で提供されてよい。IRTのメモリ・アドレスを示すアドレス・インジケータ(例えば、ポインタ)が提供されてよい。アドレス・インジケータは、例えば、バス接続デバイスによってメモリからフェッチされるデバイス・テーブルのエントリによって提供されてよい。実施形態は、大きいマッピング・テーブルをバス接続デバイスに格納する必要がないという有益な効果を有することができる。むしろ、マッピングに使用される割り込みテーブルは、メモリに格納され、必要に依ってバス接続デバイスによってアクセスされてよい。したがって、バス接続デバイスは、転送される割り込み信号ごとに、1つまたは複数の割り込みテーブル・エントリのワーキング・コピーの処理のみを必要とすることができる。割り込みテーブル・エントリの数は小さい(例えば、1である)のが好ましい。
実施形態によれば、プロセッサの再スケジューリング時に、IRTまたは個別のIRTEが更新されてよい。実施形態によれば、IRTは、メモリの内部セクション(すなわち、HSA)に格納されてよい。
有向割り込みを使用して割り込みメカニズムが実装されてよい。バス接続デバイスは、処理するために割り込み信号を、発行元のバス接続されたモジュールによって定義されたターゲット・プロセッサに転送するときに、ターゲット・プロセッサの論理プロセッサIDを使用してターゲット・プロセッサを直接アドレス指定することを可能にされてよい。バス接続されたデバイスによって割り込みターゲットIDを論理プロセッサIDに変換することは、割り込みターゲットIDと論理プロセッサIDの間のマッピングまたはゲスト・オペレーティング・システムで使用するためにスケジューリングされたプロセッサの選択がハイパーバイザによって変更されたとしても、ゲスト・オペレーティング・システムの視点から、同じプロセッサが常にアドレス指定されることをさらに保証することができる。
実施形態に従って、ターゲット・プロセッサの割り込みターゲットIDを含むメッセージ信号割り込みの形態で割り込み信号が受信される。メッセージ信号割り込み(MSI:message signaled interrupts)を使用することは、PCI(Peripheral Component Interconnect)またはPCIe(Peripheral Component Interconnect express)機能などのバス接続されたモジュールが、各中央処理装置(CPU:central processing unit)を使用しているゲスト・オペレーティング・システムに、イベントの発生または何らかの状態の存在を通知するために、中央処理装置の割り込みを生成する方法である。MSIは、特殊な帯域内メッセージを使用して割り込みを信号伝達する帯域内の方法を提供し、それによって、各デバイス上の専用割り込みピンなどの、そのような制御情報を送信するための主要なデータ経路から分離された専用経路の必要性を回避する。むしろMSIは、主要なデータ経路を介して割り込みを示す特殊なメッセージを交換することに依存する。バス接続されたモジュールが、MSIを使用するように構成された場合、各モジュールは、特殊なアドレスへの指定されたバイト数のデータのMSI書き込み動作を実行することによって、割り込みを要求する。この特殊なアドレス(すなわち、MSIアドレス)および一意のデータ値(すなわち、MSIデータ)の組合せは、MSIベクトルと呼ばれる。
最新のPCIe標準アダプタは、複数の割り込みを提供する能力を有する。例えば、MSI-Xは、バス接続されたモジュールが最大2048個の割り込みを割り当てることを許可する。したがって、マルチプロセッサ・システムに依存する高速ネットワーク・アプリケーションなどにおいて、個別の割り込みのターゲットを異なるプロセッサにすることが可能になる。MSI-Xは、多数の割り込みそれぞれに個別のMSIアドレスおよびMSIデータ値を割り当てることを許可する。
割り込み信号を送信するために、MSI-Xメッセージが使用されてよい。MSI-Xメッセージの必要な内容は、MSI-Xデータ・テーブルを使用して決定されてよい。バス接続されたモジュール(すなわち、PCIeアダプタ/機能)にローカルに存在するMSI-Xデータ・テーブルは、各割り込み信号(割り込み要求(IRQ:interrupt request)とも呼ばれる)に割り当てられた番号によってインデックス付けされてよい。MSI-Xデータ・テーブルの内容は、ゲスト・オペレーティング・システムの制御下にあり、ハードウェアまたはファームウェアあるいはその両方の誘導によってオペレーティング・システムに設定されてよい。単一のPCIeアダプタが複数のPCIe機能を備えてよく、それらのPCIe機能の各々は、独立したMSI-Xデータ・テーブルを含んでよい。これは、例えば、単一ルート入出力仮想化(SR-IOV:single root input/output virtualization)または多機能デバイスの場合であり得る。
例えば仮想プロセッサIDのような割り込みターゲットIDは、例えば割り込み信号を含むMSI-Xメッセージのような、バス接続されたモジュールによって送信されたメッセージの一部として直接エンコードされてよい。メッセージ(例えば、MSI-Xメッセージ)は、要求元ID(すなわち、バス接続されたモジュールのID)、前述の割り込みターゲットID、DIBVまたはAIBVインデックス、MSIアドレス、およびMSIデータを含んでよい。MSI-Xメッセージは、MSIアドレス用の64ビットおよびデータ用の32ビットを提供してよい。バス接続されたモジュールは、MSIを使用して、特殊なMSIアドレスへの特定のMSIデータ値のMSI書き込み動作を実行することによって、割り込みを要求してよい。
デバイス・テーブルは、割り込み要求元(すなわち、バス接続されたモジュール)の要求元ID(RID:requestor ID)によって完全にインデックス付けされてよい共有テーブルである。バス接続デバイスは、割り込みを再マッピングしてポストする。すなわち、バス接続デバイスは、割り込みターゲットIDを変換し、変換した割り込みターゲットIDを使用してターゲット・プロセッサを直接アドレス指定する。
ゲスト・オペレーティング・システム(guest operation system)は、仮想プロセッサIDを使用して、マルチプロセッサ・コンピュータ・システム内のプロセッサを識別することができる。したがって、ゲスト・オペレーティング・システムのプロセッサの見方は、論理プロセッサIDを使用している基礎になるシステムの見方と同一でなくてよい。ゲスト・オペレーティング・システムによって使用されるリソースを提供するバス接続されたモジュールは、ゲスト・オペレーティング・システムと通信するためのリソースとして仮想プロセッサID(例えば、MSI-Xデータ・テーブルなど)を使用してよく、ゲスト・オペレーティング・システムの制御下にあってよい。仮想プロセッサIDの代替として、バス接続されたモジュールがプロセッサをアドレス指定するために、任意のその他のIDが定義されてよい。
割り込みは、ゲスト・オペレーティング・システムまたはゲスト・オペレーティング・システム上で実行されているその他のソフトウェア(その他のプログラムなど)に提示される。本明細書において使用されるとき、オペレーティング・システムという用語は、オペレーティング・システムのデバイス・ドライバを含む。
本明細書において使用されるとき、バス接続されたモジュールという用語は、任意の種類のバス接続されたモジュールを含んでよい。実施形態によれば、モジュールは、例えば、ストレージ機能、処理モジュール、ネットワーク・モジュール、暗号モジュール、PCI/PCIeアダプタ、その他の種類の入出力モジュールなどの、ハードウェア・モジュールであってよい。その他の実施形態によれば、モジュールは、例えば、ストレージ機能、処理機能、ネットワーク機能、暗号機能、PCI/PCIe機能、その他の種類の入出力機能などの、ソフトウェア・モジュール(すなわち、機能)であってよい。したがって、本明細書において提示される例では、モジュールは、特に注記されない限り、機能(例えば、PCI/PCIe機能)およびアダプタ(例えば、PCI/PCIe機能)と交換可能なように使用される。
実施形態は、割り込み信号ルーティング・メカニズム(例えば、MSI-Xメッセージ・ルーティング・メカニズム)が提供されるという利点を有することができ、このメカニズムは、バス接続されたモジュール(例えば、PCIeアダプタおよびPCIe機能)およびバス接続されたモジュールを操作または制御するために使用されるデバイス・ドライバを変更されない状態に保つことができる。さらに、バス接続されたモジュールとゲスト・オペレーティング・システムの間で通信を実施するための基礎になるアーキテクチャ(例えば、PCIe MSI-Xアーキテクチャ)をハイパーバイザが妨害するのを、防ぐことができる。言い換えると、ハイパーバイザおよびバス接続されたモジュールの外部で、割り込み信号ルーティング・メカニズムに対する変更が実施されてよい。
一実施形態によれば、割り込みテーブル・エントリの第1のコピーは、割り込みターゲットIDによって識別されたターゲット・プロセッサが、ゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうかを示す実行中インジケータの第1のコピーをさらに含み、この方法は、バス接続デバイスによって、実行中インジケータの第1のコピーを使用して、ターゲット・プロセッサがゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうかをチェックし、ターゲット・プロセッサがスケジューリングされている場合は、割り込み信号の転送を続行し、ターゲット・プロセッサがスケジューリングされていない場合は、バス接続デバイスによって、ブロードキャストを使用して割り込み信号を処理するために複数のプロセッサに転送することを含む。
実施形態は、割り込みが実行中でない(すなわち、ゲスト・オペレーティング・システムで使用するためにスケジューリングされていない)プロセッサをターゲットにするのを防ぐという有益な効果を有することができる。実施形態は、ハイパーバイザがプロセッサを再スケジューリングするのを支援するという有益な効果を有することができる。
実行中インジケータは、割り込み信号と共に受信された割り込みターゲットIDによって識別されたターゲット・プロセッサが、ゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうかを示す。実行中インジケータは、例えば、実行中ビット、すなわち、各ビットが割り当てられたプロセッサが実行中であるかどうか(すなわち、ゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうか)を示す単一のビットの形態で実装されてよい。したがって、有効化された実行中ビットは、ターゲット・プロセッサが現在スケジューリングされているということをバス接続デバイスに伝えることができ、無効化された実行中ビットは、ターゲット・プロセッサが現在スケジューリングされていないということをバス接続デバイスに伝えることができる。ターゲット・プロセッサが実行中でない場合、バス接続デバイスは、プロセッサのうちの1つを直接アドレス指定しようとすることなく、フォールバック・ブロードキャスト割り込み要求(fallback broadcast interrupt request)を適切に送信することができる。
一実施形態によれば、割り込みテーブル・エントリの第1のコピーは、割り込みターゲットIDによって識別されたターゲット・プロセッサが、割り込み信号を受信することを現在ブロックされているかどうかを示す割り込みブロッキング・インジケータ(interrupt blocking indicator)をさらに含み、この方法は、バス接続デバイスによって、割り込みブロッキング・インジケータを使用して、ターゲット・プロセッサが割り込み信号を受信することをブロックされているかどうかをチェックし、ターゲット・プロセッサがブロックされていない場合は、割り込み信号の転送を続行し、ターゲット・プロセッサがブロックされている場合は、バス接続デバイスによって、割り込み信号が処理のためにターゲット・プロセッサに転送されるのをブロックすることをさらに含む。
実施形態は、一時的にブロックされているプロセッサへの割り込み信号の直接転送を防ぐという有益な効果を有することができる。代わりに割り込み信号は、別のブロックされていないプロセッサがその割り込み信号をタイムリーに処理できるように、ブロードキャストされてよい。実施形態によれば、メモリ内の割り込みテーブルの割り込みエントリに、直接割り込みブロッキング・インジケータが導入される。直接割り込みブロッキング・インジケータは、単一のビット(すなわち、dIBPIAビット)の形態で実装されてよい。
実施形態によれば、IRTEがメモリからフェッチされ、ターゲット・プロセッサがスケジューリングされているかどうかを決定するために、実行中インジケータがチェックされる。ターゲット・プロセッサがスケジューリングされている場合、ターゲット・プロセッサが現在の割り込み信号を処理している間に割り込み信号をさらに受信するのをブロックするために、直接割り込みブロッキング・インジケータが有効化される。そうしないと、さらなる割り込み信号が、現在の割り込み信号の処理を妨げることがある。その一方で、ターゲット・プロセッサが再スケジューリングされていないことを保証するために、IRTEが再フェッチされ、現在の実行中インジケータが再びチェックされて、ターゲット・プロセッサがまだスケジューリングされているかどうかを判定する。ターゲット・プロセッサがまだスケジューリングされている場合、ターゲット・プロセッサの論理プロセッサIDを使用してターゲット・プロセッサを直接アドレス指定し、割り込み信号がターゲット・プロセッサに転送されてよい。加えて、受信された割り込みターゲットIDに関してIRTEによって提供されたターゲット・プロセッサの論理プロセッサIDがまだ同じかどうかが、チェックされてよい。
一実施形態によれば、この方法は、バス接続デバイスによって、ブロードキャストを使用して、割り込み信号を処理するために複数のプロセッサのうちの残りのプロセッサに転送することをさらに含む。
一実施形態によれば、この方法は、ゲスト・オペレーティング・システムの割り込みハンドラによって、ターゲット・プロセッサによって処理するためにターゲット・プロセッサに向けてアドレス指定された割り込みが保留中であるかどうかをチェックし、ターゲット・プロセッサによって処理するためにターゲット・プロセッサに向けてアドレス指定された割り込みが保留中でない場合、ゲスト・オペレーティング・システムによって、ターゲット・プロセッサがブロックされていないことを示すように、ターゲット・プロセッサに割り当てられた割り込みテーブル・エントリ内の割り込みブロッキング・インジケータを変更することをさらに含む。
一実施形態によれば、この方法は、ターゲット・プロセッサがブロックされていない場合、バス接続デバイスによって、第1の論理プロセッサIDがブロックされていることを示すように、割り込みターゲットIDに割り当てられた割り込みテーブル・エントリ内の割り込みブロッキング・インジケータを変更することをさらに含み、この変更することは、処理のためのターゲット・プロセッサへの割り込み信号の転送前に実行される。
実施形態は、ターゲット・プロセッサへの複数の割り込み信号の直接転送を防ぐという有益な効果を有することができ、そのような直接転送は、互いに妨げる割り込みに起因する遅延をもたらすことがある。
一実施形態によれば、この方法は、バス接続デバイスによって、割り込みブロッキング・インジケータの変更後に、受信された割り込みターゲットIDに割り当てられた割り込みテーブル・エントリの第2のコピーを取り出すことと、バス接続デバイスによって割り込みテーブル・エントリの第2のコピーをチェックし、割り込みテーブル・エントリの第1のコピーと相対的な割り込みテーブルの第2のコピーの事前に定義された種類の変更を除外することとをさらに含み、事前に定義された種類の変更の正常な除外は、処理のためのターゲット・プロセッサへの割り込み信号の転送に必要である。
実施形態は、割り込みテーブルによって提供された期限切れ情報に基づいて割り込み信号を直接転送するという有益な効果を有することができる。
一実施形態によれば、事前に定義された種類の変更は、割り込みテーブル・エントリの第2のコピーに含まれている論理プロセッサIDのうちの第2の1つへの受信された割り込みターゲットIDの第2のマッピングと相対的な受信された割り込みターゲットIDの第1のマッピングの変更であり、第2のマッピングが第1のマッピングと相対的な変更を含む場合、バス接続デバイスによって、ブロードキャストを使用して、割り込み信号が処理のために複数のプロセッサに転送される。
一実施形態によれば、バス接続デバイスは、割り込みテーブル・エントリの第2のコピーを、ターゲット・プロセッサの論理プロセッサIDへの受信された割り込みターゲットIDの変換に使用している。実施形態は、最新のマッピング情報を使用できるという有益な効果を有することができる。
一実施形態によれば、事前に定義された種類の変更は、割り込みテーブル・エントリの第2のコピーに含まれている実行中インジケータの第2のコピーと相対的な実行中インジケータの第1のコピーの変更であり、実行中インジケータの第2のコピーが、実行中ビットの第1のコピーと相対的な変更を含んでおり、第2のコピーの実行中インジケータが、ターゲット・プロセッサがオペレーティング・システムで使用するためにスケジューリングされていないことを示している場合、割り込み信号が、バス接続デバイスによって、ブロードキャストを使用して処理のために複数のプロセッサに転送される。実施形態は、割り込み信号がスケジューリングされていないターゲット・プロセッサに転送されるのを防ぐという有益な効果を有することができる。
実施形態によれば、その間に、割り込み信号が、例えば無効化されているプロセッサに送信されるのを防ぐために、IRTEの二重のフェッチが実行されてよい。実施形態によれば、IRTEの第1のコピーを使用して割り込みターゲットIDの変換から得られた論理プロセッサIDによって識別されたプロセッサに割り込み信号を転送した後に、同じIRTEの第2のコピーがフェッチされ、その間にIRTEの変更が行われるかどうかをチェックしてよい。その間にIRTEが更新されている場合、割り込み信号が無効化されたプロセッサに転送されているリスクがある。したがって、IRTEの第2のコピーは、割り込みターゲットIDを再び変換し、第2の変換から得られた論理プロセッサIDによって識別されたプロセッサに割り込み信号を転送するために、使用されてよい。代替の実施形態によれば、IRTEの第2のコピーが第1のコピーに一致しない場合に、IRTEの第1のコピーのフェッチから開始する完全な方法が繰り返されてよい。例えば、IRTEの第3のコピーがフェッチされ、IRTEの第1のコピーを置き換えてよく、またはIRTEの第2のコピーがIRTEの第1のコピーを置き換えてよく、この方法の部分的反復のためにも、IRTEの第3のコピーがフェッチされ、二重フェッチ方式を実施してよい。この方式は、一致が達成されるまで繰り返されてよい。さらに別の代替の実施形態によれば、IRTEの第2のコピーが第1のコピーに一致しない場合、ブロードキャストを使用して割り込み信号が転送されてよい。実施形態によれば、バス接続デバイスは、メモリキャッシュコヒーレンス・プロトコルに参加し、CPUがキャッシュラインの変化を検出し得るのと同じメカニズムによって、IRTEに対する変化(例えば、キャッシュ・スヌーピング)を検出する。
実施形態は、非効率的なスケーリングを含むことがあるキャッシュ・パージを回避するという有益な効果を有することができる。二重フェッチは、全体的であるか、またはIRTEに固有であってよく、すなわち、エントリ全体が二重フェッチの対象になるか、または二重フェッチが、各エントリに含まれている特定の情報に制限されてよい。
実施形態によれば、割り込みターゲットIDを変換し、割り込み信号をターゲット・プロセッサに転送するために必要な時間から生じる競合条件は、割り込み信号がプロセッサに達するまで、受信側プロセッサがまだ正しいターゲット・プロセッサであるかどうかをチェックするCPU上のチェック論理によって捕らえられてよい。このチェックのために、割り込み要求と共に受信された割り込みターゲットIDまたは論理パーティションIDあるいはその両方が、参照として受信側プロセッサに割り当てられた現在の割り込みターゲットIDまたは論理パーティションIDあるいはその両方と比較されてよい。一致する場合、IRTEのコピーを使用する変換から得られた論理プロセッサIDを使用して直接アドレス指定された受信側プロセッサは、本当に正しいターゲット・プロセッサである。したがって、IRTEのコピーによって提供された情報は、最新であった。一致しない場合、IRTEのコピーは最新ではなくなっており、受信側プロセッサは、もはやターゲット・プロセッサではない。一致しない場合、割り込み信号が、例えばブロードキャストを使用してターゲット・オペレーティング・システムに転送されてよい。
実施形態によれば、並列に動作している3つの実体、すなわちバス接続デバイス、および割り込み信号を処理するターゲット・プロセッサ、ならびに割り込みターゲットIDと論理プロセッサIDの間の割り当てを変更できるハイパーバイザが存在してよい。実施形態によれば、物理的に分散されたシステム内には、待ち時間を代償にしてそのようなシステムの仮想的外観を提供するメモリを除き、中央同期点が存在しなくてよい。二重フェッチ方式を使用する実施形態は、割り込み要求の二重配信または失敗を防ぐこと対して速度に関して最適化される方法を提供するという有益な効果を有することができる。
割り込み信号を考慮して、次の動作が実行されてよい:(A1)IRTEの第1のコピーを読み取る、(A2)割り込み要求を直接アドレス指定されたプロセッサに送信する、および(A3)IRTEの第2のコピーを読み取る。同時に、割り込みターゲットIDと論理プロセッサIDの間の割り当ての変更に関する次のシーケンスが発生してよい:(B1)追加の論理プロセッサIDを持つ追加のプロセッサを有効化し、前の論理プロセッサIDを持つ前のプロセッサを無効化する、および(B2)追加の論理プロセッサIDを使用してIRTEを更新する(すなわち、前の論理プロセッサIDを追加の論理プロセッサIDに置き換える)。
特定のエラーの場合、プロセッサ(例えば、ターゲット・プロセッサ)がチェックポイントにリセットされ、中間情報を失うことがある。失われた情報を取り戻すために、プロセッサは、この特定のプロセッサ(すなわち、論理プロセッサIDに割り当てられたプロセッサ)に関するすべてのIRTEエントリをスキャンし、プロセッサの回復による影響を受けないメモリ内に存在する保留中直接割り込みインジケータ(pending direct interrupt indicators)(例えば、dPIAビット)によって示された直接割り込み要求を配信してよい。
IRTEに含まれる保留中直接割り込みインジケータ(例えば、IRTE.dPIAビット)は、割り込み信号が提示される場合に、マスター・コピー(すなわち、信頼できる唯一の位置)として使用されてよい。プロセッサの回復を簡略化するために、プロセッサ内の保留中直接割り込みインジケータが、直接割り込みをプロセッサ上で保留中に保つための、例えばIRTE.dPIAビットのシャドーコピーとして使用されてよい。
メモリが厳密に順序付けされる性質を有する場合、ステップA1、A2、およびB1を考慮して、A1→A3→B1を含む代替案1、およびA1→B1→A3を含む代替案2というシーケンスのみが可能であってよい。代替案1の場合、IRTEの第1のコピーと第2のコピーが一致してよい。したがって、割り込み信号が、現在のターゲット・プロセッサの代わりに、前のプロセッサに転送されてよい。前のプロセッサは、割り込みターゲットIDまたは論理パーティションIDあるいはその両方に関する不一致を検出し、受信された割り込み信号のブロードキャストを開始してよい。代替案2の場合、バス接続デバイスが、IRTEの第1のコピーと第2のコピーの間の不一致を検出してよい。この不一致に応答して、バス接続デバイスが割り込み信号をブロードキャストしてよい。このブロードキャストに起因して、追加のプロセッサによって割り込み信号が受信されてよく、追加のプロセッサが、ヒットを検出し、受信された割り込み要求を直接処理する。実施形態は、オーバーイニシアチブ手法(over-initiative-approach)によってタイミング・ウィンドウを閉じるという有益な効果を有することができる。
一実施形態によれば、この方法は、バス接続デバイスによって、メモリに格納されたデバイス・テーブルからデバイス・テーブル・エントリのコピーを取り出すことをさらに含み、このデバイス・テーブル・エントリが、割り込みテーブルのメモリ・アドレスを示す割り込みテーブル・アドレス・インジケータを含み、バス接続デバイスが、割り込みテーブル・エントリの第1のコピーを取り出すために、割り込みテーブルのメモリ・アドレスを使用する。
一実施形態によれば、デバイス・テーブル・エントリは、ターゲット・プロセッサが直接アドレス指定されるかどうかを示す直接信号伝達インジケータをさらに含んでおり、この方法は、直接信号伝達インジケータが割り込み信号の直接転送を示している場合に、ターゲット・プロセッサの論理プロセッサIDを使用してターゲット・プロセッサを直接アドレス指定する割り込み信号の転送が実行され、そうでない場合に、バス接続デバイスによって、ブロードキャストを使用して、割り込み信号を処理するために複数のプロセッサに転送することをさらに含む。
実施形態は、直接アドレス指定またはブロードキャストのいずれを使用して割り込み信号が転送されるかを直接信号伝達インジケータによって制御するという有益な効果を有することができる。バス接続されたモジュールから受信された割り込み信号に関して、直接アドレス指定またはブロードキャストのいずれが実行されるかに関わらず、バス接続されたモジュールごとに直接信号伝達インジケータを使用して、個別の事前に定義された選択が提供されてよい。
一実施形態によれば、メモリは、割り込み要約ベクトル(interrupt summaryvector)をさらに含んでおり、デバイス・テーブル・エントリが、割り込み要約ベクトルのメモリ・アドレスを示す割り込み要約ベクトル・アドレス・インジケータをさらに含み、割り込み要約ベクトルが、バス接続されたモジュールごとに割り込み要約インジケータを含み、各割り込み要約インジケータが、バス接続されたモジュールに割り当てられ、各バス接続されたモジュールによって発行された処理される割り込み信号が存在するかどうかを示し、この方法は、バス接続デバイスによって、割り込み要約ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号の発行元であるバス接続されたモジュールに割り当てられた割り込み要約インジケータを更新し、更新された割り込み要約インジケータが、各バス接続されたモジュールによって発行された処理される割り込み信号が存在するということを示すようにすることを、さらに含む。
実施形態は、どのバス接続されたモジュールからの処理される割り込み信号が存在しているかを監視し、記録するという有益な効果を有することができる。この情報は、例えば、直接アドレス指定が失敗するか、または使用できない場合のフォールバックとして、ブロードキャストを実行する必要がある場合に特に役立つことがある。
一実施形態によれば、メモリは、有向割り込み要約ベクトルをさらに含み、デバイス・テーブル・エントリが、有向割り込み要約ベクトルのメモリ・アドレスを示す有向割り込み要約ベクトル・アドレス・インジケータをさらに含み、有向割り込み要約ベクトルが、割り込みターゲットIDごとに有向割り込み要約インジケータを含み、各有向割り込み要約インジケータが、割り込みターゲットIDに割り当てられ、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在するかどうかを示し、この方法は、バス接続デバイスによって、有向割り込み要約ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号のアドレス指定先であるターゲット・プロセッサIDに割り当てられた割り込み要約インジケータを更新し、更新された割り込み要約インジケータが、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在するということを示すようにすることを、さらに含む。
実施形態は、どのターゲット・プロセッサIDに関して処理される割り込み信号が存在しているかを監視し、記録するという有益な効果を有することができる。この情報は、例えば、直接アドレス指定が失敗するか、または使用できない場合のフォールバックとして、ブロードキャストを実行する必要がある場合に特に役立つことがある。
例えばハイパーバイザがターゲット・プロセッサをスケジューリングしなかったために、割り込みを直接配信できない場合、ゲスト・オペレーティング・システムは、ブロードキャストを使用して、当初意図された類似性(すなわち、どのプロセッサに対して割り込みが意図されたかの情報)を有する割り込みを配信することによる恩恵を受けることができる。この場合、バス接続デバイスは、有向割り込み信号伝達ベクトル(DIBV)を設定した後に、ブロードキャスト割り込み要求をゲスト・オペレーティング・システムに配信する前に、有向割り込み信号伝達ベクトル(DISB)内のターゲット・プロセッサを指定するビットを設定してよい。したがって、ゲスト・オペレーティング・システムがブロードキャスト割り込み要求を受信した場合、ゲスト・オペレーティング・システムは、DISB内の直接割り込み要約インジケータをスキャンして無効化する(例えば、直接割り込み要約ビットをスキャンしてリセットする)ことによって、どのターゲット・プロセッサがDIBV内で信号伝達された保留中の割り込み信号を有しているかを識別してよい。このようにして、ゲスト・オペレーティング・システムは、割り込み信号が、ブロードキャストを受信した現在のプロセッサによって処理されるのか、または元のターゲット・プロセッサにさらに転送されるのかを判定できるようになってよい。
一実施形態によれば、メモリは、1つまたは複数の割り込み信号ベクトルをさらに含み、デバイス・テーブル・エントリが、1つまたは複数の割り込み信号ベクトルのうちの1つの割り込み信号ベクトルのメモリ・アドレスを示す割り込み信号ベクトル・アドレス・インジケータをさらに含み、割り込み信号ベクトルの各々が、1つまたは複数の信号インジケータを含み、各割り込み信号インジケータが、1つまたは複数のバス接続されたモジュールのうちの1つのバス接続されたモジュールおよび割り込みターゲットIDに割り当てられ、割り込み信号が、各割り込みターゲットIDに向けてアドレス指定された各バス接続されたモジュールから受信されたかどうかを示し、この方法は、バス接続デバイスによって、割り込み信号ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号を発行したバス接続されたモジュール、および受信された割り込み信号のアドレス指定先である割り込みターゲットIDに割り当てられた割り込み信号インジケータを選択することと、選択された割り込み信号インジケータが、各バス接続されたモジュールによって発行され、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在することを示すように、選択された割り込み信号インジケータを更新することとをさらに含む。
一実施形態によれば、割り込み信号ベクトルは、各割り込みターゲットIDに割り当てられた割り込みターゲットIDごとの割り込み信号インジケータをそれぞれ含んでおり、割り込み信号ベクトルの各々が個別のバス接続されたモジュールに割り当てられ、各割り込み信号ベクトルの割り込み信号インジケータが、各個別のバス接続されたモジュールにさらに割り当てられる。実施形態は、ゲスト・オペレーティング・システムが、どのターゲット・プロセッサに対してバス接続されたモジュールが処理される割り込み信号を発行したかを追跡できるようにするという有益な効果を有することができる。
一実施形態によれば、割り込み信号ベクトルは、各バス接続されたモジュールに割り当てられたバス接続されたモジュールごとの割り込み信号インジケータをそれぞれ含んでおり、割り込み信号ベクトルの各々が個別のターゲット・プロセッサIDに割り当てられ、各割り込み信号ベクトルの割り込み信号インジケータが、各ターゲット・プロセッサIDにさらに割り当てられる。実施形態は、ゲスト・オペレーティング・システムが、どのバス接続されたモジュールから、特定のターゲット・プロセッサによって処理される割り込み信号が発行されたかを追跡できるようにするという有益な効果を有することができる。
したがって、割り込み信号ベクトルは、ターゲット・プロセッサIDに応じて順序付けられた(すなわち、有向割り込みを追跡するために最適化された)有向割り込み信号ベクトルとして実装されてよい。言い換えると、主要な順序基準は、発行元のバス接続されたモジュールを識別する要求元IDではなく、ターゲット・プロセッサIDである。各有向割り込み信号ベクトルは、バス接続されたモジュールの数に応じて、1つまたは複数の有向割り込み信号インジケータを含んでよい。
個別の割り込み信号を示す、例えば割り込み信号伝達ビットの形態での割り込み信号インジケータの順序付けは、例えばMSI-Xメッセージの形態で、キャッシュ・ラインのようなメモリの連続領域内で、連続的に受信されており、したがって、例えばPCIe機能のような個別のバス接続されたモジュールの場合、回避することができる。例えば割り込み信号伝達ビットを設定するか、またはリセットするか、あるいはその両方を実行することによって、割り込み信号インジケータを有効化するか、無効化するか、あるいはその両方を実行するには、メモリの各連続領域をプロセッサのうちの1つに移動し、それに依って各割り込み信号インジケータを変更する必要がある。
プロセッサが、ゲスト・オペレーティング・システムの視点からの責任を負っているすべてのインジケータ、すなわち特に、各プロセッサに割り当てられたすべてのインジケータを処理することが意図されてよい。これによって、各プロセッサが割り当てられたすべてのデータを処理している場合に、この状況において必要なデータがプロセッサに提供されるか、またはローカル・キャッシュに格納されるか、あるいはその両方である可能性が高まることができ、大きいキャッシュ・トラフィックを必要とせずにプロセッサの各データへの高速アクセスを可能にするため、性能上の優位性を可能にすることができる。
しかし、それにもかかわらず、各プロセッサが、責任を負っているすべてのインジケータを処理しようとすることは、各プロセッサがすべての機能に関するすべてのキャッシュ・ラインを書き込む必要があるため、プロセッサ間の大きいキャッシュ・トラフィックにつながることがある。各個別のプロセッサに割り当てられたインジケータが、キャッシュ・ラインなどのすべての連続領域にわたって分散されることがあるためである。
同じ割り込みターゲットIDに割り当てられたすべての割り込み信号伝達インジケータが、メモリの同じ連続領域(例えば、キャッシュ・ライン)内で結合されるように、割り込み信号伝達インジケータが、有向割り込み信号伝達ベクトルの形態で記録されてよい。したがって、各プロセッサ(すなわち、割り込みターゲットID)に割り当てられたインジケータを処理しようとするプロセッサは、メモリの単一の連続領域を読み込むことのみが必要であってよい。したがって、バス接続されたモジュールごとの連続領域ではなく、割り込みターゲットIDごとの連続領域が使用される。各プロセッサは、割り込みターゲットIDによって識別されたターゲット・プロセッサとしてその特定のプロセッサをターゲットにするすべての使用可能なバス接続されたモジュールから受信されたすべての割り込み信号に関するメモリの単一の連続領域(例えば、キャッシュ・ライン)をスキャンして更新することのみが必要であってよい。
実施形態によれば、ゲスト・オペレーティング・システムがビットを異なるオフセットにアライメントするように、ハイパーバイザによってオフセットが適用されてよい。
一実施形態によれば、デバイス・テーブル・エントリは、ゲスト・オペレーティング・システムが割り当てられた論理パーティションを識別する論理パーティションIDをさらに含んでおり、バス接続デバイスによる割り込み信号の転送が、割り込み信号と共に論理パーティションIDを転送することをさらに含む。実施形態は、受信側プロセッサが、どのゲスト・オペレーティング・システムに向けて割り込み信号がアドレス指定されたかをチェックできるようにするという有益な効果を有することができる。
一実施形態によれば、この方法は、バス接続デバイスによって、受信された割り込み信号が割り当てられた割り込みサブクラスを識別する割り込みサブクラスIDを取り出すことをさらに含み、バス接続デバイスによる割り込み信号の転送が、割り込み信号と共に割り込みサブクラスIDを転送することをさらに含む。
実施形態によれば、処理回路によって実行するためにコンピュータ可読の非一過性媒体上で提供された命令が、本明細書において説明されているように割り込み信号をゲスト・オペレーティング・システムに提供するための方法の実施形態のいずれかを実行するように、構成される。
実施形態によれば、コンピュータ・システムが、本明細書において説明されているように割り込み信号をゲスト・オペレーティング・システムに提供するための方法の実施形態のいずれかを実行するように、さらに構成される。
図1は、割り込み信号をゲスト・オペレーティング・システムに提供するための例示的なコンピュータ・システム100を示している。コンピュータ・システム100は、ゲスト・オペレーティング・システムを実行するために使用される複数のプロセッサ130を含む。コンピュータ・システム100は、記憶装置またはメイン・メモリとも呼ばれるメモリ140をさらに含む。メモリ140は、コンピュータ・システム100に含まれているハードウェア・コンポーネント、ファームウェア・コンポーネント、およびソフトウェア・コンポーネントで使用するために割り当てられたメモリ空間(すなわち、メモリ・セクション)を提供してよい。メモリ140は、コンピュータ・システム100のハードウェアおよびファームウェアならびにソフトウェア(例えば、ハイパーバイザ、ホスト/ゲスト・オペレーティング・システム、アプリケーション・プログラムなど)によって使用されてよい。1つまたは複数のバス接続されたモジュール120が、バス102およびバス接続デバイス110を介して複数のプロセッサ130およびメモリ140に操作可能なように接続される。バス接続デバイス110は、一方では、バス接続されたモジュール120とプロセッサ130の間の通信を管理し、他方では、メモリ140を管理する。バス接続されたモジュール120は、バス102に直接、または例えばスイッチ104のような1つまたは複数の中間コンポーネントを介して、接続されてよい。
バス接続されたモジュール120は、例えば、PCIe(Peripheral Component Interconnect express)モジュール(PCIeアダプタまたはPCIeアダプタによって提供されるPCIe機能とも呼ばれる)の形態で提供されてよい。PCIe機能120は、バス接続デバイス110(例えば、PCIブリッジ・ユニット(PBU:PCI Bridge Unit)とも呼ばれるPCIホスト・ブリッジ(PHB:PCI Host Bridge))に送信される要求を発行してよい。バス接続デバイス110は、バス接続されたモジュール120から要求を受信する。これらの要求は、例えば、バス接続デバイス110によってメモリ140へのダイレクト・メモリ・アクセス(DMA:direct memory access)を実行するために使用される入出力アドレス、または割り込み信号(例えば、メッセージ信号割り込み(MSI))を示す入出力アドレスを含んでよい。
図2は、コンピュータ・システム100によって提供される例示的な仮想マシンのサポートを示している。コンピュータ・システム100は、1つまたは複数の仮想マシン202および少なくとも1つのハイパーバイザ200を備えてよい。仮想マシンのサポートは、多数の仮想マシンを動作させることができるようにしてよく、各仮想マシンは、z/Linuxなどのゲスト・オペレーティング・システム204を実行することができる。各仮想マシン201は、別々のシステムとして機能することができてよい。したがって、各仮想マシンは、独立してリセットされ、ゲスト・オペレーティング・システムを実行し、アプリケーション・プログラムのようなさまざまなプログラムを実行してよい。仮想マシン内で実行されるオペレーティング・システムまたはアプリケーション・プログラムは、完全なコンピュータ・システム全体にアクセスできるように見える。しかし、実際は、コンピュータ・システムの使用可能なリソースの一部のみが、各オペレーティング・システムまたはアプリケーション・プログラムによって利用可能であることがある。
仮想マシンは、V=Vモデルを使用してよく、V=Vモデルでは、仮想マシンに割り当てられたメモリは、実メモリの代わりに、仮想メモリによって支援される。したがって、各仮想マシンは、仮想線形メモリ空間を有する。物理リソースは、VMハイパーバイザなどのハイパーバイザ200によって所有され、共有物理リソースは、必要に応じて処理要求を満たすために、ハイパーバイザによってゲスト・オペレーティング・システムにディスパッチされる。多数のゲストが、ハイパーバイザが単にハードウェア・リソースを分割して構成されたゲストに割り当てることを不可能にすることがあるため、V=V仮想マシン・モデルは、ゲスト・オペレーティング・システムとマシンの共有物理リソースの間の相互作用がVMハイパーバイザによって制御されることを仮定する。
プロセッサ120は、ハイパーバイザ200によって仮想マシン202に割り当て可能である。仮想マシン202に、例えば1つまたは複数の論理プロセッサが割り当てられてよい。論理プロセッサの各々は、ハイパーバイザ200によって仮想マシン202に動的に割り当てることができる物理プロセッサ120のすべてまたは一部を表してよい。仮想マシン202は、ハイパーバイザ200によって管理される。ハイパーバイザ200は、例えば、プロセッサ120上で実行されるファームウェアにおいて実装されてよく、またはコンピュータ・システム100上で実行されるオペレーティング・システムの一部であってよい。ハイパーバイザ200は、例えば、International Business Machines Corporation(ニューヨーク州アーモンク市)によって提供されるz/VM(R)などのVMハイパーバイザであってよい。
図3は、コンピュータ・システム100によって提供される例示的な複数レベルの仮想マシンのサポートを示している。図2の第1のレベルの仮想化に加えて、第2のレベルの仮想化が提供され、第2のハイパーバイザ210が、第2のハイパーバイザ210のためのホスト・オペレーティング・システムとして機能する第1のレベルのゲスト・オペレーティング・システムのうちの1つで実行されている。第2のハイパーバイザ210は、1つまたは複数の第2のレベルの仮想マシン212を管理してよく、各仮想マシン212は、第2のレベルのゲスト・オペレーティング・システム214を実行することができる。
図4は、コンピュータ・システム100の異なる階層レベルでプロセッサを識別するための異なる種類のIDの使用を示す例示的なパターンを示している。基礎になるファームウェア220は、コンピュータ・システム100のプロセッサ130を識別するために、論理プロセッサID lCPU222を提供してよい。第1のレベルのハイパーバイザ200は、論理プロセッサID lCPU222を使用して、プロセッサ130と通信する。第1のレベルのハイパーバイザが、ゲスト・オペレーティング・システム204で使用するために第1の仮想プロセッサID vCPU224を提供してよく、または第2のレベルのハイパーバイザ219が、第1のレベルのハイパーバイザ200によって管理される仮想マシン上で実行される。ハイパーバイザ200は、第1の仮想プロセッサID vCPU224をグループ化して、論理パーティション(ゾーンとも呼ばれる)をゲスト・オペレーティング・システム204またはハイパーバイザ210あるいはその両方に提供してよい。第1の仮想プロセッサID vCPU224は、第1のレベルのハイパーバイザ200によって論理プロセッサID lCPU222にマッピングされる。第1のレベルのハイパーバイザ200によって提供された第1の仮想プロセッサID vCPU224のうちの1つまたは複数は、第1のレベルのハイパーバイザ200を使用して実行される各ゲスト・オペレーティング・システム204またはハイパーバイザ210に割り当てられてよい。第1のレベルのハイパーバイザ200上で実行される第2のレベルのハイパーバイザ210は、例えばさらなるゲスト・オペレーティング・システム214のようなソフトウェアを実行している1つまたは複数の仮想マシンを提供してよい。このために、第2のレベルのハイパーバイザは、第1のレベルのハイパーバイザ200の仮想マシン上で実行される第2のレベルのゲスト・オペレーティング・システム214で使用するために、第2の仮想プロセッサID vCPU226を管理する。第2の仮想プロセッサID vCPU226は、第2のレベルのハイパーバイザ200によって第1の仮想プロセッサID vCPU224にマッピングされる。
第1/第2のレベルのゲスト・オペレーティング・システム204によって使用されるプロセッサ130をアドレス指定するバス接続されたモジュール120は、第1/第2の仮想プロセッサID vCPU224、226または第1/第2の仮想プロセッサID vCPU224、226から得られた代替のIDの形態で、ターゲット・プロセッサIDを使用してよい。
図5は、割り込み信号をコンピュータ・システム100上で実行されるゲスト・オペレーティング・システムに提供するための方法における主な参加者を示す、コンピュータ・システム100の簡略化された概略設定を示している。例示の目的で簡略化された設定は、割り込み信号をプロセッサ(CPU)130のうちの1つまたは複数で実行されるゲスト・オペレーティング・システムに送信するバス接続されたモジュール(BCM:bus connected module)120を含む。割り込み信号は、プロセッサ130のうちの1つをターゲット・プロセッサとして識別する割り込みターゲットID(IT_ID)を持つバス接続デバイス110に送信される。バス接続デバイス110は、コンピュータ・システム100のバス接続されたモジュール120とプロセッサ130の間の通信およびメモリ140を管理する中間デバイスである。バス接続デバイス110は、割り込み信号を受信し、各ターゲット・プロセッサを直接アドレス指定するために、割り込みターゲットIDを使用してターゲット・プロセッサの論理プロセッサIDを識別する。ターゲット・プロセッサへの有向転送は、例えばキャッシュ・トラフィックを削減することによって、データ処理の効率を改善することができる。
図6は、図5のコンピュータ・システム100を示している。バス接続デバイス110は、メモリ140のモジュール固有の領域(MSA:module specific area)149内のバス接続されたモジュール120の状態の状態更新を実行するように構成される。そのような状態更新は、状態更新をメモリ140に書き込むことを指定するダイレクト・メモリ・アクセス(DMA)書き込みをバス接続されたモジュールから受信することに応答して実行されてよい。
メモリは、バス接続されたモジュール120ごとにデバイス・テーブル・エントリ(DTE:device table entry)146を含むデバイス・テーブル(DT:device table)144をさらに含む。割り込み信号(例えば、割り込み要求のターゲット・プロセッサを識別する割り込みターゲットIDおよび割り込み要求の要求元をバス接続されたモジュール120の形態で識別する要求元IDを含むMSI-X書き込みメッセージ)の受信時に、バス接続デバイス110は、要求元のバス接続されたモジュール120に割り当てられたDTE146をフェッチする。DTE146は、例えばdIRQビットを使用して、要求元のバス接続されたモジュール120に対してターゲット・プロセッサの有向アドレス指定が有効化されているかどうかを示してよい。バス接続デバイスは、プロセッサ130のうちのどのプロセッサに対する割り込み信号が受信されたかを追跡するために、有向割り込み信号ベクトル(DIBV)162および有向割り込み要約ベクトル(DISB)160のエントリを更新する。DISB160は、いずれかのバス接続されたモジュール120からのこのプロセッサ130に対する処理される割り込み信号が存在するかどうかを示す、割り込みターゲットIDごとに1つのエントリを含んでよい。各DIBV162は、割り込みターゲットID(すなわち、プロセッサ130)のうちの1つに割り当てられ、1つまたは複数のエントリを含んでよい。各エントリは、バス接続されたモジュール120のうちの1つに割り当てられている。したがって、DIBVは、どのバス接続されたモジュールからの特定のプロセッサ130に対する処理される割り込み信号が存在するかを示す。この方法は、割り込み信号が存在するかどうか、またはどのバス接続されたモジュール120からの特定のプロセッサに対する処理される割り込み信号が存在するかをチェックするための利点を有することができる。1つの信号エントリ(例えば、ビット)のみ、または1つの信号ベクトル(例えば、ビット・ベクトル)のみがメモリ140から読み取られる必要がある。代替の実施形態によれば、割り込み信号ベクトル(AIBV)および割り込み要約ベクトル(AISB)が使用されてよい。AIBVに加えて、AISBのエントリが、特定のバス接続されたモジュール120に割り当てられる。
バス接続デバイス110は、メモリ140に格納された割り込みテーブル(IRT)150のエントリ(IRTE)152を使用して、割り込みターゲットID(IT_ID)を論理プロセッサID(lCPU)に変換し、論理プロセッサIDを使用してターゲット・プロセッサを直接アドレス指定し、受信された割り込み信号をターゲット・プロセッサに転送する。この変換のために、バス接続デバイス110はエントリ(IRTE)152のコピー114をフェッチする。このコピーは、DTE146のコピーによって提供された割り込みテーブル150のアドレス(IRT@)を使用して、ローカル・キャッシュまたはメモリ140のいずれかからフェッチされてよい。IRTE152は、論理プロセッサIDへの割り込みターゲットIDのマッピングを提供し、このマッピングは、バス接続デバイス110によって、有向割り込みの転送の場合にターゲット・プロセッサを直接アドレス指定するために使用される。各プロセッサは、直接割り込み信号を受信して処理するためのファームウェア(例えば、ミリコード132)を含む。ファームウェアは、例えばプロセッサ130のマイクロコードまたはマクロコードあるいはその両方をさらに含んでよい。ファームウェアは、上位レベルのマシン・コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含んでよい。実施形態によれば、ファームウェアは、信頼できるソフトウェアを含むマイクロコード、または基礎になるハードウェアに固有のマイクロコードとして提供できる、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含んでよい。さらに、プロセッサ130のファームウェアは、バス接続デバイス110によって受信側プロセッサ130に転送された割り込みターゲットIDに従って受信側プロセッサがターゲット・プロセッサと同一であるかどうかをチェックするためのチェック論理134を含んでよい。受信側プロセッサ130がターゲット・プロセッサでない場合、すなわち、受信された割り込みターゲットIDと受信側プロセッサ130の参照割り込みターゲットIDが一致しない場合、割り込み信号を処理するプロセッサを見つけるために、割り込み信号が論理パーティションにブロードキャストされる。
図7は、DMA書き込み要求を使用してバス接続デバイス110を介してバス接続されたモジュール120の状態更新を実行するための例示的な方法のフローチャートである。ステップ300で、バス接続されたモジュールが、その状態を更新することを決定し、例えば信号の完了を示すために、割り込みをトリガーしてよい。ステップ310で、バス接続されたモジュールが、バス接続されたモジュールの状態を更新するために、バス接続デバイスを介して、コンピュータ・システム上で実行されているホストに割り当てられたメモリのセクション(すなわち、ホスト・メモリ)へのダイレクト・メモリ・アクセス(DMA)書き込みを開始する。DMAは、システム・プロセッサに関与させる必要なしに、コンピュータ・システムのペリフェラル・コンポーネントがI/Oデータをメイン・メモリとの間で直接転送できるようにする、ハードウェア・メカニズムである。DMAを実行するために、バス接続されたモジュールは、DMA書き込み要求を、例えばMSI-Xメッセージの形態でバス接続デバイスに送信する。PCIeの場合、バス接続されたモジュールは、例えばPCIeアダプタで提供されるPCIe機能のことを指してよい。ステップ320で、バス接続されたモジュールが、バス接続されたモジュールの状態更新を含むDMA書き込み要求を受信し、受信された更新を使用してメモリを更新する。この更新は、各バス接続されたモジュールのために確保されているホスト・メモリの領域内で実行されてよい。
図8A~Bは、図6のコンピュータ・システム100を使用して割り込み信号をゲスト・オペレーティング・システムに提供するための例示的な方法のフローチャートである。ステップ332で、バス接続デバイスが、バス接続されたモジュールによって送信された割り込み信号を、例えばMSI-X書き込みメッセージの形態で受信する。割り込み信号のこの送信は、PCIアーキテクチャの仕様に従って実行されてよい。MSI-X書き込みメッセージは、割り込みのターゲット・プロセッサを識別する割り込みターゲットIDを含む。割り込みターゲットIDは、例えば、マルチプロセッサ・コンピュータ・システムのプロセッサを識別するためにゲスト・オペレーティング・システムによって使用される仮想プロセッサIDであってよい。実施形態によれば、割り込みターゲットIDは、プロセッサを識別できるようにするためにゲスト・オペレーティング・システムおよびバス接続されたモジュールによって合意された任意のその他のIDであってよい。そのような別のIDは、例えば、仮想プロセッサIDのマッピングの結果であってよい。加えて、MSI-X書き込みメッセージは、割り込み要求元ID(RID)(すなわち、割り込み要求を発行しているPCIe機能のID)、ベクトル内のベクトル・エントリのオフセットを定義するベクトル・インデックス、MSIアドレス(例えば、64ビット・アドレス)、およびMSIデータ(例えば、32ビット・データ)をさらに含んでよい。MSIアドレスおよびMSIデータは、MSIメッセージの形態で、各書き込みメッセージが実際に割り込み要求であるということを示してよい。
ステップ340で、バス接続デバイスは、メモリに格納されたデバイス・テーブルのエントリのコピーをフェッチする。デバイス・テーブル・エントリ(DTE)は、ターゲット・プロセッサに対する割り込み信号が受信されたことを示すために更新される1つまたは複数のベクトルまたはベクトル・エントリのアドレス・インジケータを提供する。ベクトル・エントリのアドレス・インジケータは、例えば、メモリ内のベクトルのアドレスおよびベクトル内のオフセットを含んでよい。さらに、DTEは、バス接続デバイスによって、割り込み信号と共に提供された割り込みターゲットIDを使用して、ターゲット・プロセッサが直接アドレス指定されるかどうかを示す、直接信号伝達インジケータを提供してよい。さらに、DTEは、論理パーティションID(ゾーンIDとも呼ばれる)および割り込みサブクラスIDを提供してよい。デバイス・テーブル・エントリの各コピーは、キャッシュまたはメモリからフェッチされてよい。
ステップ342で、バス接続デバイスは、割り込み信号と共に受信された割り込みターゲットID、およびIRTのメモリを示すDTEによって提供されたアドレス・インジケータを使用して、メモリからIRTEのコピーをフェッチする。二重フェッチ方式の場合、このステップは二重フェッチの1回目になる。
ステップ350で、バス接続デバイスは、DTE内で指定されたベクトルを更新する。ステップ360で、バス接続デバイスは、割り込み信号と共に提供された直接信号伝達インジケータをチェックする。直接信号伝達インジケータが直接信号伝達を示していない場合、バス接続デバイスは、割り込み信号をゲスト・オペレーティング・システムによって使用されるプロセッサに提供するために、ゾーン識別子および割り込みサブクラス識別子を使用して、ブロードキャストによって割り込み信号を転送する。直接信号伝達インジケータが直接信号伝達を示していない場合、ステップ370で、ブロードキャストによって割り込み信号がプロセッサに転送される。ブロードキャスト・メッセージは、ゾーンIDまたは割り込みサブクラスIDあるいはその両方を含む。プロセッサによる受信時に、ゾーンに対して割り込み要求が有効化されている場合、例えばネスト通信プロトコル(nest communication protocol)に従って、状態ビットがアトミックに設定される。さらに、このプロセッサ上のファームウェア(例えば、ミリコード)が、その活動(例えば、プログラムの実行)を中断し、ゲスト・オペレーティング・システムの割り込みハンドラの実行に切り替える。
直接信号伝達インジケータが直接信号伝達を示している場合、ステップ380で、バス接続デバイスが、割り込み信号と共に提供された割り込みターゲットIDを、ゲスト・オペレーティング・システムで使用するために割り当てられたプロセッサの論理プロセッサIDに変換する。この変換のために、バス接続デバイスは、IRTEの第1のコピーを使用してよい。
ステップ390で、バス接続デバイスが、論理プロセッサIDを使用して各プロセッサを直接アドレス指定し(すなわち、直接メッセージを送信し)、割り込み信号をターゲット・プロセッサに転送する。直接メッセージは、割り込みターゲットIDを含む。直接メッセージは、ゾーンIDまたは割り込みサブクラスIDあるいはその両方をさらに含んでよい。受信側プロセッサは、割り込みターゲットIDチェック論理を備える。このチェック論理は、割り込みターゲットIDが論理パーティションごとにのみ一意である場合、論理パーティションIDをさらに考慮してよい。
二重フェッチが実装されている場合、この方法はステップ392を続行する。ステップ392で、バス接続デバイスによってIRTEの第2のコピーがフェッチされる。ステップ394で、第2のコピーによって提供されたデータが、第1のコピーによって提供されたデータと比較される。一致は、割り込みが正しいターゲット・プロセッサに転送され、IRTEの更新が実行されなかったことを示す。一致しない場合、ステップ342に続く1つまたは複数のステップが繰り返されてよい。実施形態によれば、ステップ342に続くすべてのステップが繰り返されてよい。二重フェッチの場合、ステップ392が、二重フェッチ方式の2回目を構成し、直接メッセージが活動していないプロセッサに送信されるのを防ぐ。ステップ392の再フェッチは、IRTEが変更されていない場合に小さいオーバーヘッドしか引き起こさないローカルなBADに近いキャッシュを使用して、実行されてよい。
ステップ396で、ターゲット・プロセッサのファームウェア(例えば、ミリコード)が割り込みを受信する。それに応じて、ファームウェアは、その活動(例えば、プログラムの実行)を中断し、ゲスト・オペレーティング・システムの割り込みハンドラの実行に切り替えてよい。この割り込みは、直接信号伝達の指示と共にゲスト・オペレーティング・システムに提示されてよい。受信側プロセッサ上でチェック論理が実装されている場合、受信された割り込みターゲットIDまたは論理パーティションIDあるいはその両方が、受信側プロセッサに現在割り当てられている、チェック論理にとってアクセス可能な割り込みターゲットIDまたは論理パーティションあるいはその両方に一致するかどうかをチェックするチェックが実行されてよい。一致しない場合、受信側ファームウェアが、ブロードキャストを開始し、論理パーティションIDまたは割り込みサブクラスIDあるいはその両方を使用して、割り込みを処理するための有効なターゲット・プロセッサを識別し、受信された割り込み要求を残りのプロセッサにブロードキャストしてよい。
図9は、図8の方法をさらに示す追加のフローチャートである。最初に、割り込みメッセージがバス接続デバイスに送信されてよい。割り込み要求元(すなわち、バス接続されたモジュール)に割り当てられたDTEが、バス接続デバイスに操作可能なように接続されたローカル・キャッシュにキャッシュされているかどうかがチェックされてよい。DTEがキャッシュされていない場合、バス接続デバイスによってメモリから各DTEがフェッチされてよい。DTEによって提供されたベクトル・アドレス・インジケータが、メモリ内のベクトル・ビットを設定するために使用されてよい。次に、ステップ410で、バス接続デバイスによって、割り込み信号と共に提供された割り込みターゲットIDを使用して、ターゲット・プロセッサが直接アドレス指定されるかどうかが、DTEによって提供された直接信号伝達インジケータを使用してチェックされる。ターゲット・プロセッサが直接ターゲットにされない場合、この方法は、プロセッサへの割り込み要求のブロードキャストを続行する。ターゲット・プロセッサが直接ターゲットにされる場合、この方法は、ステップ413で、メモリから受信された割り込みターゲットIDに割り当てられたIRTEのコピーをフェッチし、ステップ414で、IRTEのフェッチされたコピーを使用して割り込みターゲットIDを論理プロセッサIDに変換することを続行する。ステップ416で、割り込み信号をターゲット・プロセッサに転送するメッセージを送信した後に、ステップ417で、RTEの第2のコピーがフェッチされる。その一方、ステップ421で、バス接続デバイスが、IRTEの可能性のある更新(すなわち、IRTEが変更されたかどうか)についてチェックする。IRTEの第2および第1のコピーによって提供されたデータが一致する場合、この方法は、ステップ418を続行する。一致しない場合、IRTEの第2のコピーが使用され、ステップ413でIRTEの第1のコピーを受信した後に実行されるステップを繰り返してよい。代替の実施形態によれば、ステップ413も繰り返されてよい。さらに別の実施形態によれば、一致しない場合、この方法は、割り込み信号のブロードキャストを続行してよい。
論理プロセッサIDは、ターゲット・プロセッサを直接アドレス指定するために使用される。メッセージは、割り込みターゲットID、論理パーティションID、および割り込みサブクラスIDを含む。ステップ418で、プロセッサがメッセージを受信する。ステップ419で、プロセッサが、割り込みターゲットIDまたは論理パーティションIDあるいはその両方が、チェックのための参照として提供された現在の割り込みターゲットIDまたは論理パーティションIDあるいはその両方と一致するかどうかをチェックする。一致する場合、ステップ420で、プロセッサが割り込み要求をゲスト・オペレーティング・システムに提示する。一致しない場合、ステップ422で、プロセッサが後で割り込み要求を他のプロセッサにブロードキャストする。その後、プロセッサは、次の割り込みメッセージが受信されるまで活動を続行する。
図10は、使用されるIRTEが最新であることを保証するために例示的な二重フェッチ方式を実行する方法を示している。ステップ500で、割り込み信号(例えば、MSI-Xメッセージ)が、バス接続されたモジュール120(例えば、PCIeアダプタまたはPCIeアダプタ上のPCIe機能)からバス接続デバイス110(例えば、PCIeホスト・ブリッジ(PHB:PCIe host bridge))に送信される。ステップ502で、バス接続デバイス110が、メモリ140に対して、割り込み信号と共に提供された割り込みターゲットIDに割り当てられたIRTEの第1のコピーを要求する。ステップ504で、メモリ140が、この要求に応答してIRTEのコピーを送信する。IRTEのコピーの送信の時点は、IRTEが確実に最新だった最後の時点を示す。その時点で、時間ウィンドウが開始し、この時間ウィンドウの間に、IRTEが更新されることがあり、IRTEの第1のコピーによって提供されたデータが古くなることがある。この時間ウィンドウは、ターゲット・プロセッサ130によって割り込みが処理されることで終了する。その時点からのIRTEのすべての変更は、受信された割り込み信号の処理にそれ以上影響を与えない。ステップ506で、バス接続デバイス110が、有向保留中割り込みインジケータ(directed pending interrupt indicator)を有効化する(例えば、有向保留中割り込み配列(dPIA:directed pending interrupt array)ビットを設定する)ための要求をIRTEに送信する。有効化された有向保留中割り込みインジケータは、割り込みターゲットIDに対する有向割り込みが保留中であることを示す。ステップ508で、有向保留中割り込みインジケータの設定がメモリ140によって確認される。ステップ510で、割り込み信号が、直接アドレス指定を使用する有向割り込み要求の形態で、IRTEを使用して割り込みターゲットIDを変換することから得られた論理プロセッサIDによって識別されたターゲット・プロセッサ130に転送される。ターゲット・プロセッサ130が有向割り込み要求を受信することで、時間ウィンドウが閉じられる。ステップ512で、時間ウィンドウが閉じるときに、バス接続デバイス110によって、IRTEの第2のコピーが、メモリ140内で提供されたIRTEから読み取られる。ステップ514で、要求されたIRTEの第2のコピーの受信時に、バス接続デバイス110が、IRTEの第2のコピーがIRTEの第1のコピーに一致するかどうか(すなわち、IRTE、特に割り込みターゲットIDのマッピングが変更されたかどうか)をチェックする。一致する場合、この方法は、割り込み要求をゲスト・オペレーティング・システムに提示し、要求を処理した後に、ターゲット・プロセッサ130によってIRTE内の有向保留中割り込みインジケータをリセットすることで終了する。一致しない場合、この方法はステップ502を続行してよい。代替として、この方法は、バス接続デバイス110によって、受信された割り込み信号のブロードキャストを続行してよい。
図11は、図6のコンピュータ・システム100のさらに別の実施形態を示している。IRTE152は、割り込みターゲットIDによって識別されたターゲット・プロセッサがスケジューリングされている(すなわち、完全に実行中である)かどうかを示す実行中インジケータ154、またはターゲット・プロセッサが割り込み信号を受信することを現在ブロックされているかどうかを示すブロッキング・インジケータ146、あるいはその両方をさらに提供する。ターゲット・プロセッサがスケジューリングされていないか、または一時的にブロックされている場合、タイムリーな割り込み処理を可能にするために、ブロードキャストが開始されてよい。
図12は、図11のコンピュータ・システム100を使用して割り込み信号をゲスト・オペレーティング・システムに提供するための例示的な方法のフローチャートである。図8のステップ340の後に、図12の方法がステップ342を続ける。ステップ342で、バス接続デバイスは、割り込み信号と共に受信された割り込みターゲットID、およびIRTのメモリを示すDTEによって提供されたアドレス・インジケータを使用して、メモリからIRTEのコピーをフェッチする。ステップ350で、バス接続デバイスは、DTE内で指定されたベクトルを更新する。
ステップ360で、バス接続デバイスは、割り込み信号と共に提供された直接信号伝達インジケータをチェックする。直接信号伝達インジケータが直接信号伝達を示していない場合、ステップ370で、バス接続デバイスは、割り込み信号をゲスト・オペレーティング・システムによって使用されるプロセッサに提供するために、ゾーン識別子および割り込みサブクラス識別子を使用して、ブロードキャストによって割り込み信号を転送する。直接信号伝達インジケータが直接信号伝達を示している場合、ステップ362で、バス接続デバイスは、IRTEのコピーに含まれている実行中インジケータが、割り込みターゲットIDによって識別されたターゲット・プロセッサが実行中であることを示しているかどうかを、さらにチェックする。
ターゲット・プロセッサが実行中でない場合、ステップ364で、バス接続デバイスは、例えば割り込みを処理するのに適したプロセッサを識別するために論理パーティションIDまたは割り込みサブクラスIDあるいはその両方を使用して、ブロードキャスト割り込みをフォールバックとして送信する。論理パーティションIDまたは割り込みサブクラスIDあるいはその両方に一致する適切なプロセッサが見つからない場合、ハイパーバイザ(すなわち、ハイパーバイザで使用するために割り当てられたプロセッサ)は、ゲスト・オペレーティング・システムに割り当てられたプロセッサの代わりに割り込み要求を受信してよい。ゲスト・オペレーティング・システムに割り当てられた1つまたは複数のプロセッサがスケジューリングされた場合、ハイパーバイザは、割り込み要求を再びブロードキャストすることを決定してよい。ハイパーバイザは、オペレーティング・システムに割り当てられたプロセッサのエントリに対して、直接割り込み保留中インジケータ(例えば、dPIAビット)が、入ってくるプロセッサに提示されるかをチェックしてよい。実施形態によれば、ハイパーバイザは、例えば選択的にターゲット・プロセッサを再スケジューリング(すなわち、起動)してよい。
ターゲット・プロセッサが実行中である場合、ステップ366で、直接割り込みブロッキング・インジケータ(例えば、dIBPIAビット)が有効化されているかどうかがチェックされる。有効化された直接割り込みブロッキング・インジケータは、割り込みの配信がゲスト・オペレーティング・システムの割り込みハンドラによって現在望まれていないことを示す。したがって、直接割り込みブロッキング・インジケータが有効化されている場合、ステップ368で、割り込み信号がブロードキャストされてよい。
直接割り込みブロッキング・インジケータが無効化され、ターゲット・プロセッサが現在ブロックされていないことを示している場合、ステップ380で、現在の割り込み信号の配信が続行され、受信された割り込みターゲットIDに関してIRTEによって提供された論理プロセッサIDを使用して割り込みをターゲット・プロセッサに直接転送するために、受信された割り込みターゲットIDを変換する。
ステップ380で、バス接続デバイスが、割り込み信号と共に提供された割り込みターゲットIDを、ゲスト・オペレーティング・システムで使用するために割り当てられたプロセッサの論理プロセッサIDに変換する。この変換のために、バス接続デバイスは、バス接続デバイスに含まれているマッピング・テーブルを使用してよい。バス接続デバイスは、マッピング・テーブルまたはゾーン(すなわち、論理パーティション)ごとのサブテーブルを含んでよい。
ステップ390で、バス接続デバイスが、論理プロセッサIDを使用して各プロセッサを直接アドレス指定し(すなわち、直接メッセージを送信し)、割り込み信号をターゲット・プロセッサに転送する。ステップ396で、ターゲット・プロセッサの受信側ファームウェア(例えば、ミリコード)が、ゲスト・オペレーティング・システムに提示するための直接アドレス指定された割り込みを受け取る。それに応じて、ファームウェアは、その活動(例えば、プログラムの実行)を中断し、ゲスト・オペレーティング・システムの割り込みハンドラの実行に切り替えてよい。この割り込みは、直接信号伝達の指示と共にゲスト・オペレーティング・システムに提示されてよい。
実施形態によれば、受信側プロセッサは、割り込みターゲットIDチェック論理を備える。直接メッセージは、割り込みターゲットIDを含む。直接メッセージは、ゾーンIDまたは割り込みサブクラスIDあるいはその両方をさらに含んでよい。このチェック論理は、割り込みターゲットIDが論理パーティションごとにのみ一意である場合、論理パーティションIDをさらに考慮してよい。このチェック論理は、受信された割り込みターゲットIDまたは論理パーティションIDあるいはその両方が、受信側プロセッサに現在割り当てられている、チェック論理にとってアクセス可能な割り込みターゲットIDまたは論理パーティションあるいはその両方に一致するかどうかをチェックしてよい。一致しない場合、受信側ファームウェアが、ブロードキャストを開始し、論理パーティションIDまたは割り込みサブクラスIDあるいはその両方を使用して、割り込みを処理するための有効なターゲット・プロセッサを識別し、受信された割り込み要求を残りのプロセッサにブロードキャストしてよい。肯定的な一致の場合、ターゲット・プロセッサの受信側ファームウェア(例えば、ミリコード)が、ゲスト・オペレーティング・システムに提示するための直接アドレス指定された割り込みを受け取る。
図13は、図12の方法をさらに示す追加のフローチャートである。図9に似ている図13に示された方法は、ターゲット・プロセッサが直接ターゲットにされる場合に、ステップ410を続行する。この方法は、ステップ413で、メモリから受信された割り込みターゲットIDに割り当てられたIRTEのコピーを引き続きフェッチする。ステップ413aで、IRTEに含まれている実行中インジケータが有効化されているかどうかがチェックされる。実行中インジケータが無効化されている場合、ステップ413bで、バス接続デバイスによってブロードキャストを使用して割り込み信号が転送されてよい。実行中インジケータが有効化されている場合、ステップ413cで、バス接続デバイスが、有向ブロッキング・インジケータ(directed blocking indicator)が有効化されているかどうかを引き続きチェックする。有向ブロッキング・インジケータが有効化されていない場合、ステップ414で、バス接続デバイスが、IRTEのフェッチされたコピーを使用して、論理プロセッサIDへの割り込みターゲットIDの変換を続行する。有向ブロッキング・インジケータが有効化されている場合、ステップ413dで、割り込み信号が抑制されてよい。
図14は、IRTEによって提供される情報が最新であることを保証するためにIRTEの二重フェッチを実行する方法をさらに示している。ステップ600で、割り込み信号(例えば、MSI-Xメッセージ)が、バス接続されたモジュール120(例えば、PCIeアダプタまたはPCIeアダプタ上のPCIe機能)からバス接続デバイス110(例えば、PCIeホスト・ブリッジ(PHB))に送信される。ステップ602で、バス接続デバイス110が、メモリ140に対して、割り込み信号と共に提供された割り込みターゲットIDに割り当てられたIRTEのコピーを要求する。ステップ604で、メモリ140が、この要求に応答してIRTEの第1のコピーを送信する。この第1のコピーは、ターゲット・プロセッサがスケジューリングされていることを示す実行中インジケータ(例えば、実行中ビットR=1)、ターゲット・プロセッサが割り込み信号を受信することを現在ブロックされていないことを示す有向割り込みブロッキング・インジケータ(例えば、有向ブロッキング・ビットdIBPIA=0)、および論理プロセッサID lCPUを含む。論理プロセッサID lCPUは、バス接続デバイス110によって、ターゲット・プロセッサ130を直接アドレス指定するために使用される。実行中インジケータが、ターゲット・プロセッサ130が実行中であることを示しているため、バス接続デバイス110は、ステップ606で、IRTE内で、例えばdPIA=1を設定して、有向割り込み保留中インジケータを有効化し、例えばdIBPIA=1を設定して、ターゲット・プロセッサがさらに割り込みを受信することをブロックする。一方、IRTEの内容が変更されなかったこと(例えば、ターゲット・プロセッサ130が無効化されたこと)をチェックするために、ステップ608で、IRTEの再読み取りを要求することによって、重要な時間ウィンドウが閉じられる。ステップ610で、メモリ140が、この要求に応答してIRTEの第2の現在のコピーを送信する。この第2のコピーは、ターゲット・プロセッサ130がまだスケジューリングされていることを示す実行中インジケータ(例えば、実行中ビットR=1)、バス接続デバイスによって有効化された有向割り込みブロッキング・インジケータ、およびIRTEの第1のコピーによって提供されたlCPUと同一の論理プロセッサID lCPUを含む。実行中インジケータおよびlCPUが変化しなかったため、この方法は、ステップ612で、lCPUを使用して、ターゲット・プロセッサ130に向けて直接アドレス指定された割り込み要求を引き続き送信する。ターゲット・プロセッサ130は、割り込みをゲスト・オペレーティング・システムに提示し、割り込みを処理する。割り込みの処理が終了したときに、ターゲット・プロセッサ130は、例えばdPIA=0にリセットして有向割り込み保留中インジケータを無効化し、例えばdIBPIA=0にリセットして有向割り込みブロッキング・インジケータを無効化する。
図15は、一方でIRTEに含まれている情報が変化する場合を示す図14の方法の代替のフローチャートを示している。ステップ600で、割り込み信号(例えば、MSI-Xメッセージ)が、バス接続されたモジュール120(例えば、PCIeアダプタまたはPCIeアダプタ上のPCIe機能)からバス接続デバイス110(例えば、PCIeホスト・ブリッジ(PHB))に送信される。ステップ602で、バス接続デバイス110が、メモリ140に対して、割り込み信号と共に提供された割り込みターゲットIDに割り当てられたIRTEのコピーを要求する。ステップ604で、メモリ140が、この要求に応答してIRTEの第1のコピーを送信する。この第1のコピーは、ターゲット・プロセッサ130がスケジューリングされたことを示す実行中インジケータ(例えば、実行中ビットR=1)、および論理プロセッサID lCPUを含む。論理プロセッサID lCPUは、バス接続デバイス110によって、ターゲット・プロセッサ130を直接アドレス指定するために使用される。実行中インジケータが、ターゲット・プロセッサ130が実行中であることを示しているため、バス接続デバイス110は、ステップ606で、IRTE内で、例えばdPIA=1を設定して、有向割り込み保留中インジケータを有効化し、例えばdIBPIA=1を設定して、ターゲット・プロセッサがさらに割り込みを受信することをブロックする。一方、IRTEの内容が変更されなかったこと(例えば、ターゲット・プロセッサ130が無効化されたこと)をチェックするために、ステップ608で、IRTEの再読み取りを要求することによって、重要な時間ウィンドウが閉じられる。ステップ610で、メモリ140が、この要求に応答してIRTEの第2の現在のコピーを送信する。この例では、一方で、ゲスト・オペレーティング・システムに関してターゲット・プロセッサ130が無効化されている。したがって、この第2のコピーは、ターゲット・プロセッサ130がそれ以上スケジューリングされないことを示す実行中インジケータ(例えば、実行中ビットR=0)を含む。論理プロセッサID lCPUは、IRTEの第1のコピーによって提供されるlCPUと同一であっても同一でなくてもよい。有向割り込みブロッキング・インジケータは、バス接続デバイスによってまだ有効化されている。実行中インジケータまたはlCPUあるいはその両方が変化しため、この方法は、ステップ612で、ブロードキャストを使用して割り込み要求をプロセッサに引き続き送信する。
図16は、IRTのメモリ・アドレスIRT@、論理パーティションID(ゾーン)、および割り込みターゲットIDに割り当てられたDIBV内のオフセット(DIBVO)を含む例示的なDTE146を示している。DIBVOは、特定のバス接続されたモジュールに割り当てられたベクトルのセクションまたはエントリの開始を識別する。割り込み信号(例えば、MSI-Xメッセージ)は、バス接続されたモジュールに割り当てられたベクトルの特定のエントリを識別するためにDIBVOに追加されたDIBV-Idxを提供してよい。さらに、各バス接続されたモジュールのために確保されているDIBV内の最大ビット数を定義する有向割り込みの数(NOI:number of interrupts)が提供される。DIBVの詳細が、図19Aにさらに示されている。AIBVの場合、DTEは、図19Bに示されているように、対応するAIBV固有のパラメータを提供してよい。
さらに、例示的なIRTE152が示されている。IRTE152は、論理パーティションID(ゾーン)、割り込みサブクラスID(DISC)、DISBのメモリ・アドレスDISB@、DISB内のオフセットDISBO、およびターゲット・プロセッサの割り込みターゲットIDに割り当てられたDIBVのメモリ・アドレスDIBV@を含んでよい。
図17は、DISB160および複数のDIBV162の概略構造を示している。DISB160は、割り込みターゲットIDごとにエントリ161(例えば、ビット)を含むメモリの連続的セクション(例えば、キャッシュ・ライン)の形態で提供されてよい。各エントリは、割り込みターゲットIDによって識別された各プロセッサによって処理される割り込み要求(IRQ)が存在するかどうかを示す。割り込みターゲットID(すなわち、DISB160のエントリ)ごとに、DIBV162が提供される。各DIBV162は、特定の割り込みターゲットIDに割り当てられ、バス接続されたモジュールMN AおよびMN Bごとに1つまたは複数のエントリ163を含む。DIBV162はそれぞれ、同じ割り込みターゲットIDに割り当てられたエントリ163を含むメモリの連続的セクション(例えば、キャッシュ・ライン)の形態で提供されてよい。異なるバス接続されたモジュールのエントリは、バス接続されたモジュールごとに異なるオフセットDIBVOを使用する順序であってよい。
図18は、AISB170および複数のAIBV172の概略構造を示している。AISB170は、バス接続されたモジュールMN A~MN Dごとにエントリ171(例えば、ビット)を含むメモリの連続的セクション(例えば、キャッシュ・ライン)の形態で提供されてよい。各エントリは、各バス接続されたモジュールから処理される割り込み要求(IRQ)が存在するかどうかを示す。バス接続されたモジュール(すなわち、AISB170のエントリ)ごとに、AIBV172が提供される。各AIBV172は、特定のバス接続されたモジュールに割り当てられ、割り込みターゲットIDごとに1つまたは複数のエントリ173を含む。AIBV172はそれぞれ、同じバス接続されたモジュールに割り当てられたエントリ173を含むメモリの連続的セクション(例えば、キャッシュ・ライン)の形態で提供されてよい。異なるターゲット・プロセッサIDに関するエントリは、バス接続されたモジュールごとに異なるオフセットAIBVOを使用する順序であってよい。
図20Aおよび20Bは、例示的なDISB160およびAISB170をそれぞれ示している。エントリ161、171は、オフセットDISBOおよびAISBOとそれぞれ組み合わせて基本アドレスDISB@およびAISB@をそれぞれ使用して、アドレス指定されてよい。DISB160の場合、DISBOは、例えば、各エントリ161が割り当てられている割り込みターゲットIDと同一であってよい。割り込みターゲットIDは、例えば、仮想プロセッサID(vCPU)の形態で提供されてよい。
図21Aおよび21Bは、割り込み信号をゲスト・オペレーティング・システムに提供するための例示的な方法を示している。ステップ704で、例えばPCIアダプタ上の仮想機能(すなわち、PCIアダプタ(VF))のようなバス接続されたモジュール(BCM)が、割り込み信号を送信する。割り込み信号は、例えば、仮想機能VFの識別子、例えば仮想プロセッサID vCPUの形態での割り込みターゲットID、およびベクトルに含まれているエントリ(例えば、ビット)を識別する有向割り込み信号ベクトル内のオフセット(例えば、DIBV-Idx)を含むMSI-XメッセージMSI-X(VF、vCPU、DIBV-Idx)の形態で送信されてよい。ステップ706で、バス接続デバイス(BAD:bus attachment device)(例えば、PCIブリッジ・ユニット(PBU)とも呼ばれるPCIホスト・ブリッジ(PHB))が割り込み信号を受信する。
ステップ708で、PBUが、VFに割り当てられたデバイス・テーブル(DT)のエントリを読み取る。メモリのハードウェア・システム域(HSA:hardware system area)に格納されたDTのエントリが、テーブルの行として示されている。DTのエントリは、割り込みテーブルのアドレス(IRT@)に加えて、有向信号伝達(directed signaling)が実行されるかどうかを示す有向信号伝達ビット(S)を含んでよい。PBUは、IRT@を使用して、HSAからvCPUに割り当てられたIRTのエントリをフェッチし、このエントリは、vCPUが実行中であるかどうかを示す実行中ビット(R)、vCPUが割り込みを受信することをブロックされているかどうかを示す有向割り込みブロッキング・ビット(dIBPIA)、およびvCPUに向けられた割り込みが保留中であるかどうかを示す有向割り込み保留中ビット(dPIA)を含む。ステップ700での早期の時点で、ハイパーバイザ・モードからゲスト・モードへのターゲット・プロセッサの状態変更を開始する解釈実行開始命令(SIEエントリ)が発行されている。ステップ701で、ターゲット・プロセッサおよび提供されたターゲット・プロセッサの論理プロセッサID(TrgtPU#)に割り当てられたIRTE内のRが1に設定される。その後、702で、この方法が終了する。ファームウェアおよびハードウェアの場合、TrgtPU#は処理ユニットの物理ID(物理PU)を参照し、zOSおよび論理パーティション(LPAR)の場合、TrgtPU#は処理ユニットの論理ID(論理PU)を参照する。
ステップ710で、PBUが、VFからのvCPUをターゲットにする割り込み信号が存在することを示すように、MSI-XからのDIBV-Idxを使用して、vCPUに割り当てられたDIBV内のビットを設定する。ステップ712で、PBUが、IRTEがブロックされているかどうか(すなわち、IRTE.dIBIA==1であるかどうか)をチェックする。vCPUに割り当てられたIRTE、およびしたがってvCPUが、割り込みをさらに受信することをブロックされている場合、ステップ714で、この方法が終了する。IRTEがブロックされていない場合、この方法はステップ716を続行し、ステップ716で、PBUによって、vCPUが実行中であるかどうか(すなわち、IRTE内のRが設定されているかどうか)がチェックされる。
Rが設定されている場合、この方法はステップ718を続行し、有向アドレス指定を実行する。ステップ718で、IRTE内のdlBPIAおよびdPIAが1に設定され、vCPUが割り込み信号を受信することを現在ブロックされていること、およびvCPUに向けてアドレス指定された割り込みが保留中であることを示す。ステップ720で、IRTE(より正確には、IRTEのRまたはTrgtPU#あるいはその両方の状態)が、ステップ718でのIRTEと比較して変化したかどうかがチェックされる。このようにして、例えばステップ722に示されているような別のゲストのSIEエントリに起因して読み取り間で関連する変更が行われなかったことを保証するために、IRTEを2回読み取る二重フェッチ方式が実施される。
ステップ722で、別のゲストのSIEエントリ命令が、ターゲット・プロセッサ上で実行される。ステップ724で、他のゲストが前のゲストのIRTEを読み取り、ステップ726でRに対するアトミックなリセット・コマンドを発行する(すなわち、R=0を設定し、vCPUがそれ以上実行中にならないことを示す)。さらに、dPIAがIRTEから読み取られる。ステップ728で、vCPUに対する割り込みがまだ保留中であることを示すdPIAが設定されている(IRTE.dPIA==1)かどうかがチェックされる。割り込みが保留中でない場合、この方法はステップ730で終了する。割り込みがまだ保留中である場合、ステップ732で、IRTEのIRTE.dPIAに加えて、ターゲットPU上の保留中割り込みインジケータPU.dPIAがリセットされ、保留中の割り込みのブロードキャストが開始される。したがって、ステップ720で、IRTEの関連する変更が決定された場合、割り込みがブロードキャストされる。
ステップ720で、IRTEの関連する変更が決定されなかった場合、この方法はステップ734を続行する。ステップ734で、割り込み信号(有向PCI割り込みSYSOP)がターゲットPU(対象のPUとも呼ばれる)に向けて転送される。ステップ736で、対象のPUが有向PCI割り込みを受信し、ステップ738で、対象のPU上の保留中割り込みインジケータPU.dPIAを設定する。ステップ739で、対象のPUがマスクされている(すなわち一般的には、割り込みを受信して実行することができない)かどうかがチェックされる。対象のPUがマスクされている場合、この方法はステップ740で終了する。例えばステップ742に示されているようなマスク解除に起因して、対象のPUがマスクされていない場合、この方法は、ステップ744で、対象のPUのファームウェア(例えば、ミリコード)(mCode IO-Irpt)によって実行される割り込みを続行する。ステップ746で、割り込みがそれ以上保留中にならないことを示すように、PU.dPIAおよびIRTE.dPIAがリセットされる。
ステップ748で、オペレーティング・システムの割り込みハンドラ(OS IO-Irpt)が呼び出され、ステップ750で、ステップ710で設定されたDIBVビットを読み取ってリセットする。ステップ752で、ターゲットPU(すなわち、対象のPU)に割り当てられたDIBVのすべてのDIBVビットにわたってループが実行される。したがって、ターゲットPUに対するすべての割り込みが連続的に処理されてよい。すべてのDIBVビットが処理された場合、ステップ754で、IRTE.dIBPIAをリセットすることによって、ターゲットPUがブロック解除される(SIC.OC17)。さらに、ステップ756で、その一方で別のDIBVビットが設定されたかどうかを判定するために、DIBVが再び読み取られる。別のDIBVビットが設定された場合、各割り込みが処理され、そうでない場合、この方法はステップ758で終了する。
ステップ716でのチェックの結果が、Rが設定されていないということである場合、この方法は、ステップ760を続行し、ブロードキャストをフォールバックとして実行する。ステップ760で、有向割り込み要約ベクトル内の有向割り込み要約インジケータが有効化される(例えば、ビットが設定される)。割り込み要約ベクトルの各ビットがCPUに割り当てられ、各CPUによって処理される割り込みが存在するかどうかを示す。ステップ764で、割り込みがブロードキャストされ(SIGI.enq.IBPIA)、ステップ766で、いずれかのPUによって受信される。ステップ768で、各PUのIBPIAでブロッキング・ビットが設定され、PUが割り込みを受信することを現在ブロックされていることを示す。ステップ770で、ブロッキング・ビットを設定することによってIBPIAが変更されたかどうか(すなわち、IBPIAが0から1に変更されたかどうか)がチェックされる。IBPIAが変更されなかった(すなわち、すでにブロックされている)場合、この方法はステップ772で終了する。IBPIAが変更された場合、ステップ774で、各PUのPIAで保留中ビットが設定される。ステップ776で、PUがマスクされている(すなわち一般的には、割り込みを受信して実行することができない)かどうかがチェックされる。PUがマスクされている場合、この方法はステップ778で終了する。例えばステップ780に示されているようなマスク解除に起因して、PUがマスクされていない場合、この方法は、ステップ782で、PUのファームウェア(例えば、ミリコード)(mCode IO-Irpt)によって実行される割り込みを続行する。ステップ784で、割り込みがそれ以上保留中にならないことを示すように、PIAの保留中ビットがリセットされる。
ステップ786で、オペレーティング・システムの割り込みハンドラ(OS IO-Irpt)が呼び出され、ステップ788で、ステップ760で設定されたDISBビットを読み取ってリセットする。ステップ790および792で、割り込みが処理されることが対応する対象のPUに信号伝達される。ステップ794で、各ビットが別のPUに割り当てられているDISB配列のすべてのDISBビットにわたって、ループが実行される。DISBは、ブロードキャストによって処理されるすべての割り込みを要約する。割り込みは、割り込みがターゲットにするPUに従って順序付けられる。したがって、ブロードキャストによって処理されるすべての割り込みが、PUによって連続的に処理されてよい。すべてのDISBビットが処理された場合、ステップ796で、IBPIAをリセットすることによって、PUがブロック解除される(SIC.OC1)。さらに、ステップ798で、その一方で別のDISBビットが設定されたかどうかを判定するために、DISBが再び読み取られる。別のDISBビットが設定された場合、各割り込みが処理され、そうでない場合、この方法はステップ799で終了する。
ゲスト・オペレーティング・システムは、例えば、ページング可能ストレージ・モード・ゲストを使用して実装されてよい。ページング可能ゲスト(例えば、z/Architecture(R)におけるページング可能ゲスト)は、解釈のレベル2で、解釈実行開始(SIE:Start Interpretive Execution)命令によって解釈的に実行されてよい。例えば、論理パーティション(LPAR)ハイパーバイザは、SIE命令を実行して、固定された物理メモリ内で論理パーティションを開始する。その論理パーティション内のオペレーティング・システム(例えば、z/VM(R))は、SIE命令を発行し、仮想ストレージ内でゲスト(仮想)マシンを実行してよい。したがって、LPARハイパーバイザはレベル1のSIEを使用してよく、z/VM(R)ハイパーバイザはレベル2のSIEを使用してよい。
実施形態によれば、コンピュータ・システムは、International Business Machines Corporationによって提供されるSystem z(R)サーバである。System z(R)は、International Business Machines Corporationによって提供されるz/Architecture(R)に基づく。z/Architecture(R)に関する詳細は、IBM(R)の公開文献“z/Architecture Principles of Operation,”IBM(R) Publication No. SA22-7832-11, August 25, 2017に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。IBM(R)、System z(R)、およびz/Architecture(R)は、International Business Machines Corporation(ニューヨーク州アーモンク市)の登録商標である。本明細書において使用されるその他の名称は、International Business Machines Corporationまたはその他の会社の登録商標、商標、または製品名であることがある。
実施形態によれば、その他のアーキテクチャのコンピュータ・システムが、本発明の1つまたは複数の態様を実装して使用してよい。例としては、International Business Machines Corporationによって提供されるPower Systemsサーバまたはその他のサーバ、あるいはその他の企業のサーバなどの、System z(R)サーバ以外のサーバが、本発明の1つまたは複数の態様を実装するか、使用するか、またはそれらの態様から恩恵を受けるか、あるいはその組合せであってよい。さらに、本明細書における例では、バス接続されたモジュールおよびバス接続デバイスがサーバの一部と見なされているが、他の実施形態では、バス接続されたモジュールおよびバス接続デバイスは、必ずしもサーバの一部と見なされる必要はなく、コンピュータ・システムのシステム・メモリまたはその他のコンポーネントあるいはその両方に単に結合されていると見なされてよい。コンピュータ・システムはサーバである必要はない。さらに、バス接続されたモジュールはPCIeであってよいが、本発明の1つまたは複数の態様は、他のバス接続されたモジュールと共に使用可能である。PCIeアダプタおよびPCIe機能は、単なる例である。さらに、本発明の1つまたは複数の態様は、PCI MSIおよびPCI MSI-X以外の割り込み方式に適用可能であってよい。さらに、ビットが設定される例が説明されたが、他の実施形態では、バイトまたはその他の種類のインジケータが設定されてよい。さらに、DTEおよびその他の構造が、さらに多い情報、さらに少ない情報、または異なる情報を含んでよい。
さらに、その他の種類のコンピュータ・システムが、本発明の1つまたは複数の態様から恩恵を受けることができる。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも2つのプロセッサを含む、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない、入出力デバイスまたはI/Oデバイスが、直接的に、または介在するI/Oコントローラを通じて、システムに結合されてよい。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
図22を参照すると、本発明の1つまたは複数の態様を実装するためのホスト・コンピュータ・システム800の代表的コンポーネントが示されている。代表的ホスト・コンピュータ800は、コンピュータ・メモリ802と通信する1つまたは複数のプロセッサ(例えば、CPU801)と、ストレージ媒体デバイス811および他のコンピュータまたはSANなどと通信するためのネットワーク810へのI/Oインターフェイスとを備える。CPU801は、設計済み命令セットおよび設計済み機能を含むアーキテクチャに準拠している。CPU801は、プログラム・アドレス、仮想アドレスをメモリの実アドレスに変換するための動的アドレス変換(DAT:dynamic address translation)803を含んでよい。DATは、後のコンピュータ・メモリ802のブロックへのアクセスがアドレス変換の遅延を必要としないように、変換をキャッシュするために、変換索引バッファ(TLB:translation lookaside buffer)807を備えてよい。キャッシュ809は、コンピュータ・メモリ802とCPU801の間で採用されてよい。キャッシュ809は、2つ以上のCPUに使用できる大きい高レベルのキャッシュ、および高レベルのキャッシュと各CPUの間の小さい高速の下位レベルのキャッシュを提供して、階層的に構造化されてよい。一部の実装では、下位レベルのキャッシュは、命令のフェッチおよびデータ・アクセスのための個別の低レベル・キャッシュを提供するように、分割されてよい。実施形態によれば、命令は、キャッシュ809を介して命令フェッチ・ユニット804によってメモリ802からフェッチされてよい。命令は、命令デコード・ユニット806においてエンコードされ、一部の実施形態では他の命令と共に、命令実行ユニット808にディスパッチされる。複数の実行ユニット808(例えば、演算実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニット)が採用されてよい。命令は、実行ユニットによって実行され、必要に応じて、命令によって規定されたレジスタまたはメモリからオペランドにアクセスする。オペランドがメモリ802からアクセスされる(例えば、読み込まれるか、または格納される)場合、読み込み/格納ユニット805は、実行されている命令の制御下でアクセスを処理してよい。命令は、ハードウェア回路で実行されるか、または内部マイクロコード(すなわち、ファームウェア)で実行されるか、あるいはその両方の組合せによって実行されてよい。
コンピュータ・システムは、アドレス指定、保護、ならびに参照および変更の記録に加えて、情報をローカル・ストレージまたは主記憶装置に含んでよい。アドレス指定の一部の態様は、アドレスの形式、アドレス空間の概念、さまざまなタイプのアドレス、およびあるタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主記憶装置の一部は、永続的に割り当てられたストレージ位置を含む。主記憶装置は、直接アドレス指定可能な高速アクセス・ストレージのデータをシステムに提供する。データとプログラムの両方が、例えば入力デバイスから、処理される前に主記憶装置に読み込まれる。
主記憶装置は、1つまたは複数のより小さい高速アクセス・バッファ・ストレージ(しばしば、キャッシュと呼ばれる)を含んでよい。キャッシュは、CPUまたはI/Oプロセッサに物理的に関連付けられてよい。個別のストレージ媒体の物理的構造および使用の、性能に関する以外の影響は、通常、実行されるプログラムによって観察できなくてよい。
命令のため、およびデータ・オペランドのための別々のキャッシュが維持されてよい。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ラインと呼ばれる整数境界上の連続するバイト内で維持されてよい。モデルは、キャッシュ・ラインのサイズをバイト単位で返すEXTRACT CACHE ATTRIBUTE命令を提供してよい。モデルは、データ・キャッシュまたは命令キャッシュへのストレージのプリフェッチまたはキャッシュからのデータの解放を実行するPREFETCH DATA命令およびPREFETCH DATA RELATIVE LONG命令を提供してもよい。
ストレージは、長い水平なビット列と見なされてよい。ほとんどの動作の場合、ストレージへのアクセスは左から右の順に進んでよい。ビット列は、8ビットの単位にさらに分割される。8ビットの単位はバイトと呼ばれ、すべての情報形式の基本的な構成要素である。ストレージ内の各バイト位置は、そのバイト位置のアドレス(バイト・アドレスとも呼ばれる)である、一意の非負整数によって識別されてよい。隣接するバイト位置は、左端の0から開始して、左から右の順に進む、連続するアドレスを有してよい。アドレスは、符号なし2進整数であり、例えば24ビット、31ビット、または64ビットであってよい。
情報は、メモリとCPUの間で、一度に1バイトまたはバイトのグループとして送信される。特に規定されない限り、例えばz/Architecture(R)では、メモリ内のバイトのグループは、グループの左端のバイトによってアドレス指定される。グループ内のバイトの数は、暗示されるか、または実行される動作によって明示的に規定される。CPUの動作で使用される場合、バイトのグループはフィールドと呼ばれる。例えばz/Architecture(R)では、バイトの各グループ内のビットには、左から右の順に番号が付けられる。z/Architecture(R)では、左端のビットはしばしば「上位」ビットと呼ばれ、右端のビットは「下位」ビットと呼ばれる。ただし、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能であってよい。ストレージ内のバイトの個別のビットを操作するために、バイト全体がアクセスされてよい。バイト内のビットには、例えばz/Architectureでは、左から右に、0~7の番号が付けられてよい。アドレス内のビットは、24ビット・アドレスの場合、8~31または40~63の番号が付けられてよく、31ビット・アドレスの場合、1~31または33~63の番号が付けられてよい。64ビット・アドレスの場合、アドレス内のビットには、0~63の番号が付けられる。複数バイトの任意のその他の固定長形式内で、形式を構成するビットには、0から始まる番号が連続的に付けられてよい。エラー検出の目的で、好ましくは修正のために、1つまたは複数のチェック・ビットが、各バイトまたはバイトのグループと共に送信されてよい。そのようなチェック・ビットは、マシンによって自動的に生成され、プログラムによって直接制御することはできない。ストレージ容量は、バイト数で表される。ストレージ・オペランド・フィールドの長さが命令のオペコードによって暗示される場合、フィールドは固定長を有すると言われ、固定長は、1バイト、2バイト、4バイト、8バイト、または16バイトであってよい。一部の命令では、さらに大きいフィールドが暗示されてよい。ストレージ・オペランド・フィールドの長さが暗示されず、明示的に規定される場合、フィールドは可変長を有すると言われる。可変長オペランドの長さは、1バイト、または一部の命令では、2バイトの倍数またはその他の倍数のインクリメントによって変化してよい。情報がストレージに配置された場合、ストレージへの物理的パスの幅が、格納されるフィールドの長さよりも大きい場合でも、指定されたフィールドに含まれているバイト位置のみの内容が置換される。
情報の特定の単位は、ストレージ内の整数境界上に存在する。ストレージ・アドレスがバイト単位の長さの倍数である場合、情報の単位の境界は整数と呼ばれる。整数境界上の2バイト、4バイト、8バイト、および16バイトのフィールドには、特殊な名前が与えられる。ハーフワードは、2バイト境界上の2つの連続するバイトのグループであり、命令の基本的な構成要素である。ワードは、4バイト境界上の4つの連続するバイトのグループである。ダブルワードは、8バイト境界上の8つの連続するバイトのグループである。クワッドワードは、16バイト境界上の16個の連続するバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、およびクワッドワードを指定する場合、アドレスの2進表現はそれぞれ、1つ、2つ、3つ、または4つの右端のゼロ・ビットを含む。命令は、2バイト整数境界上にある。ほとんどの命令のストレージ・オペランドには、境界合わせ要件がない。
命令およびデータ・オペランドのために別々のキャッシュを実装するデバイスでは、プログラムがあるキャッシュ・ラインに格納し、その後、そのキャッシュ・ラインから命令がフェッチされる場合、格納が後でフェッチされる命令を変更するかどうかに関わらず、大幅な遅延が発生することがある。
1つの実施形態では、本発明はソフトウェア(しばしば、ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、これらのいずれかが本発明と一致する)によって実践されてよい。図22を参照すると、本発明を具現化するソフトウェア・プログラム・コードは、CD-ROMドライブ、テープ・ドライブ、またはハード・ドライブなどの長期ストレージ媒体デバイス811からアクセスされてよい。ソフトウェア・プログラム・コードは、データ処理システムで使用するために、フロッピー(R)・ディスク、ハード・ドライブ、またはCD-ROMなどの、さまざまな既知の媒体のいずれかで具現化されてよい。コードは、そのような媒体で配布されてよく、またはネットワーク810を経由してあるコンピュータ・システムのコンピュータ・メモリ802またはストレージから他のコンピュータ・システムへ、そのような他のシステムのユーザによって使用されるために、ユーザに配布されてよい。
ソフトウェア・プログラム・コードは、さまざまなコンピュータ・コンポーネントおよび1つまたは複数のアプリケーション・プログラムの機能および相互作用を制御するオペレーティング・システムを含んでよい。プログラム・コードは、ストレージ媒体デバイス811から相対的に高速なコンピュータ・ストレージ802にページングされてよく、コンピュータ・ストレージ802において、プロセッサ801によって処理するために使用可能になる。ソフトウェア・プログラム・コードを、メモリ内、物理的媒体上で具現化するため、またはネットワークを介してソフトウェア・コードを配布するため、あるいはその両方を行うための周知の手法および方法が使用されてよい。プログラム・コードは、作成されて、電子的メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD:Compact Discs)、DVD、磁気テープを含むが、これらに限定されない有形の媒体に格納された場合、「コンピュータ・プログラム製品」と呼ばれることがある。コンピュータ・プログラム製品の媒体は、処理回路によって実行するために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能であってよい。
図23は、本発明の実施形態が実装されてよい代表的なワークステーションまたはサーバ・ハードウェア・システムを示している。図23のシステム820は、オプションの周辺機器を含むパーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的なベース・コンピュータ・システム821を含む。ベース・コンピュータ・システム821は、1つまたは複数のプロセッサ826と、既知の手法に従ってプロセッサ826とシステム821の他のコンポーネントの間の通信を接続して有効にするために採用されたバスとを含む。バスは、プロセッサ826を、メモリ825と、例えばハード・ドライブ(例えば、磁気媒体、CD、DVD、およびフラッシュ・メモリのいずれかを含む)またはテープ・ドライブを含んでよい長期ストレージ827とに接続する。システム821は、ユーザ・インターフェイス・アダプタを含んでもよく、このユーザ・インターフェイス・アダプタは、バスを介してマイクロプロセッサ826を、キーボード824、マウス823、プリンタ/スキャナ830、または任意のユーザ・インターフェイス・デバイスであってよいその他のインターフェイス・デバイス(タッチ・センサ式画面、デジタイズ入力パッドなど)、あるいはその組合せなどの、1つまたは複数のインターフェイス・デバイスに接続する。また、バスは、LCD画面またはモニタなどのディスプレイ・デバイス822を、ディスプレイ・アダプタを介してマイクロプロセッサ826に接続する。
システム821は、ネットワーク829と通信(828)できるネットワーク・アダプタを経由して、他のコンピュータまたはコンピュータのネットワークと通信してよい。ネットワーク・アダプタの例は、通信チャネル、トークン・リング、イーサネット(R)、またはモデムである。あるいは、システム821は、セルラー・デジタル・パケット・データ(CDPD:cellular digital packet data)カードなどの無線インターフェイスを使用して通信してよい。システム821は、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)内のそのような他のコンピュータに関連付けられてよく、またはシステム821は、別のコンピュータなどを含むクライアント/サーバ配置内のクライアントであってよい。
図24は、本発明の実施形態が実装されてよいデータ処理ネットワーク840を示している。データ処理ネットワーク840は、無線ネットワークおよび有線ネットワークなどの、複数の個別のネットワークを含んでよく、各ネットワークは、複数の個別のワークステーション841、842、843、844を含んでよい。さらに、当業者が理解するであろうように、1つまたは複数のLANが含まれてよく、LANはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含んでよい。
引き続き図24を参照すると、ネットワークは、ゲートウェイ・コンピュータ(例えば、クライアント・サーバ846)またはアプリケーション・サーバ(例えば、データ・リポジトリにアクセスしてよく、ワークステーション845から直接アクセスされてもよいリモート・サーバ848)などの、メインフレーム・コンピュータまたはサーバを含んでもよい。ゲートウェイ・コンピュータ846は、個々のネットワークへの入り口として機能してよい。ゲートウェイは、あるネットワーク・プロトコルを別のネットワーク・プロトコルに接続する場合に必要になることがある。ゲートウェイ846は、好ましくは、通信リンクを用いて別のネットワーク(例えば、インターネット847のようなネットワーク)に結合されてよい。ゲートウェイ846は、通信リンクを使用して、1つまたは複数のワークステーション841、842、843、844に直接結合されてもよい。ゲートウェイ・コンピュータは、International Business Machines Corporationから提供されているIBM eServer(TM)System z(R)サーバを使用して実装されてよい。
図23および24を同時に参照すると、本発明を具現化できるソフトウェア・プログラミング・コードは、CD-ROMドライブまたはハード・ドライブなどの長期ストレージ媒体827から、システム820のプロセッサ826によってアクセスされてよい。ソフトウェア・プログラミング・コードは、データ処理システムで使用するために、フロッピー(R)・ディスク、ハード・ドライブ、またはCD-ROMなどの、さまざまな既知の媒体のいずれかで具現化されてよい。コードは、そのような媒体で配布されてよく、またはネットワークを経由してあるコンピュータ・システムのメモリまたはストレージから他のコンピュータ・システムへ、そのような他のシステムのユーザによって使用されるために、ユーザ850、851に配布されてよい。
あるいは、プログラミング・コードは、メモリ825内で具現化され、プロセッサ・バスを使用してプロセッサ826によってアクセスされてよい。そのようなプログラミング・コードは、さまざまなコンピュータ・コンポーネントおよび1つまたは複数のアプリケーション・プログラム832の機能および相互作用を制御するオペレーティング・システムを含んでよい。プログラム・コードは、ストレージ媒体827から高速メモリ825にページングされてよく、高速メモリ825において、プロセッサ826によって処理するために使用可能になる。ソフトウェア・プログラミング・コードを、メモリ内、物理的媒体上で具現化するため、またはネットワークを介してソフトウェア・コードを配布するため、あるいはその両方を行うための周知の手法および方法が使用されてよい。
最も容易にプロセッサで使用できるキャッシュ(すなわち、プロセッサの他のキャッシュよりも高速で小さい可能性がある)は、最低レベルのキャッシュ(L1またはレベル1のキャッシュとも呼ばれる)であり、メイン・メモリは、最高レベルのキャッシュ(n個(例えば、n=3)のレベルが存在する場合は、Ln(例えば、L3)とも呼ばれる)である。最低レベルのキャッシュは、実行される機械可読命令を保持する命令キャッシュ(Iキャッシュとも呼ばれる)およびデータ・オペランドを保持するデータ・キャッシュ(Dキャッシュとも呼ばれる)に分割されてよい。
図25を参照すると、プロセッサの実施形態例が、プロセッサ826に示されている。プロセッサの性能を改善するために、1つまたは複数のレベルのキャッシュ853が採用され、メモリ・ブロックをバッファしてよい。キャッシュ853は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。例えば、キャッシュ・ラインは、64バイト、128バイト、または256バイトのメモリ・データであってよい。命令をキャッシュするため、およびデータをキャッシュするために、別々のキャッシュが採用されてよい。さまざまな適切なアルゴリズム(例えば、「スヌープ」アルゴリズム)によって、キャッシュ・コヒーレンス(すなわち、メモリおよびキャッシュ内のラインのコピーの同期)が提供されてよい。プロセッサ・システムのメイン・メモリ・ストレージ825は、キャッシュと呼ばれることがある。4つのレベルのキャッシュ853を含むプロセッサ・システムでは、主記憶装置825は、高速に構成することができ、コンピュータ・システムで使用できる不揮発性ストレージの一部のみを保持するため、しばしばレベル5(L5)のキャッシュと呼ばれる。主記憶装置825は、オペレーティング・システムによって主記憶装置825内へページングされるデータおよび主記憶装置825から外へページングされるデータのページを「キャッシュ」する。
プログラム・カウンタ(命令カウンタ)861は、実行される現在の命令のアドレスを追跡する。z/Architecture(R)プロセッサでは、プログラム・カウンタは64ビットであり、以前のアドレス指定制限をサポートするために、31ビットまたは24ビットに切り詰められてよい。プログラム・カウンタは、コンテキスト切り替え時に持続するように、コンピュータのプログラム状態ワード(PSW:program status word)内で具現化されてよい。したがって、プログラム・カウンタ値を含む進行中のプログラムは、例えば、プログラム環境からオペレーティング・システム環境へのコンテキスト切り替えを引き起こすオペレーティング・システムによって、中断されることがある。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を維持し、オペレーティング・システムのPSW内のプログラム・カウンタは、オペレーティング・システムの実行中に使用される。プログラム・カウンタは、現在の命令のバイト数に等しい数だけインクリメントされてよい。RISC(Reduced Instruction Set Computing)命令は、固定長であることができ、一方、CISC(Complex Instruction Set Computing)命令は、可変長であることができる。IBM z/Architecture(R)の命令は、2バイト、4バイト、または6バイトの長さを有するCISC命令である。プログラム・カウンタ861は、例えば、コンテキスト切り替え動作、または分岐命令の分岐実行動作のいずれかによって変更されてよい。コンテキスト切り替え動作では、現在のプログラム・カウンタ値は、実行されているプログラムに関する他の状態情報(条件コードなど)と共にプログラム状態ワードに保存され、実行される新しいプログラム・モジュールの命令を指す新しいプログラム・カウンタ値が読み込まれる。分岐実行動作は、分岐命令の結果をプログラム・カウンタ861に読み込むことによって、プログラムが決定を行うか、またはプログラム内でループできるようにするために実行されてよい。
プロセッサ826の代わりに命令をフェッチするために、命令フェッチ・ユニット855が採用されてよい。フェッチ・ユニットは、「次の順次命令」、分岐実行命令のターゲットの命令、またはコンテキスト切り替えの後のプログラムの最初の命令のいずれかをフェッチする。最新の命令フェッチ・ユニットは、プリフェッチ手法を採用し、プリフェッチされた命令が使用される可能性に基づいて、命令を投機的にプリフェッチすることができる。例えば、フェッチ・ユニットは、次の順次命令を含む命令の16バイト、および以降の順次命令の追加バイトをフェッチしてよい。
その後、フェッチされた命令は、プロセッサ826によって実行されてよい。実施形態によれば、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット856に渡されてよい。ディスパッチ・ユニットは、命令をデコードし、デコードされた命令に関する情報を、適切なユニット857、858、860に転送する。実行ユニット857は、デコードされた算術命令に関する情報を命令フェッチ・ユニット855から受信してよく、命令のオペコードに従ってオペランドに対して算術演算を実行してよい。オペランドは、好ましくは、メモリ825、設計済みレジスタ859から、または実行されている命令の即時フィールドから、実行ユニット857に提供されてよい。実行の結果は、格納される場合、メモリ825、レジスタ859に、または他のマシンのハードウェア(制御レジスタ、PSWレジスタなど)に格納されてよい。
プロセッサ826は、命令の機能を実行するための1つまたは複数のユニット857、858、860を備えてよい。図26Aを参照すると、実行ユニット857は、インターフェイス論理871を経由して、設計済み汎用レジスタ859、デコード/ディスパッチ・ユニット856、読み込み格納ユニット860、およびその他のプロセッサ・ユニット865と通信してよい。実行ユニット857は、算術論理演算ユニット(ALU:arithmetic logic unit)866が操作する情報を保持するために、複数のレジスタ回路867、868、869を採用してよい。ALUは、加算、減算、乗算、および除算などの算術演算と、AND、OR、排他的OR(XOR)、ローテート、およびシフトなどの論理関数とを実行する。ALUは、設計に依存する特殊な演算をサポートできるのが好ましい。その他の回路は、例えば条件コードおよび回復支援論理を含むその他の設計済み機能872を提供してよい。ALUの演算の結果は出力レジスタ回路870に保持されてよく、出力レジスタ回路870は、この結果をさまざまな他の処理機能に転送するように構成される。プロセッサ・ユニットの多くの配置が存在し、本説明は、一実施形態の代表的な理解を可能することのみを目的としている。
例えばADD命令は、算術論理演算機能を備えている実行ユニット857で実行されてよく、一方、例えば浮動小数点命令は、特殊な浮動小数点機能を備えている浮動小数点実行ユニットで実行される。好ましくは、実行ユニットは、オペコードによって定義された機能をオペランドに対して実行することによって、命令によって識別されたオペランドを操作する。例えば、ADD命令は、実行ユニット857によって、命令のレジスタ・フィールドによって識別された2つのレジスタ859にあるオペランドに対して実行されてよい。
実行ユニット857は、2つのオペランドに対して算術加算を実行し、その結果を第3のオペランドに格納し、第3のオペランドは、第3のレジスタまたは2つのソース・レジスタのうちの1つであってよい。実行ユニットは、好ましくは、シフト、ローテート、AND、OR、およびXORなどのさまざまな論理関数、ならびに加算、減算、乗算、除算のいずれかを含むさまざまな代数関数を実行できる算術論理演算ユニット(ALU)866を使用する。一部のALU866はスカラー演算用に設計され、一部のALU866は浮動小数点用に設計される。データは、アーキテクチャに依って、最下位バイトが最も大きいバイト・アドレスにあるビッグ・エンディアン、または最下位バイトが最も小さいバイト・アドレスにあるリトル・エンディアンであってよい。IBM z/Architecture(R)はビッグ・エンディアンである。符号付きフィールドは、符号および大きさであってよく、アーキテクチャに依って1の補数または2の補数であってよい。2の補数では、負値または正値がALU内で加算のみを必要とするため、2の補数は、ALUが減算機能を設計する必要がないという点において有利であることがある。数値は省略して表されてよく、例えば、12ビット・フィールドは、4キロバイト・ブロックとして表される4,096バイト・ブロックのアドレスを定義する。
図26Bを参照すると、分岐命令を実行するための分岐命令情報が、分岐ユニット858に送信されてよく、分岐ユニット858は、多くの場合、他の条件付き演算が完了する前に分岐の結果を予測するために、分岐履歴テーブル882などの分岐予測アルゴリズムを採用する。現在の分岐命令のターゲットは、条件付き演算が完了する前に、フェッチされて投機的に実行される。条件付き演算が完了したときに、投機的に実行された分岐命令は、条件付き演算の条件および投機的実行の結果に基づいて、完了されるか、または破棄される。分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐してよく、ターゲット・アドレスは、例えば命令のレジスタ・フィールドまたは即時フィールドにある数値を含む複数の数値に基づいて計算されてよい。分岐ユニット858は、複数の入力レジスタ回路875、876、877、および出力レジスタ回路880を含むALU874を採用してよい。分岐ユニット858は、例えば汎用レジスタ859、デコード・ディスパッチ・ユニット856、またはその他の回路873と通信してよい。
命令のグループの実行は、例えば、オペレーティング・システムによって開始されたコンテキスト切り替え、コンテキスト切り替えを引き起こすプログラム例外またはエラー、コンテキスト切り替えを引き起こすI/O割り込み信号、またはマルチスレッド環境内の複数のプログラムのマルチスレッド動作を含む、さまざまな理由のために中断されることがある。好ましくは、コンテキスト切り替え動作は、現在実行中のプログラムに関する状態情報を保存してから、呼び出されている別のプログラムに関する状態情報を読み込む。状態情報は、例えば、ハードウェア・レジスタまたはメモリに保存されてよい。状態情報は、好ましくは、実行される次の命令を指すプログラム・カウンタ値、条件コード、メモリ変換情報、および設計済みレジスタの内容を含む。コンテキスト切り替え動作は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード(例えば、マイクロコード、ピココード、またはライセンス内部コード(LIC:licensed internal code)など)によって、単独で、または組み合わせて行われてよい。
プロセッサは、命令によって定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即時オペランドを提供してよく、汎用レジスタまたは専用レジスタ(例えば、浮動小数点レジスタなど)を明示的に指す1つまたは複数のレジスタ・フィールドを提供してよい。命令は、オペコード・フィールドによってオペランドとして識別された暗黙のレジスタを使用してよい。命令は、オペランドのメモリ位置を使用してよい。オペランドのメモリ位置は、レジスタ、即時フィールド、またはz/Architecture(R)の長変位ファシリティなどのレジスタと即時フィールドの組合せによって提供されてよく、長変位ファシリティでは、命令がベース・レジスタ、インデックス・レジスタ、および即時フィールド(すなわち、変位フィールド)を定義し、これらが一緒に加算されて、例えばメモリ内のオペランドのアドレスを提供する。本明細書では、特に示されない限り、位置は、メイン・メモリ内の位置を意味してよい。
図26Cを参照すると、プロセッサは、読み込み/格納ユニット860を使用してストレージにアクセスする。読み込み/格納ユニット860は、メモリ853内のターゲット・オペランドのアドレスを取得し、レジスタ859内または別のメモリ(853)位置内のオペランドを読み込むことによって、読み込み動作を実行してよく、またはメモリ853内のターゲット・オペランドのアドレスを取得して、レジスタ859または別のメモリ(853)位置から取得されたデータを、メモリ853内のターゲット・オペランドの位置に格納することによって、格納動作を実行してよい。読み込み/格納ユニット860は、投機的であってよく、命令の順序とは異なる順序でメモリにアクセスしてよいが、読み込み/格納ユニット860は、プログラムからは命令が順序通りに実行されたように見えるということを維持する。読み込み/格納ユニット860は、汎用レジスタ859、デコード/ディスパッチ・ユニット856、キャッシュ/メモリ・インターフェイス853、またはその他の要素883と通信してよく、ストレージ・アドレスを計算するため、および動作の順序を維持するパイプライン・シーケンシングを提供するために、さまざまなレジスタ回路、ALU885、ならびに制御論理890を備えている。一部の動作の順序は、命令の順序とは異なる順序であってよいが、読み込み/格納ユニットは、プログラムからは不規則な順序の動作が順序通りに実行されたように見えるようにする機能を提供する。
好ましくは、アプリケーション・プログラムから「見える」アドレスは、多くの場合、仮想アドレスと呼ばれる。仮想アドレスは、しばしば「論理アドレス」および「実効アドレス」とも呼ばれる。これらの仮想アドレスは、さまざまな動的アドレス変換(DAT)技術のうちの1つによって物理的メモリ位置にリダイレクトされるという点において仮想的であり、動的アドレス変換技術は、仮想アドレスの先頭に単純にオフセット値を付加することと、1つまたは複数の変換テーブルを介して仮想アドレスを変換することとを含むが、これらに限定されず、変換テーブルは、好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独で、または組み合わせて含み、セグメント・テーブルは、好ましくはページ・テーブルを指すエントリを含む。z/Architecture(R)では、第1の領域テーブル、第2の領域テーブル、第3の領域テーブル、セグメント・テーブル、およびオプションのページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、多くの場合、仮想アドレスを関連する物理的メモリ位置にマッピングするエントリを含む変換索引バッファ(TLB)を使用することによって改善される。このエントリは、DATが変換テーブルを使用して仮想アドレスを変換するときに作成される。その後、仮想アドレスを使用する際に、低速で順次的な変換テーブル・アクセスではなく、高速なTLBのエントリを使用してよい。TLBの内容は、最長時間未使用(LRU:Least Recently used)を含むさまざまな置換アルゴリズムによって管理されてよい。
マルチプロセッサ・システムの各プロセッサは、I/O、キャッシュ、TLB、およびメモリなどの共有リソースが連動されて、一貫性を保つ責任を持つ。キャッシュの一貫性の維持において、いわゆる「スヌープ」技術が使用されてよい。スヌープ環境では、共有を容易にするために、各キャッシュ・ラインには、共有状態、排他的状態、変更済み状態、無効状態などのうちのいずれか1つであるとしてマークが付けられてよい。
I/Oユニット854は、例えばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺機器に接続するための手段をプロセッサに提供してよい。I/Oユニットは、多くの場合、ソフトウェア・ドライバによってコンピュータ・プログラムに提供される。IBM(R)のSystem z(R)などのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタが、オペレーティング・システムと周辺機器の間の通信を提供するメインフレームのI/Oユニットである。
さらに、その他の種類のコンピュータ・システムが、本発明の1つまたは複数の態様から恩恵を受けることができる。一例として、コンピュータ・システムは、エミュレータ(例えば、ソフトウェアまたはその他のエミュレーション・メカニズム)を備えてよく、エミュレータでは、例えば命令実行、アドレス変換などの設計済み機能、および設計済みレジスタを含む特定のアーキテクチャがエミュレートされるか、または特定のアーキテクチャのサブセットが、例えばプロセッサおよびメモリを含むネイティブ・コンピュータ・システム上で、エミュレートされる。そのような環境では、エミュレータの1つまたは複数のエミュレーション機能は、エミュレータを実行しているコンピュータが、エミュレートされている機能とは異なるアーキテクチャを有している場合でも、本発明の1つまたは複数の態様を実装してよい。例えば、エミュレーション・モードでは、エミュレートされる特定の命令または動作がデコードされてよく、適切なエミュレーション機能が構築されて、個別の命令または動作を実装してよい。
エミュレーション環境では、ホスト・コンピュータは、例えば、命令およびデータを格納するためのメモリと、命令をメモリからフェッチするため、および必要に応じてフェッチされた命令のローカル・バッファを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信するため、およびフェッチされた命令のタイプを決定するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを備えてよい。実行は、データをメモリからレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、またはデコード・ユニットによって決定された何らかの種類の算術演算もしくは論理演算を実行すること、あるいはその組合せを含んでよい。例えば、各ユニットはソフトウェアで実装されてよい。ユニットによって実行される動作は、エミュレータ・ソフトウェア内の1つまたは複数のサブルーチンとして実装されてよい。
さらに具体的には、メインフレームでは、設計済み機械命令は、例えばコンパイラ・アプリケーションを介して、プログラマー(例えば、「C」プログラマーなど)によって使用される。ストレージ媒体に格納されたこれらの命令は、z/Architecture(R)IBM(R) Serverにおいてネイティブに実行されるか、または代替として、他のアーキテクチャを実行しているマシンにおいて実行されてよい。これらの命令は、既存の、および将来のIBM(R)のメインフレーム・サーバにおいて、およびIBM(R)のその他のマシン(例えば、Power SystemsサーバおよびSystem x(R)Servers)上でエミュレートされてよい。これらの命令は、IBM(R)、Intel(R)、AMD(TM)、およびその他の企業によって製造されたハードウェアを使用している多種多様なマシン上で、Linuxを実行しているマシンにおいて実行されてよい。このハードウェア上のz/Architecture(R)の下での実行に加えて、Hercules、UMX、またはFSI(Fundamental Software, Inc)によるエミュレーションを使用するマシンと同様に、Linuxも使用されてよく、その場合、実行は通常、エミュレーション・モードにある。エミュレーション・モードでは、エミュレーション・ソフトウェアは、ネイティブ・プロセッサによって実行されて、エミュレートされるプロセッサのアーキテクチャをエミュレートする。
ネイティブ・プロセッサは、ファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行して、エミュレートされるプロセッサのエミュレーションを実行してよい。エミュレーション・ソフトウェアは、エミュレートされるプロセッサ・アーキテクチャの命令をフェッチして実行することを担当する。エミュレーション・ソフトウェアは、エミュレートされるプログラム・カウンタを維持し、命令境界を追跡する。エミュレーション・ソフトウェアは、1つまたは複数のエミュレートされる機械命令を一度にフェッチし、1つまたは複数のエミュレートされる機械命令を、ネイティブ・プロセッサによって実行するために、ネイティブ機械命令の対応するグループに変換してよい。これらの変換された命令は、より高速な変換を実現できるように、キャッシュされてよい。それでも、エミュレーション・ソフトウェアは、エミュレートされるプロセッサ用に記述されたオペレーティング・システムおよびアプリケーションが正しく動作することを保証するために、エミュレートされるプロセッサ・アーキテクチャのアーキテクチャ・ルールを維持する。さらに、エミュレーション・ソフトウェアは、エミュレートされるプロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムを、エミュレーション・ソフトウェアを含むネイティブ・プロセッサ上で実行できるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、割り込みメカニズム、コンテキスト切り替えメカニズム、時刻(TOD:Time of Day)クロック、ならびにI/Oサブシステムへの設計済みインターフェイスを含むが、これらに限定されない、エミュレートされるプロセッサ・アーキテクチャによって識別されるリソースを提供する。
エミュレートされる特定の命令がデコードされ、サブルーチンが呼び出されて個別の命令の機能を実行する。エミュレートされるプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば「C」のサブルーチンまたはドライバで実装されるか、または特定のハードウェアのドライバを提供する任意のその他の方法で実装される。
図27では、エミュレートされるホスト・コンピュータ・システム892の例が提供されており、この例では、ホスト・アーキテクチャのホスト・コンピュータ・システム800’をエミュレートする。エミュレートされるホスト・コンピュータ・システム892では、ホスト・プロセッサ(すなわち、CPU)891は、エミュレートされるホスト・プロセッサまたは仮想ホスト・プロセッサであり、ホスト・コンピュータ800’のプロセッサ891のネイティブ命令セット・アーキテクチャとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ893を備えている。エミュレートされるホスト・コンピュータ・システム892は、エミュレーション・プロセッサ893がアクセスできるメモリ894を含む。実施形態例では、メモリ894は、ホスト・コンピュータ・メモリ896の部分とエミュレーション・ルーチン897の部分に分割される。ホスト・コンピュータ・メモリ896は、ホスト・コンピュータ・アーキテクチャに従って、エミュレートされるホスト・コンピュータ892のプログラムで使用できる。エミュレーション・プロセッサ893は、エミュレートされるプロセッサ891のアーキテクチャ以外のアーキテクチャの設計済み命令セットのネイティブ命令(エミュレーション・ルーチンのメモリ897から取得されたネイティブ命令)を実行し、シーケンスおよびアクセス/デコード・ルーチンにおいて取得された1つまたは複数の命令を採用することによって、ホスト・コンピュータ・メモリ896内のプログラムから実行するために、ホスト命令にアクセスしてよく、シーケンスおよびアクセス/デコード・ルーチンは、アクセスされるホスト命令をデコードして、アクセスされるホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定してよい。ホスト・コンピュータ・システム800’のアーキテクチャに対して定義されたその他の機能は、例えば汎用レジスタ、制御レジスタ、動的アドレス変換およびI/Oサブシステムのサポート、ならびにプロセッサ・キャッシュなどの機能を含む、設計済み機能ルーチンによってエミュレートされてよい。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を改善するために、エミュレーション・プロセッサ893で使用できる機能(汎用レジスタおよび仮想アドレスの動的変換など)を利用してもよい。ホスト・コンピュータ800’の機能のエミュレーションにおいてプロセッサ893を支援するために、特殊なハードウェアおよびオフロード・エンジンが提供されてもよい。
組み合わせられた実施形態が互いに排他的でない限り、本発明の前述の実施形態のうちの1つまたは複数が組み合わせられてよいということが理解される。例えば「第1の」および「第2の」などの序数は、本明細書では、同じ名前を割り当てられた異なる要素を示すために使用されるが、必ずしも各要素の順序を確立しない。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含むコンピュータ可読ストレージ媒体を含んでよい。
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ・システムのコンピュータ上で全体的に実行すること、ユーザのコンピュータ・システムのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ・システムのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータ・システムのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含む製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
前述した特徴の可能性のある組合せは、次の通りであってよい。
1.ゲスト・オペレーティング・システムで使用するために割り当てられたコンピュータ・システムの複数のプロセッサのうちの1つまたは複数のプロセッサを使用して実行されるゲスト・オペレーティング・システムに割り込み信号を提供するための方法であって、このコンピュータ・システムが、バスおよびバス接続デバイスを介して複数のプロセッサに操作可能なように接続されている1つまたは複数のバス接続されたモジュールをさらに備え、このコンピュータ・システムが、バス接続デバイスに操作可能なように接続されたメモリをさらに備え、
複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにバス接続デバイスによって使用される論理プロセッサIDが割り当てられており、
ゲスト・オペレーティング・システムで使用するために割り当てられた複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにゲスト・オペレーティング・システムおよび1つまたは複数のバス接続されたモジュールによって使用される割り込みターゲットIDがさらに割り当てられており、
方法が、
バス接続デバイスによって、バス接続されたモジュールのうちの1つから割り込みターゲットIDと共に割り込み信号を受信することであって、この割り込みターゲットIDが、ゲスト・オペレーティング・システムで使用するために割り当てられたプロセッサのうちの1つを、割り込み信号を処理するためのターゲット・プロセッサとして識別する、受信することと、
バス接続デバイスによって、メモリに格納されている割り込みテーブルから、受信された割り込みターゲットIDに割り当てられた割り込みテーブル・エントリの第1のコピーを取り出すことであって、割り込みテーブル・エントリの第1のコピーが、論理プロセッサIDへの受信された割り込みターゲットIDの第1のマッピングを含む、取り出すことと、
バス接続デバイスによって、割り込みテーブル・エントリの第1のコピーを使用して受信された割り込みターゲットIDを論理プロセッサIDに変換することと、
バス接続デバイスによって、ターゲット・プロセッサを直接アドレス指定するために変換から得られた論理プロセッサIDを使用して、割り込み信号を処理するためにターゲット・プロセッサに転送することとを含む、方法。
2.ターゲット・プロセッサの割り込みターゲットIDを含むメッセージ信号割り込みの形態で割り込み信号が受信される、項目1に記載の方法。
3.割り込みテーブル・エントリの第1のコピーが、割り込みターゲットIDによって識別されたターゲット・プロセッサが、ゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうかを示す実行中インジケータの第1のコピーをさらに含み、方法が、
バス接続デバイスによって、実行中インジケータの第1のコピーを使用して、ターゲット・プロセッサがゲスト・オペレーティング・システムで使用するためにスケジューリングされているかどうかをチェックし、
ターゲット・プロセッサがスケジューリングされている場合は、割り込み信号の転送を続行し、
ターゲット・プロセッサがスケジューリングされていない場合は、バス接続デバイスによって、ブロードキャストを使用して割り込み信号を処理するために複数のプロセッサに転送することをさらに含む、項目1または2のいずれかに記載の方法。
4.割り込みテーブル・エントリの第1のコピーが、割り込みターゲットIDによって識別されたターゲット・プロセッサが割り込み信号を受信することを現在ブロックされているかどうかを示す割り込みブロッキング・インジケータをさらに含み、方法が、
バス接続デバイスによって、割り込みブロッキング・インジケータを使用して、ターゲット・プロセッサが割り込み信号を受信することをブロックされているかどうかをチェックし、
ターゲット・プロセッサがブロックされていない場合は、割り込み信号の転送を続行し、
ターゲット・プロセッサがブロックされている場合は、バス接続デバイスによって、割り込み信号が処理のためにターゲット・プロセッサに転送されるのをブロックすることをさらに含む、項目1ないし3のいずれかに記載の方法。
5.バス接続デバイスによって、ブロードキャストを使用して、割り込み信号を処理するために複数のプロセッサのうちの残りのプロセッサに転送することをさらに含む、項目4に記載の方法。
6.ゲスト・オペレーティング・システムの割り込みハンドラによって、ターゲット・プロセッサによって処理するためにターゲット・プロセッサに向けてアドレス指定された割り込みが保留中であるかどうかをチェックし、ターゲット・プロセッサによって処理するためにターゲット・プロセッサに向けてアドレス指定された割り込みが保留中でない場合、ゲスト・オペレーティング・システムによって、ターゲット・プロセッサがブロックされていないことを示すように、ターゲット・プロセッサに割り当てられた割り込みテーブル・エントリ内の割り込みブロッキング・インジケータを変更することをさらに含む、項目4または5のいずれかに記載の方法。
7.方法が、ターゲット・プロセッサがブロックされていない場合、バス接続デバイスによって、第1の論理プロセッサIDがブロックされていることを示すように、割り込みターゲットIDに割り当てられた割り込みテーブル・エントリ内の割り込みブロッキング・インジケータを変更することをさらに含み、この変更することが、処理のためのターゲット・プロセッサへの割り込み信号の転送前に実行される、項目6に記載の方法。
8.方法が、
バス接続デバイスによって、割り込みブロッキング・インジケータの変更後に、受信された割り込みターゲットIDに割り当てられた割り込みテーブル・エントリの第2のコピーを取り出すことと、
バス接続デバイスによって割り込みテーブル・エントリの第2のコピーをチェックし、割り込みテーブル・エントリの第1のコピーと相対的な割り込みテーブルの第2のコピーの事前に定義された種類の変更を除外することとをさらに含み、事前に定義された種類の変更の正常な除外が、処理のためのターゲット・プロセッサへの割り込み信号の転送に必要である、項目7に記載の方法。
9.事前に定義された種類の変更が、割り込みテーブル・エントリの第2のコピーに含まれている論理プロセッサIDのうちの第2の1つへの受信された割り込みターゲットIDの第2のマッピングと相対的な受信された割り込みターゲットIDの第1のマッピングの変更であり、第2のマッピングが第1のマッピングと相対的な変更を含む場合、バス接続デバイスによって、ブロードキャストを使用して、割り込み信号が処理のために複数のプロセッサに転送される、項目8に記載の方法。
10.事前に定義された種類の変更が、割り込みテーブル・エントリの第2のコピーに含まれている実行中インジケータの第2のコピーと相対的な実行中インジケータの第1のコピーの変更であり、実行中インジケータの第2のコピーが、実行中ビットの第1のコピーと相対的な変更を含んでおり、第2の実行中インジケータが、ターゲット・プロセッサがオペレーティング・システムで使用するためにスケジューリングされていないことを示している場合、割り込み信号が、バス接続デバイスによって、ブロードキャストを使用して処理のために複数のプロセッサに転送される、項目8または9のいずれかに記載の方法。
11.この方法が、バス接続デバイスによって、メモリに格納されたデバイス・テーブルからデバイス・テーブル・エントリのコピーを取り出すことをさらに含み、このデバイス・テーブル・エントリが、割り込みテーブルのメモリ・アドレスを示す割り込みテーブル・アドレス・インジケータを含み、バス接続デバイスが、割り込みテーブル・エントリの第1のコピーを取り出すために、割り込みテーブルのメモリ・アドレスを使用する、項目1ないし10のいずれかに記載の方法。
12.デバイス・テーブル・エントリが、ターゲット・プロセッサが直接アドレス指定されるかどうかを示す直接信号伝達インジケータをさらに含み、方法が、
直接信号伝達インジケータが割り込み信号の直接転送を示している場合に、ターゲット・プロセッサの論理プロセッサIDを使用してターゲット・プロセッサを直接アドレス指定する割り込み信号の転送が実行され、
そうでない場合に、バス接続デバイスによって、ブロードキャストを使用して、割り込み信号を処理するために複数のプロセッサに転送することをさらに含む、項目11に記載の方法。
13.メモリが、割り込み要約ベクトルをさらに含み、デバイス・テーブル・エントリが、割り込み要約ベクトルのメモリ・アドレスを示す割り込み要約ベクトル・アドレス・インジケータをさらに含み、割り込み要約ベクトルが、バス接続されたモジュールごとに割り込み要約インジケータを含み、各割り込み要約インジケータが、バス接続されたモジュールに割り当てられ、各バス接続されたモジュールによって発行された処理される割り込み信号が存在するかどうかを示し、
方法が、バス接続デバイスによって、割り込み要約ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号の発行元であるバス接続されたモジュールに割り当てられた割り込み要約インジケータを更新し、更新された割り込み要約インジケータが、各バス接続されたモジュールによって発行された処理される割り込み信号が存在するということを示すようにすることをさらに含む、項目11または12のいずれかに記載の方法。
14.メモリが、有向割り込み要約ベクトルをさらに含み、デバイス・テーブル・エントリが、有向割り込み要約ベクトルのメモリ・アドレスを示す有向割り込み要約ベクトル・アドレス・インジケータをさらに含み、有向割り込み要約ベクトルが、割り込みターゲットIDごとに有向割り込み要約インジケータを含み、各有向割り込み要約インジケータが、割り込みターゲットIDに割り当てられ、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在するかどうかを示し、
方法が、バス接続デバイスによって、有向割り込み要約ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号のアドレス指定先であるターゲット・プロセッサIDに割り当てられた割り込み要約インジケータを更新し、更新された割り込み要約インジケータが、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在するということを示すようにすることをさらに含む、項目11ないし13のいずれかに記載の方法。
15.メモリが1つまたは複数の割り込み信号ベクトルをさらに含み、デバイス・テーブル・エントリが、1つまたは複数の割り込み信号ベクトルのうちの1つの割り込み信号ベクトルのメモリ・アドレスを示す割り込み信号ベクトル・アドレス・インジケータをさらに含み、割り込み信号ベクトルの各々が、1つまたは複数の信号インジケータを含み、各割り込み信号インジケータが、1つまたは複数のバス接続されたモジュールのうちの1つのバス接続されたモジュールおよび割り込みターゲットIDに割り当てられ、割り込み信号が、各割り込みターゲットIDに向けてアドレス指定された各バス接続されたモジュールから受信されたかどうかを示し、
方法が、
バス接続デバイスによって、割り込み信号ベクトルの示されたメモリ・アドレスを使用して、受信された割り込み信号を発行したバス接続されたモジュール、および受信された割り込み信号のアドレス指定先である割り込みターゲットIDに割り当てられた割り込み信号インジケータを選択することと、
選択された割り込み信号インジケータが、各バス接続されたモジュールによって発行され、各割り込みターゲットIDに向けてアドレス指定された処理される割り込み信号が存在することを示すように、選択された割り込み信号インジケータを更新することとをさらに含む、項目11ないし14のいずれかに記載の方法。
16.割り込み信号ベクトルが、各割り込みターゲットIDに割り当てられた割り込みターゲットIDごとの割り込み信号インジケータをそれぞれ含み、割り込み信号ベクトルの各々が個別のバス接続されたモジュールに割り当てられ、各割り込み信号ベクトルの割り込み信号インジケータが、各個別のバス接続されたモジュールにさらに割り当てられる、項目15に記載の方法。
17.割り込み信号ベクトルが、各バス接続されたモジュールに割り当てられたバス接続されたモジュールごとの割り込み信号インジケータをそれぞれ含み、割り込み信号ベクトルの各々が個別のターゲット・プロセッサIDに割り当てられ、各割り込み信号ベクトルの割り込み信号インジケータが、各ターゲット・プロセッサIDにさらに割り当てられる、項目15に記載の方法。
18.デバイス・テーブル・エントリが、ゲスト・オペレーティング・システムが割り当てられた論理パーティションを識別する論理パーティションIDをさらに含み、バス接続デバイスによる割り込み信号の転送が、割り込み信号と共に論理パーティションIDを転送することをさらに含む、項目1ないし17のいずれかに記載の方法。
19.方法が、バス接続デバイスによって、受信された割り込み信号が割り当てられた割り込みサブクラスを識別する割り込みサブクラスIDを取り出すことをさらに含み、バス接続デバイスによる割り込み信号の転送が、割り込み信号と共に割り込みサブクラスIDを転送することをさらに含む、項目1ないし18のいずれかに記載の方法。
20.ゲスト・オペレーティング・システムで使用するために割り当てられたコンピュータ・システムの複数のプロセッサのうちの1つまたは複数のプロセッサを使用して実行されるゲスト・オペレーティング・システムに割り込み信号を提供するためのコンピュータ・システムであって、このコンピュータ・システムが、バスおよびバス接続デバイスを介して複数のプロセッサに操作可能なように接続されている1つまたは複数のバス接続されたモジュールをさらに備え、このコンピュータ・システムが、バス接続デバイスに操作可能なように接続されたメモリをさらに備え、
複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにバス接続デバイスによって使用される論理プロセッサIDが割り当てられており、
ゲスト・オペレーティング・システムで使用するために割り当てられた複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにゲスト・オペレーティング・システムおよび1つまたは複数のバス接続されたモジュールによって使用される割り込みターゲットIDがさらに割り当てられており、
このコンピュータ・システムが、
バス接続デバイスによって、バス接続されたモジュールのうちの1つから割り込みターゲットIDと共に割り込み信号を受信することであって、この割り込みターゲットIDが、ゲスト・オペレーティング・システムで使用するために割り当てられたプロセッサのうちの1つを、割り込み信号を処理するためのターゲット・プロセッサとして識別する、受信することと、
バス接続デバイスによって、メモリに格納されている割り込みテーブルから、受信された割り込みターゲットIDに割り当てられた割り込みテーブル・エントリの第1のコピーを取り出すことであって、割り込みテーブル・エントリの第1のコピーが、論理プロセッサIDへの受信された割り込みターゲットIDの現在のマッピングを含む、取り出すことと、
バス接続デバイスによって、割り込みテーブル・エントリの第1のコピーを使用して受信された割り込みターゲットIDを論理プロセッサIDに変換することと、
バス接続デバイスによって、ターゲット・プロセッサを直接アドレス指定するために変換から得られた論理プロセッサIDを使用して、割り込み信号を処理するためにターゲット・プロセッサに転送することとを含む方法を実行するように構成されている、コンピュータ・システム。
21.ゲスト・オペレーティング・システムで使用するために割り当てられたコンピュータ・システムの複数のプロセッサのうちの1つまたは複数のプロセッサを使用して実行されるゲスト・オペレーティング・システムに割り込み信号を提供するためのコンピュータ・プログラム製品であって、このコンピュータ・システムが、バスおよびバス接続デバイスを介して複数のプロセッサに操作可能なように接続されている1つまたは複数のバス接続されたモジュールをさらに備え、このコンピュータ・システムが、バス接続デバイスに操作可能なように接続されたメモリをさらに備え、
複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにバス接続デバイスによって使用される論理プロセッサIDが割り当てられており、
ゲスト・オペレーティング・システムで使用するために割り当てられた複数のプロセッサの各プロセッサに、各プロセッサをアドレス指定するためにゲスト・オペレーティング・システムおよび1つまたは複数のバス接続されたモジュールによって使用される割り込みターゲットIDがさらに割り当てられており、
このコンピュータ・プログラム製品が、処理回路によって読み取り可能な、方法を実行するために処理回路によって実行される命令を格納しているコンピュータ可読の非一過性媒体を備え、この方法が、
バス接続デバイスによって、バス接続されたモジュールのうちの1つから割り込みターゲットIDと共に割り込み信号を受信することであって、この割り込みターゲットIDが、ゲスト・オペレーティング・システムで使用するために割り当てられたプロセッサのうちの1つを、割り込み信号を処理するためのターゲット・プロセッサとして識別する、受信することと、
バス接続デバイスによって、メモリに格納されている割り込みテーブルから、受信された割り込みターゲットIDに割り当てられた割り込みテーブル・エントリの第1のコピーを取り出すことであって、割り込みテーブル・エントリの第1のコピーが、論理プロセッサIDへの受信された割り込みターゲットIDの現在のマッピングを含む、取り出すことと、
バス接続デバイスによって、割り込みテーブル・エントリの第1のコピーを使用して受信された割り込みターゲットIDを論理プロセッサIDに変換することと、
バス接続デバイスによって、ターゲット・プロセッサを直接アドレス指定するために変換から得られた論理プロセッサIDを使用して、割り込み信号を処理するためにターゲット・プロセッサに転送することとを含む、コンピュータ・プログラム製品。