(57)【特許請求の範囲】
【請求項１】
データを処理する装置において、
プログラム命令の制御下で処理演算を実行するよう動作可能な処理論理部と、
スタックデータ記憶であって、１つ以上の状態データの組を記憶し、各状態データの組は割込み事象が発生したときに前記処理論理部によって行なわれていた処理に関連し、各割込み事象は前記割込み事象の発生前と発生後にプログラム可能であるプログラマブルな優先度と関連している、前記スタックデータ記憶と、
割込み制御器であって、
第１の割込み事象に応答して、前記第１割込み事象が発生したときに実行されている処理と関係する第１状態データを前記スタックデータ記憶に保存し、第１割込み処理プログラムにプログラム命令実行をリダイレクトするよう動作し、
前記第１割込み処理プログラムの完了時に、前記第１割込み事象により割込まれた前記処理より高優先度を有する１つ以上の第２割込み事象が前記第１割込み処理プログラムの実行時に発生したかどうかを検出するよう動作し、
（ｉ）前記１つ以上の第２割込み事象が発生した場合に、前記スタックデータ記憶にこれ以上状態データを保存することなく、プログラム命令実行を第２割込み処理プログラムにリダイレクトするよう動作し、
（ｉｉ）前記１つ以上の第２割込み事象が発生しなかった場合に、前記スタックデータ記憶から前記第１状態データを再ロードし、前記第１割込み事象により割込まれた前記処理を再開するよう動作する、
前記割込み制御器と、
を含み、
前記スタックデータ記憶が、複数の割込み事象のそれぞれに関連する複数の状態データの組を記憶している時に、前記割込み制御器は、前記スタックデータ記憶に記憶されている状態データの組に関連する前記複数の割込み事象のなかの最も高い優先度に相当するスタック優先レベルを決定し、
前記割込み制御器は、前記１つ以上の第２の割込み事象が前記スタック優先レベルより高い優先度を持っている場合に、前記１つ以上の第２の割込み事象が前記第１の割込み事象によって割込まれた処理より高い優先度を有していると判定する、
ことを特徴とする、データを処理する装置。
【請求項２】
請求項１記載の装置において、前記第１状態データは、
現在のプログラム実行点に対応するプログラムカウンタ値と、
前記装置の１つ以上の状態変数に対応するプロセッサ状態レジスタ値と、
前記装置の少なくともいくつかの汎用データ処理レジスタ内に保持されたデータ値に対応する１つ以上のデータ処理レジスタ値と、
の１つ以上を含む装置。
【請求項３】
請求項１記載の装置において、前記第１割込み事象が発生した時に実行されている処理は、
割込みによってトリガされたのではないプログラムの実行と、
アクティブな割込み処理プログラムの実行と、のどちらか一方であって、
前記割込み制御器は、前記アクティブな割込み処理プログラムが、実行待ち状態の未処理の割込み処理プログラムより低優先度を有する場合に、前記未処理の割込み処理プログラムが前記アクティブな割込み処理プログラムをプリエンプトするように、複数のプログラムの実行をネスト式に管理できるネスト割込み制御器である、装置。
【請求項４】
請求項１記載の装置において、前記第１割込み事象と前記１つ以上の第２割込み事象の各々が各優先度値を有し、前記割込み制御器は前記各優先度値を比較して、前記１つ以上の第２割込み事象のどれかが前記第１割込み事象より高優先度を有しているかどうかを決定し、前記第２割込み事象のいずれかが前記第１割込み事象より高優先度を有している場合、前記割り込み制御器が前記第１割込み処理プログラムの実行を前記第２割込み処理プログラムの実行によりプリエンプトするよう制御する、装置。
【請求項５】
請求項１記載の装置において、前記割込み制御器は前記第１状態データの再ロード時の割込み信号に応答して、前記第１割込み事象が発生した時に実行されていた処理へのリターンをアボートして、代わりに前記割込み信号と関係する割込み処理プログラムへ実行をリダイレクトする、装置。
【請求項６】
請求項１記載の装置において、前記第２割込み事象が発生した場合に、前記割込み制御器は、前記スタックデータ記憶からの前記第１状態データを再ロードすることなくプログラム命令実行を前記第２割込み処理プログラムにリダイレクトする、装置。
【請求項７】
請求項１記載の装置において、前記割込み制御器が、前記第１割込み処理プログラムの実行に先立って、前記スタックデータ記憶へのデータ値の転送と、プログラムカウンタ位置のロードと命令パイプラインへのプログラム命令のロードを並列かつ非同期的に実行するように制御する、装置。
【請求項８】
請求項１記載の装置において、前記割込み制御器は、リターンアドレスレジスタ内にロードされた所定のリターンアドレス値を伴うリターン命令の実行に応答して、割込み操作からのリターンを実行する、装置。
【請求項９】
請求項１記載の装置において、前記スタックデータ記憶はスタックメモリである、装置。
【請求項１０】
請求項１記載の装置において、検出されたがまだ処理されていない未処理の割込みがない時、前記装置は割込み事象を待機する処理が停止された低電力モードに入る、装置。
【請求項１１】
データを処理する方法において、
スタックデータ記憶に１つ以上の状態データの組を記憶する段階であって、各状態データの組は割込み事象が発生したときに処理論理部によって行なわれていた処理に関連し、各割込み事象は前記割込み事象の発生前と発生後にプログラム可能であるプログラマブルな優先度と関連している、前記段階と、
プログラム命令の制御下で処理操作を実行する段階と、
第１割込み事象に応答して、前記第１割込み事象が発生した時に実行している処理と関係する第１状態データを前記スタックデータ記憶に保存し、プログラム命令実行を第１割込み処理プログラムにリダイレクトする段階と、を含み、
前記第１割込み処理プログラムの完了時に、前記第１割込み事象により割込まれた前記処理より高優先度を有する第２割込み事象が前記第１割込み処理プログラムの実行時に発生したかどうかを検出する段階と、
（ｉ）前記第２割込み事象が発生した場合に、さらに状態データを前記スタックデータ記憶に保存することなくプログラム命令実行を第２割込み処理プログラムにリダイレクトする段階と、
（ｉｉ）前記第２割込み事象が発生しなかった場合に、前記スタックデータ記憶から前記第１状態データを再ロードし、前記第１割込み事象により割込まれた前記処理を再開する段階と、
を含み、
前記検出する段階は、前記スタックデータ記憶が複数の割込み事象のそれぞれに関連する複数の状態データの組を記憶している場合に、前記スタックデータ記憶に記憶されている状態データの組に関連する前記複数の割込み事象のなかの最も高い優先度に相当するスタック優先レベルを決定する段階を含み、
前記検出する段階は、前記１つ以上の第２の割込み事象が前記スタック優先レベルより高い優先度を持っている場合に、前記１つ以上の第２の割込み事象が前記第１の割込み事象によって割込まれた処理より高い優先度を有していると判定する、
データを処理する方法。
【請求項１２】
請求項１１記載の方法において、前記第１状態データは、
現在のプログラム実行点に対応するプログラムカウンタ値と、
前記装置の１つ以上の状態変数に対応するプロセッサ状態レジスタ値と、
前記装置の少なくともいくつかの汎用データ処理レジスタ内に保持されたデータ値に対応する１つ以上のデータ処理レジスタ値と、
の１つ以上を含む方法。
【請求項１３】
請求項１１記載の方法において、前記第１割込み事象が発生した時に実行されている処理は、
割込みによってトリガされたのではないプログラムの実行と、
アクティブな割込み処理プログラムの実行と、のどちらか一方であって、
前記アクティブな割込み処理プログラムが、実行待ち状態の未処理の割込み処理プログラムより低優先度を有する場合に、前記未処理の割込み処理プログラムが前記アクティブな割込み処理プログラムをプリエンプトするように、複数のプログラムの実行をネスト式に管理できるネスト割込み制御がなされる方法。
【請求項１４】
請求項１１記載の方法において、前記第１割込み事象と前記１つ以上の第２割込み事象の各々が各優先度値を有し、前記各優先度値を比較して、前記第２割込み事象が前記第１割込み事象より高優先度を有しているかどうかを決定し、前記第２割込み事象のいずれかが前記第１割込み事象より高優先度を有していると決定した場合、前記第１割込み処理プログラムの実行を前記第２割込み処理プログラムの実行によりプリエンプトするよう制御する、方法。
【請求項１５】
請求項１１記載の方法において、前記第１状態データの再ロード時の割込み信号に応答して、前記第１割込み事象が発生した時に実行されていた処理へのリターンをアボートして、代わりに前記割込み信号と関係する割込み処理プログラムへ実行をリダイレクトする、方法。
【請求項１６】
請求項１１記載の方法において、前記第２割込み事象が発生した場合に、前記スタックデータ記憶からの前記第１状態データを再ロードすることなく、プログラム命令実行を前記第２割込み処理プログラムにリダイレクトするよう制御する、方法。
【請求項１７】
請求項１１記載の方法において、前記記憶する段階において、前記第１割込み処理プログラムの実行に先立って、前記スタックデータ記憶へのデータ値の転送を、プログラムカウンタ位置のロードと命令パイプラインへのプログラム命令のロードと並列かつ非同期的に実行するように制御する、方法。
【請求項１８】
請求項１１記載の方法において、リターンアドレスレジスタ内にロードされた所定のリターンアドレス値をともなうリターン命令の実行に応答して、割込み操作からのリターンを実行する、方法。
【請求項１９】
請求項１１記載の方法において、前記スタックデータ記憶はスタックメモリである、方法。
【請求項２０】
請求項１１記載の方法において、検出されたがまだ処理されていない未処理の割込みがない時、前記装置は割込み事象を待機する処理が停止された低電力モードに入る、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムの分野に関係する。特に、本発明はデータ処理システム内の割込み処理制御の分野に関係する。
【背景技術】
【０００２】
割込み信号に応答して割込み処理プログラムの処理を開始する能力をデータ処理システムに提供することは公知である。このような挙動は一般的であり、実時間または近実時間処理を実行することが望ましい組込み及び深部組込みシステム内では特に有用である。このようなシステムは割込み駆動で、異なる割込み信号と関連する刺激に応答して大部分の有用な処理活動が発生する場合が多い。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
割込み処理機能を有する多数のデータ処理システムで、重要な性能パラメータは、割込み信号を受信した後、如何に迅速にシステムがその割込み信号を処理するコードの実行を開始可能であるか、である。一例として、アンチロック・ブレーキングシステムを制御するデータ処理システム内で、割込み信号はスキッド（横滑り）条件の検出を示し、従ってデータ処理システムはこのスキッド表示に対して出来る限り迅速に応答し適切な訂正動作を取らなければならないことが重要である。
【０００４】
割込み信号に応答する時、実行している現在の処理を表すシステムの現在の状態／コンテキストに対応するデータをシステムが保存し、トリガされた割込み処理プログラムがその実行を完了するとこの状態／コンテキストが復元されてその処理が再開されるのが通常である。この状態／コンテキスト・データを保存するのに要する時間が、システムが割込み事象の発生に応答可能な速度を制限する重要な要因となり得る。割込みがネストされる（すなわち、高優先度割込みが低優先度の既存のアクティブな割込みをプリエンプト（pre-empt：先制）する）と、データの多数のネストされたレベルを保持する必要があるため、状態／コンテキストを保持するために、バンク・レジスタのような、単一の記憶場所を使用することが不可能となるため、これは別の問題を発生する。
【課題を解決するための手段】
【０００５】
ある面から見ると、本発明はデータを処理する装置であって、
プログラム命令の制御下で処理演算を実行するよう動作可能な処理論理部と、
割込み制御器であって、
第１の割込み事象に応答して、前記第１割込み事象が発生したときに実行されている処理と関係する第１状態データをスタックデータ記憶に保存し、第１割込み処理プログラムにプログラム命令実行をリダイレクト（向け直し）するよう動作し、
前記第１割込み処理プログラムの完了時に、前記第１割込み事象により割込まれた前記処理より高優先度を有する１つ以上の第２割込み事象が前記第１割込み処理プログラムの実行時に発生したかどうかを検出するよう動作し、
（ｉ）前記１つ以上の第２割込み事象が発生した場合に、前記スタックデータ記憶にこれ以上状態データを保存することなく、プログラム命令実行を第２割込み処理プログラムにリダイレクトするよう動作し、
（ｉｉ）前記１つ以上の第２割込み事象が発生しなかった場合に、前記スタックデータ記憶から前記第１状態データを再ロードし、前記第１割込み事象により割込まれた前記処理を再開するよう動作する、
前記割込み制御器と、
を含むデータを処理する装置を提供する。
【０００６】
システムが既に第１割込みを処理している時、別の割込みが発生し、次いで第１割込みの処理が完了すると、この第１割込みの前のシステムの状態／コンテキストを復元する必要は無く、直ちに第２割込みの処理に進むことが可能であることを本技術は認識している。第２割込みが処理を完了した時、復元を必要とする状態／コンテキスト・データは、第１割込みが実行を開始する前に存在したもので、従ってこの状態／コンテキスト・データが利用可能である。ある割込みの処理から次の割込みの処理へ直接移動する時に、復元し以後再び元の状態／コンテキスト・データの保存の必要性を除去することは、システムが割込みに応答可能である速度の非常な増加を生じる。さらに、状態／コンテキストの不要な復元と保存の除去の利点は、割込みを連続して処理している時で、最大の効率動作が望ましい状況に対応する高割込み負荷の状況である時に発生する点である。このような状況での割込みの処理は、割込み処理が開始する前に存在した元の状態／コンテキストの介在する復元と保存の必要性なしに互いにチェーン（連鎖）可能であるものと考えられる。
【０００７】
記憶された状態データは多様な異なる形式を取り得るが、通常１個以上のプログラムカウンタ値、プロセッサ状態レジスタ値及び１個以上のデータ処理レジスタの内容を含むことが認められる。さらに、割込み処理ソフトウェアがその他のレジスタを保存復元する必要性の除去はまた、処理オーバーヘッドのさらなる減少を生じる。
【０００８】
いくつかの割込み処理システムは、高優先度割込みが既存のバックグラウンド処理をプリエンプト可能な、または現在アクティブな低優先度の割込みをプリエンプト可能であるネストされた割込みをサポートすることが理解されよう。このようなネストされたシステムでは、いくつかのアクティブな割込み処理プログラムが互いにネストされ、高優先度の前記プログラムが最上位レベルで実行し、プリエンプトされた、各低優先度のアクティブな割込み処理プログラムは順次順番に再開される。
【０００９】
処理されている既存の割込みのプリエンプトを発生させる割込み事象の能力は、各割込みに付随する各優先度値を使用するシステムにより有効に制御される。これらの優先度値は階層構造を形成可能で、特定の割込み事象がその他の現在アクティブな割込みのプリエンプトを発生するかどうかを制御するために使用される。
【００１０】
優先度値はその関連する割込みにハード的に配線されてもよいが、プログラム可能な値も有用である。これらの値のプログラム可能性は割込み処理システムに顕著な柔軟性を与える。
【００１１】
状態／コンテキスト・データの不適切な復元と再保存の除去に関連する利点の認識は、状態データの再ロード時にアクティブとなり、そのリターンをアボート（途中停止）する役割を果たす遅い（late）割込み信号の提供によりさらに拡張可能である。この遅く到着した割込みをサービスする時に復元用の状態データは依然として再ロード可能に利用できるため、リターンが実際にコミットされるまで、新たな遅く到着した割込みをサービスするようにその部分完了をアボート可能である。
【００１２】
基本レベルでは、ある割込みの処理から次の割込みの処理へ直接切り換える時、この切り換え時に状態データを保存する必要性の単なる除去により利点が達成されることが認められる。望ましい実施例では、次の割込みがその状態データを想定していないのでこの状態データは使用されないため、この切り換え時に状態データの再ロードの除去によってもまた別の利点が達成される。
【００１３】
遅く到着した割込みが以前の状態／コンテキストへのリターンのアボートをトリガ可能なシステム内では、本発明の望ましい実施例はスタックデータ記憶に記憶されたデータ内の部分完了リターンにより行われた何らかの変更を元に戻すよう動作可能である。
【００１４】
スタックデータ記憶へのデータ値の転送と割込み処理プログラムと関係するプログラム命令フェッチの制御は直列的に発生することが認められる。しかしながら、望ましい実施例では、スタックデータ記憶へのデータ値の転送は、システムの命令パイプラインへの所要プログラム命令の実行前のローディングと並列に実行可能である。データと命令管理のこの分離は、状態／コンテキスト・データを保存している間に、最初に実行すべき割込み処理として意図していたものに対して、プログラム命令コードを命令パイプラインにロードさせた異なった遅い高優先度の割込みにより取って代わることが可能であるという点で、遅く到着する割込み機能にも良好に適合する。これらの割込みのどちらも同じ保存すべき以前の状態データを必要とし、従ってスタックへのデータの転送はパイプラインにロードされたデータの変更により影響されない。遅く到着する割込み機構は通常のプリエンプトとテール・チェーニング（tail chaining）操作の両方に利点を有する。全ての場合で、新たな割込みのこれ以上のプリエンプトを避けるため、最高優先度の未処理割込みを取るのが有利であり、テール・チェーニング機能とは、遅い到着の処理を終了した時に、遅い到着により遅らされた割込みに効率的に切り換えることを意味する。
【００１５】
本システムは、割込み制御器がリターン命令の実行に応答して所定のリンクアドレス値により割込み操作からのリターンをトリガする機能を設けることによりさらに改良される。前記の特定アドレスに応答して割込み操作からのハードウェア・ベースのリターンを実行するよう割込み制御器がトリガされることは、割込み処理プログラムが割込み処理への入口及び出口に付随する余分な命令オーバーヘッドを担持する必要性を除去することと共に前記コードをその応用性でより汎用性のあるものとすることに良好に適合する。さらに、割込みのみの応用例（応答のみのもの）では、最終のリターンは次の割込み事象を待機する低電力「スリープ」モードへの入場をトリガ可能である。この最終のリターンは復元の必要が無く、従って次の割込みは保存操作の必要なしに「チェーン（chain）」可能である。
【００１６】
スタックデータ記憶は、特殊用途レジスタのような、多様な異なる形式を取り得るが、汎用メモリ内のスタックメモリ領域であることが望ましいことが理解されよう。
【００１７】
他の面から見ると、本発明はデータを処理する方法において、
プログラム命令の制御下で処理操作を実行する段階と、
第１割込み事象に応答して、前記第１割込み事象が発生した時に実行していた処理と関係する第１状態データをスタックデータ記憶に保存し、プログラム命令実行を第１割込み処理プログラムにリダイレクトする段階と、を含み、
前記第１割込み処理プログラムの完了時に、前記第１割込み事象により割込まれた前記処理より高優先度を有する第２割込み事象が前記第１割込み処理プログラムの実行時に発生したかどうかを検出する段階と、
（ｉ）前記第２割込み事象が発生した場合に、さらに状態データを前記スタックデータ記憶に保存することなくプログラム命令実行を第２割込み処理プログラムにリダイレクトする段階と、
（ｉｉ）前記第２割込み事象が発生しなかった場合に、前記スタックデータ記憶から前記第１状態データを再ロードし、前記第１割込み事象により割込まれた前記処理を再開する段階と、
を含むデータを処理する方法を提供する。
【００１８】
本発明の上記及びその他の目的、機能及び利点は、添付図面と関連して読取られる図示実施例の以下の詳細な説明から明らかとなる。
【実施例１】
【００１９】
図１はデータメモリ６と命令メモリ８とに結合されたプロセッサ・コア４を含むデータ処理システム２を概略的に図示する。深く組み込まれた割込み駆動システム内では、データメモリ６と命令メモリ８は各々ＲＡＭとフラッシュメモリの形式で通常別々に設けられる。
【００２０】
プロセッサ・コア４は、命令デコーダ１８により発生された制御信号の制御下でデータ処理演算を実行するよう動作可能な処理論理を互いに形成するレジスタバンク１０、乗算器１２、シフタ１４及び加算器１６を含む。命令デコーダ１８は命令パイプラン２０に応答し、これは図示の例では３段命令パイプラインであり、現在実行段階の命令が命令デコーダ１８によりデコードされて処理論理部１０、１２、１４及び１６への適切な制御信号を発生するために使用される。
【００２１】
プロセッサ・コア４のロードストア装置（LSU）２２はデータメモリ６へのデータ値の読取、書込みを処理する役割を果たす。前記ロードストア装置２２は書込みバッファとワイド読取バッファを適当に含む。
【００２２】
プロセッサ・コア４はまた、Ｎ本の別々な割込み信号と共に外部リセット信号に応答するネスト・ベクトル割込み制御器（NVIC）２４を含む。ネスト・ベクトル割込み制御器２４はまた不正及びアボート信号のような内部割込み型式信号を受けてもよい。別のマスク不能な割込み信号（図示せず）もネスト・ベクトル割込み制御器に供給されてもよい。ネスト・ベクトル割込み制御器２４は受信した割込み信号に応答して、以下で説明するように、プロセッサ・コア４による割込み処理を制御する役割を果たす制御信号を発生する。特に、受信した割込み信号は、割込みに付随する優先度レベル値に応じて既存のユーザー・プログラム型式処理または既存の割込み処理をプリエンプトしてもよいし、しなくともよい。ネスト・ベクトル割込み制御器２４内に制御表２６が設けられ、どの割込みが未処理でどの割込みがアクティブであるかを追跡し、プログラム可能な優先度レベル値を記憶する役割を果たす。
【００２３】
図２はネスト・ベクトル割込み制御器２４の制御表２６を概略的に図示する。各割込み信号に対して、その割込み信号の割込みが未処理であるかまたは現在アクティブであるかどうかを指示する各状態フラグが記録される。未処理割込みとは、ネスト・ベクトル割込み制御器２４により割込み信号が検出されているが、未だ実行されていない、すなわち関係する割込み処理プログラムが未だ実行を開始していないものである。アクティブな割込みとは、割込み処理プログラムの実行が開始されていて、高優先度割込みによりそれ自体がプリエンプトされたため現在実行されていない場合もある。
【００２４】
図示の例では、現在の割込み０と割込み３がアクティブであることが分かる。これらの割込みの内の一方のみが現在実行中で、他方はプリエンプトされている。現在実行中の割込み処理プログラムは、これが高優先度を有する場合にのみ以前に活性化された（activated）割込み処理プログラムをプリエンプト可能である。割込み２は未処理であり、未だ活性化されていない。これは、割込み２は現在実行中である割込み処理プログラムより低いまたは同じ優先度を有し、従って既存のアクティブな割込み処理プログラムをプリエンプト不能であることを意味する。
【００２５】
図２は、各割込みに付随する優先度レベル値は第１部分２８と第２部分３０とに分離されることを示す。これは望ましい機能であり、本技術の全ての実施例がこの機能を使用する必要はない、例えば単純な単一の一様な優先度値を使用してもよい。これら２つの部分間の境界はシステム全体として可変である。２つの部分間の分離はプログラム可能なマスク値により有効に実行されてもよい。第１部分２８はプリエンプト・グループ値であり、これはどの割込みが他の割込みをプリエンプトするかを制御する役割を果たす。共通第１部分２８を共有する割込みは互いにプリエンプトしない。既存のアクティブな割込みより高い優先度に対応する第１部分２８を有する割込みは、未処理となった時に既存のアクティブな割込みをプリエンプトする。逆に、未処理の割込みの第１部分が現在アクティブな割込みの第１部分より低い場合、これはプリエンプトせず、その高優先度のアクティブな割込みがその処理を完了するまで実行を開始しない。
【００２６】
優先度レベル値の第２部分３０は、共通プリエンプト・グループからの割込み内の実行の相対順序を制御する役割を果たす。これは、同一のプリエンプト・グループからの１つ以上の割込みが未処理である時に効果を有する。この場合、同一プリエンプト・グループからのこれらの割込みの実行の順序は第２部分３０により指示される最高優先度を有するものにより制御される。プリエンプトを制御する第１部分２８とプリエンプト・グループ内の相対順序を制御する第２部分３０への優先度レベル値のこの分離は、プリエンプト挙動の微細でかつ精妙な制御を提供する。ある特定の割込みは状態の保存と復元に関するプリエンプトに付随する不利益を正当化するほど十分高い優先度を有してはいないが、それにも拘らず、その同一プリエンプト・グループからの既存のその他の未処理割込みに優先して実行されるべき十分高い優先度である。
【００２７】
制御表２６内に記憶された優先度レベル値はプログラム制御下で動的に変更されてもよい。制御表２６は例えばメモリ・マップされ、適切なソフトウェア制御書込みにより特定のメモリ位置に書込まれてもよい。
【００２８】
図２に図示するように、第１部分２８と第２部分３０は隣接していて、特定の割込みの優先度レベル値内で接している。図示の特定の例では、優先度レベル値は４ビット値で、３ビットが第１部分２８に与えられ、１ビットが第２部分に与えられる。この配置は８レベルのプリエンプト・グループとプリエンプト・グループ内の２レベルの相対順序を提供する。完全に同一の優先度レベル値を有する割込みは、その割込み番号順またはそれが発生した順に処理される。
【００２９】
上述したように、第１部分２８と第２部分３０との間の分割はプログラム可能に設定されてプリエンプト・グループレベルと順序レベルで異なるレベルの粒度（granularity）を提供する。極端には、単一のプリエンプト・グループのみを設け、優先度レベル値の全４ビットを割込み内の相対順序を指定するように割当て、どれもが互いにプリエンプト不能にすることも可能である。
【００３０】
図３はデータメモリ６内の領域であるスタックメモリ３０の形式のスタックデータ記憶を概略的に図示する。スタックメモリ３０を制御する通常の方法によると、そこからデータを読込み、そこにデータを書込むスタック先頭位置を指示するスタックポインタが保持される。コンテキスト／状態データを保存する必要があると、これは所定の順序でスタックメモリ３０に書込まれる。図示の例では、保存される状態データは、プロセッサ状態レジスタ値ＣＰＳＲ、プログラムカウンタ値ＰＣ、リンクレジスタ値ＬＲ、スクラッチレジスタ値Ｒ１２および４個の汎用処理レジスタ値Ｒ０−Ｒ３を含む。割込みはネストされており、従って複数レベルのコンテキスト・データを保存する必要があるため、別のコンテキストがスタックメモリ３０に保存される。図３の例では、保存された第１状態データはコンテキスト０と関係する。コンテキスト０と関係するこの状態データが保存されるようにトリガした割込みはそれ自体プリエンプトされ、スタックメモリ３０に保存されるべき部分完了の割込み処理プログラムのコンテキスト１に対応する状態データとなる。このように、割込み間でネストのレベルが増減するにつれ、状態データはスタックメモリ３０上で巻き上げられ、巻き下げられる。ソフトウェアがＲ１２やＲ０−Ｒ３のようなレジスタ値を保存する責任を有するのが通常である。ハードウェアがこの保存を実行すると、テール・チェーニング技術と関係する処理保存を増加させる。さらに、割込み処理のソフトウェアは特殊な割込み処理ソフトウェアとは反対に通常のソフトウェアに近くなる。
【００３１】
図４は図２の優先度レベル値のプログラム可能性に関連する問題を概略的に図示する。図４はスタックメモリ３２の一部を図示し、この中で割込みＡに対応する現在実行中のアクティブな割込み処理プログラムは、割込みＢと割込みＣに対応するその下のネストされた割込みと共に実行している。これらの割込みは互いに成功裏にプリエンプトされているため、ネスト階層構造を上るにつれて割込みと関係する優先度レベル値の単調増加が期待される。現在実行中のアクティブな割込みＡは最高の優先度、すなわち優先度レベル値２を有する。
【００３２】
図４には、現在アクティブな割込みと関係する優先度レベル値が変更されてスタックメモリ３２内で不適切な優先度反転が生じる２つのありうる場合を図示する。上の例では、それ自体プリエンプトされた割込みＢより低い優先度となるよう、割込みＡがその優先度レベル値を低下している。割込みＡより高優先度を有するが、割込みＢより低優先度である別の割込みがここで発生した場合、これは現在実行中の割込みＡを不適切な方法でプリエンプトし、割込みＢの完了を不利に遅延させる点でこれは問題を生じる。この問題を避けるためには、制御表２６内に記憶された優先度値を使用して、ネスト・ベクトル割込み制御器２４は、スタックメモリ内に現在保持された全ての割込みに対応する優先度値、特にこれらの優先度値の最高のものを決定する。従って、上述した上の例では、現在実行しているアクティブな割込み、すなわち割込みＡが５の優先度値を有していたとしても、スタックは３の優先度値を有するものとして処理され、従って新たに検出された割込みは割込みＡのその後に続く実行をプリエンプトせず、結果として３より高い優先度を有しているのでなければ、割込みＢの実行を遅延しない。これは、割込みＢと関係する割込み処理が不適切に遅延されないことを保証する。
【００３３】
図４の下の例は、割込みが既にプリエンプトされスタック上のネストされた割込み内に埋め込まれている時でも、割込みＣと関係する優先度値を如何に上げることが出来るかを図示している。本技術によると、この埋め込み割込みＣのこの変化は、スタックと関係する全体の優先度レベル値に反映され、従って新たに発生した割込みが割込みＣと関係するものより高い優先度レベル値を有していなければ、割込みＣがクリアされるまでこれ以上のプリエンプトは許可されない。
【００３４】
現在アクティブな割込み処理プログラムのスタックと関係する最高の優先度レベルと等しい優先度レベルを有する未処理の割込みが発生した場合、これはプリエンプトされない。
【００３５】
図４に図示した例は不適切なプリエンプトの防止と関係している。スタックの優先度レベルの全体としての低下の結果として、現在未処理でありアクティブとならないように保持されていた割込みが、プリエンプト処理をトリガするのに適合するように、優先度レベルを変更することも可能である。このような未処理割込みは新たに検出された割込みであるか、または以前に検出されたが未だに割込みを開始していないものである。
【００３６】
スタック全体としての優先度レベルをプリエンプトする可能性のある割込みの優先度レベルと比較してプリエンプトが発生するかどうか決定する、この技術を全ての実施例が使用する必要はないことが理解されよう。
【００３７】
上述した優先度レベル値の変更は、スタックメモリ３０により消費されるメモリ空間の量を制御する１方法として行ってもよい。スタックメモリ・リソースが使用され切ると、ネストされたアクティブな割込みと関係する優先度レベルを増加して、これ以上のスタックメモリ・リソースを必要とする別のプリエンプトを防止するように出来る。このようにして、スタック・オーバーフローが避けられる。特に望ましい制御方法は、アクティブな割込みと関係する優先度レベルを昇進させることによりその容量の４分の３まで使用したスタックメモリの量を保持する役割を果たす。別のプリエンプトに対して利用可能なスタックメモリの４分の１を残しておくことは、スタックメモリに空間が利用可能であるため最高優先度の割込み処理プログラムがプリエンプト可能であることを保証する。
【００３８】
図５に概略的に図示するように、優先度レベル値を昇進する技術は、各プロセッサ８２に対してアクティブな割込みのハードウェアスタック８０が設けられている複数プロセッサ・システム内で使用してもよい。割込み分配器８４は、表８８内でプログラムされた優先度階層構造に従って、互いに依存（pend）可能な割込み信号のアレイ８６に応答する。表８８は各割込みに対して優先度レベルとどのプロセッサ８２にそれが発行されたかを指示するデータを記憶する。割込み分配器８４は分配バス９０を介して各プロセッサ８２と関係する割込み制御器９２と通信する。割込み制御器９２はその現在の最高優先度のアクティブな割込みを指示する信号９４を割込み分配器８４に渡す。この環境では、ハードウェアスタックが一杯にまたは一杯近くになった場合、これ以上のプリエンプトと設けられたハードウェアスタック・リソースのオーバーフローを防止するように、そのスタック内で表された割込みの優先度レベル値を実質的に増加してもよい。優先度レベルのこの吊り上げは信号９４により通信される。
【００３９】
図６は主要な割込み制御流れを概略的に図示する。システムがリセットから抜け出す時、リセット処理ハードウェアが段階１００でリセット処理を制御する。リセット処理から出ると、通常のユーザープログラムが開始され、命令の実行は段階１０２に進む。この命令実行時に、段階１０４はネスト・ベクトル割込み制御器２４により検出され、発生している既存の割込み処理より高優先度を有するものを未処理として制御表２６内にマークされた何らかの未処理割込みがあるかどうかを検出する役割を果たす。高優先度の前記未処理割込みがない場合、処理は段階１０６に進み、ここでプログラムカウンタ値が、メモリ位置の最上部のような所定の特殊目的のリターンアドレスに対応するリターンアドレスであるかどうかの検査が行われる。このようなリターンアドレスが検出されない場合、処理は次の命令の実行用に段階１０２に戻る。または、割込み命令からの特殊なリターンを割込み処理プログラムの最後に配置することも可能である。
【００４０】
段階１０４の決定が、それが割込み自体であれまたはユーザー処理であれ、現在の処理より高優先度の未処理割込みがある、となった場合、段階１０８は以下でさらに説明するようにプリエンプト操作をトリガする役割を果たし、その優先度値の等しい第１部分２８を有し、かつプリエンプトをトリガするのに十分高い優先度値を有する１つ以上の未処理割込みがある場合に、その優先度値の最高の第２部分３０を有する割込みを選択する１１０の段階を含む。段階１０２は次いで新たに活性化された割込みの第１命令を実行する役割を果たす。
【００４１】
段階１０６の決定が、プログラムカウンタが割込み処理の終了を指示する所定のアドレス値を有しているものとなった場合、段階１１２は、処理が段階１０４に戻る前に以下でさらに説明するような割込み操作からのリターンを実行する役割を果たす。
【００４２】
図７は以下で記述するようにテール・チェーニング（tail chaining）をサポートする時の主要な割込み制御の流れを概略的に図示する。システムがリセットから抜け出す時、リセット処理ハードウェアが段階３４でリセット処理を制御する。リセット処理から出ると、通常のユーザープログラムが開始され、命令の実行は段階３６に進む。この命令実行時に、段階３８はネスト・ベクトル割込み制御器２４により検出され、発生している既存の割込み処理より高優先度を有するものを未処理として制御表２６内にマークされた何らかの未処理割込みがあるかどうかを検出する役割を果たす。高優先度の前記未処理割込みがない場合、処理は段階４０に進み、ここでプログラムカウンタ値がメモリ位置の最上部のような所定の特殊目的のリターンアドレスに対応するリターンアドレスであるかどうかの検査が行われる。このようなリターンアドレスが検出されない場合、処理は次の命令の実行用に段階３６に戻る。または、割込み命令からの特殊なリターンを割込み処理プログラムの最後に配置することも可能である。
【００４３】
段階３８の決定が、それが割込み自体であれまたはユーザー処理であれ、現在の処理より高優先度の未処理割込みがある、となった場合、段階４１は以下でさらに説明するようにプリエンプト操作をトリガする役割を果たす。このプリエンプト操作後に、処理は段階３６に戻り、ここでプリエンプトを発生させた割込み処理プログラム内の第１命令が実行される。
【００４４】
段階４０の決定が、プログラムカウンタが割込み処理の終了を指示する所定のリターンアドレス値を有しているとなった場合、段階４２は、現在スタックされたアクティブな割込みまたはユーザープログラムより高優先度値を有する未処理の割込みがあるかどうかを検出する役割を果たす。このような未処理割込みが存在する場合、処理は段階４４に進み、以下でさらに説明するように保存操作なしでその未処理割込みへのテール・チェーニング操作が実行される。段階４４のこのテール・チェーニング操作の後で、段階３６へのリターンが行われ、ここで新たに活性化された割込み中の第１命令が実行される。
【００４５】
段階４２の決定が、スタックされアクティブな処理より高優先度を有する未処理割込みがないとなった場合、段階４６は、プリエンプト処理が再開される段階３６へ処理が戻る前に、以下でさらに説明するように割込み操作からのリターンを実行する役割を果たす。
【００４６】
図８はプリエンプト時に実行される処理を概略的に図示する。段階４８でプリエンプトが開始されると、並列の命令側とデータ側ハードウェア制御の操作が開始される。データ側では、段階５０で記憶すべき状態データがスタックメモリ３０にプッシュされる。各種のレジスタ値のこのプッシュは完了するのに多数の処理リサイクルを要する。データ側操作と並列に、命令側は段階５２で、プリエンプトをトリガした割込みと関係するプロセッサのベクトル表からターゲットの割込み処理プログラムの新たなプログラムカウンタ値を読取る役割を果たす。次いで段階５４は、段階４８で開始された最初のプリエンプトをトリガした割込み事象より高優先度を有する新たな割込み事象が検出されたことを指示するネスト・ベクトル割込み２４により発生された何らかの遅く到着した割込み信号を検査する役割を果たす。このような遅く到着した割込み信号を検出した場合、処理は段階５２に戻り、ここで適切な割込み処理コードを開始してメモリから読取らせ、かつ命令パイプライン２０へ供給するように、遅く到着した割込みと関係する新たなプログラムカウンタ値をベクトル表から読取る。段階５４で遅く到着する割込み信号が検出されない場合、段階５６は命令パイプライン２０に割込み処理コードを充填し始める役割を果たす。この割込み処理コードがパイプラインにロードされると、段階５８の別の段階が実行されて再び何らかの遅く到着する割込み信号が発生したかどうかを決定し、そうである場合、遅く到着する割込みをサービス可能とするように段階５２へ戻る。遅く到着する割込みの検査は図６ではパイプライン充填段階５６を囲む段階５４と５８で発生するものとして図示しているが、実際には遅く到着する割込み検査はパイプライン充填操作と並列に連続的に実行されてもよいことが理解されよう。
【００４７】
命令側パイプライン充填とデータ側状態データ記憶の両方が完了すると（段階６０の同期器により示すように）、処理は図示のように段階３６での命令の実行に進む。この並列動作は速度を増加し、遅く到着する割込みがパイプライン再充填を再開することにより収容されることを可能とする。
【００４８】
図９は割込み処理流れからのリターンを概略的に図示する。割込みからのリターンが開始されると、ネスト・ベクトル割込み制御器２４は段階６２でスタックメモリ３０から状態データを復元するよう動作する。段階６４で、リターンが行われている割込みまたは処理より高優先度の遅く到着する割込みの検査が行われる。このような高優先度割込みを検出した場合、段階６６でテール・チェーニング操作が開始され、スタックメモリ３０、スタックポインタまたは復元レジスタ上の保存データに必要な適切な修復が行われる。
【００４９】
段階６４で遅く到着する高優先度割込みが検出されなかった場合、段階６８はリターンされる割込みまたは処理の状態データの最後の復元を検出する役割を果たし、これが完了すると、処理は段階７０へ渡され、ここでスタックポインタが調節され、リンクレジスタとパイプラインは、命令の実行が段階３６で再開される前に再ロードされる。
【００５０】
システムが割込みのみのシステムである場合、未処理割込みがない時の割込みからのリターンはハードウェアにより使用されて、次の割込み事象の検出を待機して処理が停止する低電力消費スリープモードへの入場をトリガする。
【００５１】
図１０はテール・チェーニング処理流れを概略的に図示する。この処理流れは、ある割込み処理プログラムが完了して以前の状態へのリターンを行うことなく他が開始される時にテール・チェーニングが発生するため、この例では段階５０の状態データの保存の必要がない点を除いて、図６で図示したものと同じである。従って、保存する必要がある終了する割込み処理プログラムと関係する状態はない。実行すべき割込み処理コードによる命令パイプライン２０の再ロードは通常迅速であるため、割込みに入る時の状態データの保存に要する時間が通常限定要因となる。従って、テール・チェーニング技術は、割込み処理の１つのエピソードが直ちに次に続く環境では割込み応答を加速可能である。
【００５２】
本発明の例示実施例は添付図面を参照して本明細書で詳細に記載してきたが、本発明はこれらの詳細な実施例に限定されるものではなく、添付の請求の範囲に定義される本発明の範囲と要旨から逸脱することなく当業者により各種の変更と修正が実施可能であることを理解すべきである。
【図面の簡単な説明】
【００５３】
【図１】ネストされたベクトル割込み制御器を含むデータ処理システムを概略的に図示する。
【図２】ネストされたベクトル割込み制御器内で使用される制御表を概略的に図示する。
【図３】状態データの複数組を含むスタックメモリを概略的に図示する。
【図４】ネストされた割込み内で優先度反転が発生した２つの例示状況を概略的に図示する。
【図５】本技術のあるものを使用した複数プロセッサ・システムを概略的に図示する。
【図６】図１のシステム内の割込み駆動処理の主要な制御流れを概略的に図示する流れ図。
【図７】図１のシステム内の割込み駆動処理の別な主要な制御流れを概略的に図示する流れ図（遅く到着する割込みの処理の図示を含まず）。
【図８】プリエンプト流れ制御を概略的に図示する流れ図。
【図９】割込み流れ制御からのリターンを概略的に図示する流れ図。
【図１０】ある割込み処理が他の割込みの処理に直接続く時の流れ制御を概略的に図示する流れ図。
【符号の説明】
【００５４】
４  プロセッサ・コア
６  データメモリ
８  命令メモリ
１８  命令デコーダ
２０  命令パイプライン
２４  ネスト・ベクトル割込み制御器
２６  制御表
３０  スタックメモリ
【図１】
0004610322.tif 000002
【図２】
0004610322.tif 000003
【図３】
0004610322.tif 000004
【図４】
0004610322.tif 000005
【図５】
0004610322.tif 000006
【図６】
0004610322.tif 000007
【図７】
0004610322.tif 000008
【図８】
0004610322.tif 000009
【図９】
0004610322.tif 000010
【図１０】
0004610322.tif 000011