(57)【特許請求の範囲】
【請求項１】
マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コアに対して、前記第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインおよび前記第一プロセッサ・コア上で実行している前記アプリケーション・スレッドの受信者識別子がユーザレベル割り込みメッセージにおける対応するフィールドに一致する場合に、前記ユーザレベル割り込みメッセージによって示されるユーザレベル割り込みを受け入れることと、
前記ユーザレベル割り込みが他の受け入れられた割り込みよりも高い優先度および前記プロセッサ・コア上で実行しているアプリケーション・スレッドよりも高い優先順位を有する場合に前記ユーザレベル割り込みを処理すること、とを備える方法。
【請求項２】
前記処理することは、ユーザレベル・インサービス・レジスタの状態を変更することと、ユーザレベル割り込みルーチンを実行することとを備え、
前記実行することは、前記ユーザレベル割り込みメッセージにおけるベクタ番号およびユーザレベル割り込みディスクリプタ・テーブル・レジスタの内容に基づいてユーザレベル割り込みハンドラを呼び出すことと、前記ユーザレベル割り込みハンドラからプログラム・フローを戻すこととを備え、
前記ユーザレベル割り込みはオペレーティング・システム割り込みより低い優先順位を有し、
前記ユーザレベル割り込みはオペレーティング・システム割り込みを呼び出さずに処理される請求項１に記載の方法。
【請求項３】
前記第一プロセッサ・コアに関連するローカル割り込みコントローラは、前記複数のプロセッサ・コアの第二プロセッサ・コアに関連する個々のローカル割り込みコントローラ、および入力/出力割り込みコントローラの少なくとも一つから前記ユーザレベル割り込みメッセージを受信する請求項１に記載の方法。
【請求項４】
前記複数のプロセッサ・コアの第二プロセッサ・コアに対応するユーザレベル割り込み制御レジスタへ書き込むことにより前記ユーザレベル割り込みを生成することをさらに備え、前記ユーザレベル割り込み制御レジスタへ書き込むことは、
前記ユーザレベル割り込み制御レジスタの送信先フィールドを設定することと、
前記ユーザレベル割り込み制御レジスタの配信モードフィールドを設定することとを備える請求項１に記載の方法。
【請求項５】
前記ユーザレベル割り込みは複数のプロセッサ・コアの第二プロセッサ・コア上で実行しているアプリケーション・スレッドによって発行され、
前記ユーザレベル割り込みの配信不能状態を検出するとともにそれに基づいて前記第二のプロセッサ・コアへの割り込みをトリガすることをさらに備える請求項１に記載の方法。
【請求項６】
割り込みドメイン識別子および割り込み受信者識別子とユーザレベル割り込みが前記第一プロセッサ・コア上で実行している受信者アプリケーション・スレッドに配信不能である事の表示とに少なくとも部分的に基づいて前記ユーザレベル割り込みを配信不能としてメールボックスに記録することと、
受信者アプリケーション・スレッド状態が前記第一プロセッサ・コアに戻った後であって且つ前記受信者アプリケーション・スレッドを実行する前に前記メールボックスのエントリを処理することと、をさらに備える請求項１に記載の方法。
【請求項７】
複数のユーザレベル割り込み配信設定のうちから選択されたユーザレベル割り込み配信設定に従って1つ以上の受信者に前記ユーザレベル割り込みメッセージを配信することをさらに備え、
前記1つ以上の受信者は、前記複数のプロセッサ・コアの1つ以上のプロセッサ・コア上で実行している1つ以上のアプリケーション・スレッドに対応し、
前記複数のユーザレベル割り込み配信設定は、ユニキャスト配信、前記複数のプロセッサ・コアのマルチ・プロセッサ・コアに対応するマルチ受信者へのマルチキャスト配信、および前記複数のプロセッサ・コアの他のプロセッサ・コアへのブロードキャスト配信を含む請求項１に記載の方法。
【請求項８】
マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コアに対応するローカル割り込みコントローラを備える装置であって、
前記ローカル割り込みコントローラは、
前記第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインのインジケータを格納する動作が可能な割り込みドメイン識別子状態要素と、
前記第一プロセッサ・コア上で実行しているアプリケーション・スレッドのインジケータを格納する動作が可能な受信者識別子状態要素と、を備え、
前記ローカル割り込みコントローラは、前記割り込みドメイン識別子と前記受信者識別子の状態要素の内容に基づいて、少なくとも部分的にユーザレベル割り込みを処理する動作が可能であり、
前記ローカル割り込みコントローラは、前記割り込みドメイン識別子状態要素と前記受信者識別子状態要素の内容に基づいて、割り込みメッセージを生成する動作が可能である装置。
【請求項９】
前記ローカル割り込みコントローラはさらに、
前記ローカル割り込みコントローラのユーザレベル割り込み構成を示すユーザレベル割り込み制御状態要素と、
ユーザレベル割り込みの肯定応答を示すユーザレベルインサービス状態要素と、
ユーザレベル割り込みの保留中肯定応答を示すユーザレベル割り込み要求状態要素と、を備える請求項８に記載の装置。
【請求項１０】
少なくとも一つのユーザレベル割り込みハンドラと、
ユーザレベル割り込みディスクリプタ・テーブルと、
ユーザレベル割り込みディスクリプタ・テーブル・レジスタと、をさらに備え、
前記少なくとも一つのユーザレベル割り込みハンドラは、前記ユーザレベル割り込みディスクリプタ・テーブル・レジスタの内容に応じて前記ユーザレベル割り込みディスクリプタ・テーブルからアクセス可能である請求項８に記載の装置。
【請求項１１】
前記ローカル割り込みコントローラは、割り込みリダイレクション・テーブルを含む別の個々のローカル割り込みコントローラおよび入力/出力割り込みコントローラの少なくとも1つからユーザレベル割り込みを受信する動作が可能であり、前記割り込みリダイレクション・テーブルは割り込みドメイン識別子を含み、
前記ローカル割り込みコントローラは、受信した前記ユーザレベル割り込みを前記個々のローカル割り込みコントローラが受け入れたかのインジケータを提供する動作が可能であり、
前記ローカル割り込みコントローラは、受信割り込みメッセージにおける配信モードフィールドがユーザレベル割り込みコードを示す場合、受信割り込みメッセージにおける送信先インジケータを受信者識別子格納場所の内容と比較し、前記受信割り込みメッセージにおける割り込みドメイン識別子を割り込みドメイン識別子格納場所の内容と比較する動作が可能な請求項８に記載の装置。
【請求項１２】
前記第一プロセッサ・コアに対応するメールボックスルート記憶要素と、
配信不能ユーザレベル割り込みメッセージを格納する動作が可能であると共に前記メールボックスルート記憶要素、割り込みドメイン識別子および割り込み受信者識別子の内容に従って前記第一プロセッサ・コアによってアクセス可能なメールボックスストレージ構造と、をさらに備え、
前記第一プロセッサ・コアは、前記メールボックスルート記憶要素に従ってアクセス可能なメールボックス・テーブルに格納されている対応するメールボックス・ディスクリプタに基づいて前記メールボックスストレージ構造内に配信不能ユーザレベル割り込みメッセージを格納する動作が可能である請求項８に記載に記載の装置。
【請求項１３】
前記メールボックスルート記憶要素の内容に従ってアクセス可能なメールボックス・テーブルをさらに備え、
前記メールボックス・テーブルは前記複数のプロセッサ・コアによって共有されるメモリ空間内に存在し、
前記メールボックス・テーブルは、ルートテーブルと少なくとも1つの受信者メールボックス・ポインタ・テーブルとを備える階層的なテーブルのセットを備え、前記ルートテーブルは割り込みドメイン識別子を受信者メールボックス・ポインタ・テーブルに関連付ける請求項１２に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ・システム、特にマルチプロセッサ・システムの割り込み処理に係る。
【背景技術】
【０００２】
一般的に、割り込み（例えば、例外）は現在実行中の命令フローから、別の命令フローに命令実行を変更するイベントである。割り込みは通常、プロセッサまたはプロセッサに結合されたデバイスによって生成される。模範的な割り込み処理機構は、割り込まれたプロセッサのプログラム制御フローを割り込みハンドラ（例えば、割り込みサービスルーチン）に変更する。図1に関して、模範的なマルチプロセッサ・システム（例えば、システム100）には少なくとも2つのプロセッサ・コア（すなわち中央処理ユニット、コア、またはハードウェア・アクセラレータ）が含まれており、同時に複数のアプリケーション・スレッドを実行するように設定されている。模範的な割り込み配信メカニズム（例えば、x86アーキテクチャの割り込み配信メカニズム）には、システム内の各コアに対する割り込みコントローラ（例えば、ローカルな高度プログラム可能割り込みコントローラ (APIC)）が含まれている。さらに、割り込みコントローラ（例えば、I/O APIC）はシステム内の各周辺バスに含まれる事が可能である。専用バスまたはシステム・バス（例えば、クロスバー116）がAPIC間の通信に使われてよい。
【０００３】
一般的に、ローカルAPICは対応するコアまたはCPUに対する外部割り込みを管理する。ローカルAPICはプロセッサ間割り込み (IPI) メッセージを受け付け、生成出来る。模範的なIPIは、マルチプロセッサ・システムの最初のコアが別のコアへの並列タスクをオフロードした場合に発生する。模範的なローカルAPICは、224までの使用可能な割り込みベクタをサポートし、これは割り込み優先度と、それぞれの割り込みサービス・ルーチンに対応する。別の32のベクタが関連コアまたはCPUによって、割り込み処理用に予約されている。
【０００４】
図1と2に関して、プロセッサ間割り込みが、対応するローカルAPIC（例えば、ローカルAPIC106）で、割り込み制御レジスタ (ICR) に書き込むコア（例えば、コア102）によって生成される(202)。ICRには、送信先識別子、配信モード、割り込みベクタ、そして他の適切な情報のためのフィールドが含まれている。ローカルAPIC106は、割り込みメッセージを生成し、クロスバー116を使用してオンチップネットワークを介して割り込みメッセージをブロードキャストする(204)。割り込みメッセージを受信したローカルAPIC（例えば、ローカルAPIC108）は、関連コア（例えば、コア104）の状態、そして受信側ローカルAPIC自体の状態（例えば、配信モードおよび送信先識別子）に基づいて、割り込みを受け付けるかを判断する。例えば、ローカルAPIC108が、配信モードに応じて送信先IDと一致する、識別子、物理ID、論理IDを持っていれば、ローカルAPIC108は、割り込みメッセージを受け付け、割り込みメッセージから割り込みベクタ番号を読み取り、対応するビットが割り込み要求レジスタ (IRR) に設定される。ローカルAPIC108はACK（肯定応答）メッセージを割り込みメッセージを発信したローカルAPIC106へ送信し、ローカルAPIC108による割り込みメッセージの受け付けを確認する(206)。
【０００５】
ローカルAPIC108によって割り込みメッセージから読まれた割り込みベクタ番号は、割り込みの優先順位を表し、これは、他の保留中割り込みの優先順位、および1つ以上の現在実行中のスレッドの優先順位と比較される。割り込みが最も高い優先順位の場合、インサービス・レジスタ (ISR) 内で対応するビットが設定され、割り込みがコア104に配信される。ローカルAPICのロジック108は、コア104にメッセージを送信する(208)。メッセージを受信すると、コア104は割り込みを検出し、現在実行中のアプリケーション・スレッドの命令境界でコアは割り込みサービス・ルーチンを実行する。割り込みサービス・ルーチンは、割り込みディスクリプタ・テーブル レジスタ(IDTR) の内容に基づいて、割り込みディスクリプタ・テーブル (IDT) にアクセスする。そして割り込みベクタに対応する、コード・セグメント・セレクタ、オフセット、そして割り込みハンドラの特権モードを取得する。セグメント・セレクタそしてオフセットプログラムに基づいて、割り込みハンドラのエントリポイントが判断されると、制御は割り込みハンドラに転送され、コア104は割り込みハンドラで指定されたアクションを実行する事により、割り込みを処理する (212)。制御は、割り込みハンドラから戻り、割り込みハンドラによって指定された当該アクションの結果によって、以前に実行中のアプリケーション・スレッドに戻る事が可能である(214)。
【０００６】
引き続き図1と2に関して、マルチプロセッサ・システム（例えば、システム100）の周辺バス（例えば、周辺バス114）に結合されたデバイス（例えば、デバイス112）からの割り込みは、上記のようにプロセッサ間割り込みと同様に処理される。例えば、ネットワークパケットの処理システムでは、デバイス112は、ネットワーク・インターフェース・カード (NIC) である。パケットが到着すると、(NIC) はプロセッサに割り込みを送信し、プロセッサにパケットの到着を通知する。デバイス112は、割り込み信号をアサートする事によって割り込みを生成し(202)、I/O APIC（例えば、I/O APIC110）は割り込みリダイレクション・テーブル (IRT) 116内の対応するエントリを読み込む。I/O APIC110は、エントリからの情報例えば、送信先識別子、配信モード、割り込みベクタまたは他の適切な情報を伴う割り込みメッセージを生成する。そして、割り込みはローカルAPIC（例えば、ローカルAPIC106およびローカルAPIC108）にブロードキャストされる(204)。送信先ローカルAPIC（例えば、ローカルAPIC108）がI/O APIC に確認応答を送信する(206)。そして、割り込みは、送信先のローカルAPIC（例えば、コア104）に対応した受信コアに配信される。コア108は割り込みをコア108がプロセッサ間割り込みを処理するのと同じ方法で処理する(210、212、214、216)。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
1つのコアで実行中のアプリケーションから別のコアに割り込みを送信するには、ICRはカーネルモードのみで書込み可能なので、送信元のコアがオペレーティング・システムに制御を転送する必要がある。別のコアへの割り込みを生成するアプリケーションは、ICRを書込むためにカーネルモードに切り替わり、その後ユーザ・モードに切り替わり、2回の制御転送を必要とする。模範的なオペレーティング・システムへの制御転送は、多くのサイクルを使用する（例えば、オペレーティング・システム実装の複雑さに応じて数千回から数万回以上）。その上、割り込みがアプリケーション・スレッドに情報を渡すために使用される場合、アプリケーション・スレッドにプログラム制御を戻すために追加の制御転送が必要である。ユーザレベル割り込みを処理するためにオペレーティング・システムに関連する割り込み機構を使用するこの高いオーバーヘッドは、システムのパフォーマンスを遅くする場合がある。
【課題を解決するための手段】
【０００８】
本発明の少なくとも1つの実施形態では、方法は、マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コアに対して、第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインおよび第一プロセッサ・コア上で実行しているアプリケーション・スレッドの受信者識別子がユーザレベル割り込みメッセージにおける対応するフィールドに一致する場合に、ユーザレベル割り込みメッセージによって示されるユーザレベル割り込みを受け入れることを含む。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みが他の受け入れられた割り込みよりも高い優先度およびプロセッサ・コア上で実行しているアプリケーション・スレッドよりも高い優先順位を有する場合にユーザレベル割り込みを処理することを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込みは、オペレーティング・システム割り込みを呼び出さずに処理される。方法の少なくとも1つの実施形態では、処理することは、ユーザレベル・インサービス・レジスタの状態を変更することと、ユーザレベル割り込みルーチンを実行することとを含み、実行することは、ユーザレベル割り込みメッセージにおけるベクタ番号およびユーザレベル割り込みディスクリプタ・テーブル・レジスタの内容に基づいてユーザレベル割り込みハンドラを呼び出すこととを含む。少なくとも1つの実施形態では、方法は、割り込みからのユーザ・レベル・戻り(user-level-return-from-interrupt instruction)命令に基づいて、ユーザレベル割り込みハンドラからプログラム・フローを戻すことを含む。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みの処理が完了した場合に、ユーザレベル・インサービス・レジスタの状態をリセットすることを含む。方法の少なくとも1つの実施形態では、第一プロセッサ・コアに関連するローカル割り込みコントローラは、複数のプロセッサ・コアの第二プロセッサ・コアに関連する個々のローカル割り込みコントローラ、および入力/出力割り込みコントローラの少なくとも一つからユーザレベル割り込みメッセージを受信する。方法の少なくとも1つの実施形態では、ユーザレベル割り込みは、オペレーティング・システム割り込みより低い優先順位を持つ。
【０００９】
本発明の少なくとも1つの実施形態では、方法は、マルチコア・システムにおける複数のプロセッサ・コアの1つ以上のプロセッサ・コアにユーザレベル割り込みを示すユーザレベル割り込みメッセージを送ることを含む。ユーザレベル割り込みメッセージには、ユーザレベル割り込みに関連する割り込みドメイン識別子と、ユーザレベル割り込みに関連する受信者識別子が含まれている。少なくとも1つの実施形態では、方法は、複数のプロセッサ・コアのプロセッサ・コアに対応するユーザレベル割り込み制御レジスタへ書き込むことによりユーザレベル割り込みを生成することを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込み制御レジスタへ書き込むことは、ユーザレベル割り込み制御レジスタの送信先フィールドを設定することと、ユーザレベル割り込み制御レジスタの配信モードフィールドを設定することとを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込みは、複数のプロセッサ・コアの第一プロセッサ・コア上で実行されているアプリケーション・スレッドによって発行され、方法は、ユーザレベル割り込みの配信不能状態を検出するとともにそれに基づいて第一プロセッサ・コアへの割り込みをトリガすることをさらに含む。
【００１０】
本発明の少なくとも1つの実施形態では、装置は、マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コアに対応するローカル割り込みコントローラを含む。ローカル割り込みコントローラは、第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインのインジケータを格納する動作が可能な割り込みドメイン識別子状態要素を含む。ローカル割り込みコントローラは、第一プロセッサ・コア上で実行しているアプリケーション・スレッドのインジケータを格納する動作が可能な受信者識別子状態要素を含む。ローカル割り込みコントローラは、割り込みドメイン識別子および受信者識別子状態要素の内容に基づいてユーザレベル割り込みを少なくとも部分的に処理する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、ローカル割り込みコントローラのユーザーレベル割り込み構成を示すユーザーレベル割り込み制御状態要素、肯定応答したユーザレベル割り込みを示すユーザーレベル・インサービス状態要素、およびユーザーレベル割り込みの保留中の肯定応答を示すユーザーレベル割り込み要求状態要素をさらに含む。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、割り込みドメイン識別子状態要素および受信者識別子状態要素の内容に基づいて割り込みメッセージを生成する動作が可能である。少なくとも1つの実施形態では、装置は、少なくとも1つのユーザレベル割り込みハンドラ、ユーザレベル割り込みディスクリプタ・テーブル、およびユーザレベル割り込みディスクリプタ・テーブル・レジスタを含み、少なくとも一つのユーザレベル割り込みハンドラは、ユーザレベル割り込みディスクリプタ・テーブル・レジスタの内容に応じて、ユーザレベル割り込みディスクリプタ・テーブルからアクセス可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、割り込みリダイレクション・テーブルを含む別の個々のローカル割り込みコントローラおよび入力/出力割り込みコントローラの少なくとも1つからユーザレベル割り込みを受信する動作が可能であり、割り込みリダイレクション・テーブルには割り込みドメイン識別子が含まれている。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、ユーザレベル割り込みのソースに、ユーザレベル割り込みのソースから受信した割り込みメッセージを個々のローカル割り込みコントローラが受け入れたかを示すインジケータを提供する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、受信割り込みメッセージにおける配信モードフィールドがユーザレベル割り込みコードを示す場合、受信割り込みメッセージにおける送信先インジケータを受信者識別子格納場所の内容と比較し、受信した割り込みメッセージにおける割り込みドメイン識別子を割り込みドメイン識別子格納場所の内容と比較する動作が可能である。装置の少なくとも1つの実施形態では、ユーザレベル割り込みハンドラには、ユーザレベル割り込みベクタが含まれている。少なくとも1つの実施形態では、装置は、デバイスからのイベントを受信するとともに受信したイベントを割り込みとしてローカル割り込みコントローラへルートする動作が可能な入力/出力割り込みコントローラを含む。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、割り込みが発行される複数のプロセッサコアの第二プロセッサ・コアに対応する別のローカル割り込みコントローラからの確認インジケータを受信するよう構成されている。少なくとも1つの実施形態では、装置は、ローカル割り込みコントローラのオペレーティング・システム・レベル割り込み構成を示すオペレーティング・システム・レベル割り込み制御状態要素と、オペレーティング・システムレベル割り込みの肯定応答を示すオペレーティング・システム・レベル・インサービス状態要素と、肯定応答が保留のオペレーティング・システム・レベル割り込みを示すオペレーティング・システム・レベル割り込み要求状態要素とを含む。
【００１１】
本発明の少なくとも1つの実施形態では、方法は、ユーザレベル割り込みに関連するユーザレベル割り込みメッセージに含まれる割り込みドメイン識別子および割り込み受信者識別子に少なくとも部分的に基づいて、ユーザレベル割り込みを配信不能としてメールボックス内に記録することを含む。記録することは、ユーザレベル割り込みが、マルチコア・システムにおける複数のプロセッサ・コアのプロセッサ・コア上で実行している受信者アプリケーション・スレッドへ配信不能であることの表示に少なくとも部分的に基づいている。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みの目的受信者によってユーザレベル割り込みが受け入れられていない事を示す少なくとも1つのメッセージを受信することを含み、ユーザレベル割り込みが配信不能である事の表示は、少なくとも部分的に少なくとも1つのメッセージに基づいている。方法の少なくとも1つの実施形態では、ユーザレベル割り込みが配信不能である事の表示は、ユーザレベル割り込みメッセージに対して肯定応答メッセージが受信されていない事の決定に基づいている。少なくとも1つの実施形態では、方法は、受信者アプリケーション・スレッド状態がプロセッサ・コアに戻った後であって且つ受信者アプリケーション・スレッドを実行する前に、メールボックスのエントリを処理することを含む。少なくとも1つの実施形態では、方法は、メールボックスが満杯な場合に追加のユーザレベル割り込みを配信不能としてメールボックスに記録する試みに応答して、オペレーティング・システムにメールボックスのオーバーフローを通知することを含む。少なくとも1つの実施形態では、方法は、メールボックスオーバーフローの通知に応答してメールボックスのストレージ容量を増加することを含む。少なくとも1つの実施形態では、方法は、メールボックスオーバーフローに応答して追加のユーザレベル割り込みを無視することを含む。少なくとも1つの実施形態では、方法は、メールボックス内に配信不能として記録されたユーザレベル割り込みを追加のユーザレベル割り込みで上書きすることによりユーザレベル割り込みを無視することを含む。少なくとも1つの実施形態では、方法は、アプリケーション・スレッドがドメインに参加し、1つ以上のプロセッサ・コア上で実行しているオペレーティング・システムから受信者識別子を受信した場合に、メールボックス・テーブル・エントリとメールボックス・バッファを作成することを含む。
【００１２】
本発明の少なくとも1つの実施形態では、装置はマルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コアを含む。装置は配信不能のユーザレベル割り込みメッセージを格納する動作が可能なメールボックスストレージ構造を含む。メールボックスストレージ構造は、メールボックスストレージ構造ルート記憶要素の内容、割り込みドメイン識別子および割り込み受信者識別子に従って、第一プロセッサ・コアによってアクセス可能である。少なくとも1つの実施形態では、装置は、第一プロセッサ・コアに対応するメールボックスルート記憶要素を含み、第一プロセッサ・コアは、メールボックスルート記憶要素に従ってアクセス可能なメールボックス・テーブルに格納されている対応するメールボックス・ディスクリプタに基づいて、メールボックスストレージ構造内に配信不能のユーザレベル割り込みメッセージを格納する動作が可能である。少なくとも1つの実施形態では、装置は、メールボックスルート記憶要素の内容に応じてアクセス可能なメールボックス・テーブルを含み、メールボックス・テーブルは複数のプロセッサ・コアによって共有されるメモリ空間内に存在する。装置の少なくとも1つの実施形態では、メールボックス・テーブルは、ルートテーブルと少なくとも1つの受信者メールボックス・ポインタテーブルを備える階層的なテーブルのセットを含み、ルートテーブルは割り込みドメイン識別子を受信者メールボックス・ポインタテーブルへ関連付ける。装置の少なくとも1つの実施形態では、メールボックス・テーブルは、割り込みドメイン識別子と割り込み受信者識別子に従ってアクセス可能なメールボックス・ディスクリプタのエントリを含む。装置の少なくとも1つの実施形態では、メールボックスストレージ構造は、配信不能ユーザレベル割り込みの種類に対応する個々のエントリのキューを備える。装置の少なくとも1つの実施形態では、メールボックスストレージ構造は、特定の受信者アプリケーション・スレッドに対して、ーつまたは複数のユーザレベル割り込みタイプが保留されているかを示すビットベクタを備える。少なくとも1つの実施形態では、装置は第一プロセッサ・コアに対応するローカル割込みコントローラを含み、ローカル割り込みコントローラは、第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインの表示を格納する動作が可能な割り込みドメイン識別子状態要素と、第一プロセッサ・コア上で実行しているアプリケーションスレッドの表示を格納する動作が可能な受信者識別子状態要素とを含み、ローカル割り込みコントローラは、割り込みドメイン識別子と受信者識別子の状態要素の内容に基づいてユーザレベル割り込みを少なくとも部分的に処理するように動作可能である。
【００１３】
本発明の少なくとも1つの実施形態では、方法は、割り込みドメインおよび第一プロセッサ・コア上で実行しているアプリケーションスレッドの受信者識別子の少なくとも1つとユーザレベル割り込みメッセージにおける対応するフィールドとが一致しない場合に、ユーザーレベル割り込みメッセージの受信者によって受け入れられていないユーザーレベル割り込みのインジケーターを送信することと、そうでない場合に、受け入れられているユーザレベル割り込みのインジケータを送信することとを含む。少なくとも1つの実施形態では、方法は、受け入れられていないユーザレベル割り込みのインジケータの受信に基づいて、ユーザレベル割り込みが目的受信者アプリケーション・スレッドに配信不能である事を示すインジケータを生成することを含む。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みの配信不能状態を検出するとともにそれに基づいて第一プロセッサ・コアへの割り込みをトリガすることを含む。
【００１４】
本発明の少なくとも1つの実施形態では、方法は、複数のユーザレベル割り込み配信設定から選択されたユーザレベル割り込み配信設定に応じて、1つ以上の受信者にユーザレベル割り込みを示すユーザレベル割り込みメッセージを配信することを含む。1つ以上の受信者は、マルチコア・システムにおける複数のプロセッサ・コアの1つ以上のプロセッサ・コア上で実行している1つ以上のアプリケーション・スレッドに対応する。少なくとも1つの実施形態では、方法は、複数のユーザレベル割り込み配信設定からユーザレベル割り込み配信設定を選択することを含む。方法の少なくとも1つの実施形態では、複数のユーザレベル割り込み配信設定はユニキャスト配信、マルチキャスト配信、およびブロードキャスト配信を含む。少なくとも1つの実施形態では、方法は、1つ以上の受信者から少なくとも1つの応答を収集することと、1つ以上の受信者から収集された少なくとも1つの応答に従って割り込み操作を正常に完了することとを含む。少なくとも1つの実施形態では、方法は、1つ以上の受信者から少なくとも1つの応答を収集することと、通知モード設定と1つ以上の受信者から収集された少なくとも1つの応答とに従って配信不能割り込みをトリガすることとを含む。少なくとも1つの実施形態では、方法は、選択可能な配信失敗通知モード設定に従って、配信不能ユーザレベル割り込みに対して配信失敗通知を配信することを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込み配信設定は、複数のプロセッサ・コアのマルチ・プロセッサ・コアに対応するマルチ受信者にユーザレベル割り込みメッセージをマルチキャストすることを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込み配信設定は、ユーザレベル割り込みメッセージを複数のプロセッサ・コアの他のプロセッサ・コアへブロードキャストすることを含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込みは、複数のプロセッサ・コアの第一プロセッサ・コア上で実行しているアプリケーション・スレッドによって発行され、方法は、ユーザレベル割り込みの配信不能状態を検出するとともにそれに基づいて第一プロセッサ・コア上で実行しているアプリケーション・スレッドにユーザレベル割り込みをトリガすることをさらに含む。方法の少なくとも1つの実施形態では、ユーザレベル割り込みメッセージは、1つ以上の受信者アプリケーション・スレッドの割り込みドメインと、1つ以上の受信者アプリケーション・スレッドを示す受信者グループ・フィールドとを含む。
【００１５】
本発明の少なくとも1つの実施形態では、方法は、配信失敗通知モード設定に従って、ユーザレベル割り込みメッセージの1つ以上の目的受信者へ、ユーザレベル割り込みが配信不能である事のインジケータを生成することを含む。ユーザレベル割り込みは、マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コア上で実行しているアプリケーション・スレッドによって発行される事が可能である。方法の少なくとも1つの実施形態では、インジケータは、ユーザレベル割り込みが配信不能である目的ユーザレベル割り込み受信者の数に少なくとも部分的に基づいている。方法の少なくとも1つの実施形態では、ユーザレベル割り込みは、マルチコア・システムにおける複数のプロセッサ・コアの第一プロセッサ・コア上で実行しているアプリケーション・スレッドによって発行される。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みの配信不能状態を検出するとともにそれに基づいて第一プロセッサ・コアへのユーザレベル割り込みをトリガすることを含む。少なくとも1つの実施形態では、方法は、ユーザレベル割り込みに関連するユーザレベル割り込みメッセージに含まれる割り込みドメイン識別子および割り込み受信者識別子とユーザレベル割り込みが配信不能であることの少なくとも1つの表示とに少なくとも部分的に基づいて、ユーザレベル割り込みを配信不能として受信者識別子に関連するメールボックス内に記録することを含む。
【００１６】
本発明の少なくとも1つの実施形態では、装置はマルチコア・システムの複数のプロセッサ・コアの第一プロセッサ・コアに対応するローカル割り込みコントローラを含む。ローカル割り込みコントローラは、受信者グループ状態要素および配信失敗通知モード状態要素の少なくとも1つを含む。ローカル割り込みコントローラは、受信者グループ状態要素および配信失敗通知モード状態要素の少なくとも1つの内容に基づいてユーザレベル割り込みを処理する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは受信者グループ状態要素を備え、ローカル割り込みコントローラは、1つ以上の受信者に受信者グループ状態要素の内容に応じてユーザレベル割り込みメッセージを送信する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは配信失敗通知モード状態要素を備え、ローカル割り込みコントローラは、配信失敗通知モード状態要素の内容のインジケータを含むユーザレベル割り込みメッセージを生成する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは配信失敗通知モード状態要素を備え、そしてローカル割り込みコントローラは、配信失敗通知モード状態要素の内容に応じて、配信不能ユーザレベル割り込みに対して配信失敗通知を生成する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、1つ以上の受信者からの任意の応答を収集する動作が可能であり、そして1つ以上の受信者から収集された応答に応じて割り込み動作を正常に完了する動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、1つ以上の受信者から任意の応答を収集し、配信失敗通知モード状態要素の内容と1つ以上の受信者から収集した応答とに応じて配信不能割り込みをトリガする動作が可能である。装置の少なくとも1つの実施形態では、ローカル割り込みコントローラは、第一プロセッサ・コア上で実行しているアプリケーション・スレッドの割り込みドメインのインジケータをを格納する動作が可能な割り込みドメイン識別子状態要素と、第一プロセッサコア上で実行しているアプリケーション・スレッドのインジケータを格納する動作が可能な受信者識別子状態要素とをさらに含み、ローカル割り込みコントローラは、割り込みドメイン識別子状態と受信者識別子状態要素の内容にさらに基づいてユーザレベル割り込みを処理するよう動作が可能である。
【図面の簡単な説明】
【００１７】
添付の図面を参照することによって、当業者にとって、本発明はより良く理解されるであろうし、またその多くの目的、特徴および利点が明らかになるであろう。
【００１８】
【図１】図1は、模範的な割り込み配信メカニズムのブロック図である。
【図２】図2は図1の割り込み配信メカニズムを使用した割り込みのための模範的な情報および制御のフローを示す。
【図３】図3は本発明の少なくとも一つの実施形態と一致する、模範的な割り込み配信機構のブロック図を示す。
【図４】図4は本発明の少なくとも一つの実施形態と一致する、図3の模範的な割り込み配信・メカニズムのための模範的な情報および制御のフローを示す。
【００１９】
別の図面での同じ参照符号の使用は、類似または同一の項目を示す。
【発明を実施するための形態】
【００２０】
本発明の1つ以上の実施形態と一致する模範的なユーザレベル割り込み配信技法は、ユーザレベル割り込みを直接ユーザ・レベルのアプリケーション・スレッドに配信する事により、ユーザレベル割り込み（例えば、アプリケーション・スレッドによって生成された割り込み、またはシステムの周辺バスに結合されたデバイスによって生成された割り込み）を処理中に使用する制御転送の数を減らす。図3および4に関して、模範的なマルチプロセッサ・システム（例えば、システム300）には、同時に複数のアプリケーション・スレッドを実行するように設定される、少なくとも2つのプロセッサ・コア（すなわち中央処理ユニット、コア、またはハードウェア・アクセラレータ）が含まれている。各ローカルAPICには割り込みドメイン識別子レジスタ（すなわちIDIR）そして受信者識別子レジスタ（つまりRIR）が含まれている。IDIRは、関連するコアで現在実行しているアプリケーション・スレッドの割り込みドメイン識別子を格納する状態要素である。割り込みドメインは、ユーザレベル割り込みの交換を許可された、アプリケーション・スレッドとデバイスのセットである。各ドメインは、割り込みドメイン識別子と名付けられた一意の識別子を持っている。識別子は、オペレーティング・システム・インスタンス内で一意である。ドメインの各メンバは、受信者識別子が与えられ、これはドメイン内のみで一意である。RIRは、コア上で現在実行しているアプリケーション・スレッドの受信者識別子を格納する状態要素である。システム300においては、ユーザレベル割り込みの送信先アプリケーション・スレッドは、割り込みドメイン識別子と受信者識別子の組み合わせによって識別される。
【００２１】
図3はシステム300のIDIRとRIRがローカルAPICに含まれている事を示すが、これらの識別子は他の任意のコアごとのモジュールに格納出来る。ローカルAPIC306およびローカルAPIC308は、それぞれコア302および304とは別のものとして示されているが、ローカルAPIC306およびローカルAPIC308の機能は、対応するコア回路または他のコアごとのモジュールに組み込める事に注意が必要である。IDIRとRIRのレジスタの状態は、2つの識別子がアプリケーション・スレッドのコンテキストの一部であるため、コンテキスト・スイッチ時に保存および復元される。IDIRとRIRは次の技法によって保存および復元出来る：マシンの状態レジスタ (MSR) を介したマッピング、メモリマップ I/O (MMIO) を介してのアクセス、命令セットアーキテクチャのエクステンション、または他の適切な技法。
【００２２】
割り込みメッセージはコアコマンドまたはデバイス・コマンドへの応答として、APIC（例えば、ローカルAPIC306、ローカルAPIC308、またはI/O APIC310）によって生成される。少なくとも1つの実施形態では、システム300は、ユーザレベル割り込みをサポートするために既知の割り込みメッセージを修正する。例えば、x86の割り込みメッセージは、ユーザレベル割り込みに固有のコードに設定された配信モード (すなわちDM) フィールド、および/または割り込みの受信者アプリケーション・スレッドを識別するように設定された送信先フィールド、を含むよう構成出来る。システム300の少なくとも1つの実施形態で、割り込みドメイン識別子は、x86割り込みメッセージのペイロードに含む事ができる。システム300の少なくとも1つの実施形態では、既存の割り込みメッセージを拡張するより、個別のユーザレベル割り込みメッセージが使用される。例えば、ユーザレベル割り込みメッセージは次を含む事が出来る：割り込みドメイン識別子、受信者識別子、ユーザレベル割り込みタイプ、および/または他の適切な情報。
【００２３】
引き続き図3と4に関して、システム300のコア（例えば、コア302）上で実行しているアプリケーション・スレッドが、対応するローカルAPIC（例えば、ローカルAPIC 306）のユーザレベル割り込み制御レジスタ（すなわちUICR）に書き込む事により、ユーザレベル割り込みを生成する(402)。UICRは各ローカルAPICに含まれている、割込み制御レジスタ（すなわちICR）のユーザ・レベルのレプリカである。UICRはユーザモードでアクセス可能で、UICRへの書き込みは、オペレーティング・システムの支援またはコントロールの転送を必要としない。少なくとも1つの実施形態では、アプリケーション・スレッドは割り込みの受信者を識別するために、UICRの送信先フィールドを設定する。そしてユーザレベル割り込みを示す特定のコードを含めるよう、UICRのDMフィールドを設定する。ローカルAPIC306は、UICRの値に基づいてユーザレベル割り込みメッセージを生成する(404)。それはICRの内容に基づいたオペレーティング・システム・レベル割り込み（すなわち、オペレーティング・システムの割り込みハンドラを含む、既存の割り込みメカニズムによって発行された割り込み）の生成と同様である。IDIRに含まれている割り込みドメイン識別子は、ローカルAPIC 306によってユーザレベル割り込みメッセージに含まれる。IDIRの割り込みドメイン識別子は、目的の送信先アプリケーション・スレッドではなく、割り込みを開始するアプリケーション・スレッドのIDに対応する事に注意が必要である。それに応じて、ユーザレベル割り込みは、開始アプリケーション・スレッドと同じ割り込みドメイン内の、受信側アプリケーション・スレッドによって受信用に設定される。
【００２４】
システム300の少なくとも1つの実施形態では、ローカルAPIC 306はオペレーティング・システム・レベル割り込みのルーティングと同様に、全てのコアへユーザレベル割り込みメッセージをブロードキャストする。インターコネクト・ネットワーク（例えば、クロスバー316、または他の適当なバス構造）は、オペレーティング・システム・レベル割り込みメッセージをブロードキャストするのに使用するのと同じ技法で、ユーザレベル割り込みメッセージをブロードキャストする。従って、ネットワークはユーザレベル割り込みとオペレーティング・システム・レベル割り込みを区別する必要がない。システム300の少なくとも1つの実施形態では、ユーザレベル割り込みは、マルチキャストであってよく、または送信先コアへの直接送信が可能である。
【００２５】
少なくとも1つの実施形態では、割り込みメッセージの受信に応答して、ローカルAPIC（例えば、ローカルAPIC308）は、割り込みメッセージのDMフィールドの内容を所定のユーザレベル割り込みコードの内容と比較して、割り込みがユーザレベル割り込みであるかを判断する。割り込みがユーザレベル割り込みである場合、ローカルAPIC308は、割り込みメッセージの送信先フィールドの内容（すなわち、割り込みメッセージの受信者識別子、RIIM）をローカルAPIC308のRIRの内容と比較し、割り込みメッセージに含まれている割り込みドメイン識別子（すなわち、IDIM）をローカルAPIC308  のIDIRの内容と比較する(406)。値が一致する場合、割り込みは、ローカルAPIC308および対応するコア（例えば、コア304）に関連するアプリケーション・スレッドへ送信が決まっている。ローカルAPIC308は、割り込みメッセージに基づいて、割り込みベクタ番号を決定する。そして、個々のローカルAPICに対応するIRRのユーザレベルの複製である、UIRR内の対応するビットの状態を変更する。そして、ローカルAPIC308は、受信確認メッセージ（すなわちACK）を送信元のローカルAPIC（例えば、ローカルAPIC306）へ送信して 割り込みメッセージが受け付けられた事を示す(408)。システム300の少なくとも1つの実施形態では、値が一致しない場合、ローカルAPIC308は、ローカルAPIC306 にNACKメッセージを送信し、ローカルAPIC308によって割り込みが受け付けされていない事を示す(416)。
【００２６】
ローカルAPIC308がユーザレベル割り込みを受け付けた際、処理のためにコア304に割り込みをルーティングする (410)。一般的に、コアはユーザレベル割り込みが他の受け付けられた割り込みとコア上で現在実行しているスレッドとよりも高い優先度を持つ場合、ユーザレベル割り込みを処理する。例えば、ユーザレベル割り込みは、全てのオペレーティング・システム・レベル割り込みより優先順位が低い。コアがユーザレベル割り込みを処理する時、ローカルAPICごとに追加した ISR のユーザ・レベルのレプリカである、ユーザレベルのISR (UISR) 内の対応するビットを設定する。その後、コア304はユーザレベル割り込みのためのプログラムコードを呼び出し、ユーザレベルのIDT (UIDT)  を指す、ユーザ・レベルのIDTR (UIDTR) を読取る(412)。UIDTはIDTのユーザ・レベルのレプリカであり、ユーザレベル割り込みハンドラへのポインタが含まれている。システム300の少なくとも1つの実施形態では、UIDTエントリとIDTエントリは、同じデータ構造を持っており、単一のマージされたIDTにマージされる。マージされたIDTには、オペレーティング・システム・レベルのハンドラとユーザレベルのハンドラが含まれている。それに応じて、別のUIDTRは含まれていない。
【００２７】
コア304は、コード・セグメント・セレクタ、オフセット、および/またはユーザレベル割り込みのベクタ番号に対応する、ユーザレベルのハンドラの他の適切な情報にアクセスする。コア304はその情報を使用し、ユーザレベル割り込みハンドラに対応する、メモリへのエントリ・ポイントを計算する。最後に、プログラムの制御フローは、ユーザレベル割り込みハンドラのエントリポイント  のメモリ内の場所にジャンプする事で、ユーザレベル割り込みハンドラに転送される(412)。
【００２８】
ユーザレベル割り込みハンドラが終了すると、UISR内の対応するビットがソフトウェア、マイクロコード、またはハードウェアによってリセットされる。ローカルAPIC308はUISR内のこれらのビットのリセットを検出し、現在のアプリケーション・スレッドと残りの保留中の割り込みの優先順位を確認する。そしてローカルAPIC308は、残りの保留中の割り込みを、現在のアプリケーション・スレッドに比べたそれらの優先順位に従って配信するかを判断する。ローカルAPIC308が別の保留中の割り込みを配信する事を決定した場合、処理のために割り込みをコア304にルーティングする (410)。それ以外の場合、コアの実行は、ユーザレベル割り込みルーチンから戻る (414)。システム300の少なくとも1つの実施形態では、この手順は割り込み命令からの戻りによってトリガされる。それは、ユーザレベルの特定の命令、例えば、IRET命令のユーザレベルのバージョンであるUIRETであってよい。システム100内の割り込み処理に使用される、2つのコンテキストの変更（214および216）に比べて、システム300内の割り込み処理 (414) には1つのコンテキストの変更だけが使用される事に注意が必要である。
【００２９】
システム300の少なくとも1つの実施形態では、システム300はユーザレベル割り込みの送信先アプリケーション・スレッドが、ユーザレベル割り込みが配信される前に、プリエンプトされた状態を検出する。少なくとも1つの実施形態では、システム300は、ブロードキャストされたユーザレベル割り込みメッセージに対して、ACKメッセージが受信されたかを送信者（例えば、ローカルAPIC 306）に判断させる事によって、ユーザレベル割り込みが配信できない（すなわち、ユーザレベル割り込みが配信不能である）事を判断する。ユーザレベル割り込みが配信不能である場合、少なくとも一実施形態でローカルAPIC 306は、配信不能割り込みの繰延べ配信（すなわち、繰延べ）を処理する、繰延べ割込み配信ハンドラのために予約されている所定の割り込みベクタ番号で、コア302に割り込み（例えば、ユーザレベル割り込みまたはオペレーティング・システム・レベル割り込み）をトリガする。コア302は、ユーザレベル割り込みサブルーチンを呼び出し、UIDTによって示された対応するユーザ・レベルの割り込みハンドラにマップされたハンドラへジャンプする。ハンドラは、ユーザレベルのハンドラ、またはオペレーティング・システム・レベルのハンドラである事ができる。管理された環境では、オペレーティング・システムの上で実行しているシステムレベルのソフトウェアは、ユーザレベルのアプリケーションを直接管理する。システムレベルのソフトウェアは、オペレーティング・システムに代わって、繰延べされたユーザレベル割り込みを記憶し、送信先アプリケーションが再スケジュールされた時に割り込みを配信する。例えば、ユーザレベル割り込みが管理環境下で使用されている場合、繰延べユーザレベル割り込みに対処するためにユーザレベル割り込みハンドラの使用が可能である。そうではない場合、オペレーティング・システム・レベルのハンドラが使用される。システム300の少なくとも1つの実施形態では、ユーザレベル割り込みと、オペレーティング・システム・レベル割り込みの間の選択は、ソフトウェアのシステムによって行われる。しかしながら、システム300は、ユーザレベル割り込みの繰延べをハードウェアおよび/またはマイクロコードでサポートすることが出来る。
【００３０】
システム300の少なくとも1つの実施形態では、ユーザレベル割り込みを配信出来ない事をローカルAPIC306が検出した際、オペレーティング・システム・レベルまたはユーザレベル割り込みハンドラを呼び出すよりむしろ、ローカルAPIC306は、割り込みメールボックス・テクニックを呼び出す。このハードウェア機構は、マイクロコードとしてまたはハードウェア有限状態機械として直接実装出来る。オペレーティング・システムは、UIDTの事前指定したエントリに登録されたオペレーティング・システム・レベルのメールハンドラを使用して、全ての繰延べ割り込みを処理する。オペレーティング・システムはさらに、割り込みドメイン識別子と受信者識別子によって識別される受信者ごとの割り込みキューで構成された、割り込みメールボックスを保持する。呼び出された際、オペレーティング・システム・レベルのメールボックスのハンドラは繰延べ割込みを割り込みメールボックス内の対応するキューに挿入する。その後、受信者アプリケーション・スレッドがコア上で実行するようスケジュールされた時、オペレーティング・システムは、繰延べ割り込みが、対応するメールボックスにあるかを判断する。繰延べ割り込みがある場合、オペレーティング・システムは、受信者アプリケーション・スレッドがその時点で割り込みを受信したかのように、システム・スタックを構成する。そして受信者アプリケーション・スレッドは対応するユーザレベル割り込みハンドラにジャンプする。
【００３１】
少なくとも1つの実施形態では、割り込みメールボックス技法には、各コア用のメールボックスのルート・レジスタ（つまり、MRR）が含まれている。MRRは管理されており、メールボックス・テーブル（例えば、メールボックス・テーブル520またはメールボックス・テーブル522）の管理に従って、オペレーティング・システムによって、入り切りを切り換える必要があるかも知れない。MRRはユーザモードで実行されている通常の命令ではアクセス出来ない。システム300の少なくとも1つの実施形態では、メールボックステーブル520は、全てのスレッドに対するグローバル構造体であり、したがって、MRRは入り切りを切り替えする必要はない。少なくとも1つの実施形態では、メールボックステーブル520は、共有メモリ領域に格納される。メールボックステーブル520には、特定の受信者のメールボックスを見つける方法を示す、状態情報が含まれている。メールボックス・テーブルの少なくとも1つの実施形態では、エントリは、ドメインIDと受信者のIDをメールボックス・ディスクリプタに関連付ける。システム300の少なくとも1つの実施形態では、メールボックス・テーブルとメールボックスは、ユーザモード命令が直接アクセス出来ないアドレス空間に割り当てられている。すなわち特権命令、マイクロコードまたはハードウェアのみが直接メールボックス・テーブルとメールボックスにアクセス出来る。
【００３２】
システム300の少なくとも1つの実施形態では、メールボックステーブル520は、階層的なテーブルのセットとして構成される。状態はドメイン識別子を他の補助テーブル、受信者メールボックス・ポインタテーブル (RMPT)、を指すフィールドに関連付ける、1つのメインルート・テーブル（ドメイン・メールボックス・ポインタ・テーブル、またはDMPT）、として構成されている。受信者メールボックス・ポインタテーブルは、受信者のメールボックスを見つけるために使用される情報である、メールボックス・ディスクリプタに受信者識別子を関連付ける。模範的なメールボックス・ディスクリプタには、メールボックス・ポインタ、その割り当てサイズ、そして次の保留中のユーザレベル割り込みが記録されるべきメールボックス内の場所、の内1つ以上が含まれている。システム300の少なくとも1つの実施形態では、メールボックス・テーブルは、状態情報のフラットテーブルとして構成されている。エントリは、ドメインIDと受信者のIDによってインデックスされ、メールボックス・ディスクリプタを含んでいる。
【００３３】
配信不能割り込みがオペレーティング・システムにトラップされる代わりに、コアによって受信された時、ハードウェア（またはマイクロコード）は、対応するメールボックスのルート・レジスタにアクセスして、メールボックス・テーブルへのポインタを読み取る。そしてハードウェアは、ドメインIDと受信者の受信者のIDに基づいてメールボックス・テーブルからメールボックス・ディスクリプタにアクセスする。その後、メールボックス・ディスクリプタは、受信者のメールボックスに、配信不能ユーザレベル割り込みを記録するために使用される。
【００３４】
システム300の少なくとも1つの実施形態では、オペレーティング・システムが、メールボックス・テーブルとメールボックスのルート・レジスタを設定する。メールボックス・テーブルが階層的な場合、ドメイン・メールボックス・ポインタ・テーブルが割り当てられ、オペレーティング・システムの初期化時に初期化される。ドメイン・メールボックス・ポインタテーブルは、追加のドメインが必要な場合後でサイズを変更出来る。受信者メールボックス・ポインタテーブルは、新しいドメインが作成されるたびに割り当てられ、初期化される。受信者メールボックス・ポインタテーブルがフラットな場合、オペレーティング・システムの初期化時に割り当てられ、初期化される。受信者のメールボックス・ポインタ・テーブルは、追加のドメイン受信者ペアが必要な場合、後でサイズを変更出来る。システム300の少なくとも1つの実施形態では、アプリケーション・スレッドがドメインに参加して、オペレーティング・システムから受信者のIDを受信する時、オペレーティング・システムはまた、メールボックス・バッファおよびメールボックス・テーブルを作成する。オペレーティング・システムは、受信者アプリケーション・スレッドに対応する、メールボックス・バッファに対する受信者用メモリ空間内にメモリを割り当て、ハードウェアがその後メールボックス・バッファを見つけるられように、メールボックス・テーブルにエントリを追加する。
【００３５】
模範的なメールボックスは、ビットベクトルあるいはキューとして実装されるが、他の適切な構造も使う事ができる。ビットベクトルとして実装された場合、メールボックス・ビットベクトルの個々のビットは、特定の受信者アプリケーション・スレッドのために保留している、特定のタイプのユーザレベル割り込みがあるかを示す。メールボックスは、受信者が保留している各タイプのユーザレベル割り込み数をエンコードしない。ビットベクトルのエンコーディングはコンパクトで、メールボックス・テーブル内のエントリのメールボックス・ディスクリプタ・フィールドに直接記録出来、そしてローカルAPIC UIRRに似ていてよい。メールボックスがキューとして実装されている場合、メールボックスの個々のエントリは、配信不能のユーザレベル割り込みタイプの特定のインスタンスを記述する。キューの実装は、ビットベクトルの実装よりも多くの領域を使うかも知れないが、ユーザレベル割り込みが記録された順番と、各タイプがいくつ発生したかを記録する事が可能である。メールボックス・ディスクリプタには、メールボックス・バッファへのポインタとメールボックスバッファサイズが含まれる。少なくとも1つの実施形態では、メールボックス・ディスクリプタには、メールボックス・バッファ内の次の空きエントリへのポインタが含まれている。
【００３６】
システム300の少なくとも1つの実施形態では、ユーザレベル割り込みが配信出来ない場合、システム300は配信不能割り込みの送信先アプリケーション・スレッドに対してメールボックスのエントリをインデックスするためにドメインIDと受信者のIDを使用する。ビットベクトル形式のメールボックスが使用されている場合、割り込みベクタ番号に対応するビットが、ビットベクタ内に設定される。キュー形式のメールボックスが使用されている場合、割り込みはFIFO方式でキューイングされる。システム300の少なくとも1つの実施形態では、配信不能の割り込みは、例えば、繰延べ割り込みのキューを優先順位で形成するなどの他の適切な技法を使用してエンキュー出来る。
【００３７】
メールボックスのキュー形式を使用する場合、システムが（例えば、ハードウェアまたはマイクロコードを介して）満杯なメールボックスに配信不能ユーザレベル割り込みのエントリを追加しようとする時に、メールボックスがオーバーフローする可能性がある。オーバーフローを処理するための模範的なテクニックには、オペレーティング・システムにトラップし、オーバーフローが発生した事をオペレーティング・システムに通知する事が含まれる。応答して、オペレーティング・システムは、メールボックスにより多くの領域を割り当てる事が出来る。別の模範的な手法には、新たな配信不能割り込みを無視する事が含まれる。少なくとも1つの実施形態では、システム300はすでにメールボックスに記録された割り込みに上書きする事で、それを無視する。メールボックスのオーバーフローを処理するための他の適切な技法も使う事ができる。システム300の少なくとも1つの実施形態では、システム300によって使用されているメールボックスのオーバーフロー技法は、オペレーティング・システムによって設定できるかも知れない。例えば、可能なメールボックスのオーバーフロー技法の中から選択するために制御ビットを使用する。
【００３８】
オペレーティング・システムが実行のためプログラム・フローにアプリケーション・スレッドを切り替えた際、オペレーティング・システムは、その特定のアプリケーション・スレッドに関連するメールボックスを流し出す。メールボックスがビットベクトル形式を使用している場合、オペレーティング・システムはアプリケーション・スレッドを実行する前、且つ状態を復元した後に、ローカルAPICのUIRRと受信者アプリケーション・スレッドのメールボックス・ビットベクトルの間で、論理OR演算を実行する。その後、ローカルAPICハードウェアは、それらが全て同時に受信されたかの様に流し出された割り込みを個別に配信する。メールボックスがキューの形式を使用する場合、オペレーティング・システムは、アプリケーション・スレッドが実行を開始する直前、且つ状態を復元した後に、メールボックス・キューに記録された割り込みを直接配信する（例えば、対応するハンドラにジャンプする事によって）。対応するローカルAPIC UIRRとUISRは、処理されている保留中のユーザレベル割り込みと一致するように更新される。
【００３９】
図3に関して、システム300の少なくとも1つの実施形態では、デバイスによって生成されるユーザレベル割り込みをサポートするため、I/O APIC310 内のIRTテーブルが、テーブルエントリごとに割り込みドメイン識別子を含むように拡張される。割り込みドメイン識別子は、エントリのDMフィールドが所定のユーザレベル割り込み値に設定されている場合にのみ使用される。デバイス（例えば、デバイス312）が割り込みを生成する時、IRTは例えば、DMフィールド、送信先(DESTINATION)フィールド、または割り込みラインにマッピングされたテーブルエントリの他の適切なフィールドなどのIRTフィールドに基づいて割り込みメッセージを提供する。DMフィールドが所定のユーザレベル割り込み値に設定されている場合、割り込みドメイン識別子は割り込みメッセージに含まれる。ユーザレベル割り込みメッセージが生成されると、それはIPIメッセージと同様にルーティング、受け入れ、処理される。
【００４０】
システム300の少なくとも1つの実施形態では、I/O APICのIRTテーブルを拡張するより、追加のハードウェアが、デバイス312からコア302および304への割り込みメッセージのパスに含まれている。その追加のハードウェアは、ユーザレベル割り込みのように扱われるよう意図されたデバイス割り込み（追加のハードウェアまたはマイクロコードにより、ユーザレベル割り込みとして事前登録されている）を検出し、そしてデバイス割り込みとユーザレベル割り込み（例えば、I/Oメモリ管理ユニット）の間のマッピングを実行する。
【００４１】
デバイス312によって生成されたユーザレベル割り込みが目的受信者に配信できない際、繰延べユーザ・レベルのIPIのローカルAPICとは異なり、I/O APIC310 は、繰延べユーザレベル割り込みのハンドラを実行しない。むしろI/O APIC310はDMフィールドを所定値に設定し（所定値はユーザレベル割り込みメッセージを示すために使用される所定値とは異なる）、それはアービトレイテッド割り込みを示すが、割り込みはユーザレベルである。アービトレイテッド割り込み配信モードでは、I/O APIC310はクエリーメッセージをブロードキャストして、対応するコア上で実行されている現在のアプリケーション・スレッドの優先順位について、ローカルAPIC 306およびローカルAPIC308に聞く。I/O APIC310 は、ローカルAPIC306およびローカルAPIC308から応答メッセージを受信し、優先順位が最も低いアプリケーション・スレッドのコアを割り込みに対する送信先として選択する。I/O APIC310 は選択したコアに対応するローカルAPICを示すために送信先フィールドを設定し、送信元の受信者識別子は割り込みメッセージのペイロードに含まれる。その後、I/O APIC310は割り込みメッセージをブロードキャストする。選択したコアのローカルAPICは割り込みメッセージを受信し、そして割り込みメッセージのDMフィールドが他の所定値に設定されているか否かを決断する。ローカルAPICは割り込みドメイン識別子と受信者識別子をペイロードから取得する。ローカルAPICはコアへの所定のメールボックスハンドラでユーザレベル割り込みをトリガし、繰延べIPIが処理されるのと同じように、繰延べデバイス割り込みを処理するためにマイクロコードが呼び出される。
【００４２】
少なくとも1つの実施形態では、システム300は配信不能割り込みを常に処理する必要はない。それよりシステム300は、配信不能割り込みの通知を生成するまたは配信不能割り込みを無視するように構成出来る。各APIC（例えば、APIC306、ローカルAPIC308、およびI/O APIC310 ）には、1つ以上の本来の受信者にユーザレベル割り込みが配信出来ない場合に通知を生成する必要があるかを示す、配信失敗通知モードフィールドが含まれている。例えば、2ビットのフィールドを、表1で説明される3つの可能な状態をエンコードするために使用できる。
【００４３】
表1：模範的な配信失敗通知モードフィールドの可能な状態
【表１】
0005646628.tif 000002
【００４４】
状態「全て」は、ユーザレベル割り込みの全ての目的受信者が明確に識別出来る場合にのみ使用される。全ての目的受信者は例えば、後述するように受取人グループのフィールドが1ビットで実装されていて、ユーザレベル割り込みの全ての目的受信者を識別する他のメカニズムがない場合には、明確に識別できない。より複雑な実装が可能である事に注意。例えば、より大きな配信失敗通知モードフィールドがあれば、配信不能なユーザレベルの通知が必要な、必須受信者のセットを指定する事が可能な実装、が可能である。
【００４５】
図3を再び参照して、システム300の少なくとも1つの実施形態では、ローカルAPIC306、ローカルAPIC308、および/またはI/O APIC310 は、ユーザレベル割り込みの1つ以上の受信者を設定する。各APICには、ユーザレベル割り込みの目的受信者を示す受信者グループフィールドが含まれている。このフィールドは1ビットだけで実装出来て、それによって受信者が１つだけあるか（個別のフィールド、例えば送信先フィールドにエンコードされた）、または送信者のドメインに関連する全てのスレッドが受信者であるか（すなわち、ブロードキャスト）を判断する。より複雑な実装は、送信者のドメインに関連する全てのスレッドのサブセット（であってよい受信者グループのための様々なビットエンコーディングを持つより大きなフィールドを含むすなわち、マルチキャスト）。
【００４６】
システム300の少なくとも1つの実施形態では、受信者グループフィールドおよび/または配信失敗通知モードフィールドはUICRレジスタの一部として含まれている。しかしながら、受信者グループおよび/または配信失敗通知モードの他の実施形態では、情報は別々のレジスタに格納される。システム300の少なくとも1つの実施形態では、それらの1つ以上のフィールドはUICRレジスタの一部であり、フィールドはアプリケーション・スレッドがユーザレベル割り込みを送信するたびに設定される。頻繁なフィールドの変更は、ユーザレベル割り込みの送信のオーバーヘッドを実質的に増加させる事があり、パフォーマンスに影響を与える。システム300の少なくとも1つの実施形態では、それらの1つ以上のフィールドは、1つ以上の別々のレジスタに実装され、事前に設定される。システム300の少なくとも1つの実施形態では、それらの1つ以上のフィールドのデフォルト値は、1つ以上の別々のレジスタに格納される。したがって送信者はそれらがデフォルト値と異なる場合、UICRにおいて値を設定するのみで良い。UICRレジスタへの更新メカニズムは全て、それらが別々のレジスタに含まれている場合、それらのフィールドを更新するために使える（例えば、MMIOを介して、またはMSRを経由して）。
【００４７】
システム300の少なくとも1つの実施形態では、ユーザレベル割り込みメッセージには、配信失敗通知ステータスフィールドと受信者グループフィールドが含まれる。配信失敗通知ステータスフィールドは、ユーザレベル割り込みのどの目的受信者が、ユーザレベル割り込みを受信しなかったかを示す。フィールドは、システムが複数の目的受信者のために配信失敗を通知するように構成されている場合に使用される（例えば、上記の全ての配信失敗通知モード）。システム300の少なくとも1つの実施形態では、配信失敗通知ステータスフィールドはそれ自体でレジスタとして実装される、または既存のステータス・レジスタの一部である事が出来る。システム300の少なくとも1つの実施形態では、"全て"通知モードでマルチキャストおよびブロードキャストのメカニズムをサポートするために、ACK応答はACK応答を送信するAPICの受信者識別子で拡張される。
【００４８】
システム300の少なくとも1つの実施形態では、ローカルAPIC306、ローカルAPIC308、および/またはI/O APIC310 は、ユニキャスト、マルチキャスト、およびブロードキャスト技法でユーザレベル割り込みメッセージを配信するように設定されている。これらの技法は、表2に記載されたアクションと一貫して動作するように実装できる。ユーザレベル割り込みメッセージは、当技法分野で既知のメッセージの配信技法、またはネットワーク内の任意のポイントから直接または間接的に受信者に到達出来る他の適当な配信メディアを使用して配布出来る事に注意が必要である。
【００４９】
表2：ユーザレベル割り込みメカニズムのさまざまな構成に関連するアクション
【表２】
0005646628.tif 000003
【００５０】
システム300の少なくとも1つの実施形態では、システム300上で実行しているソフトウェアには、ユーザレベル割り込みをサポートする、少なくとも1つのシステム呼び出しが含まれている。表3は、ユーザレベル割り込みをサポートするための5つの模範的なシステム呼び出し、が含まれている。アプリケーション・スレッドのグループおよび/またはユーザレベル割り込みを交換するデバイス、を設定するために、システムはCreateDomain() コールを使用して割り込みドメインを作成する。これらのアプリケーション・スレッドおよび/またはデバイスはSubscribe() 呼び出しで割り込みドメインに参加し、そしてRegisterHandler() でユーザレベル割り込みハンドラを登録する。ユーザレベル割り込みがUICRへのストア動作によって送られる。ハンドラはUnregisterHandler() で登録解除される。アプリケーション・スレッドとデバイス（例えば、デバイスドライバを介して）はUnsubscribe() 呼び出しで割り込みドメインを離れる。
【００５１】
表3 ユーザレベル割り込みアプリケーション・プログラミング・インターフェース
【表３】
0005646628.tif 000004
【００５２】
回路と物理構造は一般的に仮定されるが、現代の半導体設計と製造で物理的な構造や回路は、その後の設計、テストや製造の段階での使用に適したコンピュータ読み取り可能な記述形式で具現化出来る事はよく認識されている。模範的な構成では別々の部品として提示された構造や機能は複合構造やコンポーネントとして実装できる。本発明は、全て本明細書に記載され、そして添付の特許請求の範囲に定義されたような、回路、回路のシステム、関連する方法、およびこのような回路、システムや方法の、コンピュータ可読媒体のエンコーディング、を含むように意図されている。本明細書で使用される、コンピュータ可読媒体には少なくともディスク、テープ、またはその他の磁気、光、半導体（例えば、フラッシュメモリカード、ROM）が含まれる。
【００５３】
ここに記載された発明の説明は例示であり、次の請求項に記載の本発明の範囲を制限するものではない。例えば、本発明は、2つのコアを含む実施の形態で説明してきたが、当業者は本明細書の教示が追加のコアまたは他の処理ユニットを利用出来る事を理解するであろう。本明細書に開示された実施形態の変形および変更は、ここに記載された説明に基づいて、以下の請求項に記載の本発明の範囲および精神から逸脱する事なく行う事が出来る。
【図１】
0005646628.tif 000005
【図２】
0005646628.tif 000006
【図３】
0005646628.tif 000007
【図４】
0005646628.tif 000008