(57)【要約】【課題】特別なＣＰＵを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッド処理を軽減することができる割り込み制御方法、および割り込みシステムを得る。【解決手段】ソフトウェア割り込み命令のＮ命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入し、既存の命令を用いて、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのＮ命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理する。【選択図】        図２
2009098972.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェアからの割り込み要求を通知するか否かが設定される割り込み通知制御レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるＣＰＵによる制御方法であって、
前記ＣＰＵがユーザプログラムに含まれるソフトウェア割り込み命令よりＮ（Ｎは自然数）命令前に前記割り込み通知制御レジスタに割り込み通知禁止を設定するレジスタ設定命令を実行することで前記割り込み通知制御レジスタに割り込み通知禁止を設定する第１のステップと、
前記ＣＰＵが前記ソフトウェア割り込み命令を実行してソフトウェア割り込みが発生した後に、前記割り込み状態レジスタの設定値を読み出して、前記ハードウェアからの割り込み要求が発生したか否かを認識し、前記レジスタ設定命令から前記ソフトウェア割り込み命令までの間に発生したハードウェアの割り込み要因と前記ソフトウェア割り込みとの割り込み処理を連続して実行する第２のステップと、
を含むことを特徴とする割り込み制御方法。
【請求項２】
ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるＣＰＵによる割り込み制御方法であって、
前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定する第１のステップと、
前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、予め定められた遅延時間の計測を開始する第２のステップと、
前記第２のステップによって開始した遅延時間の計測が完了すると、前記割り込み制御装置がＣＰＵに割り込み要求を通知する第３のステップと、
前記第３のステップによって割り込み要求を受けると、ＣＰＵが前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、前記遅延時間の間に発生したすべてのハードウェア割り込みに対する割り込み処理を連続して実行する第４のステップと、
を含むことを特徴とする割り込み制御方法。
【請求項３】
前記予め定められた遅延時間をハードウェア毎に有すること、
を特徴とする請求項２に記載の割り込み制御方法。
【請求項４】
ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、
前記ハードウェア毎の遅延時間が設定される遅延時間設定レジスタと、
前記割り込み状態レジスタに割り込み要求を受けたことが設定されると、前記遅延時間設定レジスタに設定された遅延時間の計測を開始する時間計測部と、
前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定し、前記時間計測部による遅延時間の計測が終了すると割り込み要求を通知する制御部と、
を有する割り込み制御装置と、
前記割り込み制御装置から割り込み要求を受けると、前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、認識したすべてのハードウェアの割り込み要求に対する割り込み処理を連続して実行するＣＰＵと、
を備えたことを特徴とする割り込みシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ(Central  Processing  Unit）の割り込み制御に関するものであり、特に、割り込みによって発生するオーバヘッドを軽減する割り込み制御方法、および割り込みシステムに関するものである。
【背景技術】
【０００２】
一般的に、ハードウェア割り込みが発生すると、ＣＰＵは、実行中のユーザプログラムを中断して割り込みベクタと呼ばれる特定のアドレスに制御を移行し、ＯＳ（Operating
System）が用意した割り込み処理へと処理を移行する。ＯＳは、ハードウェアの割り込み処理を、カーネルモードと呼ばれるＯＳ専用の環境で実行するのが一般的である。そのため、ＣＰＵは、ユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なってから、ハードウェアの割り込み処理を実行する。そして、ハードウェアの割り込み処理を実行した後、退避処理によってスタック領域に格納したユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行って、中断したユーザプログラムを継続して実行する。
【０００３】
ソフトウェア割り込が発生した場合も、ハードウェア割り込みと同様に、ＣＰＵは、実行中のユーザプログラムを中断して割り込みベクタと呼ばれる特定のアドレスに制御を移行し、ユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なってから、ソフトウェア割り込み処理を実行する。そして、ソフトウェア割り込み処理を実行した後、退避処理によってスタック領域に格納したユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行って、中断したユーザプログラムを継続して実行する。
【０００４】
ＣＰＵは、ハードウェア割り込みまたはソフトウェア割り込みが発生するたびに、退避処理およびカーネルモードのスタック・ポインタの設定処理を行なってハードウェアの割り込み処理またはソフトウェアの割り込み処理を実行し、割り込み処理実行後に、復帰処理およびユーザモードのスタック・ポインタの設定処理を行ってユーザプログラムに戻る処理を繰り返すため、ハードウェアおよびソフトウェアの割り込みが頻繁に発生すると、退避処理およびカーネルモードのスタック・ポインタの設定処理と、復帰処理およびユーザモードのスタック・ポインタの設定処理とを実行する回数が多くなってオーバヘッドが大きくなり、ＣＰＵの処理性能を低下させてしまうという問題があった。
【０００５】
このような問題を改善するためには、オーバヘッドとなる処理回数を減らすために、一定期間割り込みを保留させて、まとめて割り込み処理を実行することが考えられる。たとえば、特許文献１に記載の従来技術には、所定の時間期間、または所定の命令数の間割り込みの認識を遅延させる割り込み認識遅延命令を設け、この割り込み認識遅延命令を実行することでＣＰＵの割り込みの認識を遅延させる技術が開示されている。
【０００６】
しかしながら、上記特許文献１に記載の従来技術では、割り込み認識遅延命令を実行可能な特別なＣＰＵを用いる必要があり、既存のＣＰＵを用いることはできないという問題
があった。
【０００７】
【特許文献１】特開平１１−２１９３０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、上記に鑑みてなされたものであって、特別なＣＰＵを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッド処理を軽減することができる割り込み制御方法、および割り込みシステムを得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本願発明の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェアからの割り込み要求を通知するか否かが設定される割り込み通知制御レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるＣＰＵによる制御方法であって、前記ＣＰＵがユーザプログラムに含まれるソフトウェア割り込み命令よりＮ（Ｎは自然数）命令前に前記割り込み通知制御レジスタに割り込み通知禁止を設定するレジスタ設定命令を実行することで前記割り込み通知制御レジスタに割り込み通知禁止を設定する第１のステップと、前記ＣＰＵが前記ソフトウェア割り込み命令を実行してソフトウェア割り込みが発生した後に、前記割り込み状態レジスタの設定値を読み出して、前記ハードウェアからの割り込み要求が発生したか否かを認識し、前記レジスタ設定命令から前記ソフトウェア割り込み命令までの間に発生したハードウェアの割り込み要因と前記ソフトウェア割り込みとの割り込み処理を連続して実行する第２のステップと、を含むことを特徴とする割り込み制御方法が提供される。
【００１０】
また、本願発明の別の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるＣＰＵによる割り込み制御方法であって、前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定する第１のステップと、前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、予め定められた遅延時間の計測を開始する第２のステップと、前記第２のステップによって開始した遅延時間の計測が完了すると、前記割り込み制御装置がＣＰＵに割り込み要求を通知する第３のステップと、前記第３のステップによって割り込み要求を受けると、ＣＰＵが前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、前記遅延時間の間に発生したすべてのハードウェア割り込みに対する割り込み処理を連続して実行する第４のステップと、を含むことを特徴とする割り込み制御方法が提供される。
【００１１】
また、本願発明の別の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェア毎の遅延時間が設定される遅延時間設定レジスタと、前記割り込み状態レジスタに割り込み要求を受けたことが設定されると、前記遅延時間設定レジスタに設定された遅延時間の計測を開始する時間計測部と、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定し、前記時間計測部による遅延時間の計測が終了すると割り込み要求を通知する制御部と、を有する割り込み制御装置と、前記割り込み制御装置から割り込み要求を受けると、前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、認識したすべてのハードウェアの割り込み要求に対する割り込み処理を連続して実行するＣＰＵと、を備えたことを特徴とする割り込みシステムが提供される。
【発明の効果】
【００１２】
本発明によれば、ソフトウェア割り込み命令のＮ命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入するようにしているため、特別なＣＰＵを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッドを軽減することができる。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この発明にかかる割り込み制御方法および割り込みシステムの最良な実施の形態を詳細に説明する。
【００１４】
（第１の実施の形態）
図１〜図９を用いて、この発明の第１の実施の形態を説明する。図１は、この発明の第１の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
【００１５】
図１において、割り込みシステムは、ＣＰＵ(Central  Processing  Unit）１、ＣＰＵ１に接続されＣＰＵ１が実行する各種プログラム（ユーザプログラム２１、割り込み処理ディスパッチャプログラム２２、タスクスケジューラプログラム２３、ハードウェア割り込み処理プログラム２４（２４−１〜２４−３を示す）、ソフトウェア割り込み処理プログラム２５（２５−１，２５−２を示す））を記憶するプログラム記憶部２、ＣＰＵ１に対して割り込み要求を発生させて所定の処理の実行を要求する複数（この場合は３つ）のハードウェア４（４−１〜４−３を示す）、およびハードウェア４とＣＰＵ１とに接続されハードウェア４に割り込み要因が発生した旨を通知する割り込み要求を制御してＣＰＵ１に通知する割り込み制御装置３を備えている。
【００１６】
ハードウェア４は、たとえば、外部記憶装置、プリンタ、入力装置などの周辺機器であり、自身に割り込み要因が発生するとＣＰＵ１に対する割り込み要求を割り込み制御装置３に出力して当該割り込み要求に対する処理を要求する。
【００１７】
割り込み制御装置３は、制御部３０、ハードウェア４に対応付けられた割り込み通知制御レジスタ３１、および割り込み状態レジスタ３２を備え、制御部３０は、割り込み通知制御レジスタ３１および割り込み状態レジスタ３２に基づいてハードウェア４の割り込み要求を管理し、割り込み要求をＣＰＵ１に通知する。
【００１８】
割り込み通知制御レジスタ３１は、対応付けられたハードウェア４からの割り込み要求をＣＰＵ１に通知するか否かを示す情報（割り込み通知許可／割り込み通知禁止）を保持する。割り込み通知制御レジスタ３１への情報の設定は、ＣＰＵ１が実行する各種プログラムに含まれる割り込み通知制御レジスタ３１へのレジスタ設定命令によって行われる。以下、説明を簡単にするために、割り込み通知制御レジスタ３１に割り込み通知許可を設定するレジスタ設定命令を「割り込み許可命令」と呼び、割り込み通知制御レジスタ３１に割り込み通知禁止を設定するレジスタ設定命令を「割り込み禁止命令」と呼ぶ。
【００１９】
割り込み状態レジスタ３２には、対応付けられたハードウェア４から割り込み要因が発生した旨を通知する割り込み要求を受けたこと、すなわちハードウェア４に割り込み要因が発生したか否かを示す情報（割り込み要求あり／なし）が設定される。割り込み状態レジスタ３２への割り込み要求ありの設定は、ハードウェア４から割り込み要求を受けた際に制御部３０によって行われる。また、割り込み状態レジスタ３２への割り込み要求なしの設定は、ＣＰＵ１が当該割り込み要求によって実行するハードウェア割り込み処理プログラムに含まれる割り込み状態レジスタ３２へのレジスタ設定命令によって行われる。ま
た、ＣＰＵ１は、割り込み状態レジスタ３２へのレジスタ読み出し命令によって、割り込み状態レジスタ３２の設定値を読み取る。以下、説明を簡単にするために、割り込み状態レジスタ３２に割り込み要求なしを設定するレジスタ設定命令を「割り込み状態リセット命令」と呼び、割り込み状態レジスタ３２の設定値を読み出すレジスタ読み出し命令を「割り込み状態読み出し命令」と呼ぶ。
【００２０】
制御部３０は、割り込み通知制御レジスタ３１および割り込み状態レジスタ３２の設定情報に基づいて、ハードウェア４からの割り込み要求をＣＰＵ１に通知する。具体的には、制御部３０は、ハードウェア４から割り込み要求を受けると、割り込み要求を発生したハードウェア４に対応する割り込み状態レジスタ３２に割り込み要求ありを設定する。そして、制御部３０は、割り込み要求を発生したハードウェア４に対応する割り込み通知制御レジスタ３１に割り込み通知許可が設定されている場合には、ハードウェア４に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知する。制御部３０は、割り込み要求を発生したハードウェア４に対応する割り込み通知制御レジスタ３１に割り込み通知禁止が設定されている場合には、ハードウェア４に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知しない。
【００２１】
ＣＰＵ１は、図示しないプログラムカウンタ、演算処理に用いる汎用レジスタやスタック・ポインタを格納するスタックレジスタなどのレジスタ群を用いて、プログラム記憶部２に記憶された各種プログラムを実行することで各種機能を実現する。
【００２２】
プログラム記憶部２は、ユーザプログラム２１と、割り込み処理ディスパッチャプログラム２２、タスクスケジューラプログラム２３、ハードウェア割り込み処理プログラム２４、およびソフトウェア割り込み処理プログラム２５とを記憶する。ここで、ユーザプログラム２１は、ユーザによって作成されたアプリケーションのプログラムで、ユーザモードでＣＰＵ１に実行される。割り込み処理ディスパッチャプログラム２２、タスクスケジューラプログラム２３、ハードウェア割り込み処理プログラム２４、およびソフトウェア割り込み処理プログラム２５は、ＯＳ（Operating  System）のシステムプログラムであり、カーネルモードでＣＰＵ１に実行される。
【００２３】
ユーザプログラム２１は、ユーザがＣＰＵ１を所望の機能（ユーザ機能）として動作させるアプリケーションのプログラムである。ユーザプログラム２１には、ユーザが要求する機能を実現する命令群に含まれるソフトウェア割り込み命令のＮ（Ｎは自然数）命令前にハードウェア割り込み禁止命令が記載されている。図２は、ユーザプログラム２１の一例を示す図である。図２においては、ソフトウェア＃Ａに対する割り込み命令であるソフトウェア＃Ａ割り込み命令のＮ命令前にハードウェア＃１の割り込みを禁止するハードウェア＃１割り込み禁止命令が記載されている。
【００２４】
なお、ソフトウェア割り込み命令のＮ命令前に記載されるハードウェア割り込み命令は、割り込み制御装置３が管理するハードウェア４全ての割り込み通知を禁止する割り込み禁止命令であってもよいし、任意のハードウェア４の割り込み通知を禁止する割り込み禁止命令であってもよい。また、全てのソフトウェア割り込み命令のＮ命令前に割り込み禁止命令が記載されていてもよいし、任意のソフトウェア割り込み命令のＮ命令前のみに割り込み禁止命令が記載されていてもよく、ＣＰＵ１が実行可能なソフトウェア割り込み命令のすくなくとも１つのソフトウェア割り込み命令のＮ命令前に割り込み禁止命令が記載されていればよい。
【００２５】
ＣＰＵ１は、ユーザプログラム２１を実行することでユーザが要求する処理を実行するユーザ機能部として動作する。図２に示したユーザプログラム２１を実行した場合、ＣＰＵ１は、ハードウェア＃１割り込み禁止命令によってハードウェア＃１（たとえば、ハー
ドウェア４−１）に対応する割り込み制御装置３の割り込み通知制御レジスタ３１に割り込み通知禁止を設定する。そして、ハードウェア＃１割り込み禁止命令のＮ命令後のソフトウェア＃Ａ割り込み禁止命令を実行することで、割り込みベクタと呼ばれる特定アドレスが示すプログラム記憶部２の領域に格納された割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００２６】
割り込み処理ディスパッチャプログラム２２は、ＣＰＵ１を割り込み処理ディスパッチャとして動作させるプログラムで、ハードウェア割り込みまたはソフトウェア割り込みによって起動される。割り込み処理ディスパッチャプログラム２２は、ソフトウェア割り込みによって起動された場合に、当該ソフトウェア割り込みを発生させたソフトウェア割り込み命令よりもＮ命令前に実行されたハードウェア割り込み禁止命令によって割り込み通知禁止が設定されたハードウェア４に対応する割り込み制御装置３の割り込み通知制御レジスタ３１に「割り込み通知許可」を設定するハードウェア割り込み許可命令を含んでいる。このハードウェア割り込み許可命令は、ソフトウェア割り込み処理によって起動されてから後述するディスパッチ処理を実行するまでの間に実行される位置に記載される。
【００２７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作する。割り込み処理ディスパッチャとして動作するＣＰＵ１は、ユーザプログラム２１からハードウェア割り込み処理プログラム２４、またはソフトウェア割り込み処理プログラム２５に処理を移行する前に、ユーザプログラム２１実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を図示しない内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なう。
【００２８】
また、割り込み処理ディスパッチャとして動作するＣＰＵ１は、ソフトウェア割り込みによって起動された場合、ハードウェア割り込み許可命令を実行することによって、当該ソフトウェア割り込みを発生させたソフトウェア割り込み命令よりもＮ命令前に実行されたハードウェア割り込み禁止命令によって割り込み通知禁止が設定されたハードウェア４に対応する割り込み制御装置３の割り込み通知制御レジスタ３１に「割り込み通知許可」を設定する。
【００２９】
さらに、割り込み処理ディスパッチャとして動作するＣＰＵ１は、予め定められた優先順位にしたがって処理を移行するハードウェア割り込み処理プログラム２４またはソフトウェア割り込み処理プログラム２５を選択し、選択したハードウェア割り込み処理プログラム２４またはソフトウェア割り込み処理プログラム２５に処理を移行するディスパッチ処理を実行する。
【００３０】
また、割り込み処理ディスパッチャとして動作するＣＰＵ１は、ハードウェア割り込み処理プログラム２４、またはソフトウェア割り込み処理プログラム２５の実行が終了した際に起動され、退避処理によってスタック領域に格納したユーザプログラム２１実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行う。復帰処理およびユーザモードのスタック・ポインタの設定を実行した後に、割り込み処理ディスパッチャとして動作するＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００３１】
タスクスケジューラプログラム２３は、ＣＰＵ１をタスクスケジューラとして動作させるプログラムである。ＣＰＵ１は、このタスクスケジューラプログラムを実行することで、ユーザプログラム２１内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を行うタスクスケジューラとして動作する。
【００３２】
ハードウェア割り込み処理プログラム２４は、ＣＰＵ１をハードウェア４に対応する割り込み処理機能として動作させるプログラムであり、自身のハードウェア４に対応する割り込み制御装置３の割り込み状態レジスタ３２に「割り込み要求なし」に設定する命令が含まれている。ここでは、ハードウェア割り込み処理プログラム２４−１がハードウェア４−１に対する割り込み処理プログラムであり、ハードウェア割り込み処理プログラム２４−２がハードウェア４−２に対する割り込み処理プログラムであり、ハードウェア割り込み処理プログラム２４−３がハードウェア４−３に対する割り込み処理プログラムである。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４を実行することで、ハードウェア４に対応する割り込み処理機能として動作し、ハードウェア４の割り込み要因に対する所望の処理を実行する。
【００３３】
ソフトウェア割り込み処理プログラム２５は、ＣＰＵ１をソフトウェア割り込み命令に対応する割り込み処理機能として動作させるプログラムである。通常、ソフトウェア割り込み命令は１つで、特定のレジスタの設定値によってソフトウェア割り込み発生時に実行するソフトウェア割り込み処理プログラムを選択する。ここでは、ソフトウェア割り込み命令によるソフトウェア割り込み発生時の特定のレジスタの設定値によって、ソフトウェア割り込み処理プログラム２５−１またはソフトウェア割り込み処理プログラム２５−２が選択される。ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５を実行することで、ソフトウェア割り込み処理部として動作する。
【００３４】
プログラム記憶部２に格納される各種プログラムは、すべてＣＰＵ１が実行可能なオブジェクトコードで記載されたプログラムである。一般的に、ユーザは、プログラミング言語で所望の機能を実現するソースコードプログラムを作成する。そして、作成したソースコードプログラムをコンパイラ装置によってＣＰＵ１が実行可能なオブジェクトコードプログラムに変換してユーザプログラム２１としてプログラム記憶部２に記憶させる。
【００３５】
図３は、ユーザが作成したソースコードプログラムをオブジェクトコードプログラムに変換するコンパイラ装置とその入出力関係を示す図である。図３において、パラメータファイル７およびソースコードプログラム８が、コンパイラ装置６の入力であり、オブジェクトコードプログラム９がコンパイラ装置６の出力である。
【００３６】
ソースコードプログラム８は、プログラミング言語の各種命令（ソースコード）によって記載されたユーザが所望する機能をＣＰＵ１に実現させるプログラムである。パラメータファイル７は、キーワードとなるソフトウェア割り込み命令、挿入するハードウェア割り込み禁止命令の対象となるハードウェア４を識別するための対象ハードウェア情報、およびキーワードとなるソフトウェア割り込み命令の何命令前にハードウェア割り込み禁止命令を挿入するかを指定する挿入指定命令数Ｎが記載される。対象ハードウェア情報は、すべてのハードウェア４であってもよいし、任意のハードウェア４であってもかまわない。
【００３７】
コンパイラ装置６は、ソフトウェア割り込み命令検出部６１と、ハードウェア割り込み禁止命令挿入部６２と、オブジェクトコード生成部６３とを備えている。ソフトウェア割り込み命令検出部６１は、ソースコードプログラム８の命令群の中からパラメータファイル７に記載されたキーワードとなるソフトウェア割り込み命令を検出する。ハードウェア割り込み禁止命令挿入部６２は、ソフトウェア割り込み命令検出部６１によって検出されたソフトウェア割り込み命令からパラメータファイル７に記載された挿入指定命令数Ｎ前にパラメータファイル７に記載された対象ハードウェア情報が示すハードウェア４に対する割り込み制御装置３の割り込み通知制御レジスタ３１に割り込み通知禁止を設定するハードウェア割り込み禁止命令を挿入する。オブジェクトコード生成部６３は、ハードウェ
ア割り込み禁止命令挿入部６２によってハードウェア割り込み禁止命令が挿入されたソースコードプログラムのソースコードをＣＰＵ１が実行可能なオブジェクトコードに変換し、変換したオブジェクトコードを登録したオブジェクトコードプログラム９を出力する。
【００３８】
図４のフローチャートと図３を参照して、コンパイラ装置６の動作を説明する。なお、ここでは、ソースコードプログラム８は、アセンブラ言語で記載されたプログラムとする。コンパイラ装置６は、パラメータファイル７を読み込んで、パラメータファイル７に登録されたキーワードとなるソフトウェア割り込み命令、挿入指定命令数Ｎ、および対象ハードウェア情報を認識する（ステップＳ１００）。コンパイラ装置６は、ソフトウェア割り込み命令検出部６１にキーワードとなるソフトウェア割り込み命令を通知し、ハードウェア割り込み禁止命令挿入部６２に挿入指定命令数Ｎおよび対象ハードウェア情報を通知する。
【００３９】
コンパイラ装置６は、ソースコードプログラム８を読み込む（ステップＳ１０１）。ソフトウェア割り込み命令検出部６１は、読み込んだソースコードプログラム８の先頭行（ｉ＝１）から順番にソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれているか否かを判定する（ステップＳ１０３）。ソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれていると判定した場合（ステップＳ１０３，Ｙｅｓ）、ソフトウェア割り込み命令検出部６１は、ソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれている旨をハードウェア割り込み禁止命令挿入部６２に通知する。
【００４０】
ハードウェア割り込み禁止命令挿入部６２は、ソースコードプログラム８のソフトウェア割り込み命令検出部６１が検出したソフトウェア割り込み命令よりＮ命令前に、対象ハードウェア情報が示すハードウェア４に対応するハードウェア割り込み禁止命令を挿入する（ステップＳ１０４）。ハードウェア割り込み禁止命令挿入部６２は、ハードウェア割り込み禁止命令をソースコードプログラム８に挿入した旨をソフトウェア割り込み命令検出部６１に通知する。
【００４１】
ハードウェア割り込み禁止命令をソースコードプログラム８に挿入した旨が通知された場合、またはソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれていないと判定した場合（ステップＳ１０３，Ｎｏ）、ソフトウェア割り込み命令検出部６１は、現在の行（ｉ行）の次の行（ｉ＋１行）がソースコードプログラム８に存在するか否かを判定し、ソースコードプログラム８の最後の行まで、ソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれているか否かを判定し、ソースコードプログラム８のｉ行目にキーワードとなるソフトウェア割り込み命令が含まれていると判定された場合には、ハードウェア割り込み禁止命令挿入部６２は、ソースコードプログラム８のソフトウェア割り込み命令検出部６１が検出したソフトウェア割り込み命令よりＮ命令前に、対象ハードウェア情報が示すハードウェア４に対応するハードウェア割り込み禁止命令を挿入する動作を繰り返す（ステップＳ１０３〜Ｓ１０６）。
【００４２】
読み込んだソースコードプログラム８の最後の行までキーワードとなるソフトウェア割り込み命令が存在するか否かを判定してハードウェア割り込み禁止命令を挿入する処理が終了した後、オブジェクトコード生成部６３は、ハードウェア割り込み禁止命令挿入部６２によって対象ハードウェア情報が示すハードウェア４に対するハードウェア割り込み禁止命令が挿入されたソースコードプログラム８のソースコードをオブジェクトコードに変換する（ステップＳ１０７）。オブジェクトコード生成部６３は、変換したオブジェクトコードを登録したオブジェクトコードプログラム９を出力する（ステップＳ１０８）。
【００４３】
なお、ここでは、パラメータファイル７にキーワードとなるソフトウェア割り込み命令、挿入するハードウェア割り込み禁止命令の対象となるハードウェア４を識別するための対象ハードウェア情報、およびキーワードとなるソフトウェア割り込み命令の何命令前にハードウェア割り込み禁止命令を挿入するかを指定する挿入指定命令数Ｎを記載して、コンパイラ装置６に読み込ませるようにしたが、コンパイラ装置６に、予めキーワードとなるソフトウェア割り込み命令、対象ハードウェア情報、および挿入指定命令数Ｎを設定しておいてもよい。
【００４４】
また、ここでは、ソースコードプログラム８をアセンブラ言語で記載されたものとしたが、他のプログラミング言語であってもかまわない。たとえば、高級言語で記載されたソースコードプログラム８では、ソースコードの１行が１機械命令に対応しない。この場合は、ソースコードプログラム８を機械語レベルに変換した後に、ソフトウェア割り込み命令を検出するようにすればよい。
【００４５】
また、ソフトウェア割り込み命令検出部６１は、性能向上を考慮して、ソースコードプログラム８内の全てのソフトウェア命令を検出するのではなく、頻繁に起こるソフトウェア割り込みのみを検出してハードウェア割り込み禁止命令挿入部６２に通知し、ハードウェア割り込み禁止命令挿入部６２は、頻繁に起こるソフトウェア割り込みの前だけにハードウェア割り込み禁止命令を挿入するようにしてもよい。
【００４６】
つぎに、図５〜図７のシーケンス図および図１を参照して、コンパイラ装置６によってソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム２１をＣＰＵ１が実行したときの割り込みシステムの動作について説明する。なお、ここでは、ユーザプログラム２１のソフトウェア割り込み命令のＮ命令前に、割り込み制御装置３が制御するすべてのハードウェア４の割り込みの通知を禁止するハードウェア割り込み禁止命令が挿入されているものとする。
【００４７】
まず、図５のシーケンス図および図１を参照して、ソフトウェア割り込み命令のＮ命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア４−１に割り込み要因が発生した場合の動作について説明する。
【００４８】
ＣＰＵ１は、ユーザプログラム２１を実行してユーザ機能として動作する（２００）。ユーザプログラム２１には、ソフトウェア割り込み命令のＮ命令前にハードウェア４−１の割り込み発生の通知を禁止するハードウェア割り込み禁止命令が含まれている。このハードウェア割り込み禁止命令を実行することで、ＣＰＵ１は、割り込み制御装置３のハードウェア４に対応する割り込み通知制御レジスタ３１に「割り込み通知禁止」を設定する（２０１）。ＣＰＵ１は、ハードウェア割り込み禁止命令を実行した後、ソフトウェア割り込み命令に達するまでユーザプログラム２１の命令の実行を継続する。
【００４９】
ＣＰＵ１が割り込み制御装置３のハードウェア４に対応する割り込み通知制御レジスタ３１に割り込み通知禁止を設定してからソフトウェア割り込み命令を実行するまでの間に、ハードウェア４−１において割り込み要因が発生する。ハードウェア４−１は、割り込み要因が発生した旨（割り込み要求）を割り込み制御装置３に通知する（２０２）。
【００５０】
割り込み制御装置３の制御部３０は、ハードウェア４−１から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する（２０３）。具体的には、ハードウェア４−１に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定する。制御部３０は、ハードウェア４−１に対応する割り込み通知制御レジスタ３１の設定値が、割り込み通知許可であるのか割り込み通知禁止であるのかを判定する。
【００５１】
制御部３０は、ハードウェア４−１に対応する割り込み通知制御レジスタ３１の設定値が割り込み通知許可である場合、ハードウェア４−１から割り込み要求を受けた旨を通知するハードウェア割り込み要求をＣＰＵ１に通知し、ハードウェア４−１に対応する割り込み通知制御レジスタ３１の設定値が割り込み通知禁止である場合、ハードウェア４−１から割り込み要求を受けた旨をＣＰＵ１に通知しない。
【００５２】
ここでは、ＣＰＵ１が実行したユーザプログラム２１内のハードウェア割り込み禁止命令によってハードウェア４−１に対応する割り込み通知制御レジスタ３１には割り込み通知禁止が設定されている。したがって、制御部３０は、ハードウェア４−１の割り込み要求をＣＰＵ１に通知することなく割り込み要求受付処理を終了する。すなわち、ユーザプログラム２１のソフトウェア割り込み命令よりＮ命令前以後に発生したハードウェア４−１に発生した割り込み要因による割り込み要求は、割り込み制御装置３によって制御されてＣＰＵ１には通知されない。
【００５３】
一方、ＣＰＵ１は、ユーザプログラム２１の実行を継続しており、ハードウェア割り込み禁止命令のＮ命令後にソフトウェア割り込み命令に到達する。このソフトウェア割り込み命令の実行によってソフトウェア割り込みが発生し（２０５）、このソフトウェア割り込みによってユーザプログラム２１から割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００５４】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する（２０６）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２に含まれるハードウェア割り込み許可命令を実行することによって、ハードウェア４に対応する割り込み制御装置３の割り込み通知制御レジスタ３１に「割り込み通知許可」を設定する（２０７）。
【００５５】
割り込み制御装置３は、ハードウェア４に対応する割り込み通知制御レジスタ３１に「割り込み通知許可」が設定されると、ハードウェア４−１に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知する（２０８）。
【００５６】
ハードウェア割り込み要求の通知を受けると、ＣＰＵ１は、ハードウェア４−１に割り込み要因が発生したことを認識し、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を選択して処理を移行する。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−１を実行することで、ハードウェア４−１に対応する割り込み処理機能として動作し、ハードウェア４−１の割り込み要因に対する所望の処理を実行する（２０９）。ハードウェア割り込み処理プログラム２４−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００５７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（２１０）。ここでは、ユーザプログラム２１内のソフトウェア割り込み命令によって発生したソフトウェア割り込みに対する処理が未処理のままとなっている。よって、ＣＰＵ１は、ソフトウェア割り込みによる割り込み要因が未処理であることを認識し、ソフトウェア割り込みに対応するソフトウェア割り込み処理プログラム２５−１を選択して処理を移行する。
【００５８】
ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に
対応する所望の処理を実行する（２１１）。ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００５９】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（２１２）。ここでは、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１およびソフトウェア割り込みに対するソフトウェア割り込み処理プログラム２５−１を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００６０】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（２１３）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００６１】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（２１４）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２の実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１の続きを実行する（２１５）。
【００６２】
このように、ソフトウェア割り込み命令のＮ命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア４−１に割り込み要因が発生した場合、ハードウェア４−１に対するハードウェア４−割り込み処理プログラム２４−１とソフトウェア割り込みに対するソフトウェア割り込み処理プログラム２５−１とを続けて実行することができ、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理など、割り込み処理に伴うオーバヘッドを軽減することを可能としている。
【００６３】
つぎに、図６のシーケンスおよび図１を参照して、ハードウェア割り込み禁止命令の実行前にハードウェア４−１に割り込み要因が発生した場合の動作について説明する。ＣＰＵ１は、ユーザプログラム２１を実行してユーザ機能として動作する（３００）。ＣＰＵ１がユーザプログラム２１を実行中に、ハードウェア４−１において割り込み要因が発生する。ハードウェア４−１は、割り込み要求を割り込み制御装置３に通知する（３０１）。
【００６４】
ハードウェア４−１から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する（３０２）。ＣＰＵ１は、ユーザプログラム２１のソフトウェア割り込み命令のＮ命令前に挿入されたハードウェア割り込み禁止命令を実行していないので、割り込み制御装置３のハードウェア４−１に対応する割り込み通知制御レジスタ３１には「割り込み通知許可」が設定されている。したがって、割り込み制御装置３の制御部３０は、ハードウェア４−１に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定し、ハードウェア４−１に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知する（３０３）。
【００６５】
ＣＰＵ１は、割り込み制御装置３からハードウェア割り込み要求が通知されると、ユー
ザプログラム２１から割り込み処理ディスパッチャプログラム２２に処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する（３０４）。
【００６６】
ＣＰＵ１は、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を選択して処理を移行する。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−１を実行することで、ハードウェア４−１に対応する割り込み処理機能として動作し、ハードウェア４−１の割り込み要因に対する所望の処理を実行する（３０５）。ハードウェア割り込み処理プログラム２４−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００６７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（３０６）。ここでは、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００６８】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（３０７）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００６９】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（３０８）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２の実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１の続きを実行する（３０９）。
【００７０】
このハードウェア割り込み禁止命令の実行前にハードウェア４−１に割り込み要因が発生した場合の動作は、ユーザプログラムにハードウェア割り込み禁止命令が含まれていない場合にハードウェア４−１に割り込み要因が発生した場合と同様である。
【００７１】
つぎに、図７のシーケンス図および図１を参照して、ソフトウェア割り込み命令のＮ命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア４−１に割り込み要因が発生しなかった場合の動作について説明する。
【００７２】
ＣＰＵ１は、ユーザプログラム２１を実行してユーザ機能として動作し（４００）、ソフトウェア割り込み命令のＮ命令前のハードウェア割り込み禁止命令に到達すると、割り込み制御装置３のハードウェア４に対応する割り込み通知制御レジスタ３１に「割り込み通知禁止」を設定する（４０１）。ＣＰＵ１は、ハードウェア割り込み禁止命令を実行した後、ソフトウェア割り込み命令に達するまでユーザプログラム２１の命令の実行を継続する。
【００７３】
ＣＰＵ１が、ハードウェア割り込み禁止命令のＮ命令後にソフトウェア割り込み命令に到達する。このソフトウェア割り込み命令の実行によってソフトウェア割り込みが発生し（４０２）、このソフトウェア割り込みによってユーザプログラム２１から割り込み処理
ディスパッチャプログラム２２に処理を移行する。
【００７４】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する（４０３）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２に含まれるハードウェア割り込み許可命令によって、ハードウェア４−１に対応する割り込み制御装置３の割り込み通知制御レジスタ３１に「割り込み通知許可」を設定する（４０４）。
【００７５】
しかしながら、ハードウェア割り込み禁止命令実行からハードウェア割り込み許可命令実行までの間にハードウェア４−１に割り込み要因が発生していないため、割り込み制御装置３は、ハードウェア４−１からの割り込み要求を受けていない。そのため、割り込み制御装置３のハードウェア４−１に対応する割り込み状態レジスタ３２には「割り込み要求なし」が設定されている。よって、割り込み制御装置３は、ハードウェア４−１に対応する割り込み通知制御レジスタ３１に「割り込み通知許可」が設定されてもハードウェア割り込み要求をＣＰＵ１に通知しない。
【００７６】
ＣＰＵ１は、ソフトウェア割り込みに対応するソフトウェア割り込み処理プログラム２５−１を選択して処理を移行し、ソフトウェア割り込み処理プログラム２５−１を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に対応する所望の処理を実行する（４０５）。ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００７７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（４０６）。ここでは、ソフトウェア割り込みに対するソフトウェア割り込み処理プログラム２５−１を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００７８】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（４０７）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２に処理を移行する。
【００７９】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（４０８）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２の実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１の続きを実行する（４０９）。
【００８０】
図８および図９のシーケンス図を参照して、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラム２１０をＣＰＵ１が実行したとき（従来のユーザプログラムを実行したとき）の割り込みシステムの動作について説明する。
【００８１】
なお、ユーザプログラム２１０には、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されていないので、プログラム記憶部２には、ＣＰＵ１を割
り込み処理ディスパッチャとして動作させる割り込み処理ディスパッチャプログラムとして、割り込み処理ディスパッチャプログラム２２の代わりに、割り込み通知許可命令が含まれていない割り込み処理ディスパッチャプログラム２２０が格納されているものとする。
【００８２】
まず、図８のシーケンス図を参照して、割り込み制御装置３のハードウェア４−１，４−２に対応する割り込み通知制御レジスタ３１に「割り込み通知許可」が設定されており、ハードウェア４−１，４−２に割り込み要因が発生した場合の動作について説明する。
【００８３】
ＣＰＵ１は、ユーザプログラム２１０を実行してユーザ機能として動作する（５００）。ＣＰＵ１がユーザプログラム２１０を実行中に、ハードウェア４−２において割り込み要因が発生する。ハードウェア４−２は、割り込み要求を割り込み制御装置３に通知する（５０１）。
【００８４】
ハードウェア４−２から割り込み要求を受けると、割り込み制御装置３は、割り込み要求受付処理を実行する（５０２）。ＣＰＵ１は、ハードウェア割り込み禁止命令を実行していないので、割り込み制御装置３のハードウェア４−２に対応する割り込み通知制御レジスタ３１には「割り込み通知許可」が設定されている。したがって、割り込み制御装置３の制御部３０は、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定するとともに、ハードウェア４−２に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知する（５０３）。
【００８５】
ＣＰＵ１は、割り込み制御装置３からハードウェア割り込み要求が通知されると、ユーザプログラム２１０から割り込み処理ディスパッチャプログラム２２０に処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する（５０４）。
【００８６】
ＣＰＵ１は、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を選択して処理を移行する。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２を実行することで、ハードウェア４−２に対応する割り込み処理機能として動作し、ハードウェア４−２の割り込み要因に対する所望の処理を実行する（５０５）。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２の実行が終了すると、割り込み処理ディスパッチャプログラム２２０に処理を移行する。
【００８７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０を実行することで割り込み処理ディスパッチャとして動作して未処理の割り込み要求に対するディスパッチ処理を実行する（５０６）。ここでは、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００８８】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１０内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（５０７）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２０に処理を移行する。
【００８９】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（５０８）。
【００９０】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０の実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１０に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１０の続きを実行する（５０９）。
【００９１】
ＣＰＵ１がユーザプログラム２１０を実行中に、ハードウェア４−１において割り込み要因が発生する。ハードウェア４−１は、割り込み要求を割り込み制御装置３に通知する（５１０）。
【００９２】
ハードウェア４−１から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する（５１１）。ＣＰＵ１は、ハードウェア割り込み禁止命令を実行していないので、割り込み制御装置３のハードウェア４−１に対応する割り込み通知制御レジスタ３１には「割り込み通知許可」が設定されている。したがって、割り込み制御装置３の制御部３０は、ハードウェア４−１に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定するとともに、ハードウェア４−１に割り込み要求が発生した旨を通知するハードウェア割り込み要求をＣＰＵ１に通知する（５１２）。
【００９３】
ＣＰＵ１は、割り込み制御装置３からハードウェア割り込み要求が通知されると、先のハードウェア４−２に割り込み要因が発生した旨を通知する割り込み制御装置３からのハードウェア割り込み要求が通知された時と同様に、ユーザプログラム２１０から割り込み処理ディスパッチャプログラム２２０に処理を移行し、割り込み処理ディスパッチャプログラム２２０を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する（５１３）。
【００９４】
ＣＰＵ１は、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を選択して処理を移行し、ハードウェア割り込み処理プログラム２４−１を実行することで、ハードウェア４−１に対応する割り込み処理機能として動作し、ハードウェア４−１の割り込み要因に対する所望の処理を実行する（５１４）。
【００９５】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２０に処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する（５１５）。ここでは、ハードウェア４−１，４−２に対応するハードウェア割り込み処理プログラム２４−１，２４−２を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【００９６】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１０内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（５１６）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２０に処理を移行する。
【００９７】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（５１７）。
【００９８】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０の実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１０に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１０
の続きを実行する（５１８）。
【００９９】
このように、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラム２１０をＣＰＵ１が実行した場合には、ハードウェア４−１，４−２に割り込み要因が発生すると、発生時にハードウェア割り込み処理プログラム２４−１，２４−２を実行するため、それぞれの割り込み要因発生時に、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理を行うため、オーバヘッドが大きくなる。
【０１００】
これに対して、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム２１をＣＰＵ１が実行した場合、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのＮ命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理することができるため、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理を１回実行するだけでよく、オーバヘッドを軽減することができる。
【０１０１】
図９のシーケンス図を参照して、割り込み制御装置３がハードウェア４からの割り込み要求をＣＰＵ１に通知するのではなく、割り込み制御装置３が所定の時間毎にＣＰＵ１に割り込み要求を通知し、この通知を受けたＣＰＵ１が割り込み制御装置３にハードウェア４からの割り込み要求を受けているか否かを問い合せる従来のポーリングによる割り込みシステムの動作について説明する。
【０１０２】
なお、従来のポーリングによる割り込みシステムの構成は、先の図１に示した割り込みシステムと同じであるが、割り込み制御装置３は、所定の時間を繰り返し計測する機能を有し、この計測完了を割り込み要因として一定周期毎にＣＰＵ１に割り込み要求を通知する機能を備えているものとする。また、ハードウェア４に対応する割り込み通知制御レジスタ３１には「割り込み通知禁止」が設定されているものとする。
【０１０３】
また、プログラム記憶部２には、ユーザプログラム２１および割り込み処理ディスパッチャプログラム２２の代わりに、ユーザプログラム２１０および割り込み処理ディスパッチャプログラム２２０ａが格納されているものとする。ユーザプログラム２１０は、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラムである。また、割り込み処理ディスパッチャプログラム２２０ａは、割り込み通知許可命令の代わりに割り込み状態読み出し命令を含んでいる。
【０１０４】
ＣＰＵ１は、ユーザプログラム２１０を実行してユーザ機能として動作する（６００）。割り込み制御装置３は、所定の時間を計測し（６０１）、計測が完了するとＣＰＵ１に割り込み要求を通知する（６０２）。割り込み制御装置３から割り込み要求を受けると、ＣＰＵ１は、ユーザプログラム２１０の実行を中断して割り込み処理ディスパッチャプログラム２２０ａに処理を移行する。
【０１０５】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０ａを実行することで割り込み処理ディスパッチャとして動作してディスパッチ処理を実行する（６０３）。ＣＰＵ１は、退避処理およびカーネルモードのスタック・ポインタの設定処理を実行する。ＣＰＵ１は、割り込み状態読み出し命令を実行して割り込み制御装置３の割り込み状態レジスタ３２の設定値を読み出し（６０４）、読み出した設定値に基づいてディスパッチすべき（処理すべき）割り込み要因が存在するか否かを判定する。ここでは、ハードウェア４−１，４−２に割り込み要因が発生していないため、ハードウェア４−１，４−２に対応する割り込み制御装置３の割り込み状態レジスタ３２には「割り込み要求なし」が設定されて
いる。よって、ＣＰＵ１は、ディスパッチすべきハードウェア割り込み処理プログラム２４は存在しないと判定して復帰処理およびユーザモードのスタック・ポインタの設定処理を実行する。その後、ユーザプログラム２１０に処理を移行して、ＣＰＵ１は、割り込み制御装置３からの割り込み要求によって中断されたユーザプログラム２１０の続きを実行する（６０５）。
【０１０６】
ＣＰＵ１が、ユーザプログラム２１０を実行中にハードウェア４−１，４−２に割り込み要因が発生し、ハードウェア４−１，４−２は、割り込み要求を割り込み制御装置３に通知する（６０６，６０７）。ハードウェア４−１，４−２に対応する割り込み通知制御レジスタ３１には「割り込み通知禁止」が設定されているため、割り込み制御装置３は、ハードウェア４−１，４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定し、ＣＰＵ１にハードウェア割り込み要求を通知しない。
【０１０７】
割り込み制御装置３は、所定の時間の計測が完了すると（６０８）、ＣＰＵ１に割り込み要求を通知する（６０９）。割り込み制御装置３から割り込み要求を受けると、ＣＰＵ１は、ユーザプログラム２１０の実行を中断して割り込み処理ディスパッチャプログラム２２０ａに処理を移行する。
【０１０８】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０ａを実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。
【０１０９】
また、ＣＰＵ１は、割り込み状態読み出し命令を実行して割り込み制御装置３の割り込み状態レジスタ３２の設定値を読み出し（６１１）、読み出した設定値に基づいてディスパッチすべき割り込み要因が存在するか否かを判定する。ここでは、ハードウェア４−１，４−２に割り込み要因が発生しているため、ハードウェア４−１，４−２に対応する割り込み制御装置３の割り込み状態レジスタ３２には「割り込み要求あり」が設定されている。よって、ＣＰＵ１は、予め定められた優先順位にしたがって、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を選択して処理を移行し、ハードウェア４−１に対応する割り込み処理機能として動作し、ハードウェア４−１の割り込み要因に対する所望の処理を実行する（６１２）。
【０１１０】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２０ａに処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する（６１３）。ここでは、ハードウェア４−２の割り込み要求に対する処理が未処理であるので、ＣＰＵ１は、ハードウェア４−２に対するハードウェア割り込み処理プログラム２４−２に処理を移行する。ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２を実行することでハードウェア４−２に対応する割り込み処理機能として動作し、ハードウェア４−２の割り込み要因に対する所望の処理を実行する（６１４）。
【０１１１】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２の実行が終了すると、割り込み処理ディスパッチャプログラム２２０ａに処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する（６１５）。ここでは、ハードウェア４−１，４−２に対応するハードウェア割り込み処理プログラム２４−１，２４−２を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【０１１２】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１０内のタスクの実行順序を決定して実行するタス
クを選択するスケジューリング処理を実行する（６１６）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２０ａに処理を移行する。
【０１１３】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０ａを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（６１７）。
【０１１４】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０ａの実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１０に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１０の続きを実行する（６１８）。
【０１１５】
一方、割り込み制御装置３は、所定の時間を計測し（６１９）、計測が完了するとＣＰＵ１に割り込み要求を通知する（６２０）。割り込み制御装置３から割り込み要求を受けると、ＣＰＵ１は、ユーザプログラム２１０の実行を中断して割り込み処理ディスパッチャプログラム２２０ａに処理を移行する。
【０１１６】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２０ａを実行することで割り込み処理ディスパッチャとして動作してディスパッチ処理を実行する（６２１）。ＣＰＵ１は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。また、ＣＰＵ１は、割り込み状態読み出し命令を実行して割り込み制御装置３の割り込み状態レジスタ３２の設定値を読み出し（６２２）、読み出した設定値に基づいてディスパッチすべき割り込み要因が存在するか否かを判定する。ここでは、ハードウェア４−１，４−２に割り込み要因が発生していないため、ハードウェア４−１，４−２に対応する割り込み制御装置３の割り込み状態レジスタ３２には「割り込み要求なし」が設定されている。よって、ＣＰＵ１は、ディスパッチすべきハードウェア割り込み処理プログラム２４は存在しないと判定して、復帰処理およびユーザモードのスタック・ポインタの設定処理を実行する。その後、ユーザプログラム２１０に処理を移行して、ＣＰＵ１は、割り込み制御装置３からの割り込み要求によって中断されたユーザプログラム２１０の続きを実行する（６２３）。
【０１１７】
ＣＰＵ１が、ユーザプログラム２１０を実行中にハードウェア４−２に割り込み要因が発生し、ハードウェア４−２は、割り込み要求を割り込み制御装置３に通知する（６２４）。ハードウェア４−２に対応する割り込み通知制御レジスタ３１には「割り込み通知禁止」が設定されているため、割り込み制御装置３は、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定し、ＣＰＵ１にハードウェア割り込み要求を通知しない。この割り込み要求は、所定の時間の計測が完了した際に割り込み制御装置３がＣＰＵ１に対して割り込み要求を通知した際にＣＰＵ１が割り込み処理ディスパッチャプログラム２２０ａを実行して割り込み状態レジスタ３２を読み出した際に認識されて処理される。
【０１１８】
このように、従来のポーリングによる割り込みシステムでは、ハードウェア４の割り込み要因の発生後、直ちにＣＰＵ１がハードウェア割り込み処理を行うのではなく、割り込み制御装置３からの所定の時間毎の割り込みの間に発生したハードウェア４の割り込み要求をまとめて処理することを可能としている。しかしながら、最大で所定の時間割りこみ処理が遅延するため、割り込み応答性能が低下するという問題が生じる。この問題は、応答性能に対する要求（仕様）が比較的低い場合、割り込み制御装置３がＣＰＵ１に割り込み要求を通知する所定の時間の間隔を、割り込みの応答性能要求を満たすように設定することにより、性能要求に沿った割り込み処理が可能となる。
【０１１９】
しかしながら、従来のポーリングによる割り込みシステムでは、割り込み制御装置３がＣＰＵ１に割り込み要求を通知する所定の時間ごとに、ユーザプログラム２１０から割り込み処理ディスパッチャプログラム２２０ａに処理が移行し、割り込み制御装置３の割り込み状態レジスタ３２の設定値を読み出す割り込み読み出し命令を実行する。この処理は、ハードウェア４から割り込み制御装置３に割り込み要求が通知されている、いないに関わらず行なわれる。そのため、割り込み制御装置３がＣＰＵ１に割り込み要求を通知する所定の時間の間隔が短くなるほどオーバヘッドとなる。
【０１２０】
これに対して、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム２１をＣＰＵ１が実行した場合、ハードウェア４の割り込み処理の遅延は最大でＮ命令である。このＮの設定を割り込みの応答性能要求を満たすように設定しても、従来のポーリングによる割り込みシステムのようなオーバヘッドが発生することはない。
【０１２１】
以上説明したように、この第１の実施の形態においては、ソフトウェア割り込み命令のＮ命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入するようにしているため、特別なＣＰＵを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッドを軽減することができる。すなわち、既存の命令を用いて、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのＮ命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理することができるため、スタック・ポインタ値や各種レジスタ値の退避処理、復帰処理、およびスタック・ポインタの設定処理などの割り込み処理に伴うオーバヘッドを軽減することができる。
【０１２２】
また、ソフトウェア割り込み命令の何命令前にハードウェア割り込み命令を挿入するかを指定することができるため、Ｎ命令前のＮの値を割り込みの応答性能要求を満たす最大値とすれば、まとめて処理する割り込み要因の数が多くなる確率が高くなり、よりオーバヘッドを軽減することができる。
【０１２３】
なお、この第１の実施の形態においては、割り込み処理ディスパッチャプログラム２２に割り込み許可命令を含ませて、ソフトウェア割り込みが発生した際に割り込み制御装置３のハードウェア４に対応する割り込み通知制御レジスタ３１に「割り込み通知許可」を設定することで、ソフトウェア割り込み命令実行のＮ命令前から割り込み許可命令実行までの間に発生したハードウェア４の割り込み要求を、割り込み許可命令実行後に割り込み制御装置３からＣＰＵ１に通知するようにしたが、ＣＰＵ１がハードウェア４に割り込み要因が発生したか否かを認識する方法は、これに限るものではない。
【０１２４】
たとえば、ＣＰＵ１が割り込み制御装置３にハードウェア４に割り込み要因が発生したか否かを問い合わせて割り込みの発生を認識するようにしてもよい。具体的には、割り込み処理ディスパッチャプログラム２２に含まれる割り込み許可命令の代わりに、割り込み制御装置３の割り込み状態レジスタ３２の値を読み出すレジスタ読み出し命令を含ませておき、ＣＰＵ１が割り込み状態レジスタ３２の値を読み出してハードウェア４が割り込み要求を通知したか否かを認識するようにしてもよい。
【０１２５】
また、この第１の実施の形態においては、コンパイラ装置６によってソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令を挿入したユーザプログラム２１を生成するようにしたが、ソフトウェア割り込み命令のＮ命令前にハードウェア割り込み禁止命令を挿入する方法はこれに限るものではない。ソースコードプログラムを生成する際にユーザが挿入してもよいし、ＪＩＴコンパイラなどを用いて、割り込み禁止設定を配置
することが効果的であるかどうかを実行時に動的に判断し配置するようにしてもよい。
【０１２６】
（第２の実施の形態）
図１０〜図１３を用いてこの発明の第２の実施の形態を説明する。図１０は、この発明の第２の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
【０１２７】
図１０に示した割り込みシステムは、先の図１に示した第１の実施の形態の割り込みシステムの割り込み制御装置３に代えて、割り込み制御装置３の制御部３０の代わりに制御部３０ａを備え、遅延時間設定レジスタ３３および時間計測部３４が追加された割り込み制御装置３ａを備えるとともに、プログラム記憶部２はユーザプログラム２１および割り込み処理ディスパッチャプログラム２２の代わりに、ユーザプログラム２１ａおよび割り込み処理ディスパッチャプログラム２２ａを記憶している。先の図１に示した第１の実施の形態の割り込みシステムと同じ機能を持つ構成部分には同一符号を付し、重複する説明は省略する。
【０１２８】
割り込み制御装置３ａは、先の第１の実施の形態の割り込み制御装置３と同様に、ハードウェア４からの割り込み要求を管理してＣＰＵ１に通知する機能を有するが、割り込み制御装置３とは、ＣＰＵ１に割り込み要求を通知するタイミングが異なる。割り込み制御装置３は、ハードウェア４から割り込み要求を受けると、割り込み通知制御レジスタ３１に「割り込み通知許可」が設定されている場合には受け付けた割り込み要求をＣＰＵ１に通知し、割り込み通知制御レジスタ３１に「割り込み通知禁止」が設定されている場合には受け付けた割り込み要求をＣＰＵ１に通知せずに保留にした。
【０１２９】
これに対して、割り込み制御装置３ａは、遅延時間が設定されている場合には、割り込み要求を受けてから予め定められた遅延時間が経過した後にＣＰＵ１に割り込み要求を通知する。この割り込み要求は、ＣＰＵ１が割り込み処理ディスパッチャプログラム２２ａに移行するトリガとなるもので、ＣＰＵ１に対して割り込み要求を通知するものであれば、受け付けたハードウェア４のハードウェア割り込み要求であっても良いし、遅延時間の計測が終了した時点を自身の割り込み要因の発生として自身の割り込み要求であってもよい。
【０１３０】
具体的には、割り込み制御装置３ａは、制御部３０ａ、割り込み通知制御レジスタ３１および割り込み状態レジスタ３２に加えて、時間計測部３４および遅延時間設定レジスタ３３を備えている。時間計測部３４は、所定の時間を計測するタイマであって、たとえば、割り込み制御装置３を制御する基準クロック、または基準クロックから生成されたクロック数をカウントして遅延時間を計測する。
【０１３１】
遅延時間設定レジスタ３３は、ハードウェア４に対応付けられており、対応付けられたハードウェア４から割り込み要求を受け付けてからＣＰＵ１に割り込み要求を通知するまでの遅延時間を保持する。ここでは、時間計測部３４がカウントするクロック数を保持する。遅延時間設定レジスタ３３への遅延時間の設定は、ＣＰＵ１が実行する各種プログラムに含まれる遅延時間設定レジスタ３３へのレジスタ設定命令によって行われる。以下、説明を簡単にするために、遅延時間設定レジスタ３３に遅延時間を設定するレジスタ設定命令を「遅延時間設定命令」と呼ぶ。
【０１３２】
制御部３０ａは、割り込み通知制御レジスタ３１、割り込み状態レジスタ３２、および遅延時間設定レジスタ３３に基づいて、ハードウェア４からの割り込み要求をＣＰＵ１に通知する。具体的には、制御部３０ａは、遅延時間設定レジスタ３３の設定値が「０」の場合には、先の第１の実施の形態の割り込み制御装置３と同様に、割り込み要求を通知し
たハードウェア４に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定し、割り込み通知制御レジスタ３１の設定値によってＣＰＵ１にハードウェア４の割り込み要求を通知するか否かを判定する。
【０１３３】
制御部３０ａは、割り込み要求を通知したハードウェア４に対応する遅延時間設定レジスタ３３の設定値が「０」ではない場合、すなわち遅延時間に対応するクロック数が設定されている場合には、当該クロック数を時間計測部３４に設定して遅延時間の計測を開始させる。また、制御部３０ａは、時間計測部３４が遅延時間の計測を終了すると、自身の割り込み要求をＣＰＵ１に通知する。
【０１３４】
ユーザプログラム２１ａは、ユーザがＣＰＵ１を所望の機能（ユーザ機能）として動作させるアプリケーションのプログラムである。このユーザプログラム２１ａには、割り込み制御装置３ａの割り込み通知制御レジスタ３１、割り込み状態レジスタ３２、および遅延時間設定レジスタ３３に所望の値を設定するレジスタ設定命令が含まれており、これらのレジスタ設定命令の実行することでＣＰＵ１は、事前に割り込み制御装置３ａの割り込み通知制御レジスタ３１、割り込み状態レジスタ３２、および遅延時間設定レジスタ３３に所望の値を保持させる。
【０１３５】
割り込み処理ディスパッチャプログラム２２ａは、ＣＰＵ１を割り込み処理ディスパッチャとして動作させるプログラムで、ハードウェア割り込みまたはソフトウェア割り込みによって起動される。割り込み処理ディスパッチャプログラム２２ａは、先の第１の実施の形態の割り込み処理ディスパッチャプログラム２２に含まれていたハードウェア４の割り込み禁止命令の代わりに、割り込み状態読み出し命令を含んでいる。この割り込み状態読み出し命令は、ハードウェア割り込みまたはソフトウェア割り込みによって割り込み処理ディスパッチャプログラム２２ａが起動されてからディスパッチ処理を開始するまでの間に含まれる。
【０１３６】
割り込み処理ディスパッチャプログラム２２ａを実行して割り込み処理ディスパッチャとして動作するＣＰＵ１は、割り込み状態読み出し命令によって割り込み制御装置３ａの割り込み状態レジスタ３２の設定値を読み出して割り込み制御装置３ａに保留されている割り込み要求があるか否かを認識する。そして、認識した割り込み要求に対応するハードウェア４を含めてディスパッチ処理を行なう。
【０１３７】
図１１〜図１３のシーケンス図および図１０を参照して、この発明の第２の実施の形態の割り込みシステムの動作を説明する。まず、図１１のシーケンス図を参照して、ハードウェア４−２に割り込み要因が発生した場合の動作について説明する。
【０１３８】
ＣＰＵ１は、ユーザプログラム２１ａを実行してユーザ機能として動作する（７００）。まず、ＣＰＵ１は、初期化処理によって、ハードウェア４に対応する割り込み制御装置３ａの割り込み通知制御レジスタ３１に「割り込み通知禁止」を設定するとともに、ハードウェア４に対する遅延時間設定レジスタ３３に遅延時間に換算したクロック数を設定する（７０１）。ここでは、ハードウェア４−２に対応する遅延時間設定レジスタ３３に「Ｍ」を設定する。ＣＰＵ１は、初期化処理が終了した後、所望の処理を実行する（７０２）。
【０１３９】
ＣＰＵ１が、ユーザプログラム２１ａを実行中に、ハードウェア４−２に割り込み要因が発生し、ハードウェア４−２は、割り込み制御装置３ａに割り込み要求を通知する（７０３）。割り込み制御装置３ａの制御部３０ａは、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定する。また、割り込み制御装置３ａの制御部３０ａは、ハードウェア４−２に対応する遅延時間設定レジスタ３３に設定された
クロック数Ｍを時間計測部３４に設定して遅延時間の計測を開始させる（７０４）。時間計測部３４の遅延時間の計測が完了すると、割り込み制御部３ａの制御部３０ａは、自身の割り込み要求をＣＰＵ１に通知する（７０５）。
【０１４０】
割り込み制御装置３ａから割り込み要求を受けると、ＣＰＵ１は、ユーザプログラム２１ａを中断して割り込み処理ディスパッチャプログラム２２ａに処理を移行する。割り込み処理ディスパッチャプログラム２２ａを実行することでＣＰＵ１は、割り込み処理ディスパッチャとして動作する（７０６）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの割り込み状態読み出し命令によって、割り込み制御装置３ａの割り込み状態レジスタ３２の設定値を読み出す（７０７）。ここでは、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」が設定されているので、ＣＰＵ１は、ハードウェア４−２に割り込み要因が発生したことを認識する。ＣＰＵ１は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。ＣＰＵ１は、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を選択して処理を移行する。
【０１４１】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２を実行することで、ハードウェア４−２に対応する割り込み処理機能として動作し、ハードウェア４−２の割り込み要因に対する所望の処理を実行する（７０８）。ハードウェア割り込み処理プログラム２４−２の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（７０９）。ここでは、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を実行済みであり、未処理の割り込み要因は存在しない。よって、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【０１４２】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１ａ内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（７１０）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。
【０１４３】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（７１１）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１ａに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１ａの続きを実行する（７１２）。
【０１４４】
つぎに、図１２のシーケンス図、および図１０を参照して、ハードウェア４−２に割り込み要因が発生し、割り込み制御装置３ａが遅延時間の計測中にソフトウェア割り込みが発生した場合の動作について説明する。
【０１４５】
ＣＰＵ１は、ユーザプログラム２１ａを実行してユーザ機能として動作する（８００）。まず、ＣＰＵ１は、初期化処理によって、ハードウェア４に対応する割り込み制御装置３ａの割り込み通知制御レジスタ３１に「割り込み通知禁止」を設定するとともに、ハードウェア４に対する遅延時間設定レジスタ３３に遅延時間に換算したクロック数を設定する（８０１）。ここでは、ハードウェア４−２に対応する遅延時間設定レジスタ３３に「Ｍ」を設定する。ＣＰＵ１は、初期化処理が終了した後、所望の処理を実行する（８０２）。
【０１４６】
ＣＰＵ１が、ユーザプログラム２１ａを実行中に、ハードウェア４−２に割り込み要因が発生し、ハードウェア４−２は、割り込み制御装置３ａに割り込み要求を通知する（８０３）。割り込み制御装置３ａは、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定する。また、割り込み制御装置３ａは、ハードウェア４−２に対応する遅延時間設定レジスタ３３に設定されたクロック数Ｍを時間計測部３４に設定して遅延時間の計測を開始させる（８０４）。
【０１４７】
割り込み制御装置３ａの時間計測部３４が遅延時間計測中に、ユーザプログラム２１ａに含まれるソフトウェア命令によってソフトウェア割り込みが発生する（８０５）。ソフトウェア割り込みが発生すると、ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。割り込み処理ディスパッチャプログラム２２ａを実行することでＣＰＵ１は、割り込み処理ディスパッチャとして動作する（８０６）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの割り込み状態読み出し命令によって、割り込み制御装置３ａの割り込み状態レジスタ３２の設定値を読み出す（８０７）。ここでは、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」が設定されているので、ＣＰＵ１は、ハードウェア４−２に割り込み要因が発生したことを認識する。また、ＣＰＵ１は、割り込み制御装置３ａの時間計測部３４の停止を割り込み制御装置３ａに要求して時間計測部３４の遅延時間の計測を停止させる。ＣＰＵ１は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。ＣＰＵ１は、予め定められた優先順位にしたがって、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を選択して処理を移行する。
【０１４８】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２を実行することで、ハードウェア４−２に対応する割り込み処理機能として動作し、ハードウェア４−２の割り込み要因に対する所望の処理を実行する（８０８）。ハードウェア割り込み処理プログラム２４−２の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（８０９）。ここでは、ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１を選択して処理を移行する。
【０１４９】
ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に対応する所望の処理を実行する（８１０）。ＣＰＵ１は、ソフトウェア割り込み処理プログラム２５−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。
【０１５０】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作して未処理の割り込み要求に対するディスパッチ処理を実行する（８１１）。ここでは、未処理の割り込み要因は存在しなので、ＣＰＵ１は、タスクスケジューラプログラム２３に処理を移行する。
【０１５１】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１ａ内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（８１２）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。
【０１５２】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み
処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（８１３）。
【０１５３】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１ａに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１ａの続きを実行する（８１４）。
【０１５４】
図１３のシーケンス図、および図１０を参照して、ハードウェア４−１に割り込み要因が発生して割り込み制御装置３ａが遅延時間の計測中に、さらにハードウェア４−２に割り込み要因が発生した場合の動作について説明する。
【０１５５】
ＣＰＵ１は、ユーザプログラム２１ａを実行してユーザ機能として動作する（９０１）。まず、ＣＰＵ１は、初期化処理によって、ハードウェア４に対応する割り込み制御装置３ａの割り込み通知制御レジスタ３１に「割り込み通知禁止」を設定するとともに、ハードウェア４に対する遅延時間設定レジスタ３３に遅延時間に換算したクロック数を設定する（９０２）。ここでは、ハードウェア４−１に対応する遅延時間設定レジスタ３３に「Ｌ」を設定し、ハードウェア４−２に対応する遅延時間設定レジスタ３３に「Ｍ」を設定する。ＣＰＵ１は、初期化処理が終了した後、所望の処理を実行する（９０３）。
【０１５６】
ＣＰＵ１が、ユーザプログラム２１ａを実行中に、ハードウェア４−１に割り込み要因が発生し、ハードウェア４−１は、割り込み制御装置３ａに割り込み要求を通知する（９０４）。割り込み制御装置３ａは、ハードウェア４−１に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定する。また、割り込み制御装置３ａは、ハードウェア４−１に対応する遅延時間設定レジスタ３３に設定されたクロック数Ｌを時間計測部３４に設定してハードウェア４−１に対する遅延時間の計測を開始させる（９０５）。
【０１５７】
時間計測部３４がハードウェア４−１に対する遅延時間の計測中に、ハードウェア４−２に割り込み要因が発生し、ハードウェア４−２は、割り込み制御装置３ａに割り込み要求を通知する（９０６）。割り込み制御装置３ａの制御部３０ａは、ハードウェア４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」を設定する。また、割り込み制御装置３ａの制御部３０ａは、ハードウェア４−２に対応する遅延時間設定レジスタ３３に設定されたクロック数Ｍを時間計測部３４に設定してハードウェア４−２に対する遅延時間の計測を開始させる。
【０１５８】
時間計測部３４がハードウェア４−１に対する遅延時間の計測を完了すると、割り込み制御装置３ａの制御部３０ａは、割り込み要求をＣＰＵ１に通知する（９０７）。割り込み制御装置３ａから割り込み要求を受けると、ＣＰＵ１は、ユーザプログラム２１ａを中断して割り込み処理ディスパッチャプログラム２２ａに処理を移行する。割り込み処理ディスパッチャプログラム２２ａを実行することでＣＰＵ１は、割り込み処理ディスパッチャとして動作する（９０８）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの割り込み状態読み出し命令によって、割り込み制御装置３ａの割り込み状態レジスタ３２の設定値を読み出す（９０９）。ここでは、ハードウェア４−１，４−２に対応する割り込み状態レジスタ３２に「割り込み要求あり」が設定されているので、ＣＰＵ１は、ハードウェア４−１，４−２に割り込み要因が発生したことを認識する。ＣＰＵ１は、割り込み制御装置３ａの時間計測部３４の停止を割り込み制御装置３ａに要求して時間計測部３４の遅延時間の計測を停止させる。ＣＰＵ１は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。ＣＰＵ１は、予め定められた優先順位にしたがって、ハードウェア４−１に対応するハードウェア割り込み処理プログラム２４−１を選択して処理を移行する。
【０１５９】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−１を実行することで、ハードウェア４−１に対応する割り込み処理機能として動作し、ハードウェア４−１の割り込み要因に対する所望の処理を実行する（９１０）。ハードウェア割り込み処理プログラム２４−１の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（９１１）。ここでは、ハードウェア４−２に対応するハードウェア割り込み処理プログラム２４−２を選択して処理を移行する。
【０１６０】
ＣＰＵ１は、ハードウェア割り込み処理プログラム２４−２を実行することで、ハードウェア４−２に対応する割り込み処理機能として動作し、ハードウェア４−２の割り込み要因に対する所望の処理を実行する（９１２）。ハードウェア割り込み処理プログラム２４−２の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する（９１３）。ここでは、未処理の割り込み要求が存在しないので、タスクスケジューラプログラム２３に処理を移行する。
【０１６１】
ＣＰＵ１は、タスクスケジューラプログラム２３を実行することで、タスクスケジューラとして動作し、ユーザプログラム２１ａ内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する（９１４）。ＣＰＵ１は、タスクスケジューラプログラム２３の実行が終了すると、割り込み処理ディスパッチャプログラム２２ａに処理を移行する。
【０１６２】
ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する（９１５）。ＣＰＵ１は、割り込み処理ディスパッチャプログラム２２ａの実行が終了すると、タスクスケジューラプログラム２３によって選択されたタスク、すなわちユーザプログラム２１ａに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム２１ａの続きを実行する（９１６）。
【０１６３】
以上説明したように、この第２の実施の形態においては、割り込み制御装置が、ハードウェアに割り込み要因が発生したことを記憶するとともに、当該ハードウェアに割り込み要因が発生してから予め定められた遅延時間が経過した後に割り込みがあったことをＣＰＵに通知し、通知を受けたＣＰＵが、割り込み制御装置が記憶する遅延時間内に発生したすべてのハードウェアの割り込み要因を認識して割り込み処理を実行するようにしているため、特別なＣＰＵを用いることなく、既存の命令を用いて、割り込み処理に伴うオーバヘッド処理を軽減することができる。この効果は、ハードウェアの割り込み要因が頻繁に発生するほど大きくなる。
【０１６４】
また、ハードウェア毎に遅延時間を設定するようにしているため、ハードウェアが要求する応答性能を維持しつつ、割り込み処理に伴うオーバヘッド処理を軽減することができる。
【図面の簡単な説明】
【０１６５】
【図１】この発明の第１の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図。
【図２】ユーザプログラムの一例を示す図。
【図３】コンパイラ装置とその入出力関係を示す図。
【図４】コンパイラ装置の動作を説明するためのフローチャート。
【図５】この発明の第１の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【図６】この発明の第１の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【図７】この発明の第１の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【図８】従来のユーザプログラムを用いた割り込みシステムの動作を説明するためのシーケンス図。
【図９】従来のポーリングによる割り込みシステムの動作を説明するためのシーケンス図。
【図１０】この発明の第２の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図。
【図１１】この発明の第２の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【図１２】この発明の第２の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【図１３】この発明の第２の実施の形態の割り込みシステムの動作を説明するためのシーケンス図。
【符号の説明】
【０１６６】
１  ＣＰＵ
２  プログラム記憶部
３，３ａ  割り込み制御装置
４  ハードウェア
３０  制御部
３１  割り込み通知制御レジスタ
３２  割り込み状態レジスタ
３３  遅延時間設定レジスタ
３４  時間計測部
【図１】
2009098972.tif 000003
【図２】
2009098972.tif 000004
【図３】
2009098972.tif 000005
【図４】
2009098972.tif 000006
【図５】
2009098972.tif 000007
【図６】
2009098972.tif 000008
【図７】
2009098972.tif 000009
【図８】
2009098972.tif 000010
【図９】
2009098972.tif 000011
【図１０】
2009098972.tif 000012
【図１１】
2009098972.tif 000013
【図１２】
2009098972.tif 000014
【図１３】
2009098972.tif 000015