(57)【特許請求の範囲】
【請求項１】
イベント・ターゲット番号、および無視ビット数を指定するイベント通知メッセージ（ＥＮＭ）を、割込み提示コントローラ（ＩＰＣ）で受信することと、
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを前記ＩＰＣによって決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定することと
を含む、データ処理システム内の割込みを処理する方法。
【請求項２】
前記ＥＮＭは、レベルをさらに指定し、前記仮想プロセッサ・スレッドの前記グループは、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項１に記載の方法。
【請求項３】
前記ＥＮＭは、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項１に記載の方法。
【請求項４】
前記レベルがオペレーティング・システム（ＯＳ）レベルに対応する際に、前記プロセスＩＤが使用されない、請求項２に記載の方法。
【請求項５】
前記レベルがハイパーバイザ・レベルに対応する際に、前記プロセスＩＤが使用されない、請求項４に記載の方法。
【請求項６】
前記無視ビット数が０である場合、前記特定の仮想プロセッサ・スレッドのみが、潜在的に割込みを受ける可能性がある、請求項３に記載の方法。
【請求項７】
前記無視ビット数が１である場合、前記特定の仮想プロセッサ・スレッドおよび１つの他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある、請求項３に記載の方法。
【請求項８】
前記無視ビット数が「ｎ」である場合、前記特定の仮想プロセッサ・スレッドおよび（２ｎ−１）個の他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある、請求項１ないし５のいずれか一項に記載の方法。
【請求項９】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の１つまたは複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の仮想プロセッサ・スレッドがディスパッチされず、関連する物理プロセッサ上で動作中ではないことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１０】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１１】
前記複数の仮想プロセッサ・スレッドのうちの複数が保留中の割込みをまだ有しないことに応答して、２次選択基準に基づいて、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１０に記載の方法。
【請求項１２】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドのそれぞれについての動作優先順位に対する、前記ＥＮＭ内で指定されるイベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項１１に記載の方法。
【請求項１３】
前記無視ビット数は、０に等しくなく、前記方法は、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定することと、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有するかどうかを判定することと、
前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有すると判定したことに応答して、前記ＥＮＭ内で指定されるイベント優先順位が、前記複数の仮想プロセッサ・スレッドのいずれかの動作優先順位よりも高いかどうかを判定することと、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれの前記動作優先順位よりも高くないと判定したことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行することと
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項１４】
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれかの前記動作優先順位よりも高いと判定したことに応答して、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのうちの複数の前記動作優先順位よりも高いと判定したことに応答して、２次選択基準に基づいて、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択すること
をさらに含む、請求項１３に記載の方法。
【請求項１６】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドについての動作優先順位に対する前記イベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項１５に記載の方法。
【請求項１７】
割込みソース・コントローラ（ＩＳＣ）と、
前記ＩＳＣに結合された割込み提示コントローラ（ＩＰＣ）と
を備え、前記ＩＰＣは、
前記ＩＳＣからイベント通知メッセージ（ＥＮＭ）を受信することであって、前記ＥＮＭが、イベント・ターゲット番号、および無視ビット数を指定する、前記受信すること、および
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定すること
を行うように構成される、マルチスレッド・データ処理システムのための処理ユニット。
【請求項１８】
前記ＥＮＭは、レベルをさらに指定し、前記仮想プロセッサ・スレッドの前記グループは、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項１７に記載の処理ユニット。
【請求項１９】
前記ＥＮＭは、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項１７に記載の処理ユニット。
【請求項２０】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の１つまたは複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の仮想プロセッサ・スレッドがディスパッチされず、関連する物理プロセッサ上で動作中ではないことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２１】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、保留中の割込みをまだ有しない前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２２】
前記ＩＰＣは、
前記複数の仮想プロセッサ・スレッドのうちの複数が保留中の割込みをまだ有しないことに応答して、２次選択基準に基づいて、保留中の割込みをまだ有しない複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項２１に記載の処理ユニット。
【請求項２３】
前記２次選択基準は、前記複数の仮想プロセッサ・スレッドのそれぞれについての動作優先順位に対する、前記ＥＮＭ内で指定されるイベント優先順位、前記複数の仮想プロセッサ・スレッドのうちの最長時間未使用（ＬＲＵ）の１つ、および前記複数の仮想プロセッサ・スレッドのうちのランダムな１つのうちの１つまたは複数を含む、請求項２２に記載の処理ユニット。
【請求項２４】
前記無視ビット数は、０に等しくなく、前記ＩＰＣは、
仮想プロセッサ・スレッドの前記グループ内の複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であるかどうかを判定し、
仮想プロセッサ・スレッドの前記グループ内の前記複数の仮想プロセッサ・スレッドがディスパッチされ、関連する物理プロセッサ上で動作中であることに応答して、前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有するかどうかを判定し、
前記複数の仮想プロセッサ・スレッドのすべてが保留中の割込みを有すると判定したことに応答して、前記ＥＮＭ内で指定されるイベント優先順位が、前記複数の仮想プロセッサ・スレッドのいずれかの動作優先順位よりも高いかどうかを判定し、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれの前記動作優先順位よりも高くないと判定したことに応答して、前記ＥＮＭ内で指定されるイベント・ソース番号によって指定される通知ソースに拒否メッセージを発行する
ようにさらに構成される、請求項１７ないし１９のいずれか一項に記載の処理ユニット。
【請求項２５】
前記ＩＰＣは、
前記イベント優先順位が前記複数の仮想プロセッサ・スレッドのいずれかの前記動作優先順位よりも高いと判定したことに応答して、前記イベント優先順位未満の動作優先順位を有する前記複数の仮想プロセッサ・スレッドのうちの１つを割込みのために選択する
ようにさらに構成される、請求項２４に記載の処理ユニット。
【請求項２６】
コンピュータ実行可能なプログラムであって、コンピュータを、
割込みソース・コントローラ（ＩＳＣ）、および
前記ＩＳＣに結合された割込み提示コントローラ（ＩＰＣ）
として機能させるためのプログラムであり、前記ＩＰＣは、
前記ＩＳＣからイベント通知メッセージ（ＥＮＭ）を受信することであって、前記ＥＮＭが、イベント・ターゲット番号、および無視ビット数を指定する、前記受信すること、および
前記ＥＮＭ内で指定される前記イベント・ターゲット番号および前記無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定することであって、かつ潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、前記イベント・ターゲット番号が、特定の仮想プロセッサ・スレッドを特定し、前記無視ビット数が、前記特定の仮想プロセッサ・スレッドに関して下位の無視ビット数を特定すること
を行うように構成される、プログラム。
【請求項２７】
前記ＥＮＭがレベルをさらに指定し、前記ＥＮＭ内で指定される前記レベルがユーザ・レベルに対応する際に、前記仮想プロセッサ・スレッドの前記グループが、プロセス識別子（ＩＤ）をさらに使用することによって決定される、請求項２６に記載のプログラム。
【請求項２８】
前記ＥＮＭが、イベント・ソース番号およびイベント優先順位をさらに指定する、請求項２６に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１５年１１月１６日に出願した米国仮特許出願第６２／２５５，７６６号、ならびに２０１６年１０月２６日に出願した米国特許出願第１５／３３４，８５７号および第１５／３３４，９５１号の出願日の利益を主張するものである。
【０００２】
本開示は、一般にはデータ処理システムを対象とし、より詳細には、仮想プロセッサ・スレッド・グループを使用するデータ処理システムの処理ユニット内の割込みを処理するための技法を対象とする。
【背景技術】
【０００３】
データ処理システムでは、イベントが注意を必要とすることをプロセッサに示すために割込み信号（割込み）が生成される。割込みの優先順位に応じて、プロセッサは、現在の活動を中断し、状態を保存し、イベントをサービスするための機能（すなわち、割込みハンドラ）を実行することによって応答することができる。例えば、ハードウェア割込みは、入力／出力（Ｉ／Ｏ）デバイス、例えばディスク・ドライブ・コントローラ、キーボード、マウス、または他の周辺デバイスによって生成することができる。一方、ソフトウェア割込みは、プロセッサ内の例外条件、または実行されたときに割込みを生成させる命令セット・アーキテクチャ（ＩＳＡ）内の特殊命令のどちらかによって引き起こすことができる。割込みサービス処理に続いて、プロセッサは中断した活動を再開する。
【０００４】
割込みサービス・ルーチン（ＩＳＲ）としても知られる割込みハンドラは、その実行が割込みによってトリガされる（例えば、ファームウェア、オペレーティング・システム（ＯＳ）、またはデバイス・ドライバで実装される）コールバック機能である。割込みハンドラは、様々な割込み依存機能を実施する。例えば、コンピュータ・キーボード上のキーを押すこと、またはコンピュータ・マウスを移動することは割込みをトリガし、割込みは、それぞれの割込みハンドラを呼び出して、キーまたはマウス位置を読み取り、関連する情報をコンピュータのメモリ内にコピーする。データ処理システムでは、割込みコントローラは、異なる割込みに対する優先レベルの割当てを容易にしつつ、１つまたは複数のプロセッサ例外ライン上に複数の割込みソースを組み合わせるよう実装されることがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国仮特許出願第６２／２５５，７６６号
【特許文献２】米国特許出願第１５／３３４，８５７号
【特許文献３】米国特許出願第１５／３３４，９５１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想プロセッサ・スレッド・グループを使用するデータ処理システムの処理ユニット内の割込みを処理するための方法、関連する処理ユニットおよび設計構造が求められている。
【課題を解決するための手段】
【０００７】
データ処理システム内の割込みを処理するための技法は、割込み提示コントローラ（ｉｎｔｅｒｒｕｐｔ  ｐｒｅｓｅｎｔａｔｉｏｎ  ｃｏｎｔｒｏｌｌｅｒ：ＩＰＣ）でイベント通知メッセージ（ＥＮＭ）を受信することを含む。ＥＮＭは、イベント・ターゲット番号、および無視ビット数を指定する。ＩＰＣは、ＥＮＭ内で指定されるイベント・ターゲット番号および無視ビット数に基づいて、潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する。潜在的に割込みを受ける可能性がある仮想プロセッサ・スレッドのグループを決定する際に、イベント・ターゲット番号は、特定の仮想プロセッサ・スレッドを特定し、無視ビット数は、特定の仮想プロセッサ・スレッドについて下位のビット数を特定する。
【図面の簡単な説明】
【０００８】
【図１】本開示の一実施形態による例示的なデータ処理システムの高レベルブロック図である。
【図２】本開示の一実施形態による例示的な処理ユニットのより詳細なブロック図である。
【図３Ａ】従来型イベント通知メッセージ（ＥＮＭ）の例示的なフィールドの図である。
【図３Ｂ】従来型通知拒否メッセージ（ＮＲＭ）の例示的なフィールドの図である。
【図３Ｃ】従来型割込み終了（ＥＯＩ）メッセージの例示的なフィールドの図である。
【図４】例示的な従来型割込みソース・コントローラ（ＩＳＣ）の関連する構成要素のブロック図である。
【図５】例示的な従来型割込み提示コントローラ（ＩＰＣ）の関連する構成要素のブロック図である。
【図６】割込みを処理するために従来型ＩＳＣによって実装される例示的なプロセスの流れ図である。
【図７】割込みを処理するために従来型ＩＰＣによって実装される例示的なプロセスの流れ図である。
【図８】割込みを処理するために従来型ＩＰＣによって実装される別の例示的なプロセスの流れ図である。
【図９】割込みを処理するために従来型プロセッサ・コアによって実装される例示的なプロセスの流れ図である。
【図１０】割込みを処理するために従来型ＩＰＣによって実装されるさらに別の例示的なプロセスの流れ図である。
【図１１】割込みを処理するために従来型ＩＰＣによって実装されるさらに別の例示的なプロセスの流れ図である。
【図１２】本開示の一実施形態に従って構成されるＥＮＭの例示的なフィールドの図である。
【図１３】本開示の一実施形態による、下位の無視ビット数と、関連の割込みをサービスすることができる仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフである。
【図１４】本開示に従って構成された例示的なＩＳＣの関連の構成要素のブロック図である。
【図１５】本開示に従って構成された例示的なＩＰＣの関連の構成要素のブロック図である。
【図１６】３つの割込みコンテキスト・テーブル（ＩＣＴ）、すなわちハイパーバイザ・スタック・レベルＩＣＴ、オペレーティング・システム（ＯＳ）スタック・レベルＩＣＴ、およびユーザ・スタック・レベルＩＣＴを実装するために図１７のＩＰＣが本開示の一実施形態に従って構成されることを示すブロック図である。
【図１７】図１５のＩＰＣの例示的なセレクタの関連する構成要素のブロック図である。
【図１８】割込みを処理するために、本開示に従って構成されたＩＰＣによって実装される例示的なプロセスの流れ図である。
【図１９】割込みを処理するために、本開示に従って構成されたＩＰＣによって実装される別の例示的なプロセスの流れ図である。
【発明を実施するための形態】
【０００９】
ここで図を参照すると、同様の参照番号は全体にわたって同様の対応する部分を指しており、特に図１を参照すると、本開示の１つまたは複数の実施形態に従って構成された１つまたは複数の割込み提示コントローラ（ＩＰＣ）および複数の割込みソース・コントローラ（ＩＳＣ）を実装する例示的なデータ処理システム１００を示す高レベル・ブロック図が示されている。図示される実施形態では、データ処理システム１００は、データおよび命令を処理するための複数の処理ノード１０２を含むキャッシュ・コヒーレント対称型マルチプロセッサ（ＳＭＰ）データ処理システムである。処理ノード１０２は、アドレス、データ、および制御情報を搬送するシステム相互接続１１０に結合される。システム相互接続１１０は、例えば、バス状相互接続、スイッチド相互接続（ｓｗｉｔｃｈｅｄ  ｉｎｔｅｒｃｏｎｎｅｃｔ）、またはハイブリッド相互接続として実装されてもよい。
【００１０】
図示される実施形態では、各処理ノード１０２は、４つの処理ユニット１０４ａ〜１０４ｄを含むマルチチップモジュール（ＭＣＭ）として実現され、各処理ユニットは、それぞれの集積回路として実現することができる。各処理ノード１０２内の処理ユニット１０４は、ローカル相互接続１１４によって、互いに対する通信、およびシステム相互接続１１０に対する通信のために結合され、ローカル相互接続１１４は、システム相互接続１１０と同様に、例えば、１つもしくは複数のバスまたはスイッチまたはその両方と共に実装することができる。システム相互接続１１０およびローカル相互接続１１４は、共にシステム・ファブリックを形成する。
【００１１】
処理ユニット１０４は、それぞれのシステム・メモリ１０８に対するインターフェースを提供するためにローカル相互接続１１４に結合されたメモリ・コントローラ（図示せず）をそれぞれ含む。システム・メモリ１０８内にあるデータおよび命令は一般に、データ処理システム１００内の任意の処理ノード１０２の任意の処理ユニット１０４内のプロセッサ・コアによってアクセスし、キャッシュし、変更することができる。したがって、システム・メモリ１０８は、データ処理システム１００の分散共有メモリ・システム内の最低レベルのメモリ・ストレージを形成する。代替の実施形態では、１つまたは複数のメモリ・コントローラ（およびシステム・メモリ１０８）は、ローカル相互接続１１４ではなく、システム相互接続１１０に結合することができる。
【００１２】
図１のＳＭＰデータ処理システム１００が、相互接続ブリッジ、不揮発性ストレージ、ネットワークまたは取り付けられたデバイスへの接続のためのポートなどの、多くの追加の図示されていない構成要素を含むことができることを当業者は理解されよう。そのような追加の構成要素は、記載の実施形態の理解のために必要ではないので、図１には図示されておらず、本明細書ではこれ以上論じられない。しかし、本明細書に記載の拡張は、多様なアーキテクチャのデータ処理システムに適用可能であり、図１に示される一般化されたデータ処理システム・アーキテクチャに決して限定されないことも理解されたい。
【００１３】
次に図２を参照すると、本開示の一実施形態による、例示的な処理ユニット１０４のより詳細なブロック図が示されている。図示される実施形態では、各処理ユニット１０４は、命令およびデータを処理するための複数のプロセッサ・コア２００を含む集積回路である。好適な実施形態では、各プロセッサ・コア２００は、同時マルチスレッド化（ＳＭＴ）をサポートし、それゆえ同時に複数のハードウェア実行スレッド（ｈａｒｄｗａｒｅ  ｔｈｒｅａｄｓ  ｏｆ  ｅｘｅｃｕｔｉｏｎ）を独立して実行することができる。
【００１４】
各プロセッサ・コア２００は、メモリＩ／Ｏバス２１０を介して割込み提示コントローラ（ＩＰＣ）２４０に結合される。１つまたは複数の実施形態では、ＩＰＣ２４０は、物理プロセッサ（ＰＰ）スレッドについての様々な情報を維持する単一の割込みコンテキスト・テーブル（ＩＣＴ）２４２を含む。１つまたは複数の別の実施形態では、異なるＩＣＴ２４２が、ＰＰスレッド上でディスパッチされる各ソフトウェア・スタック・レベルについて実装される（例えば、図１６を参照）。図１６に示されるように、ＩＣＴ２４２ａがハイパーバイザ（Ｈｙｐ）スタック・レベルについて実装され、ＩＣＴ２４２ｂがオペレーティング・システム（ＯＳ）スタック・レベルについて実装され、ＩＣＴ２４２ｃがユーザ・スタック・レベルについて実装される。本開示に従って構成されたＩＰＣが、３つを超える異なるソフトウェア・スタック・レベルを実装することができることが理解されたい。１つまたは複数の実施形態では、ＩＰＣ２４０は、それぞれの例外ライン２１２を介して各プロセッサ・コア２００に結合され、例外ライン２１２は、割り当てられた仮想プロセッサ・スレッドについての関連する割込みを各プロセッサ・コア２００に通知するために利用される。各ソフトウェア・スタック・レベルについて異なるＩＣＴ２４２が実装される実施形態では、各ソフトウェア・スタック・レベルについて異なる例外ライン２１２が実装される。ＩＰＣ２４０はまた、メモリＩ／Ｏバス２１０を介してＩ／Ｏコントローラ２２０に結合される。ＩＰＣ２４０は、メモリＩ／Ｏバス２１０を介して、Ｉ／Ｏコントローラ２２０もしくはプロセッサ・コア２００またはその両方に対して情報を送受信するように構成される。
【００１５】
各Ｉ／Ｏコントローラ２２０は、パケット・デコーダ２２２と、イベント割当てテーブル（ＥＡＴ）２２６を含む割込みソース・コントローラ（ＩＳＣ）２２４とを含み、イベント割当てテーブル（ＥＡＴ）２２６の値は、ソフトウェアを介して（例えば、ハイパーバイザによって）設定することができる。各Ｉ／Ｏコントローラ２２０は、Ｉ／Ｏバス２１４を介してＩ／Ｏアダプタ２３０に結合される。１つまたは複数のデバイス（図示せず）、例えばディスク・ドライブ、キーボード、マウスは、Ｉ／Ｏバス２１４を介してＩ／Ｏコントローラ２２０のパケット・デコーダ２２２にパケットを送るようにＩ／Ｏアダプタ２３０にシグナリングすることによってＩ／Ｏコントローラ２２０による割込み生成を開始してもよい。イベント割当てテーブル（ＥＡＴ）２２６は、メモリＩ／Ｏバス２１０を介してＩＰＣ２４０に送られるイベント通知メッセージ（ＥＮＭ）を生成するためにＩ／Ｏコントローラ２２０が使用する情報を含む。単一の割込み提示コントローラのみが図２に示されているが、本開示に従って構成された処理ユニットは、複数の割込み提示コントローラを含むことができることを理解されたい。
【００１６】
次に図３Ａを参照すると、例示的な従来型イベント通知メッセージ（ＥＮＭ）３０２の構造が示されている。ＥＮＭ３０２は、「イベント・ターゲット番号」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールド、ならびにメッセージをイベント通知メッセージとして特定するフィールド（図示せず）を含む。「イベント・ターゲット番号」フィールド内の値は、割込みを受ける物理プロセッサ・スレッドを特定して、関連のプロセッサ・コアが関連の割込みをサービスすることを容易にする。「イベント・ソース番号」フィールド内の値は、割込みを生成した通知ソースを特定する。「イベント優先順位」フィールド内の値は、割込みの優先レベルを特定する。ＥＮＭ３０２は、従来型ＩＳＣ４２４（図４参照）によって生成および発行されて、通知ソース（「イベント・ソース番号」フィールドによって特定される）が割込みを生成していること、および従来型ＩＰＣ５４０（図５参照）によって受信および処理されることを示す。
【００１７】
次に図３Ｂを参照すると、例示的な従来型通知拒否メッセージ（ＮＲＭ）３０４の構造が示されている。ＮＲＭ３０４は、「イベント・ソース番号」フィールド、ならびにメッセージを通知拒否メッセージとして特定するフィールド（図示せず）を含む。ＮＲＭ３０４は、ＩＰＣ５４０（図５参照）によって生成および発行され、かつＩＳＣ４２４（図４参照）によって受信および処理されて、要求された割込みが拒否されたこと、および再発行する必要があることをＩＳＣ４２４に示す。
【００１８】
次に図３Ｃを参照すると、例示的な従来型割込み終了（ＥＯＩ）メッセージ３０６の構造が示されている。ＥＯＩメッセージ３０６は、「イベント・ソース番号」フィールド、ならびにメッセージをＥＯＩメッセージとして特定するフィールド（図示せず）を含む。ＥＯＩメッセージ３０４は、ＩＰＣ５４０（図５参照）によって生成および発行され、ＩＳＣ４２４（図４参照）に送られ、イベント・ソース番号に関連するデバイスによって要求された割込みがサービスされたことを、ＩＳＣ４２４に示す。
【００１９】
図４を参照すると、従来型ＩＳＣ４２４の関連する構成要素が示されている。ＩＳＣ４２４が、本開示に従って構成された処理ユニット内のＩＳＣ２２４によって置き換えられることを理解されたい。ＩＳＣ４２４は、割込みコントローラ内に含まれ、この割込みコントローラはまた、Ｉ／Ｏバス４１４（図２のＩ／Ｏバス２１４と同様の）に結合されるパケット・デコーダ４２２と、メッセージ・デコーダ４０４（メモリＩ／Ｏバス４１０（図２のメモリＩ／Ｏバス２１０と同様の）を介して受信されたＥＯＩメッセージ３０６もしくはＮＲＭ３０４またはその両方を復号するために使用される）と、イベント割当てテーブル（ＥＡＴ）４２６と、ＥＡＴ４２６内の適切な情報を利用して割込みソースについてのＥＮＭ３０２を生成する、割込みメッセージ・エンコーダ４０６とを含む。パケット・デコーダ４２２は、Ｉ／Ｏバス４１４を介して受信されたパケットを復号し、有限状態機械（ＦＳＭ）を選択してパケットのソースのイベント・ソース番号に基づき受信したパケットを処理するように構成される。図示されるように、ＩＳＣ４２４は、ＥＡＴ４２６内の各行についてＦＳＭ（すなわち、Ｓ−ＦＳＭ  ０からＳ−ＦＳＭ  Ｎ）を含み、ＥＡＴ４２６は、ＥＡＴ４２６内に情報を書き込んでＮＭ３０２の構築を容易にするように構成される。ＥＡＴ４２６内に示されるイベント・ソース番号は、フィールドではないが、行番号を示すためにのみ使用されることを理解されたい。例えば、ソース番号「０」がＥＡＴ４２６の行番号「０」に割り当てられ、ソース番号「１」がＥＡＴ４２６の行番号「１」に割り当てられるなどである。ＥＡＴ４２６では、各行は、関連する「イベント優先順位」フィールドおよび「イベント・ターゲット番号」フィールドを有し、その値は、ＥＮＭ３０２内の対応するフィールドをポピュレート（ｐｏｐｕｌａｔｅ）するために利用され、ＥＮＭ３０２は、関連するＩ／Ｏデバイスによって割込みが要求される際に、割込みメッセージ・エンコーダ４０６によって生成される。
【００２０】
図５を参照すると、従来型ＩＰＣ５４０の関連する構成要素が示されている。ＩＰＣ５４０は、本開示に従って構成された処理装置内のＩＰＣ２４０によって置き換えられることを理解されたい。ＩＰＣ５４０は、メモリＩ／Ｏバス４１０に結合されたメッセージ・デコーダ５０２、メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット５０４、およびメモリＩ／Ｏバス４１０に結合されたメッセージ・エンコーダ５０６を含む。プロセッサ・コアは、ＭＭＩＯロードおよびＭＭＩＯストアを使用して、ＭＭＩＯユニット５０４を介してＩＰＣ５４０と通信する。ＩＰＣ５４０は、メッセージ・デコーダ５０２を介してＩＳＣ４２４からメッセージを受信する。ＩＰＣ５４０は、メッセージ・エンコーダ５０６を介してＩＳＣ４２４宛てのメッセージを生成する。ＭＭＩＯユニット５０４は、メッセージ・エンコーダ５０６にトリガＥＯＩメッセージ５０７を発行して、メッセージ・エンコーダ５０６にメモリＩ／Ｏバス４１０上でＥＯＩメッセージ３０６を生成させ、ＩＳＣ４２４に送らせる。メッセージ・デコーダ５０２はセレクタ５０８に結合され、セレクタ５２２は、受信されたＥＮＭ３０２に関連するイベント・ターゲット番号に基づいてＦＳＭ（すなわち、Ｐ−ＦＳＭ  １からＰ−ＦＳＭ  Ｍのうちの１つ）を選択するように構成される。ＩＰＣ５４０のＦＳＭは、割込みコンテキスト・テーブル（ＩＣＴ）５４２にアクセスし、プロセッサ・コア上で実行中の物理プロセッサ・スレッドに対する例外の生成を開始し、メッセージ・エンコーダ５０６に対するトリガ拒否メッセージ５０５の生成を開始し、メッセージ・エンコーダ５０６は、トリガ拒否メッセージ５０５に応答してＮＲＭ３０４を生成する。
【００２１】
割込みコンテキスト・テーブル（ＩＣＴ）５４２内に示される物理スレッド番号はフィールドではないが、行を示すためにのみ使用されることを理解されたい。例えば、物理スレッド番号「０」がＩＣＴ５４２の行番号「０」に割り当てられ、物理スレッド番号「１」がＩＣＴ５４２の行番号「１」に割り当てられるなどである。ＩＣＴ５４２では、各行は、関連する「有効」フィールド、「動作優先順位」フィールド、「割当て済み」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールドを有し、その値をＦＳＭによって設定し、その値にアクセスしてＭＭＩＯロードに応答し、プロセッサ・コアに値を返してもよい。
【００２２】
ＩＳＣによって実行される（従来通りと本開示の実施形態毎との両方）ものとして本明細書で説明されるプロセスの様々なブロックが、関連するＥＡＴの行ごとに同時に実行する場合があること、およびＩＰＣによって実行される（従来通りと本開示の実施形態毎との両方）ものとして本明細書で説明されるプロセスの様々なブロックが、関連するＩＣＴの行ごとに同時に実行する場合があることを理解されたい。例として、様々なプロセスのうちの少なくとも一部は、ＥＡＴもしくはＩＣＴまたはその両方の所与の行に関連するＦＳＭ論理によって実施されてもよいし、エンジンは、ＥＡＴもしくはＩＣＴまたはその両方のすべての行を順番に配列しながら、様々なプロセスを実施するように実装されてもよい。
【００２３】
図６を参照すると、割込みを処理するためにＩＳＣ４２４によって実装される、例示的なプロセス６００が示されている。プロセス６００は、例えば、ＩＳＣ４２４がＩ／Ｏバス４１４を介して入力を受信する際に、ブロック６０２で開始されてもよい。次に、判定ブロック６０４では、ＩＳＣ４２４は、受信された入力が割込みトリガ（または割込みトリガ・パルス）に相当するかどうかを判定する。受信した入力が割込みトリガではないことに応答して、制御はブロック６０４上でループする。ブロック６０４で受信した入力が割込みトリガであることに応答して、制御はブロック６０６に移る。ブロック６０６では、ＩＳＣ４２４が、ＥＡＴ４２６内の関連する情報に基づいてＥＮＭ３０２を構築する。次に、ブロック６０８では、ＩＳＣ４２４は、メモリＩ／Ｏバス４１０を介してＩＰＣ５４０にＥＮＭ３０２を送る。
【００２４】
次いで、判定ブロック６１０では、ＩＳＣ４２４は、拒否メッセージ（すなわち、ＮＲＭ３０４）がＩＰＣ５４０から受信されているかどうかを判定する。例えば、割込みのイベント優先順位よりも動作優先順位の高い割込みをサービスするために割込みを受けるように指定される、物理プロセッサ・スレッドに応答して、ＩＰＣ５４０は、ＮＲＭ３０４を生成することができる。ブロック６１０でＩＳＣ４２４がＥＮＭ３０２についてＮＲＭ３０４を受信したことに応答して、制御はブロック６１４に移り、プロセス６００は、ブロック６０６に制御を返す前に構成可能時間枠を待機し、ブロック６０６では、別のＥＮＭ３０２が割込みのために構築される。ブロック６１０でＩＳＣ４２４がＥＮＭ３０２についてのＮＲＭ３０４を受信しないことに応答して、制御は判定ブロック６１２に移る。ブロック６１２では、ＩＳＣ４２４は、ＥＯＩメッセージ３０６がＩＰＣ５４０から受信されているかどうかを判定する。ブロック６１２でＩＳＣ４２４がＥＮＭ３０２についてＥＯＩメッセージ３０６を受信したことに応答して、制御はブロック６０４に戻る。ブロック６１２でＩＳＣ４２４がＥＮＭ３０２についてのＥＯＩメッセージ３０６を受信しないことに応答して、制御はブロック６１０に戻る。
【００２５】
図７を参照すると、割込みを処理するためにＩＰＣ５４０によって実装される例示的なプロセス７００が示されている。プロセス７００は、ＩＰＣ５４０がメモリＩ／Ｏバス４１０を介して入力を受信した際に、ブロック７０２で開始されてもよい。次に、判定ブロック７０４では、ＩＰＣ５４０は、ＥＮＭ３０２が受信されたかどうかを判定する。受信した入力がＥＮＭ３０２ではないことに応答して、制御はブロック７０４上でループする。ブロック７０４で受信した入力がＥＮＭ３０２であることに応答して、制御は判定ブロック７０６に移る。ブロック７０６では、ＩＰＣ５４０は、ＥＮＭ３０２内で指定されるイベント・ターゲット番号（すなわち、物理プロセッサ・スレッド）に割り当てられるＩＣＴ５４２内の行についての有効ビットがアサートされるかどうか（すなわち、ＩＣＴ５４２内の物理プロセッサ・スレッドの有効フィールドによって指定された通りに、指定される物理プロセッサ・スレッドがポピュレートされかつ動作可能であるかどうか）を判定する。
【００２６】
有効ビットがブロック７０６でアサートされないことに応答して、制御はブロック７１２に移り、ここでエラー処理が開始され、次いでブロック７０４に戻る。有効ビットがブロック７０６でアサートされることに応答して、制御は判定ブロック７０８に移る。ブロック７０８では、ＩＰＣ５４０は、保留中の割込みがイベント・ソース番号に関連する物理プロセッサ・スレッドに既に割り当てられているかどうかを判定する（ＩＣＴ５４２内の指定される物理プロセッサ・スレッドの「割当て済み」フィールドの値を検査することによって）。ブロック７０８で、保留中の割込みが、指定される物理プロセッサ・スレッドにまだ割り当てられていないことに応答して、制御がブロック７１４に移る。ブロック７１４では、ＩＰＣ５４０は、「割当て済み」フィールドをアサートし、「イベント・ソース番号」フィールド、およびＥＮＭ３０２内に含まれる値に基づく指定される物理プロセッサ・スレッドのための「イベント優先順位」フィールドを設定する。ブロック７１４の後、制御はブロック７０４に戻る。
【００２７】
ブロック７０８で保留中の割込みが既に物理プロセッサ・スレッドに割り当てられていることに応答して、制御は判定ブロック７１０に移る。ブロック７１０では、ＥＮＭ３０２の「イベント優先順位」フィールド内で指定されるような新しい割込みのイベント優先順位が、ＩＣＴ５４２内の物理プロセッサ・スレッドの「イベント優先順位」フィールド内で指定されるような既に保留中の割込みのイベント優先順位よりも高いかどうかを、ＩＰＣ５４０が判定する。新しい割込みのイベント優先順位が保留中の割込みのイベント優先順位よりも高くないことに応答して、制御はブロック７１０からブロック７１６に移る。ブロック７１６では、ＩＰＣ５４０は、ＥＮＭ３０２内で指定されるイベント・ソース番号（すなわち、新しい割込みに関連するソース）にＮＲＭ３０４を発行する。
【００２８】
新しい割込みのイベント優先順位が保留中の割込みのイベント優先順位よりも高いことに応答して、制御はブロック７１０からブロック７１８に移る。ブロック７１８では、ＩＰＣ５４０は、ＩＣＴ５４２内で指定されるイベント・ソース番号（すなわち、保留中の割込みに関連するソース）にＮＲＭ３０４を発行する。次に、ブロック７２０では、ＩＰＣ５４０は、ＩＣＴ５４２内の物理プロセッサ・スレッドについて、ＥＮＭ３０２内で指定されるようなイベント・ソース番号およびイベント優先順位を修正する。ブロック７２０の後、制御はブロック７０４に戻る。
【００２９】
図８を参照すると、例外ラインをアサート／デアサートするためにＩＰＣ５４０によって実装される、例示的なプロセス８００が示されている。このアサート／デアサートは、関連する「割当て済み」フィールドがアサートされること（このことは保留中の割込みを示す）、および保留中の割込みのイベント優先順位が、物理プロセッサ・スレッドの動作優先順位よりも大きい（またはそれ以下である）ことに基づいて行われ、後者の物理プロセッサ・スレッドは、関連するプロセッサ・コアによって割込みをサービスすることを容易にするために、割込みを受けるものである。プロセス８００は、ブロック８０２でＩＰＣ５４０によって定期的に開始されて、それぞれのプロセッサ・コアに対する例外ラインがアサートまたはデアサートを必要とするかどうかを判定してもよい。次に、判定ブロック８０４では、ＩＰＣ５４０は、ＩＣＴ５４２内の各行についての割当て済みフィールドがアサートされる（すなわち真である）かどうかを判定し、この問いは、関連する物理プロセッサ・スレッドについて割込みが保留中であることを示す。
【００３０】
「割当て済み」フィールドがＩＣＴ５４２の行内でアサートされないことに応答して、制御はブロック８０４からブロック８１０に移る。ブロック８１０では、ＩＰＣ５４０は、最近割当て解除されていた（ｕｎａｓｓｉｇｎ）行に関連する例外ラインをデアサートするか、または、割当て解除されているが、最近は割当て解除されていなかった行について、例外ラインをデアサートされた状態に維持する。ブロック８１０の後、制御はブロック８０４に戻る。割当て済みフィールドがＩＣＴ５４２の行内でアサートされることに応答して、制御はブロック８０４から判定ブロック８０６に移る。ブロック８０６では、ＩＰＣ５４０は、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高いかどうかを判定する。
【００３１】
ブロック８０６で、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高くないことに応答して、制御はブロック８１０に移り、関連する例外ラインがデアサートされたままとなる。ブロック８０６で、保留中の割込みのイベント優先順位が、関連する物理プロセッサ・スレッドの動作優先順位よりも高いことに応答して、制御はブロック８０８に移り、関連する例外ラインがアサートされる。ブロック８０８の後、制御はブロック８０４に戻る。
【００３２】
図９を参照すると、割込みを処理するためにプロセッサ・コアによって実装される例示的なプロセス９００が示されている。各プロセッサ・コアがそれぞれの関連する例外ラインについて例外イネーブル・ビット（例えば、内部レジスタ内の）を維持することを理解されたい。プロセス９００は、割込みをサービスするための割込みハンドラをプロセッサ・コアによって実行することを容易にするよう、物理プロセッサ・スレッドが割込みを受けるべきかどうかを判定するために、プロセッサ・コアによって定期的に実行されてもよい。プロセス９００はブロック９０２で開始され、その時点で制御は判定ブロック９０４に移る。ブロック９０４では、プロセッサ・コアは、例外ラインと例外イネーブル・ビットの両方がアサートされるかどうかを判定する。プロセッサ・コアは、例外イネーブル・ビットをデアサートすることによって割込みをマスクする。
【００３３】
例外ラインもしくは関連する例外イネーブル・ビットまたはその両方がアサートされないことに応答して、制御はブロック９０４上でループする。例外ラインと関連する例外イネーブル・ビットの両方がアサートされることに応答して、制御はブロック９０４からブロック９０６に移る。ブロック９０６では、プロセッサ・コアは、例外イネーブル・ビットをリセットする（後続の割込みが現割込みに割り込むことを防止するため）。次に、ブロック９０８では、プロセッサ・コアは、適切な割込みハンドラに制御フローを変更する。次に、プロセッサ・コアは、ＩＰＣ５４０にＭＭＩＯロードを発行することによって保留中の割込みを認識する。次いで、ブロック９１０では、プロセッサ・コアは、ソース（「イベント・ソース番号」フィールド内の値によって指定される）からの割込みを処理するために登録されるプログラムを実行する。
【００３４】
次に、ブロック９１４では、プログラムの完了の後、プロセッサ・コアが、ＩＰＣ５４０にＭＭＩＯストアを発行し、ＥＯＩをシグナリングする。次いで、ブロック９１６では、プロセッサ・コアは、物理プロセッサ・スレッドに関連するＩＣＴ５４２内の行内の動作優先順位を事前割込み値にリセットする。次に、ブロック９１８では、プロセッサ・コアは、例外イネーブル・ビットをアトミックにアサートし、割込みをサービスするために割込みを受けたプログラムに、制御フローを戻す。ブロック９１８の後、制御はブロック９１８に戻る。
【００３５】
図１０を参照すると、割込みを処理するためにＩＰＣ５４０によって実装される例示的なプロセス１０００が示されている。プロセス１０００は、ＩＰＣ５４０が保留中の割込みに関してプロセッサ・コアから通信（例えば、ＭＭＩＯロードまたはＭＭＩＯストア）を受信したかどうかを判定するために、ＩＰＣ５４０によって定期的に実行されてもよい。プロセス１０００はブロック１００２で開始され、その時点で制御は判定ブロック１００４に移る。ブロック１００４では、ＩＰＣ５４０は、ＭＭＩＯロードが割込み認識アドレスで受信されたかどうかを判定する。
【００３６】
ＭＭＩＯロードが割込み認識アドレスで受信されないことに応答して、制御はブロック１００４上でループする。ＭＭＩＯロードが割込み認識アドレスで受信されたことに応答して、制御はブロック１００６に移る。ブロック１００６では、ＩＰＣ５４０は、保留中の割込み優先順位に動作優先順位をアトミックに設定し、ＩＣＴ５４２内の割込みについて割当て済みフィールドをリセットし、保留中の割込みソース番号を応答データとしてＭＭＩＯロードに返す。ブロック１００６から、制御はブロック１００４に戻る。
【００３７】
図１３を参照すると、物理スレッドについての動作優先順位の変化を処理するためにＩＰＣ５４０によって実装される例示的なプロセス１１００が示されている。プロセス１１００は、ＩＰＣ５４０が保留中の割込みに関してプロセッサ・コアから通信（例えば、ＭＭＩＯロードまたはＭＭＩＯストア）を受信したかどうかを判定するために、ＩＰＣ５４０によって定期的に実行することができる。プロセス１１００はブロック１１０２で開始され、その時点で制御は判定ブロック１１０４に移る。ブロック１１０４では、ＩＰＣ５４０は、ＭＭＩＯストアが動作優先順位アドレスで受信されたかどうかを判定する。
【００３８】
ＭＭＩＯストアが動作優先順位アドレスで受信されないことに応答して、制御はブロック１１０４上でループする。ＭＭＩＯストアが動作優先順位アドレスで受信されたことに応答して、制御はブロック１１０４からブロック１１０６に移る。ブロック１１０６では、ＩＰＣ５４０は、ＭＭＩＯストアに関連するデータごとにＩＣＴ５４２内の各行について動作優先順位を設定する。次に、判定ブロック１１０８では、ＩＰＣ５４０は、動作優先順位がＩＣＴ５４２内の各行についての保留中の優先順位未満であるかどうかを判定する。動作優先順位が保留中のイベント優先順位未満であることに応答して、制御はブロック１１０８からブロック１１０４に移る。動作優先順位が保留中のイベント優先順位未満ではないことに応答して、制御はブロック１１０８からブロック１１０９に移り、１１０９では、行割当て済みビットが、保留中の優先順位と共にリセットされる。次に、ブロック１１１０では、ＩＰＣ５４０は、保留中の割込みに関連する通知ソースに拒否メッセージを発行する。ブロック１１１０から、制御はブロック１１０４に戻る。
【００３９】
本開示の一実施形態によれば、所与の割込みによって割込みを受けるために利用可能なスレッド数を増加させてもよく、それゆえ所与の割込みがより適時にサービスされる機会を向上させることのできる技法が実装される。様々な実施形態では、この技法は、割込みのためのソフトウェア・スタック・レベル（例えば、ユーザ・レベル、ＯＳレベル、またはハイパーバイザ・レベル）を指定することもでき、ユーザ・レベルが割込みを受けることになる際に、プロセス識別子（ＩＤ）を指定することもできる。
【００４０】
図１２を参照すると、本開示に従って構成される例示的なイベント通知メッセージ（ＥＮＭ）１２０２の構造が示されている。ＥＮＭ１２０２は、「プロセスＩＤ」フィールド、「レベル」フィールド、「イベント・ターゲット番号」フィールド、「無視ビット数」フィールド、「イベント・ソース番号」フィールド、および「イベント優先順位」フィールド、ならびにメッセージをイベント通知メッセージとして特定するフィールド（図示せず）を含む。「プロセスＩＤ」フィールド内の値（ユーザ・レベル割込みが指定される際の）は、割込みのためのユーザ・プロセスを特定する（例えば、３２個の異なるユーザ・プロセスを指定することがある）。「レベル」フィールド内の値は、割込みがユーザ・レベル割込みであるか、ＯＳレベル割込みであるか、それともハイパーバイザ・レベル割込みであるかを指定する。「イベント・ターゲット番号」フィールド内の値は、仮想プロセッサ（ＶＰ）スレッドを特定し、このＶＰスレッドは、関連のプロセッサ・コアが関連の割込みをサービスすることを容易にするために、割込みを受けるように指定される。「無視ビット数」フィールド内の値は、割込みをサービスするためにどのＶＰスレッドが割込みを受ける可能性があるかを判定する際に、「イベント・ターゲット番号」内で無視する下位ビット数を指定する。「イベント・ソース番号」フィールド内の値は、割込みを生成した通知ソースを特定する。「イベント優先順位」フィールド内の値は、割込みの優先レベルを特定する。図示される実施形態では、ＥＮＭ１２０２は、「プロセスＩＤ」フィールドおよび「レベル」フィールドを含む。しかし、代替の実施形態では、「プロセスＩＤ」フィールドおよび「レベル」フィールドがＥＮＭ１２０２から省略されてもよい。
【００４１】
ＥＮＭ１２０２は、本開示（図１４参照）に従って構成される割込みソース・コントローラ（ＩＳＣ）２２４によって生成され、本開示（図１５参照）に従って構成される割込み提示コントローラ（ＩＰＣ）２４０に発行されて、「イベント・ソース番号」フィールドによって特定される通知ソースが割込みを生成したことを示す。ＥＮＭ１２０２はＥＮＭ３０２と同様であり、いくつかの例外として、ＥＮＭ１２０２が、ユーザ・レベル割込みのための「プロセスＩＤ」を指定する追加のフィールドと、割込みの「レベル」（すなわち、ユーザ・レベル、ＯＳレベル、またはハイパーバイザ・レベル）を指定する追加のフィールドと、割込むための仮想プロセッサ（ＶＰ）スレッドを選択する際に使用される「無視ビット数」を指定する追加のフィールドとを含むこと、および「イベント・ターゲット番号」フィールドが、物理プロセッサ・スレッドとは対照的に仮想プロセッサ・スレッドを特定することを理解されたい。
【００４２】
例えば、１６個のＶＰスレッド（すなわち、ＶＰスレッド００００から１１１１）が実装されると仮定すると、「無視ビット数」フィールド内で指定される値に応じて、割込みのために考慮することのできるＶＰスレッド数を、単一のＶＰスレッドまたはすべての１６個のＶＰスレッドとして指定されてもよい。一例として、ＶＰスレッド８、すなわち「１０００」が「イベント・ターゲット番号」フィールド内で指定されること、および「無視ビット数」フィールド内で３が指定されると仮定すると、関連する割込みをサービスするために８個のＶＰスレッド（すなわち、「１０００」から「１１１１」）を割込みのために考慮してもよい。別の例として、ＶＰスレッド８、すなわち「１０００」が「イベント・ターゲット番号」フィールド内で指定されること、および「無視ビット数」フィールド内で０が指定されることを仮定すると、関連する割込みをサービスするためにＶＰスレッド８（すなわち、「１０００」）のみを割込みのために考慮してもよい。
【００４３】
図１３を参照すると、本開示の一実施形態による、（下位の）無視ビット数と仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフ１３００が示されており、このＶＰは、最大１６個のＶＰスレッドを配置するデータ処理システムについて、関連する割込みを潜在的にサービスする可能性がある仮想プロセッサ（ＶＰ）スレッドとの間の関係を示すグラフ１３００が示されている。開示される技法は、１６個より多いかまたは少ないＶＰスレッドを配置するデータ処理システムに適用可能であることを理解されたい。グラフ１３００に示されるように、「無視ビット数」が４であるとき、１６個すべてのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が３であるとき、８個のＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が２であるとき、４つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が１であるとき、２つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。「無視ビット数」が０であるとき、１つのＶＰスレッドが、関連する割込みをサービスするために潜在的に利用可能である。一般には、「無視ビット数」が「ｎ」ビットであるとき、指定される仮想プロセッサ・スレッドおよび２ｎ−１個の他の仮想プロセッサ・スレッドが、潜在的に割込みを受ける可能性がある。
【００４４】
図１４を参照すると、本開示に従って構成される、図２のＩＳＣ２２４の関連する構成要素がさらに示されている。前述のように、割込みコントローラ２２０は、Ｉ／Ｏバス２１４に結合されるパケット・デコーダ２２２と、ＩＳＣ２２４とを含む。ＩＳＣ２２４は、メッセージ・デコーダ１４０４（メモリＩ／Ｏバス２１０を介して受信された従来型ＥＯＩメッセージ３０６もしくはＮＲＭ３０４またはその両方を復号するために使用される）と、イベント割当てテーブル（ＥＡＴ）２２６と、ＥＡＴ２２６内の適切な情報を利用して、ソースについてのＥＮＭ１２０２を生成する割込みメッセージ・エンコーダ１４０６とを含む。パケット・デコーダ２２２は、Ｉ／Ｏバス２１４を介して受信されたパケットを復号し、有限状態機械（ＦＳＭ）を選択し、パケットのソースについてのイベント・ソース番号に基づいて、受信したパケットを処理するように構成される。
【００４５】
図示されるように、ＩＳＣ２２４は、ＥＡＴ２２６の各行についてＦＳＭ（すなわち、Ｓ−ＦＳＭ  ０からＳ−ＦＳＭ  Ｎ）を含み、ＥＡＴ２２６は、ＥＡＴ２２６内の情報を維持して、ＮＭ１２０２の構築を容易にする。ＥＡＴ２２６内に示されるイベント・ソース番号は、フィールドではないが、行番号を示すためにのみ使用されることを理解されたい。例えば、ソース番号「０」が、ＥＡＴ２２６の行番号「０」に割り当てられ、ソース番号「１」が、ＥＡＴ２２６の行番号「１」に割り当てられるなどである。ＥＡＴ２２６では、各行は、関連する「イベント優先順位」フィールド、「イベント・ターゲット番号」フィールド、「無視ビット数」フィールド、「レベル」フィールド、および「プロセスＩＤ」フィールドを有し、それらの値は、対応するフィールドをＥＮＭ１２０２内にポピュレートするために利用され、ＥＮＭ１２０２は、関連するＩ／Ｏデバイスによって割込みが要求される際に、割込みメッセージ・エンコーダ１４０６によって生成される。図示される実施形態では、ＥＡＴ２２６内の各行は、「レベル」フィールドおよび「プロセスＩＤ」フィールドを有する。しかし、代替の実施形態では、「レベル」フィールドおよび「プロセスＩＤ」フィールドをＥＡＴ２２６から省略することがある。
【００４６】
図１５を参照すると、ＩＰＣ２４０の関連する構成要素がさらに示されている。ＩＰＣ２４０は、メモリＩ／Ｏバス２１０に結合されたメッセージ・デコーダ１５０２、メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット１５０４、およびメッセージ・エンコーダ１５０６を含む。プロセッサ・コア２００は、ＭＭＩＯロードおよびＭＭＩＯストアを使用して、ＭＭＩＯユニット１５０４を介してＩＰＣ２４０と通信する。ＩＰＣ２４０は、メッセージ・デコーダ１５０２を介してＩＳＣ２２４からメッセージを受信する。ＩＰＣ２４０は、メッセージ・エンコーダ１５０６を介してＩＳＣ２２４についてのメッセージを生成する。ＭＭＩＯユニット１５０４は、メッセージ・エンコーダ１５０６にトリガＥＯＩメッセージ１５０７を発行し、メッセージ・エンコーダ１５０６に、メモリＩ／Ｏバス２１０上でＥＯＩメッセージ３０６を生成させ、ＩＳＣ２２４に送らせる。メッセージ・デコーダ１５０２はセレクタ１５０８に結合され、セレクタ１５０８は、受信したＥＮＭ１２０２に関連するイベント・ターゲット番号に基づいてパケット処理のためにＦＳＭ（すなわち、Ｐ−ＦＳＭ  １からＰ−ＦＳＭ  Ｍのうちの１つ）を選択するように構成される。ＩＰＣ２４０のＦＳＭは、割込みコンテキスト・テーブル（ＩＣＴ）２４２にアクセスし、プロセッサ・コア２００上で実行中の物理スレッドに対する例外の生成を開始し、メッセージ・エンコーダ１５０６に対するトリガ拒否メッセージ１５０５を生成し、メッセージ・エンコーダ１５０６は、トリガ拒否メッセージ１５０５に応答してＮＲＭ３０４を生成する。
【００４７】
ＩＣＴ２４２内で示される物理プロセッサ・スレッド番号は、フィールドではないが、行を示すためにのみ使用されることを理解されたい。例えば、物理（プロセッサ）スレッド番号「０」がＩＣＴ２４２の行番号「０」に割り当てられ、物理スレッド番号「１」がＩＣＴ２４２の行番号「１」に割り当てられるなどである。ＩＣＴ２４２では、各行は、関連する「有効」フィールド、仮想プロセッサ番号（「ＶＰ  ＃」）フィールド、「プロセスＩＤ」フィールド（ユーザ・レベル割込みのために使用される）、「動作優先順位」フィールド、「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを有し、それらの値は、例外ラインがＩＰＣ２４０によってアサートされたことに応答して、ＭＭＩＯロードを使用してプロセッサ・コアによって読み出すことができる。「有効」フィールドは、プロセッサがインストールされ、電源オンされるかどうか、およびＶＰがディスパッチされ、関連する物理プロセッサ・スレッド上で動作中であるかどうかを示す。「ＶＰ  ＃」フィールドは、関連する物理プロセッサ・スレッド上でディスパッチされるＶＰの番号を指定する。「プロセスＩＤ」フィールドは、ユーザ・レベル割込みについてのプロセスＩＤを指定する。「動作優先順位」フィールドは、関連する物理プロセッサ・スレッド上で現在動作中のプログラムの優先レベルを指定する。図示される実施形態では、ＩＣＴ２４２内の各行は、「プロセスＩＤ」フィールドを有する。しかし、代替の実施形態では、「プロセスＩＤ」フィールドをＩＣＴ２４２から省略することができる。
【００４８】
図１６を参照すると、ＩＣＴ２４２が、３つの異なるＩＣＴ（すなわち、ハイパーバイザ・スタック・レベルＩＣＴ２４２ａ、ＯＳスタック・レベルＩＣＴ２４２ｂ、およびユーザ・スタック・レベルＩＣＴ２４２ｃ）を含むものとしてさらに示されており、それぞれは、プロセッサ・コア２００に配線される、異なる関連の例外ライン２１２ａ、２１２ｂ、および２１２ｃを有する。少なくとも１つの実施形態では、ＩＣＴ２４２ｃのみが「プロセスＩＤ」フィールドを有する。
【００４９】
図１７を参照すると、本開示の一実施形態による、図１５のＩＰＣ２４０のセレクタ１５０８の関連する構成要素がさらに示されている。図示されるように、セレクタ１５０８は、コンパレータ（ＣＭＰ  ０からＣＭＰ  Ｍ）、すなわちＩＣＴ２４２内の各行について１つのコンパレータを含み、コンパレータは、「イベント・ターゲット番号」、ユーザ・レベル割込みについての「プロセスＩＤ」、「レベル」、およびＥＮＭ１２０２内で与えられる「無視ビット数」、ならびにＩＣＴ２４２ａ、２４２ｂ、または２４２ｃのうちの１つのそれぞれの行内に格納された「有効」、「プロセスＩＤ」、および「ＶＰ  ＃」値を比較する。コンパレータの出力は、「ノーヒット」ユニット（’ｎｏ  ｈｉｔｓ’  ｕｎｉｔ）１６０２に与えられ、「ノーヒット」ユニット１６０２は、何らかのＶＰスレッドが割込みを受けるために利用可能かどうかを判定する（割込みがユーザ・レベル割込みである際に、プロセスＩＤも比較される）。ゼロのＶＰスレッドが、割込みを受けるために利用可能である場合、「ノーヒット」ユニット１６０２は、メッセージ・エンコーダ１５０６（図１５参照）にトリガ拒否メッセージ１５０５を発行する。１つを超えるＶＰスレッドが、割込みを受けるために利用可能である場合、「２次選択」ユニット（’ｓｅｃｏｎｄａｒｙ  ｓｅｌｅｃｔｉｏｎ’  ｕｎｉｔ）１６０４が、どのＶＰスレッドが割込みを受けるべきかを判定し、適切な割込みトリガを発行して関連の物理プロセッサ・スレッド上で割込みをトリガする。「プロセスＩＤ」フィールドおよび「レベル」フィールドがＥＮＭ１２０２から省略される代替の実施形態では、「レベル」フィールドおよび「プロセスＩＤ」フィールドがＥＡＴ２２６から省略され、「プロセスＩＤ」フィールドがＩＣＴ２４２から省略され、コンパレータ（ＣＭＰ  ０からＣＭＰ  Ｍ）が、ＥＮＭ１２０２内で与えられる「イベント・ターゲット番号」および「無視ビット数」、ならびにＩＣＴ２４２のそれぞれの行内に格納された「有効」および「ＶＰ  ＃」値を比較することできる。
【００５０】
「２次選択」ユニット１６０４は、どの利用可能なＶＰスレッドを割込みのために選択するかを判定する際に、様々な２次選択基準を実装してもよい。例えば、「２次選択」ユニット１６０４は、「動作優先順位」に対する「イベント優先順位」、最長時間未使用（ＬＲＵ）、もしくはランダム、またはそれらの組合せなどに基づいて、割込みのためのＶＰスレッドを選択することができる。所与の選択プロセス後に複数のＶＰスレッドがまだ利用可能である際に、単一のＶＰスレッドを選択するために様々な選択基準を順番に実装できることを理解されたい。
【００５１】
図１８を参照すると、割込みを処理するためにＩＰＣ２４０によって実装される例示的なプロセス１７００が示されている。ＩＰＣ５４０がイベント通知メッセージをどのように処理するか（図７参照）とは異なる方式で、ＩＰＣ２４０がイベント通知メッセージを処理することを理解されたい。ＩＰＣ２４０がメモリＩ／Ｏバス２１０を介して入力を受信する際に、プロセス１７００はブロック１７０１で開始される。次に、判定ブロック１７０２では、ＩＰＣ５４０は、イベント通知メッセージ（ＥＮＭ）１２０２が受信されたかどうかを判定する。ＩＳＣ２２４はＩＳＣ４２４（図６参照）と同様に動作すること、ＥＮＭ１２０２は、ＥＮＭ３０２を構築するためにＩＳＣ４２４について説明した方式と同様の方式でＩＳＣ２２４によって構築され、例外として、追加のフィールド（すなわち、図示される実施形態では、「プロセスＩＤ」フィールド、「レベル」フィールド、および「無視ビット数」フィールド、または、代替の実施形態では、「無視ビット数」フィールドのみ）を含むようにＥＮＭ１２０２が構築され、かつ物理プロセッサ・スレッドとは対照的に「イベント・ターゲット番号」フィールドが仮想プロセッサ・スレッド番号を与えることを理解されたい。受信した入力がＥＮＭ１２０２に対応しないことに応答して、制御はブロック１７０２上でループする。ブロック１７０２で受信した入力がＥＮＭ１２０２に対応することに応答して、制御はブロック１７０３に移る。
【００５２】
ブロック１７０３では、ＩＰＣ２４０は、ＥＮＭ１２０２によって（「無視ビット数」フィールド内で）指定される下位ビット数を無視して、ＥＮＭ１２０２からの「イベント・ターゲット番号」をすべての有効なＶＰ番号と比較する。次に、判定ブロック１７０４では、ＩＰＣ２４０は、割込みがユーザ・レベル割込みであることを「レベル」フィールドが示すかどうかを判定する。割込みがユーザ・レベル割込みであることに応答して、制御はブロック１７０４からブロック１７０６に移る。ブロック１７０６では、ＩＰＣ２４０は、ＥＮＭ１２０２の「プロセスＩＤ」を、合致する有効なＶＰ番号を有するＩＣＴ２４２ｃ内の行の「プロセスＩＤ」と比較する。ブロック１７０６から、制御は判定ブロック１７０８に移る。ブロック１７０４で割込みがユーザ・レベル割込みではないことに応答して、制御はブロック１７０８に直接移る。代替の実施形態では、判定ブロック１７０４およびブロック１７０６がプロセス１７００から省略され、制御はブロック１７０３から判定ブロック１７０８に直接移る。
【００５３】
ブロック１７０８では、ＩＰＣ２４０は、少なくとも１つのＶＰスレッドについてヒットが生じたかどうかを判定する。ノーヒット（すなわち、説明している実施形態における指定のプロセスＩＤを有するか、または代替の実施形態における指定のプロセスＩＤを有さない際に、ＶＰ選択基準（すなわち、「イベント・ターゲット番号」フィールドおよび「無視ビット数」フィールド内で指定される）に合致するＶＰスレッドが有効ではないことにより、割込みを受けるために利用可能なＶＰスレッドがない）がブロック１７０８で生じたことに応答して、制御はブロック１７１０に移り、ブロック１７１０では、ＩＰＣ２４０は、ＥＮＭ１２０２内の「イベント・ソース番号」フィールドによって指定される通知ソースに拒否メッセージ（すなわち、ＮＲＭ３０４）を発行する。拒否される関連する割込みが最終的にサービスされること保証するために、様々な技法を利用することがあることを理解されたい。ブロック１７１０の後、制御はブロック１７０２に戻る。少なくとも１つのヒットがブロック１７０８で生じたことに応答して、制御は判定ブロック１７１２に移り、判定ブロック１７１２では、ＩＰＣ２４０は、保留中の割込みがまだ割り当てられていない何らかのヒットがあるかどうかを判定する。
【００５４】
保留中の割込みがブロック１７１２でまだ割り当てられていない少なくとも１つのヒットがあることをＩＰＣ２４０が判定したことに応答して、制御はブロック１７１６に移る。ブロック１７１６では、ＩＰＣ２４０は、ＩＣＴ２４２内の行を選択し、割込みをトリガする。次に、ブロック１７１８では、ＩＰＣ２４０は、ＥＮＭ１２０２ごとに選択された行の「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを設定する。ブロック１７１８の後、制御はブロック１７０２に戻る。ブロック１７１２で保留中の割込みがまだ割り当てられていないヒットがないことをＩＰＣ２４０が判定したことに応答して、制御は判定ブロック１７１４に移る。ブロック１７１４では、ＩＰＣ２４０は、ＥＮＭ１２０２の割込み優先順位（すなわち、イベント優先順位）が、保留中の割込みを有するヒットを伴うどの行の動作優先順位よりも高いかどうかを判定する。
【００５５】
割込み優先順位が、保留中の割込みを有するヒットを伴うどの行の動作優先順位よりも高くないことに応答して、制御はブロック１７１４からブロック１７１０に移る。割込み優先順位が、保留中の割込みを有するヒットを伴う少なくとも１つの行の動作優先順位よりも高いことに応答して、制御はブロック１７１４からブロック１７２０に移る。ブロック１７２０では、ＩＰＣ２４０は、ＩＣＴ２４２内の行を選択して、割込みをトリガする。次に、ブロック１７２２では、ＩＰＣ２４０は、ＩＣＴ２４２の選択された行の割り当てられた通知ソースに拒否メッセージを発行する。次いで、ブロック１７１８では、ＩＰＣ２４０は、ＥＮＭ１２０２ごとにＩＣＴ２２４内の選択された行の「割当て済み」フィールド、「ソース番号」フィールド、および「イベント優先順位」フィールドを設定する。ブロック１７１８の後、制御はブロック１７０２に戻る。
【００５６】
図１９を参照すると、プロセッサ・コアから受信したいくつかのＭＭＩＯストアを処理するためにＩＰＣ２４０によって実装される例示的なプロセス１８００が示されている。例えば、プロセッサ・コア２００は、ＩＰＣ２４２にＭＭＩＯストアを発行し、すべての関連するＶＰを無効にすることがある。例えば、ＩＰＣ２４０が所与のプロセッサ・コア２００からＭＭＩＯストアを受信した際に、プロセス１８００はブロック１８０２で開始される。次に、判定ブロック１８０４では、ＩＰＣ２４０は、ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするようにＭＭＩＯストアが指示されるかどうかを判定する。ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするように、受信したＭＭＩＯストアが指示されないことに応答して、制御はブロック１８０４上でループする。ＩＣＴ２４２内の１つまたは複数の行内の有効ビットをデアサートするように、受信したＭＭＩＯストアが指示されることに応答して、制御はブロック１８０４から判定ブロック１８０６に移る。
【００５７】
判定ブロック１８０６では、ＩＰＣ２４０は、割当て済みビットが行内でアサートされるかどうか、すなわちその有効ビットがデアサートされることになる行について割込みが保留中であるかどうかを判定する。割当て済みビットが行についてアサートされることに応答して、制御はブロック１８０６からブロック１８０８に移る。ブロック１８０８では、ＩＰＣ２４０は、有効ビットがデアサートされることになる行き先の行に関連する（ＩＣＴ２４２内の行の「イベント・ソース番号」フィールド内の値によって指定される）通知ソースに拒否メッセージを発行する。次に、ブロック１８１０では、ＩＰＣ２４０は、行に関連する「割当て済み」フィールドおよび「有効」フィールド内の値をアトミックにデアサートする（１つまたは複数の行について割込みがもはや保留中ではないこと、および１つまたは複数の行が有効なＶＰを有しないことを示すために）。ブロック１８１０の後、制御はブロック１８０４に戻る。ブロック１８０６で１つまたは複数の行について割当て済みビットがアサートされないことに応答して、制御はブロック１８１２に移る。ブロック１８１２では、ＩＰＣ２４０は、１つまたは複数の行についての有効ビットをデアサートする。ブロック１８１２の後、制御はブロック１８０４に戻る。
【００５８】
したがって、割込みのサービシングを全般的に改善し、好ましくはＩ／Ｏデバイスが割込みのレベル（例えば、ユーザ・レベル、ＯＳレベル、ハイパーバイザ・レベル）を指定することを可能にする技法が、本明細書で開示されている。集積回路を設計、製造、または試験するためにコンピュータ可読記憶デバイス内に有形に具現化される設計構造で、本開示の態様を実装できることを理解されたい。
【００５９】
上記の流れ図では、図に示された方法は、コンピュータ可読媒体内で１つまたは複数の設計ファイルとして具現化することができる。いくつかの実装では、本発明の趣旨および範囲から逸脱することなく、方法のうちのいくつかのステップを組み合わせ、同時にまたは異なる順序で実施し、あるいは恐らくは省略することができる。そのため、方法ステップが具体的なシーケンスで説明および図示されるが、特定のステップのシーケンスの使用は、本発明に関するどのような制限も示唆することを意味しない。本発明の趣旨または範囲から逸脱することなく、ステップのシーケンスに関して変更を行ってもよい。具体的なシーケンスの使用は、それゆえ限定的な意味に理解されるものではなく、本発明の範囲は、添付の特許請求の範囲のみによって定義される。
【００６０】
当業者は理解するであろうが、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の態様は、総体的にハードウェアの実施形態、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形態を取ることができ、それらはすべて、本明細書では概して「回路」、「モジュール」、または「システム」と呼ばれることがある。
【００６１】
１つまたは複数のコンピュータ可読媒体の任意の組合せを利用してもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体としてもよい。コンピュータ可読記憶媒体は、例えば、限定はしないが、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、装置、またはデバイス、または上記の任意の適切な組合せでよいが、コンピュータ可読信号媒体を含まない。コンピュータ可読記憶媒体のより特定の例（非網羅的なリスト）には、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または上記の任意の適切な組合せが含まれる。本文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためにプログラムを収容し、または格納することのできる任意の有形記憶媒体でよい。
【００６２】
例示的な実施形態を参照しながら本発明を説明してきたが、本発明の範囲から逸脱することなく、様々な変更を行うことができ、その要素に均等物を代用できることを、当業者は理解されよう。さらに、その本質的な範囲から逸脱することなく、その具体的なシステム、デバイス、または構成要素を本発明の教示に適合させるように、多くの変更を行うことができる。したがって、本発明は、本発明を実施するために開示された具体的な実施形態に限定されず、本発明は、添付の特許請求の範囲内に包含されるすべての実施形態を含むものとする。さらに、第１、第２などの用語の使用は、何らかの順序または重要度を示すわけではなく、むしろ第１、第２などの用語は、ある要素を別の要素と区別するために用いられる。
【００６３】
本明細書で使用される用語は、具体的な実施形態を説明するためのものに過ぎず、本発明の限定ではないものとする。本明細書で使用される際に、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が特段に明確に示すのでない限り、複数形も含むものとする。「含む（ｃｃｍｐｒｉｓｅｓ）」もしくは「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」という用語またはその両方は、本明細書で使用される際に、記載の特徴、整数、ステップ、動作、要素、もしくは構成要素、またはそれらの組合せの存在を指定するが、１つもしくは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、またはそれらの組合せの存在または追加を除外しないことをさらに理解されよう。
【００６４】
以下の特許請求の範囲内にあるすべてのミーンズまたはステップ・プラス・ファンクションの構成要素の対応する構造、材料、行為、および均等物は、それが存在する場合、特許請求の範囲に具体的に記載されるように、特許請求の範囲に記載の他の構成要素と組み合わせてそのファンクションを実施するための、任意の構造、材料、または行為を含むことを意図する。本発明の説明は、例示および説明のために提示されてきたが、網羅的であること、または開示された形態の本発明に限定することを意図するものではない。本発明の範囲および趣旨から逸脱することなく、多くの変更形態および変形形態が当業者には明らかとなるであろう。本発明の原理および実際の応用例を最良に説明するために、および企図される具体的な使用に適するような様々な変更を伴う様々な実施形態について、他の当業者が本発明を理解することを可能にするために、実施形態を選び、説明した。
【符号の説明】
【００６５】
１００  データ処理システム
１０２  処理ノード
１０４  処理装置
１０８  システム・メモリ
１１０  システム相互接続
１１４  ローカル相互接続
２００  プロセッサ・コア
２１０  メモリＩ／Ｏバス
２１２  例外ライン
２１４  Ｉ／Ｏバス
２２０  Ｉ／Ｏコントローラ
２２２  パケット・デコーダ
２２４  割込みソース・コントローラ（ＩＳＣ）
２２６  イベント割当てテーブル（ＥＡＴ）
２３０  Ｉ／Ｏアダプタ
２４０  割込み提示コントローラ（ＩＰＣ）
２４２  割込みコンテキスト・テーブル（ＩＣＴ）
３０２  イベント通知メッセージ（ＥＮＭ）
３０４  通知拒否メッセージ（ＮＲＭ）
３０６  割込み終了（ＥＯＩ）メッセージ
４０４  メッセージ・デコーダ
４０５  ＥＯＩおよび拒否ライン
４０６  割込みメッセージ・エンコーダ
４１０  メモリＩ／Ｏバス
４１４  Ｉ／Ｏバス
４２２  パケット・デコーダ
４２４  割込みソース・コントローラ
４２６  イベント割当てテーブル（ＥＡＴ）
５０２  メッセージ・デコーダ
５０４  メモリ・マップドＩ／Ｏ（ＭＭＩＯ）ユニット
５０６  メッセージ・エンコーダ
５０７  トリガＥＯＩメッセージ
５４０  割込み提示コントローラ（ＩＰＣ）
５４２  割込みコンテキスト・テーブル（ＩＣＴ）
１２０２  イベント通知メッセージ（ＥＮＭ）
１４０４  メッセージ・デコーダ
１４０６  割込みメッセージ・エンコーダ
１５０２  メッセージ・デコーダ
１５０４  ＭＭＩＯユニット
１５０５  トリガ拒否メッセージ
１５０６  メッセージ・エンコーダ
１５０７  トリガＥＯＩメッセージ
１５０８  セレクタ
１６０２  「ノーヒット」ユニット
１６０４  「２次選択」ユニット
【図１】
0006679145.tif 000002
【図２】
0006679145.tif 000003
【図３Ａ】
0006679145.tif 000004
【図３Ｂ】
0006679145.tif 000005
【図３Ｃ】
0006679145.tif 000006
【図４】
0006679145.tif 000007
【図５】
0006679145.tif 000008
【図６】
0006679145.tif 000009
【図７】
0006679145.tif 000010
【図８】
0006679145.tif 000011
【図９】
0006679145.tif 000012
【図１０】
0006679145.tif 000013
【図１１】
0006679145.tif 000014
【図１２】
0006679145.tif 000015
【図１３】
0006679145.tif 000016
【図１４】
0006679145.tif 000017
【図１５】
0006679145.tif 000018
【図１６】
0006679145.tif 000019
【図１７】
0006679145.tif 000020
【図１８】
0006679145.tif 000021
【図１９】
0006679145.tif 000022