(57)【要約】【課題】  １つのプロセッサが割り込みを受け付け、その割込みの要因に応じて、割込み処理を他のプロセッサに実行させる。【解決手段】  複数のプロセッサにより割り込みを処理するマルチプロセッサシステムにおいて、１つのプロセッサが外部デバイスからの割込みを受け付け、その割込みの要因に応じて、割込みに対応する割込み処理を他のプロセッサに実行させる。【選択図】      図２
2008065713.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサにより割り込みを処理するマルチプロセッサシステムであって、
１つのプロセッサが外部デバイスからの割込みを受け付ける受付手段と、
前記受付手段で受け付けた割込みの要因に応じて、前記割込みに対応する割込み処理を他のプロセッサに実行させる割込み処理制御手段と、
を有することを特徴とするマルチプロセッサシステム。
【請求項２】
前記割込み処理制御手段は、前記割り込みに対応する割込み処理をアイドル状態のプロセッサに実行させることを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記割込み処理制御手段は、前記割込みの要因毎に予め設定されている割込み優先度に基づき、前記割り込みに対応する割込み処理を他のプロセッサに実行させることを特徴とする請求項１又は２記載のマルチプロセッサシステム。
【請求項４】
前記割込み処理制御手段は、前記割込みの要因毎に予め設定されている並列処理可能か否かの情報に基づき、前記割り込みに対応する割込み処理を他のプロセッサに実行させることを特徴とする請求項１乃至３の何れか一項記載のマルチプロセッサシステム。
【請求項５】
前記割込み処理制御手段は、特定の要因の割込みを受け付けた場合、前記割込みに対応する割込み処理を、前記特定の要因を専用に処理するプロセッサに実行させることを特徴とする請求項１乃至４の何れか一項記載のマルチプロセッサシステム。
【請求項６】
前記割り込みに対応する割込み処理は、前記他のプロセッサ上で動作するソフトウェアであることを特徴とする請求項１乃至５の何れか一項記載のマルチプロセッサシステム。
【請求項７】
複数のプロセッサにより割り込みを処理するマルチプロセッサシステムにおける割込み制御方法であって、
１つのプロセッサが外部デバイスからの割込みを受け付ける受付工程と、
前記受付工程で受け付けた割込みの要因に応じて、前記割込みに対応する割込み処理を他のプロセッサに実行させる割込み処理制御工程と、
を有することを特徴とする割込み制御方法。
【請求項８】
請求項７記載の割込み制御方法をコンピュータに実行させるためのプログラム。
【請求項９】
請求項８記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサにおける割込み制御技術に関するものである。
【背景技術】
【０００２】
従来、制御装置などの組み込みシステムでは、システム制御に対して高いリアルタイム性が要求されている。これは、システム制御に対応する割込みが発生し、その割込み処理を終えるまでの時間が予め設定された期間を超えると、システム制御に支障が出るためである。例えば、ある制御装置からの異常検知情報を受けた場合、必要な安全装置を直ちに作動させる必要がある。通常、安全装置は危険な状態が発生する前に作動して意味があるもので、発生してから作動するのでは意味がない。
【０００３】
このように、高いリアルタイム性を要求する組み込みシステムでは、計算すること自体が目的なのではなく、計算結果を使って他の機器やシステムを制御し、必要な処理を行うことが重要な目的の一つである。従って、処理時間に対する要求が厳しく、処理が遅れると多くの場合、結果を出しても無意味になってしまう。
【０００４】
システムのリアルタイム性は割込処理の遅延時間により定まるが、その原因の多くは、割込み処理の工数やソースが過剰すぎることである。そのため、処理終了時間が間に合わなくなる。また、割込み処理中は別の割込みを受信できないため、割込みが発生してから処理を開始するまでに時間がかかる。
【０００５】
また、マルチプロセッサシステムでの割込み処理の制御は、非常に複雑なため、複数の割込みには専用のＣＰＵを予め定め、専用のＣＰＵのみで行える構成にすることが多い。そのため、ハードウェア的には全てのＣＰＵが割込みを受信できても、並列実行をソフトウェアにより禁止されているため、割込み処理は専用のＣＰＵに割り当てられているものが多かった。
【０００６】
このようなことから、割込み処理を高速化したり、汎用性をもたせたりすることを目的とする種々の提案がなされている。以下、そのような提案の具体的な例を紹介する。
【０００７】
マルチプロセッサシステムでの、リアルタイム性を向上させる方法（例えば、特許文献１参照）が提案されている。特許文献１には、あるＣＰＵがアイドル状態となったとき、そのＣＰＵが他のＣＰＵを割り込み禁止とし、全ての割込み処理を行うことが記載されている。また、割込み種別毎に１個又は複数個のＣＰＵが割込み処理を行うようにレジスタ値を設定し、割込み処理を行うＣＰＵを選択することも記載されている。
【０００８】
これにより、動的或いは静的に割込み処理を複数個のＣＰＵに分散させることができ、システムのリアルタイム性が向上する。
【０００９】
また、割込みコントローラに左右されず、リアルタイム性を向上させる方法（例えば、特許文献２参照）が提案されている。特許文献２には、各割込みをそれぞれ処理する割込みタスクを生成し、各割込みタスクが処理する割込みに対して決められた割込みレベルを割込みタスクの優先度に反映する。そして、割込みを受付けると、受付けた割込みを処理する割込みタスクを起動してスケジューラに制御を移すことが記載されている。
【００１０】
これにより、割込みレベルの数を、割込みコントローラの優先度制御仕様に影響されることなく自由に設定することができ、割込み制御プログラムの中で割込みコントローラの優先度制御仕様に影響される箇所を減らすことができる。よって、異なる割込みコントローラへの移行を容易にすることが可能である。
【特許文献１】特開平０５−３２４５６９号公報
【特許文献２】特開２００５−１９６４５９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１では、アイドル状態のＣＰＵのみが割込みを取得できるため、アイドル状態のＣＰＵがなければ、何れのＣＰＵも割込みを取得することができない。また、全ての割込み種別毎に１個又は複数個のＣＰＵが割込み処理を行うようにレジスタ値を設定するため、ハードウェア構成を変更したり、或いは割込み要因が増減した場合、レジスタ値の設定や必要個数も変更しなければならず、汎用的ではない。
【００１２】
また、特許文献２では、優先度の高い割込みが多く発生した場合、高優先度のタスクが数多く動作することになり、リアルタイム性を保障することができない。また、優先度の低い割込み処理が、長い時間、処理されない可能性もある。
【００１３】
本発明は、１つのプロセッサが割り込みを受け付け、その割込みの要因に応じて、割込み処理を他のプロセッサに実行させることを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、複数のプロセッサにより割り込みを処理するマルチプロセッサシステムであって、
１つのプロセッサが外部デバイスからの割込みを受け付ける受付手段と、前記受付手段で受け付けた割込みの要因に応じて、前記割込みに対応する割込み処理を他のプロセッサに実行させる割込み処理制御手段とを有することを特徴とする。
【００１５】
また、本発明は、複数のプロセッサにより割り込みを処理するマルチプロセッサシステムにおける割込み制御方法であって、１つのプロセッサが外部デバイスからの割込みを受け付ける受付工程と、前記受付工程で受け付けた割込みの要因に応じて、前記割込みに対応する割込み処理を他のプロセッサに実行させる割込み処理制御工程とを有することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、１つのプロセッサが割り込みを受け付け、その割込みの要因に応じて、割込み処理を他のプロセッサに実行させることにより、高速に処理でき、リアルタイム性を向上させることができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照しながら発明を実施するための最良の形態について詳細に説明する。
【００１８】
まず、本発明を説明する前に前提事項について概略的に説明する。図１は、マルチプロセッサシステム割込み制御方式が採用されるバス共有型マルチプロセッサシステムの構成の一例を示すブロック図である。図１において、１０１〜１０３はプロセッサ（ＣＰＵ）であり、データ処理、演算処理及び制御を行う。１０４はメモリコントローラ（ＭＣ）であり、ＣＰＵ１０１〜１０３の共有メモリ１０７を制御する。また、共有メモリ１０７には、ＣＰＵ１０１〜１０３の動作に必要なデータが格納される。
【００１９】
１０５は内部割込みコントローラ（ＩＣ）であり、マルチプロセッサシステム１００内のＣＰＵ１０１〜１０３の割込みを制御する。また、内部割込みコントローラ１０５には後述する外部割込みコントローラからの割込みも通知される。１０６はバスコントローラ（ＢＣ）であり、マルチプロセッサシステム１００内や内部及び外部とのバス通信を制御する。
【００２０】
１０８は外部割込みコントローラ（ＩＣ）であり、マルチプロセッサシステム１００に接続されている外部デバイス１０９〜１１１からの割込みを制御する。そして、外部デバイス１０９〜１１１からの割込みを検知すると、バスコントローラ１０６を経由して内部割込みコントローラ１０５に通知する。
【００２１】
図２は、本実施形態における割込み処理の全体像を示す概念図である。まず、予め外部割込みコントローラ１０８からの外部割込みを受け取るＣＰＵをＣＰＵ１０１〜１０３の中で設定し、そのＣＰＵをメインＣＰＵ（この例では、ＣＰＵ１０１）とする。よって、内部割込みコントローラ１０５は、外部割込みコントローラ１０８から受け取った全ての外部割込みをメインＣＰＵ１０１に通知する。また、メインＣＰＵ１０１以外のＣＰＵをサブＣＰＵ（この例では、ＣＰＵ１０２、１０３）とし、割込み処理を行うＣＰＵとする。
【００２２】
図２において、マルチプロセッサシステム１００に接続されている外部デバイス１０９で割込みＡ２０１が発生し、外部デバイス１１０で割込みＢ２０２が発生すると、割込み受信ＣＰＵであるメインＣＰＵ１０１に通知される。メインＣＰＵ１０１は、通知された割込みＡ２０１と割込みＢ２０２に対応する割込みハンドラＡ２０３と割込みハンドラＢ２０４を検索する。そして、検索した割込みハンドラＡ２０３と割込みハンドラＢ２０４をアイドル状態のサブＣＰＵ１０２と１０３に送信し、処理を行わせる。
【００２３】
尚、本実施形態では、マルチプロセッサシステム１００を構成するＣＰＵの数に規定はなく、システム構成や処理工数に応じて増減が可能である。例えば、サブＣＰＵの数を増加させた場合、割込みに対応する割込みハンドラの処理数も増加し、全体として割り込みの待機時間を減少させることができる。
【００２４】
図３は、割込み要因と割込みハンドラとの対応を設定するテーブルの構成の一例を示す図である。図３に示すように、このテーブルは、割込み要因３０１、割込み優先度３０２、割込みハンドラ３０３で構成され、メモリ１０７上に保存される。
【００２５】
割込み要因３０１には、接続されている外部デバイス１０９〜１１１で発生する全ての割込み要因が登録されている。割込み要因３０１は、外部デバイスの種類によって異なるため、システム構成により多種多様である。例えば、パーソナルコンピュータの場合には、キーボード、マウス、ネットワーク（ＬＡＮ）、シリアル、ＣＤ−ＲＯＭドライブなどからの割込みが割込み要因として登録される。
【００２６】
優先度３０２には、割込み要因３０１別に割込み処理の優先度を設定する。本実施形態では、優先度３０２は０〜９までとし、昇順に優先度が低くなるものとする。即ち、優先度０が最も高い優先度で、優先度９が最も低い優先度として割込み処理される。
【００２７】
割込みハンドラ３０３には、割込み要因３０１を受信した後に、割込み処理として動作させる割込みハンドラを設定する。一般的には、割込みハンドラの関数アドレス等を設定するが、本実施形態では、説明を簡単にするために、ハンドラ名で記述している。また、割込み要因３０１や優先度３０２は、システム構成、目的、制約によってそれぞれ異なるため、本実施形態では、割込み要因名を具体的に明記しないことにする。
【００２８】
［第１の実施形態］
以上、本発明の前提事項について概略的に説明したが、以下に具体的な実施方法である第１の実施形態を、図面を用いて説明する。
【００２９】
まず、図４及び図５を用いて、メインＣＰＵ１０１が割込みを受信した際の処理を説明する。図４は、図３に示す割込み要因３０１が並列処理可能か否かを設定するテーブルの一例を示す図である。図４において、並列処理４０１には、割込み要因３０１が並列処理可能か否かの情報を設定する。第１の実施形態では、並列処理不可の場合は「ＮＧ」を、並列処理可能の場合は「ＯＫ」を設定する。また、処理状態４０２には、並列処理不可の割り込みに対応する割込みハンドラの処理状態を設定する。尚、処理状態４０２及びその切替方法については、更に後述する。
【００３０】
図５は、第１の実施形態におけるメインＣＰＵ１０１の割込み処理の一連の流れを示すフローチャートである。まず、ステップＳ５０１において、メインＣＰＵ１０１は、外部割込みコントローラ１０８から内部割込みコントローラ１０５へバスコントローラ１０６経由で通知された割込みを受信する。次に、ステップＳ５０２において、実行すべき割込み処理が並列処理可能か否かを、図４に示すテーブルを用いて調べる。ここで、受信した割込みの割込み要因３０１が割込みＡの場合、並列処理４０１より割込みハンドラが並列処理可能であると判断する。また、受信した割込みの割込み要因３０１が割込みＢの場合、並列処理４０１より割込みハンドラが並列処理不可であると判断する。
【００３１】
ステップＳ５０２で、並列処理可能であると判断した場合、ステップＳ５０３へ進み、並列処理可能割込みハンドラ振り分け処理を行う。尚、この並列処理可能割込みハンドラ振り分け処理に関しては、図６〜図９を用いて更に後述する。
【００３２】
一方、ステップＳ５０２で、並列処理不可であると判断した場合は、ステップＳ５０４へ進み、並列処理不可割込みハンドラ振り分け処理を行う。尚、この並列処理不可割込みハンドラ振り分け処理に関しては、図１０〜図１１を用いて更に後述する。
【００３３】
次に、図５に示すＳ５０３の並列処理可能割込みハンドラ振り分け処理を、図６〜図９を用いて説明する。図６は、メインＣＰＵ１０１とサブＣＰＵ１０２との通信状態の一例を示す図である。
【００３４】
図７は、サブＣＰＵの動作状態の一例を示すテーブル図である。図７において、７０１はＣＰＵ−ＩＤであり、サブＣＰＵを識別するための識別子である。７０２はサブＣＰＵの動作状態である。この例では、ＣＰＵ−ＩＤ７０１が「サブＣＰＵ４」のサブＣＰＵが動作状態７０２として「アイドル状態」７０３を示し、他のサブＣＰＵは全て「使用中」を示している。
【００３５】
図８は、サブＣＰＵが全て動作中で割込み処理が行えないとき、処理待ちキューとして保存する行列の一例を示す図である。図８に示す例では、割込みＣ、Ｄが割込み処理待ち行列８０１に保存されている状態で、新たに割込みＡが発生した場合である。この場合、割込みＡは、図３に示すように、優先度３０２が０で最も高いので、メインＣＰＵ１０１は割込みＡを割込み処理待ち行列８０１の先頭にソートする。
【００３６】
図９は、並列処理可能割込みハンドラ振り分け処理を示すフローチャートである。尚、この例では、外部デバイス１０９から割込み要因３０１として割込みＡを受け付けた際に、メインＣＰＵ１０１が実行する割込みハンドラ振り分け処理を説明する。
【００３７】
まず、ステップＳ９０１において、図７に示すテーブルを用いて、アイドル状態のサブＣＰＵが存在するか否かを調べる。具体的には、サブＣＰＵの動作状態を示すテーブルを検索し、アイドル状態のサブＣＰＵが存在する場合、ステップＳ９０２へ進み、そのサブＣＰＵ（サブＣＰＵ４）の動作状態７０２を「使用中」に変更する。この処理は、割込みハンドラ処理要求が重複しないための排他制御である。
【００３８】
次に、ステップＳ９０３において、そのサブＣＰＵに割込みハンドラの処理要求を送信する。具体的には、図３に示す割込み要因と割込みハンドラとの対応テーブルを検索し、割込みＡに対応する割込みハンドラＡを決定する。そして、ステップＳ９０２でアイドル状態のサブＣＰＵに割込みハンドラＡの処理要求を送信する。このとき、図６に示すように、メインＣＰＵ１０１は、割込みの要因を識別するＩＤ６０１と割込みハンドラ６０２を含むパケットをサブＣＰＵ１０２へ送信する。
【００３９】
また、上述のステップＳ９０１において、アイドル状態のサブＣＰＵが存在しなければ、ステップＳ９０４へ進み、図８に示すように、割込みＡを割込み処理待ち行列８０１に保存し、サブＣＰＵがアイドル状態になるのを待つ。尚、メインＣＰＵ１０１は、図３に示す優先度３０２に従って割込みＡを優先順にソートする。この場合、図８に示すように、割り込みＡは割り込み処理待ち行列８０１の先頭にソートされる。
【００４０】
ここで、図５に示すＳ５０４の並列処理不可割込みハンドラ振り分け処理を、図１０〜図１１を用いて説明する。図１０は、並列処理が行えない割込みが発生し、かつ該割込み処理が処理中の場合、処理終了待ちキューとして保存する行列の一例を示す図である。
【００４１】
図１１は、並列処理不可割込みハンドラ振り分け処理を示すフローチャートである。尚、この例では、外部デバイス１１０から割込み要因３０１として割込みＢを受け付けた際に、メインＣＰＵ１０１が実行する割込みハンドラ振り分け処理を説明する。
【００４２】
まず、ステップＳ１１０１において、図４に示すテーブルを用いて、割込みに対応する割込みハンドラが処理可能であるか否かを調べる。図４に示すように、処理状態４０２として、サブＣＰＵで処理中を意味する「処理中」、割込み処理待ち行列（図８）にキューイングされていることを意味する「待機中」、処理可能を意味する「処理可能」の３つの処理状態がある。
【００４３】
ここで、割込みハンドラの処理状態４０２が処理可能であれば、ステップＳ１１０２へ進み、アイドル状態のサブＣＰＵが存在するか否かを調べる。この処理は、並列処理可能割込みハンドラ振り分け処理と同様である。その結果、アイドル状態のサブＣＰＵが存在する場合、ステップＳ１１０３へ進み、そのサブＣＰＵの動作状態７０２を「使用中」に変更する。そして、ステップＳ１１０４において、割込みハンドラＢの処理状態４０２を「処理中」に変更する。これは、割込みハンドラ処理が並列動作しないための排他制御である。次に、ステップＳ１１０５において、サブＣＰＵに対して割込みハンドラの処理を要求する。
【００４４】
また、上述したステップＳ１１０２において、アイドル状態のサブＣＰＵが存在しない場合、ステップＳ１１０６へ進み、その処理状態４０３を「待機中」に変更する。つまり、ステップＳ１１０１で受信した割込みの処理状態４０２を「待機中」に変更する。この処理は、割込み処理待ち行列（図８）に割込みＢが複数入るのを防ぎ、割込みハンドラＢが誤って並列動作しないための排他制御である。そして、ステップＳ１１０７において、上述したステップＳ９０４の処理と同様に、割込みＢを割込み処理待ち行列８０１に保存し、サブＣＰＵがアイドル状態になるのを待つ。尚、メインＣＰＵ１０１は、図３に示す優先度３０２に従って割込みＢを優先順にソートする。
【００４５】
一方、上述したステップＳ１１０１において、割込みＢの処理状態４０２が「待機中」又は「処理中」の場合は、ステップＳ１１０８へ進み、処理状態４０２が「処理可能」になるのを待機する。この場合、図１１に示すように、割込み処理待ち行列８０１に割込みＢを保存するのではなく、処理可能状態になるまで処理可能状態待ち行列１００１に一時的に退避させておく。
【００４６】
次に、メインＣＰＵ１０１から送信された処理命令をサブＣＰＵ１０２、１０３が受信したときのサブＣＰＵ側の処理を、図６及び図１２を用いて説明する。
【００４７】
図１２は、割込みハンドラを実行するサブＣＰＵの処理を示すフローチャートである。まず、ステップＳ１２０１において、サブＣＰＵ１０２がメインＣＰＵ１０１から割込みハンドラ処理命令６１０を受信する。そして、ステップＳ１２０２において、ステップＳ１２０１で受信した割込みハンドラ６０２の処理を実行する。次に、ステップＳ１２０３において、割込みハンドラ処理が終了すると、処理終了通知６２０をメインＣＰＵ１０１に送信する。このとき、割込み要因を識別するＩＤ６０３とサブＣＰＵ１０２の識別子であるサブＣＰＵ−ＩＤ６０４を含むパケットを送信する。
【００４８】
次に、サブＣＰＵから送信された処理終了通知を受信したメインＣＰＵ側での処理を、図１３を用いて説明する。
【００４９】
図１３は、第１の実施形態におけるメインＣＰＵの割込みハンドラ処理終了後の処理を示すフローチャートである。まず、ステップＳ１３０１において、サブＣＰＵから割込みハンドラ処理終了通知６２０を受信する。この終了通知６２０には、サブＣＰＵの識別子であるサブＣＰＵ−ＩＤ６０４と、処理が終了した割込み要因の種類６０３とが含まれている。
【００５０】
次に、ステップＳ１３０２において、ステップＳ１３０１で受信した終了通知６２０より、処理が終了した割込み要因５１２の割込みハンドラが並列可能か否かを、図４に示すテーブルを用いて調べる。ここで、割込みＢ又はＤの終了通知を受信した場合、並列処理不可と判断し、ステップＳ１３０３へ進み、処理状態変更処理を行う。この処理状態変更処理に関しては、更に後述する。
【００５１】
また、ステップＳ１３０２において、並列処理可能な割込みの処理終了通知を受信した場合、ステップＳ１３０４へ進む。ステップＳ１３０４では、割込み処理待ち行列８０１に処理待ちの割込みキューがあるかを調べる。ここで、キューがない場合は、ステップＳ１３０８へ進み、ステップＳ１３０１で受信したサブＣＰＵ−ＩＤ６０４に基づき図７に示すサブＣＰＵの動作状態を「使用中」から「アイドル」へ変更する。この処理により、このサブＣＰＵは割込みハンドラ処理要求を受付け可能な状態となる。
【００５２】
また、ステップＳ１３０４において、割込みキューがあると判断した場合は、ステップＳＳ１３０５へ進む。ステップＳ１３０５では、割込み処理待ち行列８０１における先頭の割込みを取得し、図４を参照してその割込みの割込みハンドラが並列処理可能か否かを調べる。ここで、並列処理不可と判断した場合、ステップＳ１３０６へ進み、ステップＳ１３０４で取得した先頭割込みに対応する割込みの処理状態を「待機中」から「処理中」へ変更する。これは、割込みハンドラ処理が並列動作しないための排他制御である。例えば、先頭割込みキューが割込みＢであった場合、データ４０５の処理状態を「処理中」に変更する。
【００５３】
また、ステップＳ１３０５において、並列処理可能な割込みであれば、直接ステップＳ１３０７へ進み、ステップＳ１３０１で受信したサブＣＰＵ−ＩＤに基づき、ステップＳ１３０５で取得した先頭の割込みに対応する割込みハンドラの処理を要求する。つまり、例えば、サブＣＰＵ−ＩＤがサブＣＰＵ４である場合は、サブＣＰＵ４へ割込みＡに対応する割込みハンドラＡ３０４の処理を要求する。
【００５４】
ここで、ステップＳ１３０３における処理状態変更処理を、図１４及び図１５を用いて説明する。
【００５５】
図１４は、処理可能状態待ち行列の割込みを割込み処理待ち行列に移動する処理を説明するための図である。また、図１５は、図１４に示すＳ１３０３での割込み処理状態変更処理を示すフローチャートである。
【００５６】
まず、ステップＳ１５０１において、ステップＳ１３０１で受信した割込みに対応する割込みキューが処理可能状態待ち行列１００１に存在するか否かを調べる。図１４に示す例では、ステップＳ１３０１で受信した割込み要因ＩＤ６０３が割込みＢとすると、ステップＳ１５０１において、対応する割込みＢの割込みキュー１４０１が処理可能状態待ち行列１００１に存在すると判断する。そして、ステップＳ１５０２において、ステップＳ１３０１で受信した割込み要因である割込みＢに対応する割込みの処理状態を「待機中」に変更する。よって、割込みＢの処理は、任意のサブＣＰＵが「アイドル」状態になれば、処理可能となる。
【００５７】
次に、ステップＳ１５０３において、ステップＳ１５０１で検索した処理可能状態待ち行列１００１内の割り込みキュー１４０１を処理可能状態待ち行列から取り出し、割込み処理待ち行列８０１に入れ、割込み優先度順にソートする。
【００５８】
また、ステップＳ１５０１において、ステップＳ１３０１で受信した割込みＩＤの割込みが処理可能状態待ち行列１００１に存在しない場合、ステップＳ１５０４へ進む。ステップＳ１５０４では、ステップＳ１３０１で受信した割込みである割込みＩＤに対応する割込みの処理状態を「処理可能」に変更し、処理を終了する。よって、次回、同じ割込みが発生したら、直に割込み待ち行列８０１に割込みキューが入ることになる。
【００５９】
また、図１０及び図１４では、処理可能状態待ち行列１００１を１つとしたが、割込みの種別毎に行列を１つずつ作成し、制御しても良い。
【００６０】
また、サブＣＰＵや並列処理不可の割込みハンドラの排他制御方法として、システム設計によってはセマフォやミューテックスなどを使用する必要がある。
【００６１】
［第２の実施形態］
次に、図面を参照しながら本発明に係る第２の実施形態を詳細に説明する。第２の実施形態では、ある特定の割込み要因に対してのみ割込み処理を行う専用のサブＣＰＵを割り当てる機能を追加する。例えば、図３より、割込み優先度が高い割込みＡや割込みＢは、割込み処理終了までの時間が厳しく制限されている可能性が高い。
【００６２】
そこで、第２の実施形態では、図１６に示すように、割込みグループに対して専用サブＣＰＵ１６０１〜１６０３を割り当てる。逆に、割込み優先度の低い割り込みＸや割込みＹは、長い時間処理されずになる可能性がある。それを回避するため、図１６に示すように、優先度の低い割込みを処理させる専用のサブＣＰＵ１６０４を１つ割り当てる。
【００６３】
優先度の高い割込みに対して専用サブＣＰＵを割り当てる方法の一例として、次のような方法がある。優先度１以上の割込み、つまり割込みＡ及び割込みＢのような、優先度が高い割込みグループ（図３に示す３１０）を定め、この割込みグループに対して１つ以上の専用サブＣＰＵを複数割り当てる。
【００６４】
また、複数の割込みグループが存在し、複数の割込みグループ毎に１つ以上の専用サブＣＰＵを割り当てることも可能である。この場合、割込みグループ３１０の処理にはサブＣＰＵ１６０１〜１６０３が使用できるが、割込みグループ３１０以外の割込み処理には使用できない。
【００６５】
即ち、割込みグループ３１０以外の割込みキューが割込み処理待ち行列１００１にあり、サブＣＰＵ１６０１〜１６０３の何れかがアイドル状態の場合にあっても、割込み処理待ち行列１００１にある割込みキューの割込み処理は実行されない。そして、割込み処理待ち行列にある割込みグループ３１０以外の割込みキューは、サブＣＰＵ１６０１〜１６０３以外がアイドル状態になるまで待機しなければならない。
【００６６】
これにより、専用サブＣＰＵ１６０１〜１６０３がアイドル状態で待機している可能性は高く、割込みグループ３１０の割込みに高速に対応し、割込み処理を行うことが可能となる。
【００６７】
また、優先度の高い割込みに対して専用サブＣＰＵを割り当てる方法の他の例として、次のような方法がある。図１７に示す割込みＡ用１７０１、１７０２、割込みＢ用１７０３のように、特定の１つの割込み要因毎に、１つ以上の専用サブＣＰＵを割り当てる。この方法の場合、割込みＡの処理にはサブＣＰＵ１７０１、１７０２、割込みＢの処理にはサブＣＰＵ１７０３が使用できるが、それ以外の割込み処理には、これら専用サブＣＰＵ１７０１〜１７０３は使用できない。
【００６８】
即ち、上述の方法と同様に、割込みＡ、割込みＢ以外の割込みキューが割込み処理待ち行列にあり、サブＣＰＵ１７０１〜１７０３の何れかがアイドル状態だとしても、割込み処理は実行されない。そして、割込みキューはサブＣＰＵ１７０１〜１７０３以外がアイドル状態になるまで待機しなければならない。
【００６９】
これにより、専用サブＣＰＵ１７０１〜１７０３はアイドル状態で待機している可能性が高く、割込みＡ及び割込みＢの割込みに高速に対応し、割込み処理を行うことが可能となる。
【００７０】
この方法の場合、サブＣＰＵの数、割込み要因の数、割込みの制限などにより、最適な割り当て方法を検討し定める必要がある。
【００７１】
ここで、優先度の低い割込みに対して専用ＣＰＵを割り当てる方法として、次のような方法がある。優先度の低い割込みグループ（図３に示す３１１）の処理に対して予め専用サブＣＰＵ１６０４を割り当てる方法である。
【００７２】
また、図１８に示す処理可能状態待ち１００１及び割込み処理待ち行列８０１に割込みグループ３１１の割込みキューがＮ個以上溜まると、専用サブＣＰＵ１６０４を割り当てる。そして、割込みグループ３１１の割込みキューがＭ個以下になると、割り当てた専用サブＣＰＵ１６０４を解除する方法である。このようにすることで、長い時間処理されずになる可能性を回避することができる。
【００７３】
また、割込みの処理方法としても、図３で設定してある割込み優先度を反映させた優先度付きタスクを起動し、１つの専用サブＣＰＵ上で、複数の割込み処理を同時に行う方法がある。このようにすることで、割込み処理の工数やソースが長くても、専用サブＣＰＵを独占することなく割込み処理することができる。
【００７４】
以上説明したように、複数の割込みを複数のＣＰＵで完全並列に処理することができるので、割込み処理の高速化となり、システムのリアルタイム性が向上する。
【００７５】
また、割込みコントローラやアーキテクチャの種別などに左右されることのないソフトウェアで割込み処理を制御しているため、ＣＰＵの数、割込み要因の数、割込みの種類が変更されても、修正が容易である。
【００７６】
更に、割り込みを受信するメインＣＰＵとは別のサブＣＰＵが割込み処理を行うので、割込みを受信できない時間が短縮され、割込み処理の時間制限などを考慮して割込み処理工数をできるだけ削るという複雑な設計を行う必要がなくなる。
【００７７】
尚、本発明は複数の機器（例えば、ホストコンピュータ，インターフェース機器，リーダ，プリンタなど）から構成されるシステムに適用しても、１つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用しても良い。
【００７８】
また、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（ＣＰＵ若しくはＭＰＵ）が記録媒体に格納されたプログラムコードを読出し実行する。これによっても、本発明の目的が達成されることは言うまでもない。
【００７９】
この場合、記録媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
【００８０】
このプログラムコードを供給するための記録媒体として、例えばフレキシブルディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【００８１】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、次の場合も含まれることは言うまでもない。即ち、プログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理により前述した実施形態の機能が実現される場合である。
【００８２】
更に、記録媒体から読出されたプログラムコードがコンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込む。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理により前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【００８３】
【図１】マルチプロセッサシステム割込み制御方式が採用されるバス共有型マルチプロセッサシステムの構成の一例を示すブロック図である。
【図２】本実施形態における割込み処理の全体像を示す概念図である。
【図３】割込み要因と割込みハンドラとの対応を設定するテーブルの構成の一例を示す図である。
【図４】図３に示す割込み要因３０１が並列処理可能か否かを設定するテーブルの一例を示す図である。
【図５】第１の実施形態におけるメインＣＰＵ１０１の割込み処理の一連の流れを示すフローチャートである。
【図６】メインＣＰＵ１０１とサブＣＰＵ１０２との通信状態の一例を示す図である。
【図７】サブＣＰＵの動作状態の一例を示すテーブル図である。
【図８】サブＣＰＵが全て動作中で割込み処理が行えないとき、処理待ちキューとして保存する行列の一例を示す図である。
【図９】並列処理可能割込みハンドラ振り分け処理を示すフローチャートである。
【図１０】並列処理が行えない割込みが発生し、かつ該割込み処理が処理中の場合、処理終了待ちキューとして保存する行列の一例を示す図である。
【図１１】並列処理不可割込みハンドラ振り分け処理を示すフローチャートである。
【図１２】割込みハンドラを実行するサブＣＰＵの処理を示すフローチャートである。
【図１３】第１の実施形態におけるメインＣＰＵの割込みハンドラ処理終了後の処理を示すフローチャートである。
【図１４】処理可能状態待ち行列の割込みを割込み処理待ち行列に移動する処理を説明するための図である。
【図１５】図１４に示すＳ１３０３での割込み処理状態変更処理を示すフローチャートである。
【図１６】割込みグループに対して専用サブＣＰＵ１６０１〜１６０３を割り当てる、第２の実施形態における割込み制御の一例を示す図である。
【図１７】１つの割込み要因毎に１つ以上の専用サブＣＰＵを割り当てる、第２の実施形態における割込み制御の一例を示す図である。
【図１８】処理可能状態待ち１００１及び割込み処理待ち行列８０１の割込みキューにより専用サブＣＰＵ１６０４の割り当てを解除する方法を説明するための図である。
【符号の説明】
【００８４】
１００  マルチプロセッサシステム
１０１  ＣＰＵ
１０２  ＣＰＵ
１０３  ＣＰＵ
１０４  メモリコントローラ（ＭＣ）
１０５  内部割込みコントローラ（ＩＣ）
１０６  バスコントローラ（ＢＣ）
１０７  共有メモリ
１０８  外部割込みコントローラ（ＩＣ）
１０９  外部デバイス
１１０  外部デバイス
１１１  外部デバイス
【図１】
2008065713.tif 000003
【図２】
2008065713.tif 000004
【図３】
2008065713.tif 000005
【図４】
2008065713.tif 000006
【図５】
2008065713.tif 000007
【図６】
2008065713.tif 000008
【図７】
2008065713.tif 000009
【図８】
2008065713.tif 000010
【図９】
2008065713.tif 000011
【図１０】
2008065713.tif 000012
【図１１】
2008065713.tif 000013
【図１２】
2008065713.tif 000014
【図１３】
2008065713.tif 000015
【図１４】
2008065713.tif 000016
【図１５】
2008065713.tif 000017
【図１６】
2008065713.tif 000018
【図１７】
2008065713.tif 000019
【図１８】
2008065713.tif 000020