(57)【要約】【課題】ネスト状の割込みコントローラ２４を備えたデータ処理システム２はネスト状のアクティブな割込みをサポートする。【解決手段】異なる割込みに付随する優先度レベルはシステムが稼動中にも変更（多分、プログラミング可能）できる。ネスト状になった割込み構造での優先度逆転に伴う問題を回避するために、ネスト状の割込みコントローラは、待機中の割込みが既存のアクティブな割込みに取って代わるべきかどうかを判断するときに、待機中の割込みの優先度を、一緒にネスト構造をなす現在アクティブな複数の割込みのうちで最も高い優先度と比較する。【選択図】図４
2005228294.tif 000002
【特許請求の範囲】
【請求項１】
処理論理回路であって、プログラム命令の制御下で処理動作を実行するように動作し、また複数の割込み事象による割込みに対応する前記処理論理回路と、
ネスト状割込みコントローラであって、動作開始したが未終了の複数のアクティブな割込み処理プログラムのネスト的な実行を制御するように動作し、また前記複数の割込み処理プログラムのそれぞれに付随する優先度に応答して、１またはそれ以上のアクティブな割込み処理プログラムを待機中の割込み処理プログラムによって取って代える操作を制御する前記ネスト状割込みコントローラと、
を含むデータ処理のための装置において、
与えられたアクティブな割込み処理プログラムの優先度は、前記与えられたアクティブな割込み処理プログラムが動作開始したがまだ終了していない間に変更可能であり、更に、
前記ネスト状割込みコントローラは、
（ｉ）もし待機中（ｐｅｎｄｉｎｇ）の割込み処理プログラムの優先度が、アクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも高いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可し、
（ｉｉ）もし待機中の割込み処理プログラムの優先度がアクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも低いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可しない、
ようにした、前記データ処理装置。
【請求項２】
請求項１に記載の装置であって、前記ネスト状の割込みコントローラが、前記待機中の割込み処理プログラムに付随する前記優先度が前記複数のアクティブな割込み処理プログラムの任意のものに付随する最も高い優先度に等しい場合に、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを防止するように機能する、前記装置。
【請求項３】
請求項１に記載の装置であって、１つの割込み処理プログラムの優先度が前記割込み処理プログラムに付随するプログラミング可能な優先度レベルによって設定される、前記装置。
【請求項４】
請求項１に記載の装置であって、前記待機中の割込み処理プログラムが、
新しく検出された割込み事象と、
１またはそれ以上の以前に検出されている割込み事象であって対応する割込み処理プログラムがまだ始動していない割込み事象と、のうちの１つに対応している、前記装置。
【請求項５】
請求項１に記載の装置であって、前記ネスト状の割込みコントローラが、複数の割込み事象のそれぞれ１つに対応する記憶値に応答して、
待機状態にある、対応する割込み処理プログラムと、
アクティブ状態にある、対応する割込み処理プログラムと、
前記対応する割込み処理プログラムに付随する優先度レベルと、
を表示する、前記装置。
【請求項６】
請求項１に記載の装置であって、１またはそれ以上のアクティブな割込み処理プログラムによって取って代わられた処理に対応する状態データを記憶するように動作する、スタック・データ記憶を含む、前記装置。
【請求項７】
請求項６に記載の装置であって、前記複数のアクティブな割込み処理プログラムの任意のものに付随する前記最も高い優先度が、前記スタック・データ記憶中の空きスペースが予め定められた空きスペース・レベルよりも低下したときに増分される、前記装置。
【請求項８】
請求項７に記載の装置であって、前記複数のアクティブな割込み処理プログラムの任意のものに付随する前記最も高い優先度が、可能な最大優先度レベルよりも低いプログラミング可能な優先度レベルに増分される、前記装置。
【請求項９】
請求項８に記載の装置であって、前記予め定められた空きスペース・レベルが、前記プログラミング可能な優先度レベルよりも高い優先度を有する割込み処理プログラムによって取って代わられるときに利用できるように前記スタック・メモリ中に空きスペースを残すように設定される、前記装置。
【請求項１０】
請求項７に記載の装置であって、マルチプロセッサ・システム内に複数のプロセッサを含み、前記スタック・データ記憶が前記複数のプロセッサ間での通信用として使用される共用のハードウエア・スタックである、前記装置。
【請求項１１】
請求項６に記載の装置であって、前記スタック・データ記憶がスタック・メモリである、前記装置。
【請求項１２】
データを処理する方法であって、前記方法は、
プログラム命令の制御下で複数の割込み事象による割込みに対応する処理動作を実行する工程と、
動作開始したが未終了の複数のアクティブな割込み処理プログラムのネスト化された実行を制御する工程であって、前記複数の割込み処理プログラムのそれぞれのものに付随する優先度に基づいて、待機中の割込み事象が１またはそれ以上のアクティブな割込み処理プログラムに取って代わることを制御する前記工程と、
を含み、ここで
与えられたアクティブな割込み処理プログラムの優先度は、前記与えられたアクティブな割込み処理プログラムが動作開始したがまだ終了していない間に変更可能であり、更に
前記制御工程は、
（ｉ）もし待機中の割込み処理プログラムの優先度がアクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも高いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可し、また
（ｉｉ）もし待機中の割込み処理プログラムの優先度がアクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも低いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可しない、
前記方法。
【請求項１３】
請求項１２に記載の方法であって、前記ネスト状の割込みコントローラが、前記待機中の割込み処理プログラムに付随する前記優先度が前記複数のアクティブな割込み処理プログラムの任意のものに付随する最も高い優先度に等しい場合に、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを防止するように機能する、前記方法。
【請求項１４】
請求項１２に記載の方法であって、１つの割込み処理プログラムの優先度が前記割込み処理プログラムに付随するプログラミング可能な優先度レベルによって設定される、前記方法。
【請求項１５】
請求項１２に記載の方法であって、前記待機中の割込み処理プログラムが、
新しく検出された割込み事象と、
１またはそれ以上の以前に検出されている割込み事象であって、対応する割込み処理プログラムがまだ始動していない割込み事象と、のうちの１つに対応している、前記方法。
【請求項１６】
請求項１２に記載の方法であって、前記制御工程が複数の割込み事象のそれぞれ１つに対応する記憶値に応答して、
待機状態にある、対応する割込み処理プログラムと、
アクティブ状態にある、対応する割込み処理プログラムと、
前記対応する割込み処理プログラムに付随する優先度レベルと、
を表示する、前記方法。
【請求項１７】
請求項１２に記載の方法であって、スタック・データ記憶が１またはそれ以上のアクティブな割込み処理プログラムによって取って代わられた処理に対応する状態データを記憶するように動作する、前記方法。
【請求項１８】
請求項１７に記載の方法であって、前記複数のアクティブな割込み処理プログラムの任意のものに付随する前記最も高い優先度が、前記スタック・データ記憶中の空きスペースが予め定められた空きスペース・レベルよりも低下したときに増分される、前記方法。
【請求項１９】
請求項１８に記載の方法であって、前記複数のアクティブな割込み処理プログラムの任意のものに付随する前記最も高い優先度が、可能な最大優先度レベルよりも低い、プログラミング可能な優先度レベルに増分される、前記方法。
【請求項２０】
請求項１９に記載の方法であって、前記予め定められた空きスペース・レベルが、前記プログラミング可能な優先度レベルよりも高い優先度を有する割込み処理プログラムによって取って代わられるときに利用できるように、前記スタック・メモリ中に空きスペースを残すように設定される、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムに関する。更に詳細には、本発明はネスト状になった割込みをサポートするデータ処理システムと、そのようなネスト状割込みシステムにおける割込み優先順位の制御とに関する。
【背景技術】
【０００２】
ネスト状の割込みをサポートするデータ処理システムについては知られている。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ネスト状の割込みをサポートするデータ処理システムでは、既にアクティブな割込みがより優先度の高い新しい割込みによって取って代わられることが起こる。その結果、より優先度の高い割込みが後から到着することによって先取り（ｐｒｅ−ｅｍｐｔｉｏｎ）が繰り返されて、複数レベルにネスト化された割込み構造ができあがる。そのようなシステムは割込み駆動式処理の効率的な管理に適しており、特に優先度の高い割込みに迅速に応対することを可能にする。このような動作の結果、そのようなシステムは、実時間あるいは実時間に近い動作が望ましい埋め込み型の、特に深く埋め込まれた処理環境に適したものとなる。そのようなシステムでは、高い優先度の割込みを処理する動作が開始される前に要する時間がしばしば重要であり、それが動作特性を制約する。
【０００４】
そのようなネスト状のシステムでは、異なる割込みに付随する優先度を動的に変更できることもまた望まれている。そのような変更ができれば、システムが変化する環境に適合できるようになり、その結果、その他の割込みよりも高いあるいは低い優先度レベルを有する特別な割込みが得られる。そのようなことが望まれる例は、特別な割込みが何かの結果の判定に付随する場合である。それは特別に決められた締め切りまでに実現することが必要なものであり、その締め切りが近づくにつれて、問題の割込みを処理すべく催促され、それに伴ってその優先度も引き上げられる。
【課題を解決するための手段】
【０００５】
本発明のデータ処理システムはネスト状の割込みコントローラを備え、ネスト状のアクティブな割込みをサポートする。異なる割込みに付随する優先度レベルはシステムが稼動中にも変更（多分、プログラミング可能）できる。ネスト状になった割込み構造での優先度逆転に伴う問題を回避するために、ネスト状の割込みコントローラは、待機中の割込みが既存のアクティブな割込みに取って代わるべきかどうかを判断するときに、待機中の割込みの優先度を、一緒にネスト構造をなす現在アクティブな複数の割込みのうちで最も高い優先度と比較する。
【０００６】
１つの態様に従えば、本発明はデータ処理のための装置を提供し、前記装置は、
処理論理回路であって、プログラム命令の制御下で処理動作を実行するように動作し、また複数の割込み事象による割込みに対応する前記処理論理回路と、
ネスト状割込みコントローラであって、動作開始したが未終了の複数のアクティブな割込み処理プログラムのネスト的な実行を制御するように動作し、また前記複数の割込み処理プログラムのそれぞれに付随する優先度に応答して、１またはそれ以上のアクティブな割込み処理プログラムを待機中の割込み処理プログラムによって取って代える操作を制御する前記ネスト状割込みコントローラと、を含み、ここで
与えられたアクティブな割込み処理プログラムの優先度は、前記与えられたアクティブな割込み処理プログラムが動作開始したがまだ終了していない間に、変更可能であり、更に
前記ネスト状割込みコントローラは
（ｉ）もし待機中（ｐｅｎｄｉｎｇ）の割込み処理プログラムの優先度が、アクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも高いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可するし、また
（ｉｉ）もし待機中の割込み処理プログラムの優先度が、アクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも低いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可しないように動作する。
【０００７】
本発明の方法は、割込みがネスト化され、割込みに付随する優先度が変更されるデータ処理装置においては、ネスト状の割込み構造中で優先度の逆転問題が起こりうることを認識している。そのような状況の一例は、現在１つの割込みが処理されていて、その背後で優先度の低い割込みがネスト状になっている状況において、その現在の割込み自体の優先度が低く変更された場合である。この場合には、現在優先度の高い割込みが、低い優先度の割込みの背後に回る事態に陥る。次にもし新しい割込みが現れて、それの優先度が現在実行中の割込みと比較されれば、それが現在実行中の割込みに取って代わる可能性があり、新しく到着した割込みよりも高い優先度を有する、本当ならより高い優先度のものがネスト構造中に深く埋め込まれて、その処理を更に遅らせることになるかもしれない。この問題の別の例は、既に取って代わられて現在実行中の割込みの背後にある割込みがその優先度を高く変更される場合である。後続の割込みは現在実行中の割込みよりも高いが埋め込まれた割込みよりも低い優先度を持つかもしれない。従って、新しく到着した割込みの優先度を現在実行中の割込みの優先度と比較することが不適切な先取りを生じさせ、高い優先度の割込みをネスト構造深く埋め込んで遅らせる可能性がある。
【０００８】
本発明の方法は、ネスト状割込みコントローラが現在実行中のアクティブな１つの割込みだけに基づくのではなく、ネスト状のアクティブな割込みすべての中での最も高い優先度に基づいて優先度の比較を行なった後で、先取りを許可するように配慮することでこの問題を解決する。ネスト状の割込みのスタックは、全体として、ネスト状スタックの中の最高優先度の割込みの優先度レベルを等価的に引き継ぐ。このようにすれば、優先度レベルの変更による優先度の逆転が発生しても、それ以上不適切な先取りは起こらず、高い優先度の割込みはクリアされ、それより前の割込みもクリアされる。
【０００９】
待機中の割込みが、複数のアクティブな割込みのうちで最も高い優先度よりも高いあるいは低い優先度を有するかどうかに基づいて先取りを制御することが明解なことは分かっているが、優先度が等しい場合には、好適な実施の形態は先取りを禁止するように動作する。これは、長時間にわたり突出してきた割込みを処理するほうが、優先度は同じだがつい最近現れた割込みを処理するよりも一般に好ましいからである。
【００１０】
明らかなように、優先度レベルの変更はいろんなやり方で行なうことができ、例えば検出された環境条件に直接応答して行なうことができるが、好適な実施の形態では優先度レベルはプログラミング可能な優先度レベルである。先取りすべきかどうかを決定する対象である待機中の割込み処理プログラムは、新しく検出された割込み事象、あるいはまだ対応する割込み処理プログラムは始動していない以前に検出されていた１またはそれ以上の割込み事象に対して応答することができる。現在実行中の割込みに取って代わるのに十分な優先度を持たないため、まだ始動していない多くの待機中割込みが存在できる。
【００１１】
各々の割込み事象に対して、それらに対応する割込み処理プログラムが待機中かアクティブかを表示するための値と、その割込みに付随する優先度レベルと、を保持するための記憶を備えたネスト状割込みコントローラを提供することが便利である。待機中およびアクティブの値はネスト状の割込みコントローラ自身によって設定でき、優先度レベルはユーザがプログラムできる。
【００１２】
本発明の方法の好適な実施の形態は先取りされた処理に対応する状態データを記憶するためにスタック・データ記憶（ｓｔａｃｋ  ｄａｔａ  ｓｔｏｒａｇｅ）を利用する。スタック・データ記憶を使用するそのようなシステムでは、スタック・データ記憶容量を超えないように割込み処理を制御するためにアクティブな割込みに付随する優先度レベルの変更が行なわれる。特に、スタック・メモリ（ｓｔａｃｋ  ｍｅｍｏｒｙ）などのスタック・データ記憶にある空きスペースが、予め定められたレベル以下になるか、使い尽くされたときは、優先度レベルが増分される。このようにアクティブな割込みの優先度レベルを強化することによってそれらが先取りされないように、またそれらの実行が継続されるようにスタック・データ記憶が解放される。優先度レベルを増分する予め定められたレベルというのは、真に高優先度の割込みが出現したときに強化されたレベルを有する割込みに取って代わることができるように、実現可能な最高レベルにならないように選ばれる。スタック・データ記憶中の一定の容量は残しておいて、真に最高優先度の割込みが利用できる記憶場所を確保しておく。
【００１３】
そのような優先度レベル制御の別の一例は、現時点でアクティブな割込みと、ローカルＣＰＵ内のネスト構造のそれらの順位とを記憶するためにハードウエア・スタックを使用するマルチプロセッサ・システムに見られる。ハードウエア・スタックが満杯になるか、その空きスペースが一定のレベル以下に減少したときに、優先度が増分される。
【００１４】
別の態様から見たとき、本発明はデータを処理する方法を提供する。その方法は、
プログラム命令の制御下で、複数の割込み事象による割込みに対応する処理動作を実行する工程と、
動作開始したが未終了の複数のアクティブな割込み処理プログラムのネスト化された実行を制御する工程であって、前記複数の割込み処理プログラムのそれぞれのものに付随する優先度に基づいて、待機中の割込み事象が１またはそれ以上のアクティブな割込み処理プログラムに取って代わることを制御する前記工程と、
を含み、ここで
与えられたアクティブな割込み処理プログラムの優先度は、前記与えられたアクティブな割込み処理プログラムが動作開始したがまだ終了していない間に変更可能であり、更に
前記制御工程は
（ｉ）もし待機中の割込み処理プログラムの優先度がアクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも高いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可するし、また
（ｉｉ）もし待機中の割込み処理プログラムの優先度がアクティブな複数の割込み処理プログラムのうちの最も高い優先度よりも低いようであれば、前記待機中の割込み処理プログラムが前記複数のアクティブな割込み処理プログラムに取って代わることを許可しないように動作する。
【００１５】
本発明の上記及びその他の目的、特徴、及び利点は添付図面と関連付けて読むべき以下の例示的な実施の形態についての詳細な説明から明らかであろう。
【実施例】
【００１６】
図１は、データ・メモリ６及び命令メモリ８につながれたプロセッサ・コア４を含むデータ処理システム２を模式的に示す。深く埋め込まれた割込み駆動式のシステムでは、データ・メモリ６及び命令メモリ８はそれぞれＲＡＭ及びフラッシュ・メモリの形で別々に設けられるのが普通である。
【００１７】
プロセッサ・コア４はレジスタ・バンク１０、乗算器１２、シフタ１４、及び加算器１６を含むが、これらは一緒になって、命令デコーダ１８によって生成される制御信号の制御下でデータ処理動作を実行するように動作する処理論理回路を構成する。命令デコーダ１８は命令パイプライン２０に応答するが、後者は図示の例では３ステージの命令パイプラインであって、現在実行ステージにある命令が命令デコーダ１８で復号され、用いられて処理論理回路１０、１２、１４、及び１６用の適切な制御信号を生成するようになっている。
【００１８】
プロセッサ・コア４中のロード記憶ユニット２２はデータの値をデータ・メモリ６から読み出したり書き込んだりする作業を行なう。そのようなロード記憶ユニット２２には必要に応じて書込みバッファ及び読み書きバッファを設けることができる。
【００１９】
プロセッサ・コア４は更に、外部からのリセット信号のほかに、Ｎ個の別々の割込み信号に応答するネスト状のベクトル割込みコントローラ２４を含む。ネスト状のベクトル割込みコントローラ２４はまた、故障（ｆａｕｌｔ）及びアボート（ａｂｏｒｔ）信号などの内部の割込み的信号も受け付ける。このネスト状のベクトル割込みコントローラには、別のマスキング不可能な割込み信号（図示されていない）も供給されよう。ネスト状のベクトル割込みコントローラ２４は受信した割込み信号に応答して、以下で更に説明するが、プロセッサ・コア４による割込み処理を制御するための制御信号を生成する。特に、受信した割込み信号は既存のユーザ・プログラム型の処理や既存の割込み処理を、その割込みに付随する優先度レベルの値に依存して、先取りするかあるいは先取りしない。制御テーブル２６がネスト状のベクトル割込みコントローラ２４内部に設けられて、どの割込みが待機中でどれがアクティブであるかを追跡し、またプログラミング可能な優先度レベル値を記憶するように機能している。
【００２０】
図２はネスト状のベクトル割込みコントローラ２４の制御テーブル２６を模式的に示す。各々の割込み信号に対して、その割込み信号に対して割込みが待機中であるか、あるいは現在アクティブであるかを示すそれぞれの状態フラグが記憶されるようになっている。待機中の割込みというのは、割込み信号がネスト状のベクトル割込みコントローラ２４で検出されたが、まだ起動されていない、すなわち付随する割込み処理プログラムがまだ実行を開始していないものを指す。アクティブな割込みというのは、割込み処理プログラムが実行を開始したものであるが、ただしそれ自身がもっと優先度の高い割込みによって取って代わられたため現時点では実行されていない場合もある。
【００２１】
図示の例では、現時点でアクティブなものは割込みＩｎｔ０とＩｎｔ３であることが分かる。これらのうちで現在実行中のものは１つだけで、他方は先取りされている。現在実行中の割込み処理プログラムは、その優先度がより高い場合にのみ、先に駆動されていた割込み処理プログラムに取って代わることができたはずである。割込みＩｎｔ２は待機中であるがまだ駆動されていない。このことは割込みＩｎｔ２が現在実行中の割込み処理プログラムより低いかあるいはそれと等しい優先度を有するため、それらの既存のアクティブな割込み処理プログラムに取って代わることができていないことを意味する。
【００２２】
図２は各々の割込みに付随する優先度レベルの値が第１部分２８と第２部分２９とに分離されていることを示す。明らかなように、これは好ましい特徴であるが、本発明の方法のすべての実施の形態がこの特徴を利用する必要はない。例えば、単純に１つに統合された優先度レベルの値を使用することもできる。これら２つの部分の境界はシステム全体で可変である。２つの部分の分割はプログラミング可能なマスク値によって等価的に実行されよう。第１の部分２８は先取りグループ値であり、それはどの割込みが他の割込みに取って代わるかを制御するように機能する。同じ第１部分２８を共有する割込みが互いに取って代わることはない。既存のアクティブな割込みよりも高い優先度に対応する第１部分２８を有する割込みは、既存のアクティブな割込みが待機状態に入ったときにそれらに取って代わる。逆に、待機中の割込みの第１部分が現在アクティブな割込みの第１部分よりも低いときは、それは先取りを行なわず、その優先度の高いアクティブな割込みがその処理を完了するまで実行を開始しない。
【００２３】
優先度レベルの値の第２部分２９は、同じ先取りグループの割込みのうちで、実行の相対的な順序を制御するように機能する。同じ先取りグループから２個以上の割込みが待機中であるときに効果を持つ。この場合、同じ先取りグループからのそれらの割込みを実行する順序は第２部分２９で示される最も高い優先度を持つものによって制御される。このように、先取りを制御する第１部分２８と先取りグループ内での相対順序を制御する第２部分とに分割する方法は、先取り行動の制御を細かく、複雑にレベル分けして行なうのに有効である。１つの特別な割込みに着目すると、それは状態の保存及び回復の点では先取りに伴う損失を正当化するのに十分高い優先度を持たないかもしれないが、それにも拘わらず、それと同じ先取りグループのうちから他の既存の待機中の割込みに先んじて実行するのに十分な高い優先度を持つかもしれない。
【００２４】
制御テーブル２６に記憶された優先度レベルの値はプログラム制御下で動的に変更できる。制御テーブル２６は、例えば、適当なソフトウエアで制御された書き込みによって、特別なメモリ場所にメモリ・マッピングされ、書き込まれよう。
【００２５】
図２に示すように、第１部分２８及び第２部分２９は連続しており、与えられた割込みに関する優先度レベルの値の内部で接している。図示した特別な例では、優先度レベルの値は４ビットの値であり、第１部分２８に属する３ビットと、第２部分２９に属する１ビットで構成されている。この構成は８レベルの先取りグループを提供し、先取りグループの中では２レベルの相対順序を提供する。完全に一致する優先度レベルの値を有する割込みは、それらの割込み番号の順に処理されるか、あるいはそれらが出現する順に処理されよう。
【００２６】
先に述べたように、第１部分２８と第２部分２９との分割は、先取りグループ・レベル及び順序レベルを異なる細かさのレベルになるようにプログラムによって設定できる。極端なケースを考えると、ただ１つの先取りグループを設けて、優先度レベルの値の４ビットをすべて割込み相互間の相対的順序の指定のために専用的に使用して、互いに先取りできないようにすることも可能である。
【００２７】
図３はスタック・メモリ３０の形のスタック・データ記憶を模式的に示しているが、これはデータ・メモリ６中の１つの領域である。スタック・メモリ３０を制御する場合の通常のやり方に従って、スタック・ポインタ値がスタックのトップの位置を示すように維持し、その位置からデータが読み出され、またその位置にデータは書き込まれる。コンテキスト／状態データを保存する必要があるときは、それは予め定められた順序でスタック・メモリ３０に書き込まれる。図示した例では、保存された状態データはプロセッサ・ステータス・レジスタ値ＣＰＳＲ、プログラム・カウンタ値ＰＣ、リンク・レジスタ値ＬＲ、スクラッチ・レジスタ値Ｒ１２、及び４個の汎用のプロセッサ・レジスタ値Ｒ０−Ｒ３を含む。割込みがネスト状になっているため、複数レベルのコンテキスト・データを保存する必要があり、従ってまたコンテキストもスタック・メモリ３０に保存される。図３の例では、保存された最初の状態データはコンテキスト０に関連する。保存すべきコンテキスト０に関連するこの状態データをトリガーした割込みは次にそれ自身が先取りされて、その結果、部分的に完了した割込み処理プログラムのコンテキスト１に対応する状態データをスタック・メモリ３０に保存することが必要になる。このように、割込み相互のネスト深度が増大及び減少するに従って、状態データがスタック・メモリ３０に刻まれ、また解放される。Ｒ１２及びＲ０−Ｒ３のようなレジスタ値を保存する役目のソフトウエアにとってそれは正常な状態である。この保存をハードウエアで行なえば、テイル・チェーン（ｔａｉｌ  ｃｈａｉｎｉｎｇ）技術に付随する処理が簡略化される。更に、割込み処理のためのソフトウエアは、特殊な割込み処理用ソフトウエアとは逆の通常のソフトウエアにより近いものにできる。
【００２８】
図４は図２の優先度レベルの値のプログラミング可能性に伴う問題点を模式的に示している。図４はスタック・メモリ３２の一部を示しているが、そこでは割込みＩｎｔＡに対応する現在実行中のアクティブな割込み処理プログラムが実行中で、割込みＩｎｔＢ及びＩｎｔＣに対応するネスト状の割込みがその背後に存在する。これらの割込みは互いにうまく先取りできるので、１つがネスト階層を上方へ進むと割込みに付随する優先度レベルが単調に増大することが期待できる。現在実行中のアクティブな割込みＩｎｔＡは最も高い優先度、すなわち優先度レベルの値として２を有する。
【００２９】
図４には、現在アクティブな割込みに付随する優先度レベルの値を変更して、スタック・メモリ３２中で不適切な優先度の逆転が発生する２つの可能なケースが示されている。上の例では、割込みＩｎｔＡはそれの優先度レベルが下げられて、今やそれ自身が取って代わった割込みＩｎｔＢよりも低い優先度になっている。これは、もし割込みＩｎｔＡよりも高いが、割込みＩｎｔＢよりも低い優先度を有する別の割込みが出現すれば、それが不適切なやり方で現在実行中の割込みＩｎｔＡに取って代わり、割込みＩｎｔＢの完了を不利に遅らせるという問題を引き起こす原因となる可能性がある。この問題を回避するために、制御テーブル２６に記憶した優先度の値を用いてネスト状のベクトル割込みコントローラ２４が現在スタック・メモリに保持されているすべての割込みに対応する１つの優先度の値、更に詳細にはそれらの優先度の値のうちで最も高い値を決定する。このようにすれば、上述の上の例では、現在実行中のアクティブな割込み、すなわちＩｎｔＡが優先度の値５を有するものの、スタックは優先度の値３を有するものとして取り扱われるため、新しく検出される割込みはＩｎｔＡの実行継続に取って代わることがなく、そのためＩｎｔＢの実行は、それが３よりも高い優先度を持たない限り遅らされてしまう。このことはＩｎｔＢに付随する割込み処理が不適切に遅延されないことを保証する。
【００３０】
図４の下側の例は、割込みＩｎｔＣに付随する優先度の値を、その割込みが既に先取りされて、スタック上のネスト状の割込み中に埋め込まれている状態で、どのように増大させればよいかを示している。本発明の方法に従えば、この埋め込まれた割込みＩｎｔＣの優先度の変更はそのスタックに付随する優先度レベルの値全体に反映されるため、新たに出現する割込みが割込みＩｎｔＣに付随するものよりも高い優先度レベルの値を有しない限り、割込みＩｎｔＣがクリアされるまではそれ以上の先取りが許可されないことになる。
【００３１】
現在アクティブな割込み処理プログラムのスタックに付随する最も高い優先度レベルに等しい優先度レベルを有する待機中の割込みが出現した場合には、それは先取りを行わない。
【００３２】
図４に示す例は不適切な先取りの防止に関連する。現在は待機中でアクティブになるのを抑制されていた割込みが、スタック全体としての優先度レベルの低下の結果として先取りをトリガーすることが適当になるように優先度レベルを変更することも可能である。そのような待機中の割込みは新しく検出された割込みでもよいし、あるいは以前に検出されていたがまだ始動していない割込みでもよい。
【００３３】
上で述べた優先度レベルの値の変更は、スタック・メモリ３０によって消費されるメモリ空間の大きさを制御する方法として実行することができる。スタック・メモリ資源が消費されるにつれて、ネスト状のアクティブな割込みに付随する優先度レベルは、スタック・メモリ資源を更に要求するであろう更なる先取りを防止するために増大させることができる。このようにすれば、スタックのオーバーフローを回避できる。特に好適な制御方法によれば、アクティブな割込みに付随する優先度レベルを上昇させることによって、スタック・メモリの使用量をその容量の四分の三に保持できる。スタック・メモリの四分の一を追加の先取り用として確保しておくことによって、最高優先度の割込み処理プログラムがそのスタック・メモリ上の空きスペースを利用して先取りを実行することが可能となる。
【００３４】
優先度レベルの値を増やすこの方法は図５に模式的に示すようなマルチプロセッサ・システムにも採用することができる。このシステムでは各々のプロセッサ８２に対してアクティブな割込み８０のハードウエア的スタックが用意されている。割込み分配器８４は、テーブル８８にプログラムされた優先度の階層構造に従って相互の待機関係が決まる割込み信号の配列８６に応答する。テーブル８８は、各割込みに対する優先度レベルを示すデータ及びそれがどのプロセッサ（単数または複数）８２に宛てて発行されるかのデータを記憶する。割込み分配器８４は分配バス９０を介して、各プロセッサ８２に付随する割込みコントローラ９２と通信する。割込みコントローラ９２はそれぞれの現在の最高優先度のアクティブな割込みを示す信号９４を割込み分配器８４に送る。この状況で、ハードウエア・スタック８０が満杯あるいは満杯に近くなった場合には、スタック中に表示されている割込みの優先度レベルの値を等価的に増大させて、それ以上の先取りが発生するのを防止し、また提供されているハードウエア・スタックのオーバーフローを防止する。この優先度レベルの強化は信号（単数または複数）９４によって通知される。
【００３５】
図６はメインの割込み制御の流れを模式的に示す。システムがリセットによって復帰するとリセット処理用ハードウエアが工程１００でリセット処理を制御する。リセット処理が終了すると、通常のユーザ・プログラムが始動して、命令実行は工程１０２に進む。この命令実行の間で、工程１０４はネスト状のベクトル割込みコントローラ２４によって検出されている待機中の割込みが存在するかどうかを検出し、あれば待機中として制御テーブル２６に記録し、発生中のすべての既存の割込み処理よりも高い優先度を持つものとして記録する。そのような高い優先度の割込みが待機中でなければ、処理は工程１０６に進み、そこでプログラム・カウンタの値を調べて、それがメモリ位置の先頭のような予め定められた特別なリターン・アドレスに対応するリターン・アドレスでないかどうかを確認する。もしそのようなリターン・アドレスが検出されなければ、処理は工程１０２に戻り、次の命令を実行する。あるいは、割込み処理プログラムの終わりに割込み命令からの特別なリターンを配置することもできる。
【００３６】
もし工程１０４での判断が、それが割込みそれ自身であろうとあるいはユーザの処理であろうと現在処理中のものよりも高い優先度の割込みが待機中であるということであれば、工程１０８において、以下に詳細に説明するように先取り動作をトリガーする。このとき、２つ以上の待機中の割込みがあって、それらの優先度の値の第１部分２８が等しく、またいずれも先取りをトリガーしても構わないほど十分高い優先度を有していれば、それらの優先度の値の第２部分２９で大きいほうの割込みを選択する工程１１０が含まれる。次に工程１０２は新しく駆動された割込みの第１命令を実行する。
【００３７】
もし工程１０６での判断がプログラム・カウンタが割込み処理の終了を示す予め定められたアドレスを有しているということであれば、以下で詳細に説明するように、処理が工程１０４に戻る前に工程１１２が割込み動作からのリターンを実行する。
【００３８】
図７は、以下で述べるようなテイル・チェーンがサポートされている場合に取られるメインの割込み制御の流れを模式的に示す。明らかなように、本発明の方法の別の実施の形態は以下で、特に図７及び図１０に関して述べる、テイル・チェーン技術を提供する必要はない。システムがリセットから復帰すると、リセット処理用ハードウエアが工程３４でリセット処理を制御する。リセット処理が終了すると、通常のユーザ・プログラムが始動して、命令実行が工程３６に進む。この命令実行の間に、工程３８ではネスト状のベクトル割込みコントローラ２４によって検出されている待機中の割込みが存在するかどうかを検出し、あれば待機中として制御テーブル２６に記録し、発生中のすべての既存の割込み処理よりも高い優先度を持つものとして記録する。そのような高い優先度の割込みが待機中でなければ、処理は工程４０に進み、そこでプログラム・カウンタの値を調べて、それがメモリ位置の先頭のような予め定められた特別なリターン・アドレスに対応するリターン・アドレスでないかどうかを確認する。もしそのようなリターン・アドレスが検出されなければ、処理は工程３６に戻り、次の命令を実行する。あるいは、割込み処理プログラムの終わりに割込み命令からの特別なリターンを配置することもできる。
【００３９】
もし工程３８での判断が、それが割込みそれ自身であろうとあるいはユーザの処理であろうと現在処理中のものよりも高い優先度の割込みが待機中であるということであれば、工程４１において、以下に詳細に説明するように先取り動作をトリガーする。この先取り動作の後で、処理は工程３６に進んで、その先取りを実行させた割込み処理プログラム中の最初の命令が実行される。
【００４０】
もし工程４０での判断が、プログラム・カウンタが割込み処理の終了を示す予め定められたアドレスを有しているというものであれば、工程４２が現在スタックにあるアクティブな割込みあるいはユーザ処理よりも高い優先度の値を有する待機中の割込みがないかどうかを確認する。もしそのような待機中の割込みが存在すれば、処理は工程４４に進み、その待機中の割込みに対して、後に詳しく説明するように保存操作なしでテイル・チェーン操作が実行される。工程４４におけるこのテイル・チェーン操作の後、工程３６に戻って、そこで新しく駆動された割込み中の最初の命令が実行される。
【００４１】
もし工程４２での判断が、スタック中にありアクティブな処理よりも高い優先度の割込みが待機中でないということであれば、工程４６は以下で詳しく説明するように、その先取りされた処理が再開される工程３６に処理が戻る前に、割込み処理からのリターンを実行する。
【００４２】
図８は先取りの間に実行される処理を模式的に示す。工程４８で先取りが開始されると、命令側及びデータ側のハードウエア制御動作が並列的に始動する。データ側では、工程５０において記憶すべき状態データがスタック・メモリ３０にプッシュされる。多様なレジスタ値をプッシュするこの操作が完了するまでには複数の処理サイクルを必要とする。データ側操作と平行して、命令側では工程５２において、その先取りをトリガーした割込みに付随するプロセッサのベクトル・テーブルから、標的割込み処理プログラムに関する新しいプログラム・カウンタ値を読み取る。次に、工程５４はネスト状のベクトル割込み２４によって生成される任意の後続の割込み信号の検出を確認して、工程４８で始動した初期の先取りをトリガーした割込み事象よりも優先度の高い新しい割込み事象が検出されたことを表示する。もしそのような後続の割込み信号が検出されれば、処理は工程５２に戻って、その後続の割込みに付随する新しいプログラム・カウンタ値がベクトル・テーブルから読み取られ、メモリから適切な割込み処理コードの読み出しと命令パイプライン２０への送出が開始できるようにされる。もし工程５４で後続の割込み信号が検出されなければ、工程５６は命令パイプライン２０を割込み処理コードで満たす動作を開始する。この割込み処理コードがパイプラインにロードされてしまうと、工程５８では次の工程が実行されて、後続の割込み信号が発生していないかが再び確認される。もしそうであれば、工程５２に戻ってその後続の割込みに対する処理が行なわれる。明らかなように、図８では後続の割込みの確認がパイプライン充填工程５６を囲む工程５４及び５８で発生するように示されているが、実際には後続の割込み確認はパイプライン充填動作と平行して連続的に実行されよう。
【００４３】
命令側のパイプライン充填とデータ側の状態データ記憶がどちらも完了すると（工程６０でシンクロナイザとして示すように）、処理は図示のように工程３６に進んで命令が実行される。この並列操作によって処理速度が向上し、パイプライン充填の再起動によって後続の割込みが受け入れ可能となる。
【００４４】
図９は割込み処理の流れからのリターンを模式的に示す。割込みからのリターンが始まると、ネスト状のベクトル割込みコントローラ２４は工程６２でスタック・メモリ３０から状態データを取り出すように機能する。工程６４では、リターンを実行しようとしている割込みまたは処理よりも優先度が高い後続の割込みが到着していないか確認が行なわれる。もしそのような高優先度の割込みが検出されれば、工程６６でテイル・チェーン動作が始動されて、スタック・メモリ３０、スタック・ポインタ、あるいは取り出されたレジスタ上の保存データに対して必要とされる適切な修復が行なわれる。
【００４５】
もし工程６４で高優先度の後続の割込みが検出されなければ、工程６８では戻された割込みあるいは処理に関する状態データの最後のものの復元が検出され、それが終了すると処理は工程７０に移って、スタック・ポインタの修正が行なわれ、工程３６で命令実行が再開される前に、リンク・レジスタ及びパイプラインが再ロードされる。
【００４６】
もしシステムが割込み専用システムであれば、待機状態の割込みが存在しない場合の割込みからのリターンを利用して、ハードウエアが低電力消費のスリープ状態への移行をトリガーする。この状態では、処理は中断されて、次の割込み事象が検出されるのを待つ。
【００４７】
図１０はテイル・チェーン処理の流れを模式的に示す。この処理の流れは図６に示したものと同じであるが、この例では１つの割込み処理プログラムが完了した後、以前の状態に戻ることなく別の１つが始動するときにテイル・チェーン動作が発生するため、工程５０で状態データを保存する必要がない点が異なっている。従って、終了する割込み処理プログラムに付随する状態を保存する必要がない。割込みへ移行するときに状態データを保存するために要する時間が普通は制限要因になっている。命令パイプライン２０に実行すべき割込み処理コードを再ロードすることは通常はもっとずっと高速で行なわれる。このように、割込み処理が次々と発生する状況で、テイル・チェーン技術は割込み応答をスピードアップすることができる。
【００４８】
本発明の例示的実施の形態について、ここに図面を参照しながら詳細に説明してきたが、本発明はそれらの正確な実施例に限定されないこと、また当業者であれば特許請求の範囲に定義された本発明の範囲及び精神から外れることなく、各種の変更及び修正を思いつくことを理解すべきである。
【図面の簡単な説明】
【００４９】
【図１】ネスト状のベクトル割込みコントローラを含むデータ処理システムの模式図。
【図２】ネスト状のベクトル割込みコントローラで使用される制御テーブルの模式図。
【図３】複数の状態データの組を含むスタック・メモリの模式図。
【図４】ネスト状の割込み中に発生しうる優先度の逆転の状況を示す２例の模式図。
【図５】本発明の方法のいずれかを採用するマルチプロセッサ・システムの模式図。
【図６】図１のシステムで行なわれる割込み駆動式処理に関するメインの制御フローを模式的に示すフロー図。
【図７】図１のシステムで行なわれる割込み駆動式処理に関する別のメインの制御フローを模式的に示すフロー図（遅れて到着する割込みの処理についての説明は含まない）。
【図８】先取りのフロー制御を模式的に示すフロー図。
【図９】割込みのフロー制御からのリターンを模式的に示すフロー図。
【図１０】１つの割込みの処理の直後に別の割込みを処理するときの、フロー制御を模式的に示すフロー図。
【符号の説明】
【００５０】
２  データ処理システム
４  プロセッサ・コア
６  データ・メモリ
８  命令メモリ
１０  レジスタ・バンク
１２  乗算器
１４  シフタ
１６  加算器
１８  命令デコーダ
２０  命令パイプライン
２２  ロード記憶ユニット
２４  ベクトル割込みコントローラ
２６  制御テーブル
２８  第１部分
２９  第２部分
３０  スタック・メモリ
３２  スタック・メモリ
８０  アクティブな割込みのスタック
８２  プロセッサ
８４  割込み分配器
８６  割込み信号の配列
８８  テーブル
９０  分配バス
９２  割込みコントローラ
９４  信号
【図１】
2005228294.tif 000003
【図２】
2005228294.tif 000004
【図３】
2005228294.tif 000005
【図４】
2005228294.tif 000006
【図５】
2005228294.tif 000007
【図６】
2005228294.tif 000008
【図７】
2005228294.tif 000009
【図８】
2005228294.tif 000010
【図９】
2005228294.tif 000011
【図１０】
2005228294.tif 000012