JP2009098972A - 割り込み制御方法、および割り込みシステム - Google Patents
割り込み制御方法、および割り込みシステム Download PDFInfo
- Publication number
- JP2009098972A JP2009098972A JP2007270601A JP2007270601A JP2009098972A JP 2009098972 A JP2009098972 A JP 2009098972A JP 2007270601 A JP2007270601 A JP 2007270601A JP 2007270601 A JP2007270601 A JP 2007270601A JP 2009098972 A JP2009098972 A JP 2009098972A
- Authority
- JP
- Japan
- Prior art keywords
- interrupt
- hardware
- cpu
- program
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
【課題】特別なCPUを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッド処理を軽減することができる割り込み制御方法、および割り込みシステムを得る。
【解決手段】ソフトウェア割り込み命令のN命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入し、既存の命令を用いて、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのN命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理する。
【選択図】 図2
【解決手段】ソフトウェア割り込み命令のN命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入し、既存の命令を用いて、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのN命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理する。
【選択図】 図2
Description
本発明は、CPU(Central Processing Unit)の割り込み制御に関するものであり、特に、割り込みによって発生するオーバヘッドを軽減する割り込み制御方法、および割り込みシステムに関するものである。
一般的に、ハードウェア割り込みが発生すると、CPUは、実行中のユーザプログラムを中断して割り込みベクタと呼ばれる特定のアドレスに制御を移行し、OS(Operating
System)が用意した割り込み処理へと処理を移行する。OSは、ハードウェアの割り込み処理を、カーネルモードと呼ばれるOS専用の環境で実行するのが一般的である。そのため、CPUは、ユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なってから、ハードウェアの割り込み処理を実行する。そして、ハードウェアの割り込み処理を実行した後、退避処理によってスタック領域に格納したユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行って、中断したユーザプログラムを継続して実行する。
System)が用意した割り込み処理へと処理を移行する。OSは、ハードウェアの割り込み処理を、カーネルモードと呼ばれるOS専用の環境で実行するのが一般的である。そのため、CPUは、ユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なってから、ハードウェアの割り込み処理を実行する。そして、ハードウェアの割り込み処理を実行した後、退避処理によってスタック領域に格納したユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行って、中断したユーザプログラムを継続して実行する。
ソフトウェア割り込が発生した場合も、ハードウェア割り込みと同様に、CPUは、実行中のユーザプログラムを中断して割り込みベクタと呼ばれる特定のアドレスに制御を移行し、ユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なってから、ソフトウェア割り込み処理を実行する。そして、ソフトウェア割り込み処理を実行した後、退避処理によってスタック領域に格納したユーザプログラム実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行って、中断したユーザプログラムを継続して実行する。
CPUは、ハードウェア割り込みまたはソフトウェア割り込みが発生するたびに、退避処理およびカーネルモードのスタック・ポインタの設定処理を行なってハードウェアの割り込み処理またはソフトウェアの割り込み処理を実行し、割り込み処理実行後に、復帰処理およびユーザモードのスタック・ポインタの設定処理を行ってユーザプログラムに戻る処理を繰り返すため、ハードウェアおよびソフトウェアの割り込みが頻繁に発生すると、退避処理およびカーネルモードのスタック・ポインタの設定処理と、復帰処理およびユーザモードのスタック・ポインタの設定処理とを実行する回数が多くなってオーバヘッドが大きくなり、CPUの処理性能を低下させてしまうという問題があった。
このような問題を改善するためには、オーバヘッドとなる処理回数を減らすために、一定期間割り込みを保留させて、まとめて割り込み処理を実行することが考えられる。たとえば、特許文献1に記載の従来技術には、所定の時間期間、または所定の命令数の間割り込みの認識を遅延させる割り込み認識遅延命令を設け、この割り込み認識遅延命令を実行することでCPUの割り込みの認識を遅延させる技術が開示されている。
しかしながら、上記特許文献1に記載の従来技術では、割り込み認識遅延命令を実行可能な特別なCPUを用いる必要があり、既存のCPUを用いることはできないという問題
があった。
があった。
本発明は、上記に鑑みてなされたものであって、特別なCPUを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッド処理を軽減することができる割り込み制御方法、および割り込みシステムを得ることを目的とする。
上述した課題を解決し、目的を達成するために、本願発明の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェアからの割り込み要求を通知するか否かが設定される割り込み通知制御レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるCPUによる制御方法であって、前記CPUがユーザプログラムに含まれるソフトウェア割り込み命令よりN(Nは自然数)命令前に前記割り込み通知制御レジスタに割り込み通知禁止を設定するレジスタ設定命令を実行することで前記割り込み通知制御レジスタに割り込み通知禁止を設定する第1のステップと、前記CPUが前記ソフトウェア割り込み命令を実行してソフトウェア割り込みが発生した後に、前記割り込み状態レジスタの設定値を読み出して、前記ハードウェアからの割り込み要求が発生したか否かを認識し、前記レジスタ設定命令から前記ソフトウェア割り込み命令までの間に発生したハードウェアの割り込み要因と前記ソフトウェア割り込みとの割り込み処理を連続して実行する第2のステップと、を含むことを特徴とする割り込み制御方法が提供される。
また、本願発明の別の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるCPUによる割り込み制御方法であって、前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定する第1のステップと、前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、予め定められた遅延時間の計測を開始する第2のステップと、前記第2のステップによって開始した遅延時間の計測が完了すると、前記割り込み制御装置がCPUに割り込み要求を通知する第3のステップと、前記第3のステップによって割り込み要求を受けると、CPUが前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、前記遅延時間の間に発生したすべてのハードウェア割り込みに対する割り込み処理を連続して実行する第4のステップと、を含むことを特徴とする割り込み制御方法が提供される。
また、本願発明の別の一態様によれば、ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェア毎の遅延時間が設定される遅延時間設定レジスタと、前記割り込み状態レジスタに割り込み要求を受けたことが設定されると、前記遅延時間設定レジスタに設定された遅延時間の計測を開始する時間計測部と、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定し、前記時間計測部による遅延時間の計測が終了すると割り込み要求を通知する制御部と、を有する割り込み制御装置と、前記割り込み制御装置から割り込み要求を受けると、前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、認識したすべてのハードウェアの割り込み要求に対する割り込み処理を連続して実行するCPUと、を備えたことを特徴とする割り込みシステムが提供される。
本発明によれば、ソフトウェア割り込み命令のN命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入するようにしているため、特別なCPUを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッドを軽減することができる。
以下に添付図面を参照して、この発明にかかる割り込み制御方法および割り込みシステムの最良な実施の形態を詳細に説明する。
(第1の実施の形態)
図1〜図9を用いて、この発明の第1の実施の形態を説明する。図1は、この発明の第1の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
図1〜図9を用いて、この発明の第1の実施の形態を説明する。図1は、この発明の第1の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
図1において、割り込みシステムは、CPU(Central Processing Unit)1、CPU1に接続されCPU1が実行する各種プログラム(ユーザプログラム21、割り込み処理ディスパッチャプログラム22、タスクスケジューラプログラム23、ハードウェア割り込み処理プログラム24(24−1〜24−3を示す)、ソフトウェア割り込み処理プログラム25(25−1,25−2を示す))を記憶するプログラム記憶部2、CPU1に対して割り込み要求を発生させて所定の処理の実行を要求する複数(この場合は3つ)のハードウェア4(4−1〜4−3を示す)、およびハードウェア4とCPU1とに接続されハードウェア4に割り込み要因が発生した旨を通知する割り込み要求を制御してCPU1に通知する割り込み制御装置3を備えている。
ハードウェア4は、たとえば、外部記憶装置、プリンタ、入力装置などの周辺機器であり、自身に割り込み要因が発生するとCPU1に対する割り込み要求を割り込み制御装置3に出力して当該割り込み要求に対する処理を要求する。
割り込み制御装置3は、制御部30、ハードウェア4に対応付けられた割り込み通知制御レジスタ31、および割り込み状態レジスタ32を備え、制御部30は、割り込み通知制御レジスタ31および割り込み状態レジスタ32に基づいてハードウェア4の割り込み要求を管理し、割り込み要求をCPU1に通知する。
割り込み通知制御レジスタ31は、対応付けられたハードウェア4からの割り込み要求をCPU1に通知するか否かを示す情報(割り込み通知許可/割り込み通知禁止)を保持する。割り込み通知制御レジスタ31への情報の設定は、CPU1が実行する各種プログラムに含まれる割り込み通知制御レジスタ31へのレジスタ設定命令によって行われる。以下、説明を簡単にするために、割り込み通知制御レジスタ31に割り込み通知許可を設定するレジスタ設定命令を「割り込み許可命令」と呼び、割り込み通知制御レジスタ31に割り込み通知禁止を設定するレジスタ設定命令を「割り込み禁止命令」と呼ぶ。
割り込み状態レジスタ32には、対応付けられたハードウェア4から割り込み要因が発生した旨を通知する割り込み要求を受けたこと、すなわちハードウェア4に割り込み要因が発生したか否かを示す情報(割り込み要求あり/なし)が設定される。割り込み状態レジスタ32への割り込み要求ありの設定は、ハードウェア4から割り込み要求を受けた際に制御部30によって行われる。また、割り込み状態レジスタ32への割り込み要求なしの設定は、CPU1が当該割り込み要求によって実行するハードウェア割り込み処理プログラムに含まれる割り込み状態レジスタ32へのレジスタ設定命令によって行われる。ま
た、CPU1は、割り込み状態レジスタ32へのレジスタ読み出し命令によって、割り込み状態レジスタ32の設定値を読み取る。以下、説明を簡単にするために、割り込み状態レジスタ32に割り込み要求なしを設定するレジスタ設定命令を「割り込み状態リセット命令」と呼び、割り込み状態レジスタ32の設定値を読み出すレジスタ読み出し命令を「割り込み状態読み出し命令」と呼ぶ。
た、CPU1は、割り込み状態レジスタ32へのレジスタ読み出し命令によって、割り込み状態レジスタ32の設定値を読み取る。以下、説明を簡単にするために、割り込み状態レジスタ32に割り込み要求なしを設定するレジスタ設定命令を「割り込み状態リセット命令」と呼び、割り込み状態レジスタ32の設定値を読み出すレジスタ読み出し命令を「割り込み状態読み出し命令」と呼ぶ。
制御部30は、割り込み通知制御レジスタ31および割り込み状態レジスタ32の設定情報に基づいて、ハードウェア4からの割り込み要求をCPU1に通知する。具体的には、制御部30は、ハードウェア4から割り込み要求を受けると、割り込み要求を発生したハードウェア4に対応する割り込み状態レジスタ32に割り込み要求ありを設定する。そして、制御部30は、割り込み要求を発生したハードウェア4に対応する割り込み通知制御レジスタ31に割り込み通知許可が設定されている場合には、ハードウェア4に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知する。制御部30は、割り込み要求を発生したハードウェア4に対応する割り込み通知制御レジスタ31に割り込み通知禁止が設定されている場合には、ハードウェア4に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知しない。
CPU1は、図示しないプログラムカウンタ、演算処理に用いる汎用レジスタやスタック・ポインタを格納するスタックレジスタなどのレジスタ群を用いて、プログラム記憶部2に記憶された各種プログラムを実行することで各種機能を実現する。
プログラム記憶部2は、ユーザプログラム21と、割り込み処理ディスパッチャプログラム22、タスクスケジューラプログラム23、ハードウェア割り込み処理プログラム24、およびソフトウェア割り込み処理プログラム25とを記憶する。ここで、ユーザプログラム21は、ユーザによって作成されたアプリケーションのプログラムで、ユーザモードでCPU1に実行される。割り込み処理ディスパッチャプログラム22、タスクスケジューラプログラム23、ハードウェア割り込み処理プログラム24、およびソフトウェア割り込み処理プログラム25は、OS(Operating System)のシステムプログラムであり、カーネルモードでCPU1に実行される。
ユーザプログラム21は、ユーザがCPU1を所望の機能(ユーザ機能)として動作させるアプリケーションのプログラムである。ユーザプログラム21には、ユーザが要求する機能を実現する命令群に含まれるソフトウェア割り込み命令のN(Nは自然数)命令前にハードウェア割り込み禁止命令が記載されている。図2は、ユーザプログラム21の一例を示す図である。図2においては、ソフトウェア#Aに対する割り込み命令であるソフトウェア#A割り込み命令のN命令前にハードウェア#1の割り込みを禁止するハードウェア#1割り込み禁止命令が記載されている。
なお、ソフトウェア割り込み命令のN命令前に記載されるハードウェア割り込み命令は、割り込み制御装置3が管理するハードウェア4全ての割り込み通知を禁止する割り込み禁止命令であってもよいし、任意のハードウェア4の割り込み通知を禁止する割り込み禁止命令であってもよい。また、全てのソフトウェア割り込み命令のN命令前に割り込み禁止命令が記載されていてもよいし、任意のソフトウェア割り込み命令のN命令前のみに割り込み禁止命令が記載されていてもよく、CPU1が実行可能なソフトウェア割り込み命令のすくなくとも1つのソフトウェア割り込み命令のN命令前に割り込み禁止命令が記載されていればよい。
CPU1は、ユーザプログラム21を実行することでユーザが要求する処理を実行するユーザ機能部として動作する。図2に示したユーザプログラム21を実行した場合、CPU1は、ハードウェア#1割り込み禁止命令によってハードウェア#1(たとえば、ハー
ドウェア4−1)に対応する割り込み制御装置3の割り込み通知制御レジスタ31に割り込み通知禁止を設定する。そして、ハードウェア#1割り込み禁止命令のN命令後のソフトウェア#A割り込み禁止命令を実行することで、割り込みベクタと呼ばれる特定アドレスが示すプログラム記憶部2の領域に格納された割り込み処理ディスパッチャプログラム22に処理を移行する。
ドウェア4−1)に対応する割り込み制御装置3の割り込み通知制御レジスタ31に割り込み通知禁止を設定する。そして、ハードウェア#1割り込み禁止命令のN命令後のソフトウェア#A割り込み禁止命令を実行することで、割り込みベクタと呼ばれる特定アドレスが示すプログラム記憶部2の領域に格納された割り込み処理ディスパッチャプログラム22に処理を移行する。
割り込み処理ディスパッチャプログラム22は、CPU1を割り込み処理ディスパッチャとして動作させるプログラムで、ハードウェア割り込みまたはソフトウェア割り込みによって起動される。割り込み処理ディスパッチャプログラム22は、ソフトウェア割り込みによって起動された場合に、当該ソフトウェア割り込みを発生させたソフトウェア割り込み命令よりもN命令前に実行されたハードウェア割り込み禁止命令によって割り込み通知禁止が設定されたハードウェア4に対応する割り込み制御装置3の割り込み通知制御レジスタ31に「割り込み通知許可」を設定するハードウェア割り込み許可命令を含んでいる。このハードウェア割り込み許可命令は、ソフトウェア割り込み処理によって起動されてから後述するディスパッチ処理を実行するまでの間に実行される位置に記載される。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作する。割り込み処理ディスパッチャとして動作するCPU1は、ユーザプログラム21からハードウェア割り込み処理プログラム24、またはソフトウェア割り込み処理プログラム25に処理を移行する前に、ユーザプログラム21実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を図示しない内部メモリのスタック領域に格納する退避処理を実行するとともに、カーネルモードのスタック・ポインタの設定処理を行なう。
また、割り込み処理ディスパッチャとして動作するCPU1は、ソフトウェア割り込みによって起動された場合、ハードウェア割り込み許可命令を実行することによって、当該ソフトウェア割り込みを発生させたソフトウェア割り込み命令よりもN命令前に実行されたハードウェア割り込み禁止命令によって割り込み通知禁止が設定されたハードウェア4に対応する割り込み制御装置3の割り込み通知制御レジスタ31に「割り込み通知許可」を設定する。
さらに、割り込み処理ディスパッチャとして動作するCPU1は、予め定められた優先順位にしたがって処理を移行するハードウェア割り込み処理プログラム24またはソフトウェア割り込み処理プログラム25を選択し、選択したハードウェア割り込み処理プログラム24またはソフトウェア割り込み処理プログラム25に処理を移行するディスパッチ処理を実行する。
また、割り込み処理ディスパッチャとして動作するCPU1は、ハードウェア割り込み処理プログラム24、またはソフトウェア割り込み処理プログラム25の実行が終了した際に起動され、退避処理によってスタック領域に格納したユーザプログラム21実行時に使用していたスタック・ポインタや各種レジスタ、プログラムカウンタの値を設定する復帰処理を実行するとともに、ユーザモードのスタック・ポインタの設定処理を行う。復帰処理およびユーザモードのスタック・ポインタの設定を実行した後に、割り込み処理ディスパッチャとして動作するCPU1は、タスクスケジューラプログラム23に処理を移行する。
タスクスケジューラプログラム23は、CPU1をタスクスケジューラとして動作させるプログラムである。CPU1は、このタスクスケジューラプログラムを実行することで、ユーザプログラム21内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を行うタスクスケジューラとして動作する。
ハードウェア割り込み処理プログラム24は、CPU1をハードウェア4に対応する割り込み処理機能として動作させるプログラムであり、自身のハードウェア4に対応する割り込み制御装置3の割り込み状態レジスタ32に「割り込み要求なし」に設定する命令が含まれている。ここでは、ハードウェア割り込み処理プログラム24−1がハードウェア4−1に対する割り込み処理プログラムであり、ハードウェア割り込み処理プログラム24−2がハードウェア4−2に対する割り込み処理プログラムであり、ハードウェア割り込み処理プログラム24−3がハードウェア4−3に対する割り込み処理プログラムである。CPU1は、ハードウェア割り込み処理プログラム24を実行することで、ハードウェア4に対応する割り込み処理機能として動作し、ハードウェア4の割り込み要因に対する所望の処理を実行する。
ソフトウェア割り込み処理プログラム25は、CPU1をソフトウェア割り込み命令に対応する割り込み処理機能として動作させるプログラムである。通常、ソフトウェア割り込み命令は1つで、特定のレジスタの設定値によってソフトウェア割り込み発生時に実行するソフトウェア割り込み処理プログラムを選択する。ここでは、ソフトウェア割り込み命令によるソフトウェア割り込み発生時の特定のレジスタの設定値によって、ソフトウェア割り込み処理プログラム25−1またはソフトウェア割り込み処理プログラム25−2が選択される。CPU1は、ソフトウェア割り込み処理プログラム25を実行することで、ソフトウェア割り込み処理部として動作する。
プログラム記憶部2に格納される各種プログラムは、すべてCPU1が実行可能なオブジェクトコードで記載されたプログラムである。一般的に、ユーザは、プログラミング言語で所望の機能を実現するソースコードプログラムを作成する。そして、作成したソースコードプログラムをコンパイラ装置によってCPU1が実行可能なオブジェクトコードプログラムに変換してユーザプログラム21としてプログラム記憶部2に記憶させる。
図3は、ユーザが作成したソースコードプログラムをオブジェクトコードプログラムに変換するコンパイラ装置とその入出力関係を示す図である。図3において、パラメータファイル7およびソースコードプログラム8が、コンパイラ装置6の入力であり、オブジェクトコードプログラム9がコンパイラ装置6の出力である。
ソースコードプログラム8は、プログラミング言語の各種命令(ソースコード)によって記載されたユーザが所望する機能をCPU1に実現させるプログラムである。パラメータファイル7は、キーワードとなるソフトウェア割り込み命令、挿入するハードウェア割り込み禁止命令の対象となるハードウェア4を識別するための対象ハードウェア情報、およびキーワードとなるソフトウェア割り込み命令の何命令前にハードウェア割り込み禁止命令を挿入するかを指定する挿入指定命令数Nが記載される。対象ハードウェア情報は、すべてのハードウェア4であってもよいし、任意のハードウェア4であってもかまわない。
コンパイラ装置6は、ソフトウェア割り込み命令検出部61と、ハードウェア割り込み禁止命令挿入部62と、オブジェクトコード生成部63とを備えている。ソフトウェア割り込み命令検出部61は、ソースコードプログラム8の命令群の中からパラメータファイル7に記載されたキーワードとなるソフトウェア割り込み命令を検出する。ハードウェア割り込み禁止命令挿入部62は、ソフトウェア割り込み命令検出部61によって検出されたソフトウェア割り込み命令からパラメータファイル7に記載された挿入指定命令数N前にパラメータファイル7に記載された対象ハードウェア情報が示すハードウェア4に対する割り込み制御装置3の割り込み通知制御レジスタ31に割り込み通知禁止を設定するハードウェア割り込み禁止命令を挿入する。オブジェクトコード生成部63は、ハードウェ
ア割り込み禁止命令挿入部62によってハードウェア割り込み禁止命令が挿入されたソースコードプログラムのソースコードをCPU1が実行可能なオブジェクトコードに変換し、変換したオブジェクトコードを登録したオブジェクトコードプログラム9を出力する。
ア割り込み禁止命令挿入部62によってハードウェア割り込み禁止命令が挿入されたソースコードプログラムのソースコードをCPU1が実行可能なオブジェクトコードに変換し、変換したオブジェクトコードを登録したオブジェクトコードプログラム9を出力する。
図4のフローチャートと図3を参照して、コンパイラ装置6の動作を説明する。なお、ここでは、ソースコードプログラム8は、アセンブラ言語で記載されたプログラムとする。コンパイラ装置6は、パラメータファイル7を読み込んで、パラメータファイル7に登録されたキーワードとなるソフトウェア割り込み命令、挿入指定命令数N、および対象ハードウェア情報を認識する(ステップS100)。コンパイラ装置6は、ソフトウェア割り込み命令検出部61にキーワードとなるソフトウェア割り込み命令を通知し、ハードウェア割り込み禁止命令挿入部62に挿入指定命令数Nおよび対象ハードウェア情報を通知する。
コンパイラ装置6は、ソースコードプログラム8を読み込む(ステップS101)。ソフトウェア割り込み命令検出部61は、読み込んだソースコードプログラム8の先頭行(i=1)から順番にソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれているか否かを判定する(ステップS103)。ソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれていると判定した場合(ステップS103,Yes)、ソフトウェア割り込み命令検出部61は、ソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれている旨をハードウェア割り込み禁止命令挿入部62に通知する。
ハードウェア割り込み禁止命令挿入部62は、ソースコードプログラム8のソフトウェア割り込み命令検出部61が検出したソフトウェア割り込み命令よりN命令前に、対象ハードウェア情報が示すハードウェア4に対応するハードウェア割り込み禁止命令を挿入する(ステップS104)。ハードウェア割り込み禁止命令挿入部62は、ハードウェア割り込み禁止命令をソースコードプログラム8に挿入した旨をソフトウェア割り込み命令検出部61に通知する。
ハードウェア割り込み禁止命令をソースコードプログラム8に挿入した旨が通知された場合、またはソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれていないと判定した場合(ステップS103,No)、ソフトウェア割り込み命令検出部61は、現在の行(i行)の次の行(i+1行)がソースコードプログラム8に存在するか否かを判定し、ソースコードプログラム8の最後の行まで、ソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれているか否かを判定し、ソースコードプログラム8のi行目にキーワードとなるソフトウェア割り込み命令が含まれていると判定された場合には、ハードウェア割り込み禁止命令挿入部62は、ソースコードプログラム8のソフトウェア割り込み命令検出部61が検出したソフトウェア割り込み命令よりN命令前に、対象ハードウェア情報が示すハードウェア4に対応するハードウェア割り込み禁止命令を挿入する動作を繰り返す(ステップS103〜S106)。
読み込んだソースコードプログラム8の最後の行までキーワードとなるソフトウェア割り込み命令が存在するか否かを判定してハードウェア割り込み禁止命令を挿入する処理が終了した後、オブジェクトコード生成部63は、ハードウェア割り込み禁止命令挿入部62によって対象ハードウェア情報が示すハードウェア4に対するハードウェア割り込み禁止命令が挿入されたソースコードプログラム8のソースコードをオブジェクトコードに変換する(ステップS107)。オブジェクトコード生成部63は、変換したオブジェクトコードを登録したオブジェクトコードプログラム9を出力する(ステップS108)。
なお、ここでは、パラメータファイル7にキーワードとなるソフトウェア割り込み命令、挿入するハードウェア割り込み禁止命令の対象となるハードウェア4を識別するための対象ハードウェア情報、およびキーワードとなるソフトウェア割り込み命令の何命令前にハードウェア割り込み禁止命令を挿入するかを指定する挿入指定命令数Nを記載して、コンパイラ装置6に読み込ませるようにしたが、コンパイラ装置6に、予めキーワードとなるソフトウェア割り込み命令、対象ハードウェア情報、および挿入指定命令数Nを設定しておいてもよい。
また、ここでは、ソースコードプログラム8をアセンブラ言語で記載されたものとしたが、他のプログラミング言語であってもかまわない。たとえば、高級言語で記載されたソースコードプログラム8では、ソースコードの1行が1機械命令に対応しない。この場合は、ソースコードプログラム8を機械語レベルに変換した後に、ソフトウェア割り込み命令を検出するようにすればよい。
また、ソフトウェア割り込み命令検出部61は、性能向上を考慮して、ソースコードプログラム8内の全てのソフトウェア命令を検出するのではなく、頻繁に起こるソフトウェア割り込みのみを検出してハードウェア割り込み禁止命令挿入部62に通知し、ハードウェア割り込み禁止命令挿入部62は、頻繁に起こるソフトウェア割り込みの前だけにハードウェア割り込み禁止命令を挿入するようにしてもよい。
つぎに、図5〜図7のシーケンス図および図1を参照して、コンパイラ装置6によってソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム21をCPU1が実行したときの割り込みシステムの動作について説明する。なお、ここでは、ユーザプログラム21のソフトウェア割り込み命令のN命令前に、割り込み制御装置3が制御するすべてのハードウェア4の割り込みの通知を禁止するハードウェア割り込み禁止命令が挿入されているものとする。
まず、図5のシーケンス図および図1を参照して、ソフトウェア割り込み命令のN命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア4−1に割り込み要因が発生した場合の動作について説明する。
CPU1は、ユーザプログラム21を実行してユーザ機能として動作する(200)。ユーザプログラム21には、ソフトウェア割り込み命令のN命令前にハードウェア4−1の割り込み発生の通知を禁止するハードウェア割り込み禁止命令が含まれている。このハードウェア割り込み禁止命令を実行することで、CPU1は、割り込み制御装置3のハードウェア4に対応する割り込み通知制御レジスタ31に「割り込み通知禁止」を設定する(201)。CPU1は、ハードウェア割り込み禁止命令を実行した後、ソフトウェア割り込み命令に達するまでユーザプログラム21の命令の実行を継続する。
CPU1が割り込み制御装置3のハードウェア4に対応する割り込み通知制御レジスタ31に割り込み通知禁止を設定してからソフトウェア割り込み命令を実行するまでの間に、ハードウェア4−1において割り込み要因が発生する。ハードウェア4−1は、割り込み要因が発生した旨(割り込み要求)を割り込み制御装置3に通知する(202)。
割り込み制御装置3の制御部30は、ハードウェア4−1から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する(203)。具体的には、ハードウェア4−1に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定する。制御部30は、ハードウェア4−1に対応する割り込み通知制御レジスタ31の設定値が、割り込み通知許可であるのか割り込み通知禁止であるのかを判定する。
制御部30は、ハードウェア4−1に対応する割り込み通知制御レジスタ31の設定値が割り込み通知許可である場合、ハードウェア4−1から割り込み要求を受けた旨を通知するハードウェア割り込み要求をCPU1に通知し、ハードウェア4−1に対応する割り込み通知制御レジスタ31の設定値が割り込み通知禁止である場合、ハードウェア4−1から割り込み要求を受けた旨をCPU1に通知しない。
ここでは、CPU1が実行したユーザプログラム21内のハードウェア割り込み禁止命令によってハードウェア4−1に対応する割り込み通知制御レジスタ31には割り込み通知禁止が設定されている。したがって、制御部30は、ハードウェア4−1の割り込み要求をCPU1に通知することなく割り込み要求受付処理を終了する。すなわち、ユーザプログラム21のソフトウェア割り込み命令よりN命令前以後に発生したハードウェア4−1に発生した割り込み要因による割り込み要求は、割り込み制御装置3によって制御されてCPU1には通知されない。
一方、CPU1は、ユーザプログラム21の実行を継続しており、ハードウェア割り込み禁止命令のN命令後にソフトウェア割り込み命令に到達する。このソフトウェア割り込み命令の実行によってソフトウェア割り込みが発生し(205)、このソフトウェア割り込みによってユーザプログラム21から割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(206)。CPU1は、割り込み処理ディスパッチャプログラム22に含まれるハードウェア割り込み許可命令を実行することによって、ハードウェア4に対応する割り込み制御装置3の割り込み通知制御レジスタ31に「割り込み通知許可」を設定する(207)。
割り込み制御装置3は、ハードウェア4に対応する割り込み通知制御レジスタ31に「割り込み通知許可」が設定されると、ハードウェア4−1に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知する(208)。
ハードウェア割り込み要求の通知を受けると、CPU1は、ハードウェア4−1に割り込み要因が発生したことを認識し、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を選択して処理を移行する。CPU1は、ハードウェア割り込み処理プログラム24−1を実行することで、ハードウェア4−1に対応する割り込み処理機能として動作し、ハードウェア4−1の割り込み要因に対する所望の処理を実行する(209)。ハードウェア割り込み処理プログラム24−1の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(210)。ここでは、ユーザプログラム21内のソフトウェア割り込み命令によって発生したソフトウェア割り込みに対する処理が未処理のままとなっている。よって、CPU1は、ソフトウェア割り込みによる割り込み要因が未処理であることを認識し、ソフトウェア割り込みに対応するソフトウェア割り込み処理プログラム25−1を選択して処理を移行する。
CPU1は、ソフトウェア割り込み処理プログラム25−1を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に
対応する所望の処理を実行する(211)。CPU1は、ソフトウェア割り込み処理プログラム25−1の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
対応する所望の処理を実行する(211)。CPU1は、ソフトウェア割り込み処理プログラム25−1の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(212)。ここでは、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1およびソフトウェア割り込みに対するソフトウェア割り込み処理プログラム25−1を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(213)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(214)。CPU1は、割り込み処理ディスパッチャプログラム22の実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21の続きを実行する(215)。
このように、ソフトウェア割り込み命令のN命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア4−1に割り込み要因が発生した場合、ハードウェア4−1に対するハードウェア4−割り込み処理プログラム24−1とソフトウェア割り込みに対するソフトウェア割り込み処理プログラム25−1とを続けて実行することができ、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理など、割り込み処理に伴うオーバヘッドを軽減することを可能としている。
つぎに、図6のシーケンスおよび図1を参照して、ハードウェア割り込み禁止命令の実行前にハードウェア4−1に割り込み要因が発生した場合の動作について説明する。CPU1は、ユーザプログラム21を実行してユーザ機能として動作する(300)。CPU1がユーザプログラム21を実行中に、ハードウェア4−1において割り込み要因が発生する。ハードウェア4−1は、割り込み要求を割り込み制御装置3に通知する(301)。
ハードウェア4−1から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する(302)。CPU1は、ユーザプログラム21のソフトウェア割り込み命令のN命令前に挿入されたハードウェア割り込み禁止命令を実行していないので、割り込み制御装置3のハードウェア4−1に対応する割り込み通知制御レジスタ31には「割り込み通知許可」が設定されている。したがって、割り込み制御装置3の制御部30は、ハードウェア4−1に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定し、ハードウェア4−1に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知する(303)。
CPU1は、割り込み制御装置3からハードウェア割り込み要求が通知されると、ユー
ザプログラム21から割り込み処理ディスパッチャプログラム22に処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(304)。
ザプログラム21から割り込み処理ディスパッチャプログラム22に処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(304)。
CPU1は、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を選択して処理を移行する。CPU1は、ハードウェア割り込み処理プログラム24−1を実行することで、ハードウェア4−1に対応する割り込み処理機能として動作し、ハードウェア4−1の割り込み要因に対する所望の処理を実行する(305)。ハードウェア割り込み処理プログラム24−1の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(306)。ここでは、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(307)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(308)。CPU1は、割り込み処理ディスパッチャプログラム22の実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21の続きを実行する(309)。
このハードウェア割り込み禁止命令の実行前にハードウェア4−1に割り込み要因が発生した場合の動作は、ユーザプログラムにハードウェア割り込み禁止命令が含まれていない場合にハードウェア4−1に割り込み要因が発生した場合と同様である。
つぎに、図7のシーケンス図および図1を参照して、ソフトウェア割り込み命令のN命令前のハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令によるソフトウェア割り込みが発生するまでの間にハードウェア4−1に割り込み要因が発生しなかった場合の動作について説明する。
CPU1は、ユーザプログラム21を実行してユーザ機能として動作し(400)、ソフトウェア割り込み命令のN命令前のハードウェア割り込み禁止命令に到達すると、割り込み制御装置3のハードウェア4に対応する割り込み通知制御レジスタ31に「割り込み通知禁止」を設定する(401)。CPU1は、ハードウェア割り込み禁止命令を実行した後、ソフトウェア割り込み命令に達するまでユーザプログラム21の命令の実行を継続する。
CPU1が、ハードウェア割り込み禁止命令のN命令後にソフトウェア割り込み命令に到達する。このソフトウェア割り込み命令の実行によってソフトウェア割り込みが発生し(402)、このソフトウェア割り込みによってユーザプログラム21から割り込み処理
ディスパッチャプログラム22に処理を移行する。
ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(403)。CPU1は、割り込み処理ディスパッチャプログラム22に含まれるハードウェア割り込み許可命令によって、ハードウェア4−1に対応する割り込み制御装置3の割り込み通知制御レジスタ31に「割り込み通知許可」を設定する(404)。
しかしながら、ハードウェア割り込み禁止命令実行からハードウェア割り込み許可命令実行までの間にハードウェア4−1に割り込み要因が発生していないため、割り込み制御装置3は、ハードウェア4−1からの割り込み要求を受けていない。そのため、割り込み制御装置3のハードウェア4−1に対応する割り込み状態レジスタ32には「割り込み要求なし」が設定されている。よって、割り込み制御装置3は、ハードウェア4−1に対応する割り込み通知制御レジスタ31に「割り込み通知許可」が設定されてもハードウェア割り込み要求をCPU1に通知しない。
CPU1は、ソフトウェア割り込みに対応するソフトウェア割り込み処理プログラム25−1を選択して処理を移行し、ソフトウェア割り込み処理プログラム25−1を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に対応する所望の処理を実行する(405)。CPU1は、ソフトウェア割り込み処理プログラム25−1の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(406)。ここでは、ソフトウェア割り込みに対するソフトウェア割り込み処理プログラム25−1を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(407)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(408)。CPU1は、割り込み処理ディスパッチャプログラム22の実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21の続きを実行する(409)。
図8および図9のシーケンス図を参照して、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラム210をCPU1が実行したとき(従来のユーザプログラムを実行したとき)の割り込みシステムの動作について説明する。
なお、ユーザプログラム210には、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されていないので、プログラム記憶部2には、CPU1を割
り込み処理ディスパッチャとして動作させる割り込み処理ディスパッチャプログラムとして、割り込み処理ディスパッチャプログラム22の代わりに、割り込み通知許可命令が含まれていない割り込み処理ディスパッチャプログラム220が格納されているものとする。
り込み処理ディスパッチャとして動作させる割り込み処理ディスパッチャプログラムとして、割り込み処理ディスパッチャプログラム22の代わりに、割り込み通知許可命令が含まれていない割り込み処理ディスパッチャプログラム220が格納されているものとする。
まず、図8のシーケンス図を参照して、割り込み制御装置3のハードウェア4−1,4−2に対応する割り込み通知制御レジスタ31に「割り込み通知許可」が設定されており、ハードウェア4−1,4−2に割り込み要因が発生した場合の動作について説明する。
CPU1は、ユーザプログラム210を実行してユーザ機能として動作する(500)。CPU1がユーザプログラム210を実行中に、ハードウェア4−2において割り込み要因が発生する。ハードウェア4−2は、割り込み要求を割り込み制御装置3に通知する(501)。
ハードウェア4−2から割り込み要求を受けると、割り込み制御装置3は、割り込み要求受付処理を実行する(502)。CPU1は、ハードウェア割り込み禁止命令を実行していないので、割り込み制御装置3のハードウェア4−2に対応する割り込み通知制御レジスタ31には「割り込み通知許可」が設定されている。したがって、割り込み制御装置3の制御部30は、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定するとともに、ハードウェア4−2に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知する(503)。
CPU1は、割り込み制御装置3からハードウェア割り込み要求が通知されると、ユーザプログラム210から割り込み処理ディスパッチャプログラム220に処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム220を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(504)。
CPU1は、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を選択して処理を移行する。CPU1は、ハードウェア割り込み処理プログラム24−2を実行することで、ハードウェア4−2に対応する割り込み処理機能として動作し、ハードウェア4−2の割り込み要因に対する所望の処理を実行する(505)。CPU1は、ハードウェア割り込み処理プログラム24−2の実行が終了すると、割り込み処理ディスパッチャプログラム220に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220を実行することで割り込み処理ディスパッチャとして動作して未処理の割り込み要求に対するディスパッチ処理を実行する(506)。ここでは、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム210内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(507)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム220に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(508)。
CPU1は、割り込み処理ディスパッチャプログラム220の実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム210に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム210の続きを実行する(509)。
CPU1がユーザプログラム210を実行中に、ハードウェア4−1において割り込み要因が発生する。ハードウェア4−1は、割り込み要求を割り込み制御装置3に通知する(510)。
ハードウェア4−1から割り込み要因が発生した旨の通知を受けると、割り込み要求受付処理を実行する(511)。CPU1は、ハードウェア割り込み禁止命令を実行していないので、割り込み制御装置3のハードウェア4−1に対応する割り込み通知制御レジスタ31には「割り込み通知許可」が設定されている。したがって、割り込み制御装置3の制御部30は、ハードウェア4−1に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定するとともに、ハードウェア4−1に割り込み要求が発生した旨を通知するハードウェア割り込み要求をCPU1に通知する(512)。
CPU1は、割り込み制御装置3からハードウェア割り込み要求が通知されると、先のハードウェア4−2に割り込み要因が発生した旨を通知する割り込み制御装置3からのハードウェア割り込み要求が通知された時と同様に、ユーザプログラム210から割り込み処理ディスパッチャプログラム220に処理を移行し、割り込み処理ディスパッチャプログラム220を実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する(513)。
CPU1は、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を選択して処理を移行し、ハードウェア割り込み処理プログラム24−1を実行することで、ハードウェア4−1に対応する割り込み処理機能として動作し、ハードウェア4−1の割り込み要因に対する所望の処理を実行する(514)。
CPU1は、ハードウェア割り込み処理プログラム24−1の実行が終了すると、割り込み処理ディスパッチャプログラム220に処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する(515)。ここでは、ハードウェア4−1,4−2に対応するハードウェア割り込み処理プログラム24−1,24−2を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム210内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(516)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム220に処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220を実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(517)。
CPU1は、割り込み処理ディスパッチャプログラム220の実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム210に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム210
の続きを実行する(518)。
の続きを実行する(518)。
このように、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラム210をCPU1が実行した場合には、ハードウェア4−1,4−2に割り込み要因が発生すると、発生時にハードウェア割り込み処理プログラム24−1,24−2を実行するため、それぞれの割り込み要因発生時に、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理を行うため、オーバヘッドが大きくなる。
これに対して、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム21をCPU1が実行した場合、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのN命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理することができるため、退避処理、カーネルモードのスタック・ポインタの設定処理、復帰処理、およびユーザモードのスタック・ポインタの設定処理を1回実行するだけでよく、オーバヘッドを軽減することができる。
図9のシーケンス図を参照して、割り込み制御装置3がハードウェア4からの割り込み要求をCPU1に通知するのではなく、割り込み制御装置3が所定の時間毎にCPU1に割り込み要求を通知し、この通知を受けたCPU1が割り込み制御装置3にハードウェア4からの割り込み要求を受けているか否かを問い合せる従来のポーリングによる割り込みシステムの動作について説明する。
なお、従来のポーリングによる割り込みシステムの構成は、先の図1に示した割り込みシステムと同じであるが、割り込み制御装置3は、所定の時間を繰り返し計測する機能を有し、この計測完了を割り込み要因として一定周期毎にCPU1に割り込み要求を通知する機能を備えているものとする。また、ハードウェア4に対応する割り込み通知制御レジスタ31には「割り込み通知禁止」が設定されているものとする。
また、プログラム記憶部2には、ユーザプログラム21および割り込み処理ディスパッチャプログラム22の代わりに、ユーザプログラム210および割り込み処理ディスパッチャプログラム220aが格納されているものとする。ユーザプログラム210は、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されていないユーザプログラムである。また、割り込み処理ディスパッチャプログラム220aは、割り込み通知許可命令の代わりに割り込み状態読み出し命令を含んでいる。
CPU1は、ユーザプログラム210を実行してユーザ機能として動作する(600)。割り込み制御装置3は、所定の時間を計測し(601)、計測が完了するとCPU1に割り込み要求を通知する(602)。割り込み制御装置3から割り込み要求を受けると、CPU1は、ユーザプログラム210の実行を中断して割り込み処理ディスパッチャプログラム220aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220aを実行することで割り込み処理ディスパッチャとして動作してディスパッチ処理を実行する(603)。CPU1は、退避処理およびカーネルモードのスタック・ポインタの設定処理を実行する。CPU1は、割り込み状態読み出し命令を実行して割り込み制御装置3の割り込み状態レジスタ32の設定値を読み出し(604)、読み出した設定値に基づいてディスパッチすべき(処理すべき)割り込み要因が存在するか否かを判定する。ここでは、ハードウェア4−1,4−2に割り込み要因が発生していないため、ハードウェア4−1,4−2に対応する割り込み制御装置3の割り込み状態レジスタ32には「割り込み要求なし」が設定されて
いる。よって、CPU1は、ディスパッチすべきハードウェア割り込み処理プログラム24は存在しないと判定して復帰処理およびユーザモードのスタック・ポインタの設定処理を実行する。その後、ユーザプログラム210に処理を移行して、CPU1は、割り込み制御装置3からの割り込み要求によって中断されたユーザプログラム210の続きを実行する(605)。
いる。よって、CPU1は、ディスパッチすべきハードウェア割り込み処理プログラム24は存在しないと判定して復帰処理およびユーザモードのスタック・ポインタの設定処理を実行する。その後、ユーザプログラム210に処理を移行して、CPU1は、割り込み制御装置3からの割り込み要求によって中断されたユーザプログラム210の続きを実行する(605)。
CPU1が、ユーザプログラム210を実行中にハードウェア4−1,4−2に割り込み要因が発生し、ハードウェア4−1,4−2は、割り込み要求を割り込み制御装置3に通知する(606,607)。ハードウェア4−1,4−2に対応する割り込み通知制御レジスタ31には「割り込み通知禁止」が設定されているため、割り込み制御装置3は、ハードウェア4−1,4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定し、CPU1にハードウェア割り込み要求を通知しない。
割り込み制御装置3は、所定の時間の計測が完了すると(608)、CPU1に割り込み要求を通知する(609)。割り込み制御装置3から割り込み要求を受けると、CPU1は、ユーザプログラム210の実行を中断して割り込み処理ディスパッチャプログラム220aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220aを実行することで割り込み処理ディスパッチャとして動作して退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。
また、CPU1は、割り込み状態読み出し命令を実行して割り込み制御装置3の割り込み状態レジスタ32の設定値を読み出し(611)、読み出した設定値に基づいてディスパッチすべき割り込み要因が存在するか否かを判定する。ここでは、ハードウェア4−1,4−2に割り込み要因が発生しているため、ハードウェア4−1,4−2に対応する割り込み制御装置3の割り込み状態レジスタ32には「割り込み要求あり」が設定されている。よって、CPU1は、予め定められた優先順位にしたがって、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を選択して処理を移行し、ハードウェア4−1に対応する割り込み処理機能として動作し、ハードウェア4−1の割り込み要因に対する所望の処理を実行する(612)。
CPU1は、ハードウェア割り込み処理プログラム24−1の実行が終了すると、割り込み処理ディスパッチャプログラム220aに処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する(613)。ここでは、ハードウェア4−2の割り込み要求に対する処理が未処理であるので、CPU1は、ハードウェア4−2に対するハードウェア割り込み処理プログラム24−2に処理を移行する。CPU1は、ハードウェア割り込み処理プログラム24−2を実行することでハードウェア4−2に対応する割り込み処理機能として動作し、ハードウェア4−2の割り込み要因に対する所望の処理を実行する(614)。
CPU1は、ハードウェア割り込み処理プログラム24−2の実行が終了すると、割り込み処理ディスパッチャプログラム220aに処理を移行して、未処理の割り込み要求に対するディスパッチ処理を実行する(615)。ここでは、ハードウェア4−1,4−2に対応するハードウェア割り込み処理プログラム24−1,24−2を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム210内のタスクの実行順序を決定して実行するタス
クを選択するスケジューリング処理を実行する(616)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム220aに処理を移行する。
クを選択するスケジューリング処理を実行する(616)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム220aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220aを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(617)。
CPU1は、割り込み処理ディスパッチャプログラム220aの実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム210に処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム210の続きを実行する(618)。
一方、割り込み制御装置3は、所定の時間を計測し(619)、計測が完了するとCPU1に割り込み要求を通知する(620)。割り込み制御装置3から割り込み要求を受けると、CPU1は、ユーザプログラム210の実行を中断して割り込み処理ディスパッチャプログラム220aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム220aを実行することで割り込み処理ディスパッチャとして動作してディスパッチ処理を実行する(621)。CPU1は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。また、CPU1は、割り込み状態読み出し命令を実行して割り込み制御装置3の割り込み状態レジスタ32の設定値を読み出し(622)、読み出した設定値に基づいてディスパッチすべき割り込み要因が存在するか否かを判定する。ここでは、ハードウェア4−1,4−2に割り込み要因が発生していないため、ハードウェア4−1,4−2に対応する割り込み制御装置3の割り込み状態レジスタ32には「割り込み要求なし」が設定されている。よって、CPU1は、ディスパッチすべきハードウェア割り込み処理プログラム24は存在しないと判定して、復帰処理およびユーザモードのスタック・ポインタの設定処理を実行する。その後、ユーザプログラム210に処理を移行して、CPU1は、割り込み制御装置3からの割り込み要求によって中断されたユーザプログラム210の続きを実行する(623)。
CPU1が、ユーザプログラム210を実行中にハードウェア4−2に割り込み要因が発生し、ハードウェア4−2は、割り込み要求を割り込み制御装置3に通知する(624)。ハードウェア4−2に対応する割り込み通知制御レジスタ31には「割り込み通知禁止」が設定されているため、割り込み制御装置3は、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定し、CPU1にハードウェア割り込み要求を通知しない。この割り込み要求は、所定の時間の計測が完了した際に割り込み制御装置3がCPU1に対して割り込み要求を通知した際にCPU1が割り込み処理ディスパッチャプログラム220aを実行して割り込み状態レジスタ32を読み出した際に認識されて処理される。
このように、従来のポーリングによる割り込みシステムでは、ハードウェア4の割り込み要因の発生後、直ちにCPU1がハードウェア割り込み処理を行うのではなく、割り込み制御装置3からの所定の時間毎の割り込みの間に発生したハードウェア4の割り込み要求をまとめて処理することを可能としている。しかしながら、最大で所定の時間割りこみ処理が遅延するため、割り込み応答性能が低下するという問題が生じる。この問題は、応答性能に対する要求(仕様)が比較的低い場合、割り込み制御装置3がCPU1に割り込み要求を通知する所定の時間の間隔を、割り込みの応答性能要求を満たすように設定することにより、性能要求に沿った割り込み処理が可能となる。
しかしながら、従来のポーリングによる割り込みシステムでは、割り込み制御装置3がCPU1に割り込み要求を通知する所定の時間ごとに、ユーザプログラム210から割り込み処理ディスパッチャプログラム220aに処理が移行し、割り込み制御装置3の割り込み状態レジスタ32の設定値を読み出す割り込み読み出し命令を実行する。この処理は、ハードウェア4から割り込み制御装置3に割り込み要求が通知されている、いないに関わらず行なわれる。そのため、割り込み制御装置3がCPU1に割り込み要求を通知する所定の時間の間隔が短くなるほどオーバヘッドとなる。
これに対して、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令が挿入されたユーザプログラム21をCPU1が実行した場合、ハードウェア4の割り込み処理の遅延は最大でN命令である。このNの設定を割り込みの応答性能要求を満たすように設定しても、従来のポーリングによる割り込みシステムのようなオーバヘッドが発生することはない。
以上説明したように、この第1の実施の形態においては、ソフトウェア割り込み命令のN命令前に割り込み通知禁止を設定するレジスタ設定命令であるハードウェア割り込み禁止命令を挿入するようにしているため、特別なCPUを用いることなく、既存の命令を用いてハードウェア割り込みのオーバヘッドを軽減することができる。すなわち、既存の命令を用いて、ハードウェア割り込み禁止命令を実行してからソフトウェア割り込み命令を実行するまでのN命令の間に発生したハードウェア割り込みおよびソフトウェア割り込みを続けて処理することができるため、スタック・ポインタ値や各種レジスタ値の退避処理、復帰処理、およびスタック・ポインタの設定処理などの割り込み処理に伴うオーバヘッドを軽減することができる。
また、ソフトウェア割り込み命令の何命令前にハードウェア割り込み命令を挿入するかを指定することができるため、N命令前のNの値を割り込みの応答性能要求を満たす最大値とすれば、まとめて処理する割り込み要因の数が多くなる確率が高くなり、よりオーバヘッドを軽減することができる。
なお、この第1の実施の形態においては、割り込み処理ディスパッチャプログラム22に割り込み許可命令を含ませて、ソフトウェア割り込みが発生した際に割り込み制御装置3のハードウェア4に対応する割り込み通知制御レジスタ31に「割り込み通知許可」を設定することで、ソフトウェア割り込み命令実行のN命令前から割り込み許可命令実行までの間に発生したハードウェア4の割り込み要求を、割り込み許可命令実行後に割り込み制御装置3からCPU1に通知するようにしたが、CPU1がハードウェア4に割り込み要因が発生したか否かを認識する方法は、これに限るものではない。
たとえば、CPU1が割り込み制御装置3にハードウェア4に割り込み要因が発生したか否かを問い合わせて割り込みの発生を認識するようにしてもよい。具体的には、割り込み処理ディスパッチャプログラム22に含まれる割り込み許可命令の代わりに、割り込み制御装置3の割り込み状態レジスタ32の値を読み出すレジスタ読み出し命令を含ませておき、CPU1が割り込み状態レジスタ32の値を読み出してハードウェア4が割り込み要求を通知したか否かを認識するようにしてもよい。
また、この第1の実施の形態においては、コンパイラ装置6によってソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令を挿入したユーザプログラム21を生成するようにしたが、ソフトウェア割り込み命令のN命令前にハードウェア割り込み禁止命令を挿入する方法はこれに限るものではない。ソースコードプログラムを生成する際にユーザが挿入してもよいし、JITコンパイラなどを用いて、割り込み禁止設定を配置
することが効果的であるかどうかを実行時に動的に判断し配置するようにしてもよい。
することが効果的であるかどうかを実行時に動的に判断し配置するようにしてもよい。
(第2の実施の形態)
図10〜図13を用いてこの発明の第2の実施の形態を説明する。図10は、この発明の第2の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
図10〜図13を用いてこの発明の第2の実施の形態を説明する。図10は、この発明の第2の実施の形態の割り込み制御方法が適用される割り込みシステムの構成の一例を示す構成図である。
図10に示した割り込みシステムは、先の図1に示した第1の実施の形態の割り込みシステムの割り込み制御装置3に代えて、割り込み制御装置3の制御部30の代わりに制御部30aを備え、遅延時間設定レジスタ33および時間計測部34が追加された割り込み制御装置3aを備えるとともに、プログラム記憶部2はユーザプログラム21および割り込み処理ディスパッチャプログラム22の代わりに、ユーザプログラム21aおよび割り込み処理ディスパッチャプログラム22aを記憶している。先の図1に示した第1の実施の形態の割り込みシステムと同じ機能を持つ構成部分には同一符号を付し、重複する説明は省略する。
割り込み制御装置3aは、先の第1の実施の形態の割り込み制御装置3と同様に、ハードウェア4からの割り込み要求を管理してCPU1に通知する機能を有するが、割り込み制御装置3とは、CPU1に割り込み要求を通知するタイミングが異なる。割り込み制御装置3は、ハードウェア4から割り込み要求を受けると、割り込み通知制御レジスタ31に「割り込み通知許可」が設定されている場合には受け付けた割り込み要求をCPU1に通知し、割り込み通知制御レジスタ31に「割り込み通知禁止」が設定されている場合には受け付けた割り込み要求をCPU1に通知せずに保留にした。
これに対して、割り込み制御装置3aは、遅延時間が設定されている場合には、割り込み要求を受けてから予め定められた遅延時間が経過した後にCPU1に割り込み要求を通知する。この割り込み要求は、CPU1が割り込み処理ディスパッチャプログラム22aに移行するトリガとなるもので、CPU1に対して割り込み要求を通知するものであれば、受け付けたハードウェア4のハードウェア割り込み要求であっても良いし、遅延時間の計測が終了した時点を自身の割り込み要因の発生として自身の割り込み要求であってもよい。
具体的には、割り込み制御装置3aは、制御部30a、割り込み通知制御レジスタ31および割り込み状態レジスタ32に加えて、時間計測部34および遅延時間設定レジスタ33を備えている。時間計測部34は、所定の時間を計測するタイマであって、たとえば、割り込み制御装置3を制御する基準クロック、または基準クロックから生成されたクロック数をカウントして遅延時間を計測する。
遅延時間設定レジスタ33は、ハードウェア4に対応付けられており、対応付けられたハードウェア4から割り込み要求を受け付けてからCPU1に割り込み要求を通知するまでの遅延時間を保持する。ここでは、時間計測部34がカウントするクロック数を保持する。遅延時間設定レジスタ33への遅延時間の設定は、CPU1が実行する各種プログラムに含まれる遅延時間設定レジスタ33へのレジスタ設定命令によって行われる。以下、説明を簡単にするために、遅延時間設定レジスタ33に遅延時間を設定するレジスタ設定命令を「遅延時間設定命令」と呼ぶ。
制御部30aは、割り込み通知制御レジスタ31、割り込み状態レジスタ32、および遅延時間設定レジスタ33に基づいて、ハードウェア4からの割り込み要求をCPU1に通知する。具体的には、制御部30aは、遅延時間設定レジスタ33の設定値が「0」の場合には、先の第1の実施の形態の割り込み制御装置3と同様に、割り込み要求を通知し
たハードウェア4に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定し、割り込み通知制御レジスタ31の設定値によってCPU1にハードウェア4の割り込み要求を通知するか否かを判定する。
たハードウェア4に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定し、割り込み通知制御レジスタ31の設定値によってCPU1にハードウェア4の割り込み要求を通知するか否かを判定する。
制御部30aは、割り込み要求を通知したハードウェア4に対応する遅延時間設定レジスタ33の設定値が「0」ではない場合、すなわち遅延時間に対応するクロック数が設定されている場合には、当該クロック数を時間計測部34に設定して遅延時間の計測を開始させる。また、制御部30aは、時間計測部34が遅延時間の計測を終了すると、自身の割り込み要求をCPU1に通知する。
ユーザプログラム21aは、ユーザがCPU1を所望の機能(ユーザ機能)として動作させるアプリケーションのプログラムである。このユーザプログラム21aには、割り込み制御装置3aの割り込み通知制御レジスタ31、割り込み状態レジスタ32、および遅延時間設定レジスタ33に所望の値を設定するレジスタ設定命令が含まれており、これらのレジスタ設定命令の実行することでCPU1は、事前に割り込み制御装置3aの割り込み通知制御レジスタ31、割り込み状態レジスタ32、および遅延時間設定レジスタ33に所望の値を保持させる。
割り込み処理ディスパッチャプログラム22aは、CPU1を割り込み処理ディスパッチャとして動作させるプログラムで、ハードウェア割り込みまたはソフトウェア割り込みによって起動される。割り込み処理ディスパッチャプログラム22aは、先の第1の実施の形態の割り込み処理ディスパッチャプログラム22に含まれていたハードウェア4の割り込み禁止命令の代わりに、割り込み状態読み出し命令を含んでいる。この割り込み状態読み出し命令は、ハードウェア割り込みまたはソフトウェア割り込みによって割り込み処理ディスパッチャプログラム22aが起動されてからディスパッチ処理を開始するまでの間に含まれる。
割り込み処理ディスパッチャプログラム22aを実行して割り込み処理ディスパッチャとして動作するCPU1は、割り込み状態読み出し命令によって割り込み制御装置3aの割り込み状態レジスタ32の設定値を読み出して割り込み制御装置3aに保留されている割り込み要求があるか否かを認識する。そして、認識した割り込み要求に対応するハードウェア4を含めてディスパッチ処理を行なう。
図11〜図13のシーケンス図および図10を参照して、この発明の第2の実施の形態の割り込みシステムの動作を説明する。まず、図11のシーケンス図を参照して、ハードウェア4−2に割り込み要因が発生した場合の動作について説明する。
CPU1は、ユーザプログラム21aを実行してユーザ機能として動作する(700)。まず、CPU1は、初期化処理によって、ハードウェア4に対応する割り込み制御装置3aの割り込み通知制御レジスタ31に「割り込み通知禁止」を設定するとともに、ハードウェア4に対する遅延時間設定レジスタ33に遅延時間に換算したクロック数を設定する(701)。ここでは、ハードウェア4−2に対応する遅延時間設定レジスタ33に「M」を設定する。CPU1は、初期化処理が終了した後、所望の処理を実行する(702)。
CPU1が、ユーザプログラム21aを実行中に、ハードウェア4−2に割り込み要因が発生し、ハードウェア4−2は、割り込み制御装置3aに割り込み要求を通知する(703)。割り込み制御装置3aの制御部30aは、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定する。また、割り込み制御装置3aの制御部30aは、ハードウェア4−2に対応する遅延時間設定レジスタ33に設定された
クロック数Mを時間計測部34に設定して遅延時間の計測を開始させる(704)。時間計測部34の遅延時間の計測が完了すると、割り込み制御部3aの制御部30aは、自身の割り込み要求をCPU1に通知する(705)。
クロック数Mを時間計測部34に設定して遅延時間の計測を開始させる(704)。時間計測部34の遅延時間の計測が完了すると、割り込み制御部3aの制御部30aは、自身の割り込み要求をCPU1に通知する(705)。
割り込み制御装置3aから割り込み要求を受けると、CPU1は、ユーザプログラム21aを中断して割り込み処理ディスパッチャプログラム22aに処理を移行する。割り込み処理ディスパッチャプログラム22aを実行することでCPU1は、割り込み処理ディスパッチャとして動作する(706)。CPU1は、割り込み処理ディスパッチャプログラム22aの割り込み状態読み出し命令によって、割り込み制御装置3aの割り込み状態レジスタ32の設定値を読み出す(707)。ここでは、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」が設定されているので、CPU1は、ハードウェア4−2に割り込み要因が発生したことを認識する。CPU1は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。CPU1は、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を選択して処理を移行する。
CPU1は、ハードウェア割り込み処理プログラム24−2を実行することで、ハードウェア4−2に対応する割り込み処理機能として動作し、ハードウェア4−2の割り込み要因に対する所望の処理を実行する(708)。ハードウェア割り込み処理プログラム24−2の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(709)。ここでは、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を実行済みであり、未処理の割り込み要因は存在しない。よって、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21a内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(710)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(711)。CPU1は、割り込み処理ディスパッチャプログラム22aの実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21aに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21aの続きを実行する(712)。
つぎに、図12のシーケンス図、および図10を参照して、ハードウェア4−2に割り込み要因が発生し、割り込み制御装置3aが遅延時間の計測中にソフトウェア割り込みが発生した場合の動作について説明する。
CPU1は、ユーザプログラム21aを実行してユーザ機能として動作する(800)。まず、CPU1は、初期化処理によって、ハードウェア4に対応する割り込み制御装置3aの割り込み通知制御レジスタ31に「割り込み通知禁止」を設定するとともに、ハードウェア4に対する遅延時間設定レジスタ33に遅延時間に換算したクロック数を設定する(801)。ここでは、ハードウェア4−2に対応する遅延時間設定レジスタ33に「M」を設定する。CPU1は、初期化処理が終了した後、所望の処理を実行する(802)。
CPU1が、ユーザプログラム21aを実行中に、ハードウェア4−2に割り込み要因が発生し、ハードウェア4−2は、割り込み制御装置3aに割り込み要求を通知する(803)。割り込み制御装置3aは、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定する。また、割り込み制御装置3aは、ハードウェア4−2に対応する遅延時間設定レジスタ33に設定されたクロック数Mを時間計測部34に設定して遅延時間の計測を開始させる(804)。
割り込み制御装置3aの時間計測部34が遅延時間計測中に、ユーザプログラム21aに含まれるソフトウェア命令によってソフトウェア割り込みが発生する(805)。ソフトウェア割り込みが発生すると、CPU1は、割り込み処理ディスパッチャプログラム22aに処理を移行する。割り込み処理ディスパッチャプログラム22aを実行することでCPU1は、割り込み処理ディスパッチャとして動作する(806)。CPU1は、割り込み処理ディスパッチャプログラム22aの割り込み状態読み出し命令によって、割り込み制御装置3aの割り込み状態レジスタ32の設定値を読み出す(807)。ここでは、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」が設定されているので、CPU1は、ハードウェア4−2に割り込み要因が発生したことを認識する。また、CPU1は、割り込み制御装置3aの時間計測部34の停止を割り込み制御装置3aに要求して時間計測部34の遅延時間の計測を停止させる。CPU1は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。CPU1は、予め定められた優先順位にしたがって、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を選択して処理を移行する。
CPU1は、ハードウェア割り込み処理プログラム24−2を実行することで、ハードウェア4−2に対応する割り込み処理機能として動作し、ハードウェア4−2の割り込み要因に対する所望の処理を実行する(808)。ハードウェア割り込み処理プログラム24−2の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(809)。ここでは、CPU1は、ソフトウェア割り込み処理プログラム25−1を選択して処理を移行する。
CPU1は、ソフトウェア割り込み処理プログラム25−1を実行することで、ソフトウェア割り込みに対応する割り込み処理機能として動作し、ソフトウェア割り込み要因に対応する所望の処理を実行する(810)。CPU1は、ソフトウェア割り込み処理プログラム25−1の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作して未処理の割り込み要求に対するディスパッチ処理を実行する(811)。ここでは、未処理の割り込み要因は存在しなので、CPU1は、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21a内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(812)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み
処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(813)。
処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(813)。
CPU1は、割り込み処理ディスパッチャプログラム22aの実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21aに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21aの続きを実行する(814)。
図13のシーケンス図、および図10を参照して、ハードウェア4−1に割り込み要因が発生して割り込み制御装置3aが遅延時間の計測中に、さらにハードウェア4−2に割り込み要因が発生した場合の動作について説明する。
CPU1は、ユーザプログラム21aを実行してユーザ機能として動作する(901)。まず、CPU1は、初期化処理によって、ハードウェア4に対応する割り込み制御装置3aの割り込み通知制御レジスタ31に「割り込み通知禁止」を設定するとともに、ハードウェア4に対する遅延時間設定レジスタ33に遅延時間に換算したクロック数を設定する(902)。ここでは、ハードウェア4−1に対応する遅延時間設定レジスタ33に「L」を設定し、ハードウェア4−2に対応する遅延時間設定レジスタ33に「M」を設定する。CPU1は、初期化処理が終了した後、所望の処理を実行する(903)。
CPU1が、ユーザプログラム21aを実行中に、ハードウェア4−1に割り込み要因が発生し、ハードウェア4−1は、割り込み制御装置3aに割り込み要求を通知する(904)。割り込み制御装置3aは、ハードウェア4−1に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定する。また、割り込み制御装置3aは、ハードウェア4−1に対応する遅延時間設定レジスタ33に設定されたクロック数Lを時間計測部34に設定してハードウェア4−1に対する遅延時間の計測を開始させる(905)。
時間計測部34がハードウェア4−1に対する遅延時間の計測中に、ハードウェア4−2に割り込み要因が発生し、ハードウェア4−2は、割り込み制御装置3aに割り込み要求を通知する(906)。割り込み制御装置3aの制御部30aは、ハードウェア4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」を設定する。また、割り込み制御装置3aの制御部30aは、ハードウェア4−2に対応する遅延時間設定レジスタ33に設定されたクロック数Mを時間計測部34に設定してハードウェア4−2に対する遅延時間の計測を開始させる。
時間計測部34がハードウェア4−1に対する遅延時間の計測を完了すると、割り込み制御装置3aの制御部30aは、割り込み要求をCPU1に通知する(907)。割り込み制御装置3aから割り込み要求を受けると、CPU1は、ユーザプログラム21aを中断して割り込み処理ディスパッチャプログラム22aに処理を移行する。割り込み処理ディスパッチャプログラム22aを実行することでCPU1は、割り込み処理ディスパッチャとして動作する(908)。CPU1は、割り込み処理ディスパッチャプログラム22aの割り込み状態読み出し命令によって、割り込み制御装置3aの割り込み状態レジスタ32の設定値を読み出す(909)。ここでは、ハードウェア4−1,4−2に対応する割り込み状態レジスタ32に「割り込み要求あり」が設定されているので、CPU1は、ハードウェア4−1,4−2に割り込み要因が発生したことを認識する。CPU1は、割り込み制御装置3aの時間計測部34の停止を割り込み制御装置3aに要求して時間計測部34の遅延時間の計測を停止させる。CPU1は、退避処理、およびカーネルモードのスタック・ポインタの設定処理を実行する。CPU1は、予め定められた優先順位にしたがって、ハードウェア4−1に対応するハードウェア割り込み処理プログラム24−1を選択して処理を移行する。
CPU1は、ハードウェア割り込み処理プログラム24−1を実行することで、ハードウェア4−1に対応する割り込み処理機能として動作し、ハードウェア4−1の割り込み要因に対する所望の処理を実行する(910)。ハードウェア割り込み処理プログラム24−1の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(911)。ここでは、ハードウェア4−2に対応するハードウェア割り込み処理プログラム24−2を選択して処理を移行する。
CPU1は、ハードウェア割り込み処理プログラム24−2を実行することで、ハードウェア4−2に対応する割り込み処理機能として動作し、ハードウェア4−2の割り込み要因に対する所望の処理を実行する(912)。ハードウェア割り込み処理プログラム24−2の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作し、未処理の割り込み要求に対するディスパッチ処理を実行する(913)。ここでは、未処理の割り込み要求が存在しないので、タスクスケジューラプログラム23に処理を移行する。
CPU1は、タスクスケジューラプログラム23を実行することで、タスクスケジューラとして動作し、ユーザプログラム21a内のタスクの実行順序を決定して実行するタスクを選択するスケジューリング処理を実行する(914)。CPU1は、タスクスケジューラプログラム23の実行が終了すると、割り込み処理ディスパッチャプログラム22aに処理を移行する。
CPU1は、割り込み処理ディスパッチャプログラム22aを実行することで割り込み処理ディスパッチャとして動作して復帰処理、およびユーザモードのスタック・ポインタの設定処理を実行する(915)。CPU1は、割り込み処理ディスパッチャプログラム22aの実行が終了すると、タスクスケジューラプログラム23によって選択されたタスク、すなわちユーザプログラム21aに処理を移行し、ソフトウェア割り込みによって中断されたユーザプログラム21aの続きを実行する(916)。
以上説明したように、この第2の実施の形態においては、割り込み制御装置が、ハードウェアに割り込み要因が発生したことを記憶するとともに、当該ハードウェアに割り込み要因が発生してから予め定められた遅延時間が経過した後に割り込みがあったことをCPUに通知し、通知を受けたCPUが、割り込み制御装置が記憶する遅延時間内に発生したすべてのハードウェアの割り込み要因を認識して割り込み処理を実行するようにしているため、特別なCPUを用いることなく、既存の命令を用いて、割り込み処理に伴うオーバヘッド処理を軽減することができる。この効果は、ハードウェアの割り込み要因が頻繁に発生するほど大きくなる。
また、ハードウェア毎に遅延時間を設定するようにしているため、ハードウェアが要求する応答性能を維持しつつ、割り込み処理に伴うオーバヘッド処理を軽減することができる。
1 CPU
2 プログラム記憶部
3,3a 割り込み制御装置
4 ハードウェア
30 制御部
31 割り込み通知制御レジスタ
32 割り込み状態レジスタ
33 遅延時間設定レジスタ
34 時間計測部
2 プログラム記憶部
3,3a 割り込み制御装置
4 ハードウェア
30 制御部
31 割り込み通知制御レジスタ
32 割り込み状態レジスタ
33 遅延時間設定レジスタ
34 時間計測部
Claims (4)
- ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、前記ハードウェアからの割り込み要求を通知するか否かが設定される割り込み通知制御レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるCPUによる制御方法であって、
前記CPUがユーザプログラムに含まれるソフトウェア割り込み命令よりN(Nは自然数)命令前に前記割り込み通知制御レジスタに割り込み通知禁止を設定するレジスタ設定命令を実行することで前記割り込み通知制御レジスタに割り込み通知禁止を設定する第1のステップと、
前記CPUが前記ソフトウェア割り込み命令を実行してソフトウェア割り込みが発生した後に、前記割り込み状態レジスタの設定値を読み出して、前記ハードウェアからの割り込み要求が発生したか否かを認識し、前記レジスタ設定命令から前記ソフトウェア割り込み命令までの間に発生したハードウェアの割り込み要因と前記ソフトウェア割り込みとの割り込み処理を連続して実行する第2のステップと、
を含むことを特徴とする割り込み制御方法。 - ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタを有する割り込み制御装置と、この割り込み制御装置に接続されるCPUによる割り込み制御方法であって、
前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定する第1のステップと、
前記割り込み制御装置が、前記ハードウェアから割り込み要求を受けると、予め定められた遅延時間の計測を開始する第2のステップと、
前記第2のステップによって開始した遅延時間の計測が完了すると、前記割り込み制御装置がCPUに割り込み要求を通知する第3のステップと、
前記第3のステップによって割り込み要求を受けると、CPUが前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、前記遅延時間の間に発生したすべてのハードウェア割り込みに対する割り込み処理を連続して実行する第4のステップと、
を含むことを特徴とする割り込み制御方法。 - 前記予め定められた遅延時間をハードウェア毎に有すること、
を特徴とする請求項2に記載の割り込み制御方法。 - ハードウェアからの割り込み要求を受け付けたか否かが設定される割り込み状態レジスタと、
前記ハードウェア毎の遅延時間が設定される遅延時間設定レジスタと、
前記割り込み状態レジスタに割り込み要求を受けたことが設定されると、前記遅延時間設定レジスタに設定された遅延時間の計測を開始する時間計測部と、
前記ハードウェアから割り込み要求を受けると、前記割り込み状態レジスタに割り込み要求を受け付けたことを設定し、前記時間計測部による遅延時間の計測が終了すると割り込み要求を通知する制御部と、
を有する割り込み制御装置と、
前記割り込み制御装置から割り込み要求を受けると、前記割り込み制御装置の割り込み通知制御レジスタの設定値を読み出して前記遅延時間の間に発生したすべてのハードウェアの割り込み要求を認識し、認識したすべてのハードウェアの割り込み要求に対する割り込み処理を連続して実行するCPUと、
を備えたことを特徴とする割り込みシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007270601A JP2009098972A (ja) | 2007-10-17 | 2007-10-17 | 割り込み制御方法、および割り込みシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007270601A JP2009098972A (ja) | 2007-10-17 | 2007-10-17 | 割り込み制御方法、および割り込みシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009098972A true JP2009098972A (ja) | 2009-05-07 |
Family
ID=40701907
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007270601A Pending JP2009098972A (ja) | 2007-10-17 | 2007-10-17 | 割り込み制御方法、および割り込みシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009098972A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013089564A (ja) * | 2011-10-21 | 2013-05-13 | Panasonic Corp | 照明制御システム |
JP2017509059A (ja) * | 2014-03-24 | 2017-03-30 | インテル・コーポレーション | 電力消費を低減するための割り込み処理の同期化 |
-
2007
- 2007-10-17 JP JP2007270601A patent/JP2009098972A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013089564A (ja) * | 2011-10-21 | 2013-05-13 | Panasonic Corp | 照明制御システム |
JP2017509059A (ja) * | 2014-03-24 | 2017-03-30 | インテル・コーポレーション | 電力消費を低減するための割り込み処理の同期化 |
US10089263B2 (en) | 2014-03-24 | 2018-10-02 | Intel Corporation | Synchronization of interrupt processing to reduce power consumption |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2457170B1 (en) | Programmable exception processing latency | |
US10649935B2 (en) | Deferred inter-processor interrupts | |
JP5411587B2 (ja) | マルチスレッド実行装置、マルチスレッド実行方法 | |
US8695002B2 (en) | Multi-threaded processors and multi-processor systems comprising shared resources | |
EP1685486B1 (en) | Interrupt handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation | |
EP2420930A2 (en) | Apparatus and method for thread scheduling and lock acquisition order control based on deterministic progress index | |
US20170212852A1 (en) | Method and accelerator unit for interrupt handling | |
JP2008108075A (ja) | タスク切替え制御方法及びコンピュータシステム | |
JP2005276097A (ja) | 割り込み依頼プログラムおよびマイクロコンピュータ | |
US7480812B2 (en) | Microprocessor | |
CN104303150B (zh) | 用于管理计算机***中的任务执行的方法 | |
US7225443B2 (en) | Stack usage in computer-related operating systems | |
KR101635816B1 (ko) | 결정적 프로그레스 인덱스를 이용한 스레드 프로그레스 트래킹 방법 및 장치 | |
JP2009098972A (ja) | 割り込み制御方法、および割り込みシステム | |
US20110161982A1 (en) | Task Controlling A Multitask System | |
KR101892273B1 (ko) | 스레드 프로그레스 트래킹 방법 및 장치 | |
US8910181B2 (en) | Divided central data processing | |
JP2006146758A (ja) | コンピュータシステム | |
JP3776302B2 (ja) | コンピュータ・プログラムのハザードを検出するシステム | |
JPWO2009098737A1 (ja) | 外部デバイスアクセス装置、その制御方法及びシステムlsi | |
JP2010152733A (ja) | マルチコアシステム | |
WO2012069830A1 (en) | A method and system for identifying the end of a task and for notifying a hardware scheduler thereof | |
US7904703B1 (en) | Method and apparatus for idling and waking threads by a multithread processor | |
US9058207B2 (en) | Simulation apparatus, method, and computer-readable recording medium | |
JP2019079336A (ja) | 数値制御装置 |