(57)【要約】本発明は、同時に複数スレッドに対応するプロセッサ上での割込みを処理する仕組みを提供する。複数の論理プロセッサを提供するようにプロセッサのリソースが割り当てられる。共通割込みに応じて、論理プロセッサは共有レジスタへのアクセスを競う。共有レジスタにアクセスした最初の論理プロセッサが共通割込みを処理する。残りの論理プロセッサは割込みから戻る。
2005502119.tif 000002
【特許請求の範囲】
【請求項１】
割込みに応じて、第１の論理プロセッサを割込みハンドラに指示する第１の割込みユニットと、
前記割込みに応じて、第２の論理プロセッサを前記割込みハンドラに指示する第２の割込みユニットと、
前記第１と第２の論理プロセッサが割込みを処理するかどうかを示す値を保存する割込み要求レジスタと
を有するプロセッサ。
【請求項２】
請求項１に記載のプロセッサであって、
前記第１と第２のプロセッサが、前記割込みハンドラの制御により前記割込み要求レジスタの値を読み取るプロセッサ。
【請求項３】
請求項２に記載のプロセッサであって、
前記第１の論理プロセッサが前記割込み要求レジスタを最初に読み取ると、前記割込みを処理するプロセッサ。
【請求項４】
請求項３に記載のプロセッサであって、
前記第１の論理プロセッサが前記割込みを処理すると、前記第２の論理プロセッサが前記割込みハンドラから出るプロセッサ。
【請求項５】
請求項４に記載のプロセッサであって、
前記第１の論理プロセッサによって書き込まれた前記割込み要求レジスタの値を読み取ることによって、前記第１の論理プロセッサが前記割込みを処理することを前記第２の論理プロセッサが決定するプロセッサ。
【請求項６】
割込み要求レジスタと、それぞれ対応する複数の命令スレッドについて命令を処理する複数のスレッドのリソースとを含むプロセッサと、
割込みに応じて、前記割込み要求レジスタの値を読み取り、前記読み取った値に応じて前記割込みを処理する、又は命令の実行を再開する前記複数のスレッドのリソースのそれぞれによって、実行可能な命令を含む割込み要求ハンドラを保存するメモリと
を有するシステム。
【請求項７】
請求項６に記載のシステムであって、
前記複数のスレッドのリソースが、前記プロセッサの複数の実行コアを有するシステム。
【請求項８】
請求項６に記載のシステムであって、
前記複数のスレッドのリソースが、複数の命令スレッドに割り当てられた複数の実行コアのリソースを有するシステム。
【請求項９】
請求項６に記載のシステムであって、
前記割込みハンドラが、前記割込み要求レジスタの値を読み取った後に、前記割込み要求レジスタに第２の値を書き込む前記スレッドのリソースのそれぞれによって、更に実行可能な命令を含むシステム。
【請求項１０】
請求項９に記載のシステムであって、
前記割込み要求レジスタが第１の値を保存するために初期化され、
前記第１の値を読み取る最初のスレッドのリソースが、前記第１の値を第２の値に交換し、前記割込みを処理するシステム。
【請求項１１】
請求項１０に記載のシステムであって、
前記複数のスレッドのリソースの残りが、前記割込み要求レジスタの前記第２の値を読み取ることに応じて、前記割込みから戻ることを実行するシステム。
【請求項１２】
割込みハンドラが保存されているメモリと、
割込み要求レジスタと、複数の論理プロセッサに対応する実行リソースとを含むプロセッサであって、割込み信号に応じて、前記割込みハンドラを用いて、前記論理プロセッサのそれぞれが前記割込み要求レジスタへのアクセスを競うプロセッサと、
を有するシステム。
【請求項１３】
請求項１２に記載のシステムであって、
複数の論理プロセッサに対応する前記複数の実行リソースが、複数の実行コアを含むシステム。
【請求項１４】
請求項１３に記載のシステムであって、
それぞれの実行コアが、前記割込み信号に応じて、前記実行コアの制御を前記割込みハンドラに指示する割込みユニットを含むシステム。
【請求項１５】
請求項１３に記載のシステムであって、
前記割込み要求レジスタを読み取り、前記割込み要求レジスタにおいて読み取られた値に応じて、前記割込みハンドラを実行し続ける、又は前記割込みハンドラから戻る前記割込みハンドラの命令を前記それぞれの実行コアが処理するシステム。
【請求項１６】
請求項１５に記載のシステムであって、
前記割込み要求レジスタを読み取る最初の実行コアが、前記割込み信号に応じて、前記割込みハンドラの実行を完了し、他の実行コアが前記割込みハンドラから出るシステム。
【請求項１７】
請求項１２に記載のシステムであって、
前記割込み要求レジスタにアクセスする最初の論理プロセッサが、前記割込みハンドラの実行を完了するシステム。
【請求項１８】
請求項１７に記載のシステムであって、
前記最初の論理プロセッサの後に前記割込み要求レジスタにアクセスする論理プロセッサが、前記割込みハンドラから出るシステム。
【請求項１９】
請求項１２に記載のシステムであって、
複数の論理プロセッサに対応する前記実行リソースが、複数の実行コアを含み、その少なくとも１つがマルチスレッドに対応するシステム。
【請求項２０】
割込みに応じて、複数コンテキストのプロセッサで現在実行中のそれぞれのスレッドによって実現される方法であって、
指示されたメモリの位置の割込みハンドラにアクセスし、
割込み要求レジスタの値を読み取る前記割込みハンドラを実行し、
前記割込み要求レジスタから読み取った値が第１の値である場合に、前記割込みハンドラの実行を完了することを有する方法。
【請求項２１】
請求項２０に記載の方法であって、
前記割込みハンドラの実行が、前記割込み要求レジスタの値を読み取り、前記レジスタの制御を手放すことなく、前記レジスタに第２の値を書き込むことを有する方法。
【請求項２２】
請求項２０に記載の方法であって、
前記割込み要求レジスタから読み取った値が前記第２の値である場合に、前記割込みハンドラの実行を終了することを更に有する方法。
【発明の詳細な説明】
【０００１】
［技術分野］
本発明は、コンピュータシステムに関し、特に複数スレッドの同時実行に対応するコンピュータシステムにおける割込みを処理する仕組みに関する。
［背景技術］
現代の高性能のプロセッサは、各クロック周期で複数の命令を実行するように構成される。このため、それは命令の並列処理を容易にする広範囲にわたる実行リソースを有する。前記のリソースの効率的な使用は、並列して実行され得る命令の利用可能性によって制限され得る。並列の実行のための命令の利用可能性は、命令レベル並列性（ILP）と称される。命令の依存度が単一の実行スレッドにおけるILPの利用可能性を制限する。同時に１つのみの実行スレッドのみが処理され得る場合、同様に命令スループットも減少する。
【０００２】
命令スループットを増加させる１つのアプローチは、同時に２つ以上の命令のスレッドから命令を実行することができるプロセッサを設計することである。異なるスレッドからの命令は独立であるため、２つ以上の命令のスレッドの同時実行が命令スループットを増加させる。
【０００３】
単一のプロセッサのパッケージにおける複数スレッドの同時実行に対応するため、多様な設計が実現されてきた。例えば、マルチコアのプロセッサは、単一のプロセッサのチップ上に複数の実行コアを含む。ダイの領域を節約するために、又は実行スレッド間のいくつかの通信を可能にするために、多様なリソースが共有され得るが、各実行コアは異なる命令スレッドに割り当てられ得る。複数のプロセッサのチップもまた、他のシステムへの単一のインタフェースを提供するマルチチップ・モジュールに組み込まれ得る。
【０００４】
マルチスレッドのプロセッサは、単一の実行コアで複数命令のスレッドの実行を管理するリソースを有する。スレッド管理ユニットは、複数スレッドの状態データのオンチップのストレージを提供し、異なるスレッドからの命令が共有されたコアによって実行されると、前記のデータを更新する。
【０００５】
粗粒の（coarse-grained）マルチスレッドのプロセッサは、同時に１つのみのスレッドからの命令を実行するが、複数スレッドの状態データのオンチップのストレージは、異なるスレッド間で命令の実行を切り替えること（コンテキストスイッチ）に関係するオーバーヘッドを減少させる。現在の実行スレッドが長い待ち時間のイベントに直面すると、スレッドの切り替えが起動され得る（イベント切り替えのマルチスレッド（Switch-On-Event  Multi-Threading）、又はSOEMT）。
【０００６】
細粒の（fine-grained）マルチスレッドのプロセッサは、複数のスレッドからの命令が同時に実行することを可能にする。例えば、各クロック周期で複数のスレッドから命令が出される場合があり、又は異なるクロック周期で異なるスレッドから命令が出される場合がある。双方の場合において、複数のスレッドからの命令は、同時に実行コアにおいて作動中になり得る。
【０００７】
一般に、マルチスレッドのプロセッサとマルチコアのプロセッサの双方は、１つ以上のスレッドのコンテキストが同時にプロセッサで動作中になることを可能にする。マルチコアのプロセッサにおいて、いくつかの又は全てのコアはマルチスレッドである場合がある。ここにおいて、コンテキストとは、特定のプロセッサ構成についてのスレッドの構成上の状態を保存するレジスタを参照し、一般的な制御及びアプリケーションレジスタを含み得る。複数スレッドのコンテキストに対応する前記の及び他のプロセッサ（“複数コンテキストのプロセッサ”）の性能の利点は、一つには、複数の同等の論理プロセッサと思われる前記のプロセッサの能力に依存する。前記の同等であることは、論理プロセッサ間の作業負荷のバランスをとることを容易にし、オペレーティングシステムによるスレッドの管理を簡単にする。要するに、対称的なマルチプロセッサ（SMP）システムと思われる複数コンテキストのプロセッサを作ることが目的である。
【０００８】
複数スレッドの間の対称性を増加させるために、複数コンテキストのプロセッサの各論理プロセッサのために特定のリソースが複製される。例えば、割込みユニットは一般的に各論理プロセッサに関連付けられ、論理プロセッサとシステムレベルのリソース又は複数コンテキストのプロセッサの共有リソースとの間のインタフェースを提供する。割込みユニットは、割込みが処理されているかどうかを判断し、割込みが受け付けられると、割込み処理コードへのポインタを提供する。
【０００９】
各論理プロセッサに割込みユニットを提供する不利点は、割込み、特に論理プロセッサによって共有されたリソースに関連する割込みが、頻繁に全ての論理プロセッサによって見られることである。例えば、複数コンテキストのプロセッサは、単一スレッドの設計とのパッケージレベルでの互換性を維持するために、単一の割込みピンを提供し得る。ピンでアサートされる割込みは、全ての論理プロセッサの割込みユニットによって見られる。システムのファンの故障が前記の割込みを起動する場合がある。それらが同等であるため、各割込みユニットが割込みを登録し、その関連する論理プロセッサが割込みハンドラを実行する。共有されたオンチップのリソースによって生成された割込み、又はシステムあるいは専用の割込みバスで受信された割込みは、同様の方法で見られ、処理され得る。多くの場合、割込みは論理プロセッサの１つによって処理されるが、論理プロセッサの対称的な構成は、それぞれに割込みコードを実行させる。
【００１０】
本発明は、複数スレッドの同時実行に対応するプロセッサにおける割込み処理に関する前記の及び他の課題に対処する。
［発明の詳細な説明］
本発明は以下の図面を参照して理解され得る。図面において同様の要素は同様の数字によって示される。これらの図面は本発明の選択された実施例を説明するために提供されるものであり、本発明の範囲を制限することを意図するものではない。
【００１１】
以下の議論は、本発明の十分な理解を提供するために多数の特定の詳細を示す。しかし、その技術に通常熟練した人は、この開示の利益を得て、前記の特定の詳細なしで本発明が実行され得ることがわかるだろう。加えて、本発明の特長に重点を絞るために、既知の方法と手順と構成要素と回路は詳細に説明されない。
【００１２】
図１は、本発明が実現され得るコンピュータシステム１００の一実施例を表すブロック図である。コンピュータシステム１００は、メモリ１６０に保存された命令を実行する複数コンテキストのプロセッサ１１０を含む。チャネル１８０を通じてプロセッサ１１０とメモリ１６０との間でデータと命令がつなげられる。チャネル１８０は、チップセット又はシステムロジック（図示なし）の制御された１つ以上のバスを含み得る。
【００１３】
システム１００について、メモリ１６０は、割込みに応じて複数コンテキストのプロセッサ１１０のリソースによって実行される割込みハンドラ１７０を保存する。メモリ１６０は、キャッシュやメインメモリのような揮発性メモリ構造を表す場合があり、同様に、フラッシュメモリやハード及びソフトドライブやそれと同様のもののような不揮発性メモリ構造を表す場合がある。本発明の一実施例について、割込みハンドラ１７０の一部はファームウェアに実現される場合があり、他の部分はメインメモリに保存される場合がある。
【００１４】
複数コンテキストのプロセッサ１１０のロジックは、関連する割込みユニット１３０（１）−（ｎ）（一般的に割込みユニット１３０）と、共有リソース１４０とを含む論理プロセッサ１２０（１）−１２０（ｎ）（一般的に論理プロセッサ１２０）として表される。例えば、各論理プロセッサ１２０は特定のスレッドに割り当てられたリソースを表す場合があり、共有リソース１４０は全ての論理プロセッサ１２０のスレッドに利用可能なプロセッサ１１０のリソースを表す場合がある。
【００１５】
システム１００の開示された実施例について、共有リソース１４０は各論理プロセッサ１２０にアクセス可能な割込み要求レジスタ（ICR）１５０を含む。以下に更に詳細に説明する通り、ICR１５０は、論理プロセッサ１２０が割込みを処理する残りの論理プロセッサに信号を送る仕組みを提供する。共有リソース１４０はまた、メモリ１６０又は周辺装置（図示なし）と通信するために用いられるハイレベルなキャッシュ又はバスロジックを含み得る。
【００１６】
割込みユニット１３０は、割込みを処理する論理プロセッサに関連する機能ブロックを表す。何らかの論理プロセッサ１２０によって特定の割込みが処理される。例えば、プロセッサの共有メモリ１４０で生じた特定の割込みと、プロセッサパッケージの外部のリソースによって生成されたシステム又はプラットフォームレベルの割込みが、一般的に何らかの論理プロセッサ１２０によって処理され得る。それらは、プロセッサのパッケージの外部ピン１０４、バス、又はプロセッサ１１０の内部の回路を通じて通信され得る。以下の議論において、前記の割り込みは共通割込みと称され、特定の論理プロセッサを対象にする割込みと区別する。
【００１７】
割込みユニット１３０（１）−（ｎ）は、それぞれ論理プロセッサ１２０（１）−（ｎ）の共通割込みを登録する。例えば、各割込みユニット１３０は、何らかのマスキング条件と共に割込みに割り当てられた優先度を評価し、その割込みが即座の処理に値するかどうか、例えば割込みを起動したイベントが現在実行中のスレッドに優先すべきかどうかを決定する。割込みが優先度を有していると割込みユニット１３０が決定すると、関連する論理プロセッサ１２０を適切な割込み処理ルーチンに指示する。本発明は、１つの論理プロセッサ１２０が、全ての論理プロセッサ１２０によって登録された割込みの完全な割込み処理ルーチンを実行することを可能にする仕組みを提供する。論理プロセッサ１２０への割込みを任意に割り当てるように、論理プロセッサ１２０の非対称性を押しつけることなく、それを行う。
【００１８】
システム１００の一実施例について、割込みユニット１３０（１）−（ｎ）は、論理プロセッサ１２０（１）−（ｎ）の共通割込みを登録する。割込みが優先度を有している場合、割込みユニット１３０（１）−（ｎ）は、それぞれ論理プロセッサ１２０（１）−１２０（ｎ）を割込みハンドラ１７０に指示する。各論理プロセッサ１２０（１）−１２０（ｎ）は、割込みハンドラ１７０の第１のコードのセグメントを実行し、ICR１５０にアクセスするように指示する。ICR１５０にうまくアクセスした最初の論理プロセッサは割込みの処理を完了し、残りの論理プロセッサ１２０はそのスレッドの実行を再開する。
【００１９】
本発明の一実施例について、ICR１５０は第１の値に初期化され、共通割込みの後にその第１の値にリセットされる。割込みハンドラ１６０の第１のコードのセグメントは、現在ICR１５０にある値を読み取り、ICR１５０に第２の値を書き込むように各論理プロセッサ１２０に指示する。第２の値が第１の値と異なる場合、ICR１５０を読み取る最初の論理プロセッサ１２０は第１の値を見る。他の全ての論理プロセッサ１２０は第２の値を見る。第１の値を読み取る論理プロセッサは割込みハンドラを実行し続ける。残りの論理プロセッサは第２の値を読み取り、割込みから戻る信号を送り、例えば割込まれたスレッドの実行を再開する。
【００２０】
論理プロセッサ１２０は、必ずしも決まりきって共通割込みに応答する必要はない。割込みが生じた場合に実行するスレッドの形式、又はその優先度、又は現在作動中の命令の形式が、いかに早く論理プロセッサ１２０がICR１５０にアクセスするかを決定し得る。実施例に応じて、割込みハンドラ１７０は同時に１つのプロセッサによってのみ実行可能である場合があり、その場合、割込みハンドラ１７０を実行する最初の論理プロセッサは、最初にICR１５０にアクセスするものである。
【００２１】
複数コンテキストのプロセッサ１１０の異なる実施例は、異なる方法で論理プロセッサ１２０を実現する。複数コンテキストのプロセッサ１１０のマルチコアの実施例について、各論理プロセッサ１２０は実行コアに対応する。複数コンテキストのプロセッサ１１０のマルチコアの実施例は図２と共に説明される。複数コンテキストのプロセッサ１１０のマルチスレッドの実施例について、各論理プロセッサ１２０は、特定のスレッドに割り当てられた単一の実行コアのリソースに対応する。複数コンテキストのプロセッサ１１０のマルチスレッドの実施例は図３と共に説明される。複数コンテキストのプロセッサ１１０の他の実施例は、例えば複数のコアを含む場合があり、そのいくつか又は全てがマルチスレッドである。本発明は、論理プロセッサがプロセッサに実現される特定の方法に依存しない。
【００２２】
図２は、複数コンテキストのプロセッサ１１０のマルチコアの実施例２１０を表すブロック図である。マルチコアのプロセッサ２１０は、実行コア２２０（１）−２２０（ｎ）と、それぞれ対応する割込みユニット２３０（１）−（ｎ）を提供し、ｎスレッドまでの同時実行に対応する。共有リソース２４０もまた示されており、割込み要求レジスタ（ICR）２５０を含む。マルチコアのプロセッサ２１０の開示された実施例について、ICR２５０は、バス２５４を通じて実行コア２２０（１）−２２０（ｎ）によってアクセスされる。
【００２３】
共通割込みに応じて、各割込みユニット２３０は割込みが優先度を有しているかどうか決定し、そうである場合は、対応する実行コア２２０を割込みハンドラに指示する。割込みハンドラの第１の部分の制御により、実行コア２２０はICR２５０へのアクセスを競う。ICR２５０にアクセスした最初のものが割込みハンドラを完了する。残りの実行コアはその割込まれたスレッドを再開する。マルチコアのプロセッサ２１０の他の実施例について、１つ以上の実行コア２２０（１）−（ｎ）もまた、マルチスレッドである場合があり、その場合、各コアの各スレッドがICR２５０に最初にアクセスすることを試みる。
【００２４】
本発明の一実施例について、第１のコードのセグメントは、各論理プロセッサにICR２５０を読み取らせる。論理プロセッサ２２０がICR２５０の第１の値を読み取ると、割込みハンドラの残りを実行することを続ける。論理プロセッサ２２０がICR２５０の第２の値を読み取ると、割込み前に実行していたスレッドの命令を実行することを再開し得る。１つのみの論理プロセッサ２２０が第１の値を読み取ることを保証するため、最初のコードのセグメントは、“テスト・アンド・セット”操作のような、小さな読み取り／修正／書き込み操作を使用し得る。例えば、ICR２５０の第１の値がゼロである場合、割込みハンドラ１７０は、ICR２５０の値を読み取り、ICR２５０にわずかに１を書き込み得る。すなわち、ICR２５０を他の論理プロセッサに手放すことなく、読み取り／修正／書き込み操作が実行される。この実施例について、ICR２５０に到達する最初の論理プロセッサのみがゼロの値を読み取る。他の全ての論理プロセッサは、ICR２５０にアクセスした最初の論理プロセッサによってICR２５０に書き込まれた１を読み取る。
【００２５】
前述の実施例は、どの論理プロセッサが共通割込みを処理するかを決定する“フラグ競争（race-to-flag）”の仕組みの例である。フラグは、各論理プロセッサによってアクセスされ得るレジスタ又はロック変数又は同様の保存されたビット（群）に含まれ得る。前記のフラグを管理する読み取り／書き込みルールは、独立に動作する各論理プロセッサが共通割込みを処理する責任があるかどうかを決定することを可能にする。
【００２６】
図３は、複数コンテキストのプロセッサ１１０のマルチスレッドの実施例３１０を表すブロック図である。マルチスレッドのプロセッサ３１０は、ｎ個までの異なるスレッドからの命令の同時処理可能にする実行コア３０４を含む。実行コア３０４は、多様なステージがｎスレッドの１つに割り当てられる（ブロック３２４（１）−３２４（ｎ）、３２６（１）−３２６（ｎ）、３２８（１）−３２８（ｎ）、３３０（１）−３３０（ｎ））、又はｎスレッドの間で共有される（ブロック３４０（ａ）−（ｃ）とICR３５０）パイプラインとして表される。例えば、ブロック３４０（ａ）と、３４０（ｂ）と、３４０（ｃ）は、共有された命令キャッシュと、共有されたレジスタのリネームのユニットと、共有されたデータキャッシュを表す場合がある。ブロック３２４（１）−３２４（ｎ）と、ブロック３２６（１）−３２６（ｎ）と、ブロック３２８（１）−３２８（ｎ）と、ブロック３３０（１）−（ｎ）は、それぞれフェッチのユニットと、デコードのユニットと、実行ユニットと、割込みユニットの一部を表す場合があり、スレッド１−ｎに割り当てられる。図３を簡単にするために、所定の論理プロセッサに割り当てられたリソースは、単一で垂直の配置に示される。それは、スレッドに割り当てられたリソースの何らかの順序づけを示すことを意図したものではない。
【００２７】
プロセッサ３１０の開示された実施例について、論理プロセッサ３２０（１）は、割り当てられたリソース３２４（１）と３２６（１）と３２８（１）と３３０（１）によって表され、論理プロセッサ３２０（ｎ）は、割り当てられたリソース３２４（ｎ）と３２６（ｎ）と３２８（ｎ）と３３０（ｎ）によって表される。これは説明の目的で行われたものである。他の表示は、対応するスレッドによって現在使用中の共有リソース３４０（ａ）−３４０（ｃ）の一部を含む。
【００２８】
プロセッサ３１０の他の割り当てられたリソースと同様に、割込みユニット３３０は、物理的に別個のユニットである必要はない。例えば、それはプロセッサ３１０で実行する個々のスレッドに割り当てられた単一の割込みユニットの一部を表す場合がある。共通割込みに応じて、割込みユニット３３０（１）−３３０（ｎ）は割込みを登録し、それが処理されるべきかどうかを決定する。割込みが優先度を有している場合、割込みユニット３３０（１）−３３０（ｎ）は、割込み処理ルーチン、例えば割込みハンドラ１７０を実行するように論理プロセッサ３２０（１）−３２０（ｎ）に指示する。各論理プロセッサ３２０は、割込み処理ルーチンの第１のコードのセグメントを実行し、それをICR３５０にアクセスさせる。ICR３５０にアクセスした最初の論理プロセッサ３２０が、割込み処理ルーチンの残りを実行する。他の論理プロセッサ３２０は、その割込まれたスレッドに戻る。
【００２９】
マルチコアのプロセッサ２１０とマルチスレッドのプロセッサ３１０の構成は説明の目的にのみ提供される。本発明で用いるのに適した複数コンテキストのプロセッサの他の実施例は、異なる構成を使用し得る。例えば、マルチスレッドのプロセッサのスレッドは、フロントエンド及び実行リソースを共有し、レジスタファイルのみを複製する場合がある。プロセッサの設計の技術に熟練し、この開示の利益を有する人は、本発明に関連して用いられ得る複数コンテキストのプロセッサの他の構成がわかるだろう。
【００３０】
図４は、共通割込みに応じて複数コンテキストのプロセッサの各論理プロセッサで実行される方法４００の一実施例を表すフローチャートである。共通割込みが検出され４１０、割込みが処理されるべきかどうかを論理プロセッサが決定する４２０。例えば、論理プロセッサの割込みユニットがプライオリティとマスキングビットを検査し、検出された割込みが現在実行中の命令スレッドに優先するかどうかを決定し得る。割込みが優先度を有していない場合、方法４００は終了する４７０。割込みが優先度を有している場合４２０、現在実行中のスレッドにおいて適切な時点で特定の状態の情報が保存され４３０、論理プロセッサは、指示されたアドレスでの割込み処理ルーチンを行うように指示される４４０。一般的に、割込みが優先度を有していると決定する場合に、割込みユニットは割込みハンドラのアドレスを提供する。
【００３１】
制御を割込みハンドラに移す前に保存される状態の情報は、通常は、割込みハンドラの完了時に割込まれた命令のスレッドに論理プロセッサを戻し得る最小の量の状態の情報である。このことは、割込みハンドラを実行することに関連するオーバーヘッドを減少させる。
【００３２】
割込み処理ルーチンに入る時に、割込み要求レジスタ（ICR）にアクセスし４５０、第１の値とICRに保存された値を比較する４６０第１のコードのセグメントを論理プロセッサが実行する。読み取った値が第１の値と等しい場合、論理プロセッサは割込み処理ルーチンに移る。保存された値が第１の値と等しくない場合、論理プロセッサは割込みから戻る４８０。
【００３３】
１つのみのプロセッサがICRに同時にアクセスすることを保証するために、本発明の実施例は、ICRにアクセスするために用いられるICR又はコードのセグメントを保護し得る。第１の場合、割込みハンドラは小さな読み取り／修正／書き込み操作を使用し、ICRを変更し得る。この実施例について、論理プロセッサがICRの第１の値を読み取る場合、読み取りと書き込み操作の間にICRの制御を手放すことなく、ICRに第２の値を書き込む。割込みの間にICRが第１の値にリセットされる場合、ICRを読み取る最初の論理プロセッサがICRの第１の値を読み取り、それを第２の値に交換する。同じ割込みに応じて最初の論理プロセッサの後にICRを読み取る何らかの論理プロセッサは、第２の値を読み取り、割込み前の動作を再開する。
【００３４】
第２の場合、割込みハンドラの第１のコードのセグメントへのアクセスは、危険域ビット（critical-section  bit）によってゲート制御される。第１のコードのセグメントに到達した最初の論理プロセッサは、危険域ビット（critical-section  bit）の小さな読み取り／修正／書き込みを実行し、読み取りと書き込み操作の間にそのビットを手放すことなく、そのビットの値を読み取り、第２の値をそのビットに書き込む。第１のコードのセグメントがロックされていないことを読み取った値が示すと、論理プロセッサは、ICRの値を読み取るコードを実行する。危険域ビット（critical-section  bit）に書き込まれた第２の値は、その間に他の論理プロセッサが第１のコードのセグメントを実行しないことを保証する。第１のコードのセグメントがロックされていることを読み取った値が示すと、論理プロセッサは実行していたスレッドに戻り得る。１つのみの論理プロセッサが第１のコードのセグメントを同時に実行することができるため、ICRの読み取りと書き込みは小さな操作を必要としない。その技術に熟練し、この開示の利益を有する人は、共通割込みの１つのみの論理プロセッサの要求の所有権を保証する多様な他の仕組みがわかるだろう。
【００３５】
共通割込みに応じて、フラグ（ICR、ロック変数等）が全ての論理プロセッサによってアクセスされると、次の共通割込みのためにフラグは第１の値にリセットされるべきである。本発明の一実施例について、共通割込みに応じてフラグを読み取る最後の論理プロセッサがそれを第１の値にリセットする。例えば、フラグは、各論理プロセッサが複数コンテキストのプロセッサによって対応されるためのビットを含むように定義され得る。各論理プロセッサがフラグにアクセスすると、対応するフラグのビットを設定する。最後の論理プロセッサが対応するフラグのビットを設定し、フラグの全てのビットを第１の値にリセットする。
【００３６】
他の実施例について、割込みハンドラの最初のコードのセグメントは、論理プロセッサが数値（すなわちフラグ）を増加し、増加した数値を読み取るように命令し得る。増加した数値がプロセッサで現在動作中の論理プロセッサの数と等しい場合は、論理プロセッサが数値を第１の値にリセットする。増加した数値が現在動作中の論理プロセッサの数未満である場合は、論理プロセッサは割込みから戻る。
【００３７】
フラグをリセットする前記の仕組みは、全ての論理プロセッサが割込みハンドラ（又はその一部）を実行し、フラグにアクセスするために必要な時間より、共通割込みの間の時間が一般的に大きいことを仮定している。プロセッサの設計の技術に熟練し、この開示の利益を有する人は、共通割り込みの所有権が決定された場合にフラグをリセットする他の仕組みがわかるだろう。
【００３８】
図５は、本発明により割込みを処理する方法５００の一実施例を表すフローチャートである。方法５００は、共通割込みの二重の処理が有効又は無効になることを許可する。例えば、機械の検査又は温度のイベントのような共通割込みに全ての論理プロセッサを応じさせる必要がある場合がある。全ての論理プロセッサが応答する必要のある前記及び他の共通割込みについて、割込みの二重の処理は、ECH（有効共通処理）ビットへの参照を通じて可能になる場合がある。システムが最初にブートされた場合、又は特定のシステム環境をカスタマイズするために後に変更された場合に、選択された共通割込みについて前記のビットが設定され得る。
【００３９】
方法５００は、共通割込みの検出に応じて起動される５１０。論理プロセッサは二重の割込み処理が有効であるかどうかを決定するためにビットを検査する５２０。有効である場合は、他の論理プロセッサが行っていることに関係なく、論理プロセッサは割込みハンドラに移る５３０。二重の割込み処理が無効であることを前記ビットが示すと５２０、論理プロセッサは、割込みの所有権が要求さているかどうかを決定するためにICRを検査する５４０。割込みが要求されていない場合５５０、論理プロセッサは割込みハンドラに移る５３０。ICRにアクセスする制御を行う前述の仕組みは、方法５００に適用可能である。割り込みが要求されている場合は５５０、共通割込みに応じる最後のスレッドであるかどうかを論理プロセッサが決定する５６０。もしそうである場合は、論理プロセッサはICRを第１の値にリセットし５７０、割込みハンドラから戻り５８０、割込みが生じたときに処理されていたスレッドの実行を再開する。共通割込みに応じる最後のスレッドではない場合は、ICRをリセットせずに割込みハンドラから戻る５８０。論理プロセッサが共通割込みに応じ、その結果ICR（すなわちフラグ）をリセットする最後のスレッドであるかどうかを決定する前述の方法４００の仕組みは、方法５００に適用可能である。
【００４０】
複数コンテキストのプロセッサを含むコンピュータシステムにおける特定の割込みを処理する仕組みが開示された。複数コンテキストのプロセッサの論理プロセッサは、共通割込みに応じて、共有レジスタへのアクセスを競う。共有レジスタにアクセスした最初の論理プロセッサが割込みを処理する。残りの論理プロセッサは、割込みが要求されたことを検出し、割込みハンドラから戻る。本発明の一実施例について、割込みハンドラは、共通割込みに応じて、パッケージの全ての論理プロセッサによって実行される第１のコードのセクションを含む。共有レジスタは第１の値に初期化され、第１のコードのセクションが各論理プロセッサに共有レジスタを読み取るように指示する。共通割込みに続いて共有レジスタにアクセスした最初の論理プロセッサが、第１の値を読み取り、第２の値を書き込み、割込みハンドラの実行を続ける。残りの論理プロセッサは第２の値を読み取り、割込みハンドラから出るように指示する。
【００４１】
本発明の他の実施例について、共通割込みが二重に処理されるかどうかを示唆するために、有効／無効ビットが提供される。前記ビットが無効の状態である場合、割込み処理ルーチンの第１のセグメントを実行することにより、共有レジスタにアクセスした最初の論理プロセッサによって割込みが要求される。前記ビットが有効の状態である場合、第１のコードのセグメントはバイパスされ、全ての論理プロセッサが割込み処理ルーチンを実行し、完了する。
【００４２】
開示された実施例は、本発明の多様な特長を説明するために提供された。複数コンテキストのプロセッサを用いるコンピュータや他のプロセッサに基づくシステムにおいて、本発明は用途を見つけ得る。その技術に熟練し、この開示の利益を有する人は、開示された実施例の改良や変更がわかるだろう。やはり、それらは特許請求の範囲の意図及び範囲に含まれる。
【図面の簡単な説明】
【００４３】
【図１】本発明が実現され得るコンピュータシステムのブロック図である。
【図２】本発明によるマルチコアのプロセッサのブロック図である。
【図３】本発明によるマルチスレッドのプロセッサのブロック図である。
【図４】本発明により、割込みを処理する方法の一実施例を表すフローチャートである。
【図５】本発明により、割込みを処理する方法の他の実施例を表すフローチャートである。
【図１】
2005502119.tif 000003
【図２】
2005502119.tif 000004
【図４】
2005502119.tif 000005
【図５】
2005502119.tif 000006
【国際公開パンフレット】
2005502119.tif 000007
2005502119.tif 000008
2005502119.tif 000009
2005502119.tif 000010
2005502119.tif 000011
2005502119.tif 000012
2005502119.tif 000013
2005502119.tif 000014
2005502119.tif 000015
2005502119.tif 000016
2005502119.tif 000017
2005502119.tif 000018
2005502119.tif 000019
2005502119.tif 000020
2005502119.tif 000021
2005502119.tif 000022
2005502119.tif 000023
2005502119.tif 000024
2005502119.tif 000025
2005502119.tif 000026
2005502119.tif 000027
2005502119.tif 000028
2005502119.tif 000029
2005502119.tif 000030
2005502119.tif 000031
2005502119.tif 000032
【国際調査報告】
2005502119.tif 000033
2005502119.tif 000034