(57)【特許請求の範囲】
【請求項１】
ディジタル信号を処理する方法であって、
一連の命令に続いて割込みの処理を開始することであって、前記一連の命令は、一連のパイプラインスロットで処理されるべきものであり、前記割込みは、前記一連のパイプラインスロットに続くスロットにおいて処理されるべきものである、前記開始すること、
デコード段において、前記一連の命令における命令が分岐命令であるかどうかを検出すること、
前記一連の命令が分岐命令を含まない場合、割込みペナルティなしで前記一連の命令の処理を完了すること、
分岐命令が検出され、かつ前記割込みが、検出された分岐命令に関連する遅延スロットを占有する場合、前記検出された分岐命令、及び該分岐命令と、前記割込みに関連する割込みアドレス命令との間の任意の命令を無効化し、前記検出された分岐命令に先行する前記一連の命令における任意の命令の処理を完了すること
を備える方法。
【請求項２】
前記遅延スロットは分岐命令を適切に処理するために必要である、請求項１に記載の方法。
【請求項３】
割込みサブルーチンに続くそれぞれのパイプラインスロットにおいて無効化された命令を処理することを備える、請求項１に記載の方法。
【請求項４】
前記無効化された命令をリターンレジスタに書き込むこと、前記無効化された命令を待ち行列に入れて、割込みサブルーチンに続くパイプラインスロットで順番に処理されるようにすることを備える、請求項１に記載の方法。
【請求項５】
各無効化された命令の再処理に対して割込みペナルティを生じることを備える、請求項１に記載の方法。
【請求項６】
少なくとも、前記命令の一つが分岐命令であると判断されるまで、連続する命令の処理を継続することを備える、請求項１に記載の方法。
【請求項７】
前記割込みに先行し、かつ分岐命令ではなく、かつ分岐命令に関連する遅延スロットを占有しない各命令に対するパイプライン処理の全体を通じて中断することなく命令を処理することを備える、請求項１に記載の方法。
【請求項８】
ディジタル信号を処理するプロセッサであって、
分岐検出器を備え、
前記プロセッサは、一連の命令に続いて割込みの処理を開始し、各命令はそれぞれの連続パイプラインスロットで処理され、前記分岐検出器は、命令が分岐命令であるかどうかを検出し、分岐命令が検出され、かつ前記割込みが、検出された分岐命令に関連する遅延スロットを占有する場合、前記プロセッサは、前記分岐命令、及び該分岐命令と、前記割込みに関連する割込みアドレス命令との間の前記一連の命令における任意の命令を無効化し、前記検出された分岐命令に先行する前記一連の命令における任意の命令の処理を完了し、分岐命令が検出されない場合、前記プロセッサは、割込みペナルティなしで前記一連の命令の処理を完了する、プロセッサ。
【請求項９】
前記プロセッサは、割込みパイプラインスロットに続くそれぞれのパイプラインスロットにおいて無効化された命令を処理する、請求項８に記載のプロセッサ。
【請求項１０】
リターンレジスタを備え、無効化された命令が前記リターンレジスタに書き込まれ、待ち行列に入れられて、割込みサブルーチンに続くパイプラインスロットで前記プロセッサによって順番に処理されるようにする、請求項８に記載のプロセッサ。
【請求項１１】
割込みパイプラインスロットに続くパイプラインスロットにおいて各無効化された命令を再処理するために割込みペナルティが生じる、請求項８に記載のプロセッサ。
【請求項１２】
前記プロセッサは、少なくとも前記分岐検出器が分岐命令を検出するまで、連続する命令の処理を継続する、請求項８に記載のプロセッサ。
【請求項１３】
前記プロセッサが前記割込みに先行する命令は分岐命令ではなくかつ分岐命令に関連する遅延スロットを占有しないと判断する場合に、前記プロセッサは、パイプライン処理全体を通じて命令を中断することなく処理する、請求項８に記載のプロセッサ。
【請求項１４】
ディジタル信号を処理するシステムであって、
一連の命令に続いて割込みの処理を開始するプロセッサであって、各命令はそれぞれの連続パイプラインスロットで処理される、前記プロセッサと、
命令が分岐命令であるかどうかを検出する分岐検出器であって、分岐命令が検出され、かつ前記割込みが、検出された分岐命令に関連する遅延スロットを占有する場合、前記プロセッサは、前記分岐命令、及び該分岐命令と、前記割込みに関連する割込みアドレス命令との間の前記一連の命令における任意の命令を無効化し、前記検出された分岐命令に先行する前記一連の命令における任意の命令の処理を完了し、分岐命令が検出されない場合、前記プロセッサは、割込みペナルティなしで前記一連の命令の処理を完了する、前記分岐検出器と、
少なくとも前記一連の命令を実行してプログラムを実行する実行ユニットと
を備えるシステム。
【請求項１５】
前記プロセッサは、割込みサブルーチンに続くそれぞれのパイプラインスロットにおいて無効化された命令を処理する、請求項１４に記載のシステム。
【請求項１６】
前記プロセッサは、少なくとも前記分岐検出器が分岐命令を検出するまで、連続する命令の処理を継続する、請求項１４に記載のシステム。
【請求項１７】
前記プロセッサが前記割込みに先行する命令は分岐命令ではなくかつ分岐命令に関連する遅延スロットを占有しないと判断する場合に、前記プロセッサは、パイプライン処理全体を通じて命令を中断することなく処理する、請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピュータシステムにおいて割込みを処理する方法およびシステムに関する。具体的には、本発明の実施形態は、割込みの処理に関連する計算ペナルティを軽減することに関する。
【背景技術】
【０００２】
割込みは、プロセッサが命令を実行する順序を変更する事象である。割込みユニットは、一つ以上の優先度の高い命令を実行するために一連の命令を実行する現行の処理を中断してもよい。割込みサブルーチンが処理される時点で、プロセッサは割込みサブルーチンから戻って初期の一連の命令処理を再開してもよい。
【０００３】
一連の命令は分岐命令を含んでいてもよい。分岐命令は、たとえば、分岐条件に基づいて複数の可能な方法の一つで処理を進行させてもよい。たとえば、一連の命令１、２、３、４、５において、５は分岐命令であり、命令５は、処理を命令６、７、８、．．．に従って順番に進行させてもよく、あるいは命令１００、１０１、１０２、．．．にジャンプさせてもよい。分岐命令、たとえば、６または１００に続く命令は、分岐命令が実行されるまで不明であってもよい。
【０００４】
条件付き分岐の結果を予測するために分岐予測器が使用されてもよい。分岐において予測される命令は、プログラムメモリから前もって読み出されて容易にアクセスできるようプログラムキャッシュに一時的に記憶されてもよい。分岐予測は正しくても正しくなくてもよい。分岐予測器は、分岐結果を解析して、分岐予測が一つ以上の後続の計算サイクルにわたって正しいかそれとも正しくないかを判断してもよい。分岐を解析するために使用される計算サイクルの間に割込みが発生すると、分岐結果は不明であり再計算されなければならない。
【０００５】
分岐命令は、一つ以上の後続の遅延スロットに関連していてもよい。割込みが分岐命令に続いて受け入れられるとき、割込みは遅延スロットの一つで処理されてもよい。予測が正しいか否かを判断するための分岐条件は、遅延スロットが処理される計算サイクルと同じ計算サイクル間に計算されてもよい。したがって、割込みが分岐命令の遅延スロットの間に発生して遅延スロットを交換することによって処理されるとき、分岐条件計算の結果は不明であるかもしれない。したがって、分岐命令および関連する遅延スロット内で処理される命令は、適切に実行することができず、割込みが対処されて初期の命令が再開した後で再処理されなければならない。
【０００６】
典型的に、命令がデコードされるまで、たとえば、複数の計算サイクルにわたって命令を処理した後まで、命令が分岐命令であるかどうかは不明である。現行のシステムにおいて、まだデコードされていない命令は、デコーディングに先立って、万が一に備え、しかし、命令が分岐命令であるかどうかが分かる前に、無差別に破棄される。破棄されたデータを再処理するために使用されるさらなる計算サイクルは、割込みペナルティと呼ばれることがある。結果的に、割込みを処理するときは割込みペナルティが必ず生じる。
【図面の簡単な説明】
【０００７】
【図１Ａ】本発明の実施形態に従ったシステムの略図である。
【図１Ｂ】本発明の実施形態に従った図１Ａのシステムの一部の構成要素の拡大図である。
【図２】従来のシステムにおいて割込みに対処するプロセッサ動作を示す表である。
【図３】本発明の実施形態に従って割込みに対処するプロセッサ動作を示す表である。
【図４】本発明の実施形態に従って割込みに対処するプロセッサ動作を示す表である。
【図５】本発明の実施形態に従って割込みに対処するプロセッサ動作を示す表である。
【図６】本発明の実施形態に従った方法のフローチャートである。
【発明を実施するための形態】
【０００８】
本発明として扱われる対象は、本明細書の結びの部分で特に指摘され、明確に主張される。しかし、本発明は、本発明の目的、特徴、および長所とともに、構成および操作方法に関して、以下の詳細な説明を参照し、添付図面を用いて読むと最もよく理解されるであろう。本発明の具体的な実施形態は、図面を参照して説明される。
【０００９】
説明を簡単かつ明瞭にするために、図に示される要素は必ずしも一定の縮尺で描かれていないことは理解されよう。たとえば、要素の一部の寸法は、明確にするために他の要素に比べて誇張されている場合がある。さらに、適当と考えられる場合、対応する要素または類似の要素を示すために図の中で参照番号が繰り返し使用されている場合がある。
【００１０】
以下の説明において、本発明の様々な態様が記載される。説明を目的として、本発明の完全な理解を与えるために特定の構成および詳細が記述される。しかし、本発明は本明細書で提示される具体的詳細なしで実施されてもよいことも当業者にとって明らかであろう。さらに、本発明が不明瞭にならないように周知の特徴が省略または単純化されている場合がある。
【００１１】
特に明記しない限り、以下の議論から明らかなように、本明細書を通じて、「処理する」、「算定する」、「計算する」、「判断する」などの用語を利用する議論では、コンピュータシステムのレジスタおよび／またはメモリの内部の電子的量など、物理量として表わされるデータを操作しかつ／またはコンピュータシステムのメモリ、レジスタなどの他の情報記憶装置、伝送装置、または表示装置の内部で物理量として同様に表わされる他のデータに変換するコンピュータまたはコンピュータシステム、あるいは同様の電子コンピュータデバイスの作用および／または処理に言及していると理解される。
【００１２】
割込みとは、実行の変更が必要であることを示す事象を指していると言えよう。割込みは、通常であれば、処理において別の命令に割り当てられるはずであるプロセッサ・パイプライン・スロットを占有してもよい。割込みは、たとえば、複数の計算サイクルまたはパイプライン段にわたってそれぞれの連続パイプラインスロットで処理される一つ以上の命令を含む、割込みサブルーチンで処理されてもよい。割込みサブルーチンを処理した後、プロセッサは、割込み時に一部が処理された処理命令あるいは待ち行列に入れられた処理命令を再開してもよい。命令が破棄、無効化、または「中止」されるとき、割込みサブルーチンから戻った後、命令はフェッチされ再び処理されて割込みペナルティを生じてもよい。
【００１３】
分岐命令は、処理を複数の可能な方法の一つで進行させる命令を指していると言えよう。最もふさわしい後続の命令を予測し前もって読み出すために、分岐予測器が採用されてもよい。予測が正しいときは予測された命令が処理されてもよく、または分岐予測が正しくない場合は、プロセッサが機能を停止して予測されていない正しい命令がプログラムメモリから読み出されてもよい。分岐命令は、複数の（たとえば、三つの）遅延スロットが後に続くプロセッサ・パイプライン・スロットで処理されてもよく、複数の遅延スロットはプロセッサパイプラインで読み出されて利用できる後続の命令を処理するために使用される。
【００１４】
割込みサブルーチン内の第１の命令が分岐の遅延スロットの一つで実行されるとき、プロセッサは割込みを処理した後に実行するための正しい一連の命令を保持していないかもしれない。これは、分岐予測と、分岐予測が正しいか正しくないかと、によって複雑化する。遅延スロットは分岐を適切に処理するために必要な場合があるので、割込みが遅延スロットの一つの間に発生するとき、分岐遅延スロット命令および分岐予測は割込みサブルーチンに続くパイプラインスロットで再処理されてもよい。
【００１５】
対照的に、非分岐命令は、単一のパイプラインスロットで、たとえば、後続の遅延スロットなしで独立に処理され解析されてもよい。それゆえ、割込みが非分岐命令に続いて実行されるとき、割込みは典型的に命令処理に影響を及ぼさない。
【００１６】
しかし、どの命令が分岐命令でどの命令が分岐命令でないかが直ちにはっきりしないかもしれない。命令が分岐命令であるかどうかの判断には、処理について複数の計算サイクルを必要とするかもしれない。一例において、命令は、これが分岐命令であるかどうかを判断するためにデコードされてもよい。
【００１７】
従来のシステムにおいて、予防保証のために、命令は、分岐命令であるかどうか、たとえば、まだデコードされていない部分的に処理された命令であるかどうかがまだ判断されていないとき、無差別に破棄される。したがって、従来のシステムにおいては、命令が実際にも分岐命令を含むか否かに関係なく、割込みに先立つ部分的に処理された命令を再処理および再読出しする割込みペナルティがある。
【００１８】
本発明の実施形態によると、割込みが一連の命令に続いて実行されるとき、命令は停止も、割込みも、破棄もされず、分岐命令が実際に検出されるまで処理されてもよい。割込みに先立つ命令は、少なくとも、命令が分岐命令を、たとえば、デコード段に含むか否かが判断されるまで処理されてもよい。命令が従来のシステムにおけるように分岐命令を含む場合、分岐命令スロットおよび分岐遅延スロットがあれば、これらは破棄されて、破棄された命令に対する割込みペナルティを生じてもよい。しかし、従来のシステムとは対照的に、分岐命令を含まない命令はいずれも引き続き処理されてよい。したがって、非分岐命令は、これらが割込み事象に受け継がれるとき計算ペナルティを生じないかもしれない。
【００１９】
本発明の実施形態によるシステムの標準図および拡大図の略図である図１Ａおよび１Ｂを参照する。システムは、プロセッサ１、データ・メモリ・ユニット２、プログラム・メモリ・ユニット３、およびプログラムキャッシュ１０を有するデバイス１００を含んでいてもよい。
【００２０】
デバイス１００は、コンピュータデバイス、セルラデバイス、または携帯電話、パーソナル・ディジタル・アシスタント（ＰＤＡ）、ビデオ・ゲーム・コンソールなどの他の任意のディジタルデバイスを含んでいてもよい。デバイス１００は、コンピュータプログラムを実行するための一連の命令を実行できる任意のデバイスを含んでいてもよい。デバイス１００は、ユーザから入力を受信する（たとえば、ポインティングデバイス、クイックホイールまたはマウス、キー、タッチスクリーン、音声認識を用いるレコーダ／マイクロフォン、他の入力要素を介して）入力デバイス１０１を含んでいてもよい。デバイス１００は、プロセッサ１によって実行される一連の命令に従ってユーザーインタフェース上にプログラムを表示する出力デバイス１０２（たとえば、モニタまたはスクリーン）を含んでいてもよい。
【００２１】
プロセッサ１は、中央処理装置（ＣＰＵ）、ディジタル信号プロセッサ（ＤＳＰ）、マイクロプロセッサ、コントローラ、チップ、マイクロチップ、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、またはその他任意の集積回路（ＩＣ）、あるいはその他任意の適当な多目的プロセッサまたは特定プロセッサまたはコントローラを含んでいてもよい。
【００２２】
プロセッサ１は、データバス４を介してデータ・メモリ・ユニット２に、またプログラム・メモリ・バス５を介してプログラム・メモリ・ユニット３に結合されてもよい。
プログラム・メモリ・ユニット３は、典型的に、コンピュータプログラムを実行する一組の命令および規則を記憶し、その一方で、データ・メモリ・ユニット２は、典型的に、事前に生成された（すなわち、静的な）データおよび／またはスクラッチパッド（すなわち、動的な）データなど、プログラム命令を操作する間に生成されるデータを記憶するが、命令およびデータをメモリに記憶する他の配置が採用されてもよい。
【００２３】
命令がプログラム制御ユニット８によってより利用しやすいように、プログラムキャッシュ１０がプログラム・メモリ・ユニット３から読み出されるプログラム命令の一時記憶装置を提供してもよい。プログラム・メモリ・ユニット３は長期メモリユニットであってもよいが、プログラムキャッシュ１０は短期メモリユニットであってもよい。データ・メモリ・ユニット２、プログラム・メモリ・ユニット３、およびプログラムキャッシュ１０は、たとえば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリなどの適当なメモリユニットまたは記憶ユニットを含んでいてもよく、揮発性メモリまたは不揮発性メモリであってもよい。データ・メモリ・ユニット２、プログラム・メモリ・ユニット３、およびプログラムキャッシュ１０は、独立したメモリユニットまたは集積化されたメモリユニットとして実装されてもよい。データ・メモリ・ユニット２、プログラムキャッシュ１０、および／またはプログラム・メモリ・ユニット３は、集積化されてもよく（「オンチップ」）、独立していてもよい（すなわち、「オフチップ」）。階層記憶、すなわち、記憶の階層がある一実施形態において、プログラム・メモリ・ユニット３はオフチップであってもよく、プログラムキャッシュ１０および／またはデータ・メモリ・ユニット２はオンチップ、たとえば、Ｌ−１キャッシュ（たとえば、プロセッサ１との一体化の程度がＬ−２キャッシュよりも比較的高く、典型的に、プロセッサ１のクロックレートで動作する）またはＬ−２キャッシュ（たとえば、プロセッサ１との一体化の程度がＬ−１キャッシュよりも比較的低く、典型的に、プロセッサ１のクロックレートと異なるクロックレートで動作する）であってもよい。他のまたは追加のメモリアーキテクチャが採用されてもよい。
【００２４】
プロセッサ１は、プログラム制御ユニット８を含んでいてもよい。プログラム制御ユニット８は、命令をプログラム・メモリ・ユニット３から要求し、読み出して、ディスパッチしてもよく、一般に、プログラム・パイプライン・フローに関与してもよい。プログラム制御ユニット８は、データ・メモリ・バス４に結合されたデータ・メモリ・コントローラ（図示せず）と、それぞれデータ・メモリ・ユニット２およびプログラム・メモリ・ユニット３からデータを読み出すためにプログラム・メモリ・バス５に結合されたプログラム・メモリ・コントローラ（図示せず）とを含んでいてもよい。
【００２５】
プログラム制御ユニット８は、フェッチユニット１２、割込みユニット１３、および分岐機構１４を含んでいてもよい。フェッチユニット１２は、命令をディスパッチする前に、命令をローカル待ち行列にフェッチするために使用されてもよい。分岐機構１４は、分岐命令を検出してもよく、分岐命令の結果を予測してもよく、分岐命令の予測結果に基づいて、たとえば、分岐予測ミスがあるときに、フェッチユニット１２を介してプログラム・メモリ・ユニット３から後続命令を要求してもよい。割込みユニット１３は、割込み事象を読み出して対処してもよい。割込み信号は、関連優先順位を有していてもよい。場合によっては、たとえば、プロセッサ１が、高い優先事項、バンドル、または一連の命令、たとえば、命令ループを実行している間に、割込みユニット１３は、入力割込みをマスク、先送り、またはディセーブルしてもよい。イネーブルされると、割込みユニット１３は、たとえば、別のより高い優先順位の処理を開始するために現行の処理を中断してもよい。
【００２６】
プロセッサ１は、デコードユニット６、ロード／記憶ユニット７、一つ以上のレジスタファイル９、および実行ユニット１１を含んでいてもよい。命令がプログラム制御ユニット８によってディスパッチされた時点で、デコードユニット６は命令をデコードしてもよい。プロセッサ１は、タグを実装して、たとえば、要求通りの同じ計算サイクルでデコードされた命令に効果的にアクセスするためにレジスタファイル９を使用してもよい。実行ユニット１１は命令を実行してもよい。ロード／記憶ユニット７は、データ・メモリ・ユニット２から／に対してロード操作および記憶操作を実施してもよい。
【００２７】
プロセッサ１は、たとえば、各命令に対して以下の連続パイプライン段を実行してもよい。
●  ＩＦ１−プログラム・メモリ・アドレス（プログラム制御ユニット８によって操作される）
●  ＩＦ２−プログラム・メモリ・フェッチ（フェッチユニット１２によって操作される）
●  Ｄ１−命令ディスパッチ（プログラム制御ユニット８によって操作される）
●  Ｄ２−命令デコード（デコードユニット６によって操作される）
●  Ｄ３からＤ４−レジスタファイル読出し（レジスタファイル９を用いる）
●  Ｅ１からＥ４−実行、データ・メモリ・アクセスおよびレジスタ・ファイル・ライトバック（実行ユニット１１、ロード／記憶ユニット７、およびレジスタファイル９によって操作される）
しかし、本発明の実施形態は特定の順序に限定されるものではなく、他のあるいは追加のパイプライン段および操作デバイス構成部品が採用されてもよいことを当業者は理解されたい。
【００２８】
連続命令を備える処理において、将来処理される命令は事前に分かっており、プロセッサが命令をディスパッチする状態になる前に各命令がフェッチされるように、フェッチユニット１２は命令を前もって読み出してもよい。フェッチされた命令は、プログラムメモリ３よりもアクセスが著しく速いプログラム・キャッシュ・メモリ１０および／またはローカル待ち行列に一時的に記憶される。
【００２９】
しかし、条件付き分岐命令の後に続く命令は、命令がフェッチされる予定の時点でまだ分かっていない分岐条件に依存してもよい。たとえば、分岐命令は、分岐条件の結果に応じて複数の異なる命令または処理経路のいずれかに進んでよい。
【００３０】
分岐機構１４は、たとえば、命令を処理するデコード段（Ｄ２）において命令が分岐命令であるか否かを識別してもよい。
命令が分岐命令であるとき、命令が読み出される予定の時点で見込まれる複数の後続命令の正しい一つが分かっていない場合、分岐機構１４は分岐命令の後に続く可能性が最も高い命令を予測してもよい。予測された命令はプログラムメモリ３から読み出され、予測が正しければ、予測された命令は分岐遅延スロットを実行した後で処理される。
【００３１】
プロセッサ１は、分岐条件を判断してもよく、したがって、予測された命令が実際の分岐結果に一致していれば、たとえば、実行段（Ｅ１）で分岐条件を判断してもよい。この判断には複数のサイクル（たとえば、３サイクル）を要するかもしれない。
【００３２】
予測された分岐命令が実際の分岐結果に一致していれば、予測された命令は正しい命令であり採用されてもよい。
しかし、予測された分岐命令が実際の分岐結果に一致しなければ、実際の分岐命令はプログラム命令３からフェッチされてもよく、プログラムメモリ３から正しい命令をフェッチするために、たとえば、３サイクル（ＩＦ１〜Ｄ１）のさらなる計算ペナルティが生じるかもしれない。このペナルティは、プロセッサ１のパイプラインの種類によって異なるかもしれない。
【００３３】
割込みが分岐命令スロットに続いて遅延スロットまたは計算サイクルのいずれかの間に処理されるとき、プロセッサ１は割込みスロットの後に分岐を適切に処理するための正しい一連の命令を維持しないかもしれない。したがって、関連する遅延スロットにおいて処理される分岐命令および任意の命令は破棄されてもよい。第１の破棄または無効化された命令のプログラムアドレスは、リターンレジスタ（たとえば、レジスタファイル９内の）に書き込まれてもよく、割込みサブルーチンから戻った後にパイプラインスロットで再処理されてもよい。
【００３４】
しかし、命令が分岐命令でないとき、一連の後続命令は割込みの時点で既に分かっている。したがって、割込みが後に続く非分岐命令は、停止も、割込みも、破棄もされず、プロセッサ１のパイプラインによって最後まで処理されてもよい。
【００３５】
本発明の実施形態によると、割込みが既にプロセッサパイプライン内にある命令に続くとき、命令は、たとえば、Ｄ２段において、少なくとも分岐命令であるか否かが判断されるまで処理される。後続の遅延スロットにおいて割込みを有する分岐命令は分岐結果を適切に解析しないかもしれないので、プロセッサ１が一つ以上の命令が分岐命令でありかつ割込みが一つ以上の関連遅延スロットを占有すると判断するとき、分岐命令、分岐遅延スロット、およびこれらに関連する予測された命令が破棄または無効化される。割込みが対処された後に破棄されたデータを再処理するために、割込みペナルティが生じる。しかし、命令が単一パイプラインスロットにおいてのみ処理される非分岐命令であるとプロセッサ１が判断するとき、非分岐命令は最後まで中断することなく進行することが許可される。この場合、データが破棄されることはなく割込みペナルティが生じることはない。
【００３６】
本発明の実施形態は、従来のシステムより優れた長所を提供し、命令が分岐命令であるか否か分からない命令に割込みが続くとき（たとえば、命令がＤ２パイプライン段においてデコードされる前に）、命令は簡単に破棄され、命令の再処理に対して割込みペナルティが必ず生じる。
【００３７】
割込みを対処するプロセッサ動作を示す表である図２から５を参照する。図２から５において、表内の各行は独立したパイプラインスロット内の単一の命令を表わす。（列１に記載された）命令は、処理される順に、すなわち、（パイプライン段ＩＦ１において）命令が最初にプロセッサ・パイプライン・スロットに入る順に連続行または連続スロットで順序付けられる。各連続列は、各連続計算サイクルにおいて発生する命令で実行されるパイプライン段またはパイプライン動作を示す。すなわち、各行の命令が各連続列におけるプロセッサ・パイプライン・スロットに最初に入る時点で、プロセッサは、命令、たとえば、プログラム・メモリ・アドレス（ＩＦ１）、フェッチング（ＩＦ２）、ディスパッチング（Ｄ１）、デコーディング（Ｄ２）、レジスタファイル読出し（Ｄ３からＤ４）、実行、データ・メモリ・アクセス、およびレジスタ・ファイル・ライトバック（Ｅ１からＥ４）で連続した動作段を実行してもよい。しかし、割込みがパイプラインスロットで処理されるとき、命令が最後（たとえば、パイプライン段Ｅ４）まで処理させる前に、プロセッサは先行するパイプラインスロットの命令を無効化または「中止」してもよい。他のあるいは追加の動作が採用されてもよい。
【００３８】
図２は、従来のシステムにおいて割込みを対処するプロセッサ動作を示す。
表内の左上のセル（行１、列１）は、「Ａ」と標記された命令を示す。命令Ａは、プログラムの一連の命令、たとえば、Ａ、Ａ＋１、Ａ＋２、Ａ＋３、．．．（行１および３〜５、列１）における命令であってもよい。命令Ａは、第１のアドレスで記憶され、たとえば、アドレス１００（行１、列２）として任意に表わされてもよく、後続の命令Ａ＋１、Ａ＋２、Ａ＋３、．．．は異なる連続アドレスで記憶され、たとえば、１０１、１０２、１０３、．．．（行３〜５、列２）として任意に表わされてもよい。
【００３９】
プログラム処理中に、命令Ａは、プロセッサパイプライン、たとえば、パイプライン段ＩＦ１（行１、列３）に入ってもよい。パイプライン段ＩＦ１において、プロセッサ（たとえば、図１Ａおよび１Ｂのプロセッサ１）は、プログラム・メモリ・アドレスにアクセスして、プログラムメモリ（たとえば、図１Ａおよび１Ｂのプログラムメモリ３）におけるアドレス１００に記憶された命令Ａを検索してもよい。命令Ａは、次の連続段ＩＦ２（行１、列４）、Ｄ１（行１、列５）、さらにＤ２（行１、列６）に進んでもよい。
【００４０】
パイプライン段Ｄ２（行１、列６）において、プロセッサは命令Ａが分岐命令であるかどうかを判断するために命令Ａをデコードしてもよい。この事例において、命令Ａは分岐命令ではなく、命令は完全に処理されるまでプロセッサパイプラインの中を進行してもよい。
【００４１】
次の計算サイクル（列７の動作）において、割込みアドレス２００（行６、列１）における割込み事象、すなわち、「割込み要求」（ＩＲＱ）（行２、列１）は、プロセッサによって検出されてもよい。割込みは、プロセッサによって実行されている現行のタスクよりも高い優先順位を有していてもよく、したがって、割込みはマスクされない。割込みの対処は、たとえば、パイプライン段ＩＦ１（行６、列７）における割込みアドレスのフェッチングを必要とする。プロセッサは、割込みを検索するためにパイプライン段ＩＦ１におけるプログラム・メモリ・アドレス２００（行６、列２）にアクセスしてもよい。
【００４２】
割込みが最初に処理されるとき（たとえば、段ＩＦ１において：行６、列７）、命令Ａ＋１、Ａ＋２、およびＡ＋３は、それぞれ、ディスパッチされ（Ｄ１：行３、列６）、フェッチされ（ＩＦ２：行４、列６）、アドレス指定される（ＩＦ１：行５、列６）が、命令Ａ＋１、Ａ＋２、およびＡ＋３のいずれもデコードされていない（Ｄ２）。プロセッサは命令がデコード段（Ｄ２）において分岐命令であるかどうかを判断するので、割込みが最初に処理される時点では命令Ａ＋１、Ａ＋２、およびＡ＋３が分岐命令であるか否かが分からない。命令Ａ＋１、Ａ＋２、およびＡ＋３が分岐命令であれば、割込みは分岐命令を適切に処理するために必要な遅延スロットを占有することになる。従来の方法によると、命令Ａ＋１、Ａ＋２、およびＡ＋３は、分岐命令であるかどうかが判断される前に割り込まれ、簡単に無効化され、破棄され、あるいは「中止」される（行３〜５、列７）。
【００４３】
リターンレジスタ（たとえば、図１Ｂのレジスタファイル９における）は、一連の無効化された命令の最初の命令のアドレス、たとえば、Ａ＋１をロードしてもよい。第１の無効化された命令は、命令Ａ＋１として再ロード・レジスタ・アドレス１０１に書き込まれてもよい。割込みサブルーチンから戻った後、または割込みサブルーチンを完了した後、プロセッサは、プロセッサパイプラインにおける次の有効なスロットで無効化された命令の処理および実行を再開してもよい。
【００４４】
処理は、無効化された命令で既に実行された動作を繰り返す計算ペナルティを受ける。たとえば、割込み（列４、５、および６における）に先立って命令Ａ＋１、Ａ＋２、Ａ＋３で既に実行された動作は、割込みサブルーチンから戻った後に命令で再び実行される。この場合の割込みペナルティは三計算サイクルである。
【００４５】
図３〜５は、本発明の実施形態に従って割込みに対処するプロセッサ動作を示す。図３〜５の動作は、たとえば、図１Ａおよび１Ｂのデバイス１００によって実行されてもよい。
【００４６】
図３〜５は、割込みが最初に処理されるとき（行６、列７）命令Ａ＋１、Ａ＋２、およびＡ＋３がまだデコードされておらず、したがって、命令が分岐命令であるかどうかが分かっていないような、図２に関連して記載される同じ割込みを示す。しかし、図２とは対照的に、図３〜５の本発明の実施形態によると、割込みが最初に処理されるとき、命令Ａ＋１、Ａ＋２、およびＡ＋３は無効化されないが、少なくともこれらの一つが分岐命令であると判断されるまで処理される。命令Ａ＋１、Ａ＋２、およびＡ＋３の一つが分岐命令であると判断され、割込みが分岐を解析するために必要な遅延スロットの少なくとも一つを占有するとき、分岐命令自体、および分岐命令スロットと割込みスロットの間のパイプラインスロットにおける任意の命令は無効化または「中止」されてもよい。図５におけるように分岐命令が検出されなければ、命令は無効化なしで処理され、割込みペナルティはない。
【００４７】
図３において、プロセッサ（たとえば、図１Ａおよび１Ｂのプロセッサ１）は、命令Ａ＋１をデコードし（行３、列７）、この命令が分岐命令でないと判断する。したがって、命令Ａ＋１は無効化されずに最後（たとえば、段Ｅ４において：行３、列１１−図示せず）まで中断することなく処理される。プロセッサは、命令Ａ＋２をデコードし（行４、列８）、命令が分岐命令であると判断する。分岐命令Ａ＋２は、典型的に、適切に処理される複数の（たとえば、三つの）後続の遅延スロットを必要とする。割込みは、分岐命令Ａ＋２（たとえば、三つの遅延スロットの２番目）を適切に処理するために必要な遅延スロットの少なくとも一つを占有する。したがって、分岐命令Ａ＋２は適切に処理されることができず、たとえば、分岐を解析するには不十分な単一遅延スロットを占有している分岐命令Ａ＋２およびＡ＋３は、無効化または「中止」される（それぞれ、行４および５、列８）。
【００４８】
リターンレジスタ（たとえば、図１Ｂのレジスタファイル９における）は、一連の無効化された命令の第１の命令、たとえば、命令Ａ＋２のアドレスをロードしてもよい。第１の無効化された命令は、命令Ａ＋１として再ロード・レジスタ・アドレス１０１に書き込まれてもよい。割込みサブルーチンから戻った後、または割込みサブルーチンを完了した後、プロセッサは、プロセッサパイプラインにおける次の有効なスロットで無効化された命令の処理および実行を再開してもよい。
【００４９】
この場合、割込みルーチンから戻った後に命令に対して再び割り込む（列５および６において）前に無効化された命令Ａ＋２およびＡ＋３で実行された動作の繰り返しに対して割込みペナルティが生じる。本発明の実施形態を用いてこの場合に生じる割込みペナルティは、二計算サイクルであり、図２に関連して記載される従来の機構を用いる同じ割込みに対して生じる三計算サイクルよりも減少している。
【００５０】
図４は、命令Ａ＋２ではなく、命令Ａ＋３が分岐命令であることを除いて、図３に関連して記載される割込みと同じ割込みを示す。
プロセッサ（たとえば、図１Ａおよび１Ｂのプロセッサ１）は命令Ａ＋１およびＡ＋２（それぞれ、行３、列７および行４、列８）をデコードしてもよく、命令Ａ＋１およびＡ＋２が分岐命令でないと判断する。したがって、命令Ａ＋１およびＡ＋２は、命令が完全に処理されるまで中断することなく進行が許可される（たとえば、段Ｅ４において：行３、列１１、および行４、列１２、いずれも図示せず）。プロセッサは、この後、命令Ａ＋３をデコードし（行５、列９）、命令が分岐命令であると判断する。割込みは、たとえば、分岐命令Ａ＋３を適切に処理するために必要な命令Ａ＋３の後に続く遅延スロットを占有するので、命令Ａ＋３は無効化または「中止」される（行５、列９）。
【００５１】
リターンレジスタ（たとえば、図１Ｂのレジスタファイル９における）は、一連の無効化された命令における第１の命令、たとえば、命令Ａ＋３のアドレスをロードしてもよい。第１の無効化された命令は、命令Ａ＋１として再ロード・レジスタ・アドレス１０１に書き込まれてもよい。割込みサブルーチンから戻った後、または割込みサブルーチンを完了した後、プロセッサは、プロセッサパイプラインにおける次の有効なスロットで無効化された命令の処理および実行を再開してもよい。
【００５２】
この場合、命令に対して再び割り込む（行６において）前に無効化された命令Ａ＋３で既に実行された動作の繰り返しに対して割込みペナルティが生じる。本発明の実施形態を用いたこの場合に生じる割込みペナルティは、一計算サイクルであり、たとえば、図３に関連して記載されるように、命令Ａ＋３ではなく命令Ａ＋２が分岐命令であるときの同じ割込みに対して生じた二計算サイクルよりも減少している。本発明の実施形態によると、命令が分岐命令であると判断されるとき、分岐命令自体、および分岐命令スロットと割込みスロットの間のパイプラインスロットにおける任意の命令は無効化または「中止」されてもよい。図３において、分岐命令スロット（行４）と割込みスロット（行６）の間には一つの命令Ａ＋３（行５）がある。したがって、したがって、分岐命令自体Ａ＋２および介在命令Ａ＋３は、いずれも無効化されて二命令または二計算サイクルの総ペナルティをもたらす。図４において、分岐命令Ａ＋３（行５）と割込み（行６）の間には介在スロットがなく、したがって、分岐命令Ａ＋３のみが無効化されて一命令または一計算サイクルの総ペナルティをもたらす。
【００５３】
図５は、命令Ａ、Ａ＋１、Ａ＋２、およびＡ＋３のどれも分岐命令でないことを除いて、図３および４に関連して記載される割込みと同じ割込みを示す。
プロセッサ（たとえば、図１Ａおよび１Ｂのプロセッサ１）は、命令Ａ＋１、Ａ＋２、およびＡ＋３（それぞれ、行３、列７。行４、列８。行５、列９。）をデコードし、これら命令のいずれも分岐命令でないと判断してもよい。したがって、命令Ａ＋１、Ａ＋２、およびＡ＋３が完全に処理されるまで（たとえば、段Ｅ４において、それぞれ、行３、列１１。行４、列１２。行５、列１３。図示せず）、これらの命令は中断することなく進行が許可される。割込みに先立つ命令Ａ＋１、Ａ＋２、およびＡ＋３のいずれも分岐命令ではないので、命令は無効化も「中止」もされない。
【００５４】
リターンレジスタ（たとえば、図１Ｂのレジスタファイル９における）は、一連の命令における次の命令、たとえば、命令Ａ＋４をロードしてもよく、命令Ａ＋４は命令Ａ＋１として再ロード・レジスタ・アドレス１０１に書き込まれる可能性がある。割込みサブルーチンから戻った後、または割込みサブルーチンを完了した後、プロセッサは、プロセッサパイプラインにおける次の有効なスロットで無効化された命令の処理および実行を再開してもよい。
【００５５】
この場合、命令は無効化または「中止」されないので、割込みペナルティは生じない。この場合の割込みペナルティはゼロ計算サイクルであり、たとえば、図４に関連して記載されるように、命令Ａ＋３が分岐命令であるとき同じ割込みに対して生じた一計算サイクルよりも減少している。
【００５６】
割込みが処理されるとき、従来の機構は、命令が実際に分岐命令であるか否かに関わらず、たとえば、まだデコードされていない分岐命令であるかどうか分からない命令を常に無効化する。図２に関連して記載される例では、三つの上記のような命令、Ａ＋１、Ａ＋２、およびＡ＋３があり、三計算サイクルの割込みペナルティをもたらす。対照的に、本発明の実施形態に従って記載される機構は、分岐命令であると実際に判断される命令、および分岐命令スロットと割込みスロットの間のパイプラインスロットにおける任意の命令を無効化する。図３において、関連遅延スロットにおける一つの分岐命令Ａ＋２および一つの命令Ａ＋３は、中断されて、二計算サイクルの割込みペナルティをもたらす。図４において、一つの分岐命令Ａ＋３は中断されて、一計算サイクルの割込みペナルティが生じる。図５において、分岐命令は中断されることがなく、したがって、割込みペナルティが生じない。したがって、本発明の実施形態では、コンピュータシステムにおいて割込み処理に関連する割込みペナルティが減少する。
【００５７】
本発明の実施形態による方法のフローチャートである図６を参照する。
操作６００において、プロセッサ（たとえば、図１Ａおよび１Ｂのプロセッサ１）は、たとえば、図３〜５に関連して記載されるように、さらに、それぞれのプロセッサ・パイプライン・スロットで一連の命令処理を開始してもよい。
【００５８】
操作６１０において、プロセッサは、操作６００における命令を処理するために使用される一連のスロットに続くプロセッサ・パイプライン・スロットで割込み処理を開始してもよい。
【００５９】
操作６２０において、割込み処理またはサブルーチンが開始される時点で、操作６００の各連続命令は命令の一つが分岐命令であると判断されるまで処理される。操作６００の命令の一つが分岐命令であれば、処理は操作６３０に進んでもよい。そうでなければ、処理は操作６７０に進んでもよい。プロセッサは、たとえば、命令がデコードされるとき（たとえば、プロセッサパイプラインのＤ２段において）、命令が分岐命令であるかどうかを判断してもよい。
【００６０】
操作６３０において、プロセッサは、検出された分岐命令に関連する遅延スロットで割込みが処理されるかどうかを判断してもよい。典型的に、遅延スロットは、分岐命令に続き、たとえば、どの命令が分岐命令に続くかを判断するために分岐を適切に解析する必要があるかもしれない。割込みが上記の遅延スロットの一つを占有するとき、プロセッサは分岐命令に続く命令を判断しないかもしれず、分岐は未解析のままとなるかもしれない。操作６１０の割込みが操作６２０で検出された分岐命令に関連する遅延スロットで処理されるものとプロセッサが判断すれば、処理は命令６４０に進んでもよい。そうでなければ、処理は操作６７０に進んでもよい。
【００６１】
操作６４０において、プロセッサは、操作６２０で検出された分岐命令を無効化または「中止」してもよく、分岐命令および割込みが処理されるパイプラインスロットの間にパイプラインスロット内で処理された命令があればこれらの命令も無効化または「中止」してよい。
【００６２】
操作６５０において、プロセッサは、たとえば、少なくとも第１の無効化された命令のアドレスをリターンレジスタ（たとえば、図１Ｂのレジスタファイル９における）に書き込んでもよい。
【００６３】
操作６６０において、分岐命令が検出されなくても検出されても、割込みがこれに関連する遅延スロットを占有しないとき、プロセッサは、無効化なしで、したがって、割込みペナルティなしで命令処理を完了してよい。
【００６４】
操作６７０において、割込みサブルーチンから戻った後、プロセッサは、操作６１０の割込みプロセッサ・パイプライン・スロットに続くプロセッサ・パイプライン・スロットでリターンレジスタからの命令を実行してもよい。
【００６５】
他の操作または一連の操作が採用されてもよい。
本発明の実施形態は、コンピュータまたはプロセッサ可読媒体、あるいは、プロセッサまたはコントローラ（たとえば、図１Ａおよび１Ｂにおいてデバイス１００のプロセッサ１）によって実行されるときに本明細書で開示された方法を実行する命令をエンコードし、含み、または記憶する、たとえば、メモリ、ディスクドライブ、またはＵＳＢフラッシュメモリなどのコンピュータまたはプロセッサ記憶媒体などの品目を含んでいてもよい。
【００６６】
先に図示され説明された具体的な実施形態は本発明が関わる多くの分散システムにとって有用であることが分るであろうが、本発明のさらなる修正形態が当業者には思い浮かぶであろう。このようなすべての修正形態は、添付の特許請求の範囲によって規定される本発明の範囲および趣旨の範囲内にあるものと見なされる。
【図１Ａ】
0005485129.tif 000002
【図１Ｂ】
0005485129.tif 000003
【図２】
0005485129.tif 000004
【図３】
0005485129.tif 000005
【図４】
0005485129.tif 000006
【図５】
0005485129.tif 000007
【図６】
0005485129.tif 000008