(57)【要約】【課題】設定周期ごとに実行する制御ジョブの実行を確保すること。【解決手段】予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約工程以外に、前記ジョブ起動予約工程にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期により当該ジョブの次の起動予約がなされた場合に、当該ジョブの起動を追加で予約するジョブ起動追加予約工程を設け、ジョブ管理工程では、前記ジョブ起動予約工程あるいはジョブ起動追加予約工程によって予約されたジョブを予め設定された優先順位に従い実行する。【選択図】図１
2008033434.tif 000002
【特許請求の範囲】
【請求項１】
互いに異なる設定周期の複数種類のジョブを実行するデジタル演算処理装置のジョブ制御方法であって、
予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約工程と、
前記ジョブ起動予約工程にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期により当該ジョブの次の起動予約がなされた場合に、当該ジョブの起動を追加で予約するジョブ起動追加予約工程と、
前記ジョブ起動予約工程あるいはジョブ起動追加予約工程によって予約されたジョブを予め設定された優先順位に従い実行するジョブ管理工程と、
を有することを特徴とするデジタル演算処理装置のジョブ制御方法。
【請求項２】
前記ジョブ起動予約工程は、各ジョブの起動予約の設定を各ジョブ毎の予約フラグによって行い、
前記ジョブ起動追加予約工程は、前記ジョブ起動予約工程で設定される前記予約フラグとは別の予約フラグによってジョブの起動予約を追加設定し、
前記ジョブ管理工程は、前記予約フラグに基づいて予約されたジョブを実行する請求項１に記載のデジタル演算処理装置のジョブ制御方法。
【請求項３】
前記ジョブ起動予約工程は、各ジョブの起動予約の設定を各ジョブ毎の予約フラグによって行い、
前記ジョブ起動追加予約工程は、前記ジョブ起動予約工程にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期によって当該ジョブの起動予約がなされる度にインクリメントして予約回数をカウントするジョブ予約カウンタによってジョブの起動予約を追加設定し、
前記ジョブ管理工程は前記予約フラグと前記ジョブ予約カウンタによってカウントされた予約回数に基づいて予約されたジョブを実行する請求項１に記載のデジタル演算処理装置のジョブ制御方法。
【請求項４】
互いに異なる設定周期の複数種類のジョブをコンピュータに実行させるためのデジタル演算処理装置のジョブ制御プログラムであって、
コンピュータに、予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約処理と、
前記ジョブ起動予約処理にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期により、当該ジョブの次の起動予約がなされた場合に、当該ジョブの起動を追加で予約するジョブ起動追加予約処理と、
前記ジョブ起動予約処理あるいはジョブ起動追加予約処理によって予約されたジョブを予め設定された優先順位に従い実行するジョブ管理処理を、
実行させることを特徴とするジョブ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムに係り、特に、互いに異なる設定周期の複数種類のジョブを実行するデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムに関する。
【背景技術】
【０００２】
各種の制御ジョブをＣＰＵによって実行するエンジン制御用のデジタル制御装置等、ジョブをＣＰＵによって周期的に繰り返し実行するデジタル演算処理装置においては、一般に、ＣＰＵのタイマ管理のもとに、設定された時間周期をもって周期的に発生する割込み信号のタイミングによってジョブを実行することにより、タイマ割込み方式によって周期的なジョブの繰り返し実行を実現している。
【０００３】
このようなタイマ割込み方式でジョブを繰り返し実行するデジタル制御装置では、一回のジョブの実行が、当該ジョブの設定周期内に確実に終了するように、ジョブの設定周期に対してＣＰＵの処理能力に十分な余裕を持たせておく必要がある。
【０００４】
しかし、実際には、負荷変動等によりＣＰＵ負荷が高くなってしまう場合には、設定周期の時間よりも一回のジョブの実行時間が長くなってしまうことがある。このような事態に陥ると、次回のジョブの処理抜けが発生し、正常な制御等の演算処理が続行できなくなる可能性がある。
【０００５】
この問題の発生を防止するための方法として、ジョブを時間依存のタスクと非時間依存のタスクの二つに分け、ＣＰＵが高負荷状態になり、タスク実行のオーバーランが発生した場合には、最低でも時間依存タスクのみを起動させ、時間依存タスクの周期処理の回数を確保する技術がある（特許文献１）。
【０００６】
また、電子制御装置のＣＰＵ演算負荷がある一定値以上の高負荷になった場合には、一部の演算を停止し、負荷を軽くすることで、ＣＰＵが高負荷になった場合でも、最悪リセット処理が行われるのを防ぐ技術がある（特許文献２）。
【０００７】
【特許文献１】特開２００５−３０１８１２号公報
【特許文献２】特開２００２−３６６３７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前記したように、タイマ割込み方式のデジタル制御装置では、ジョブの実行が設定周期よりも短い時間で確実に終了できるように、設定周期に対して処理能力に十分な余裕を持たせておく必要があり、事前に処理時間、割込み発生回数等を十分に検討しておく必要がある。
【０００９】
しかしながら、割込み処理が一時的に予想以上に発生した場合や、エンジン制御で云えば、エンジン高負荷状態であるなど、一時的にＣＰＵ負荷が増大した場合に、ジョブのオーバーランが発生する可能性があり、その結果、ジョブ抜けが発生し、カウント制御などで不整合が発生するなどの影響が出る可能性がある。
【００１０】
前記特許文献は、このようなＣＰＵ高負荷状態にあるとき、一部の処理のみは確実に実行し、その他の処理を停止させることによって、データの欠損を防止したり、最悪リセット処理にならないように制御する技術であるが、処理時間、割込み回数等が十分に検討され、ジョブのオーバーランが発生しても、ジョブの処理抜けが最悪で１〜数回程度ということが予測されるのであれば、制御の一部のみを救うのではなく、ジョブの実行要求回数に対し、要求された回数分の処理を行いたい要望がある。
【００１１】
つまり、ジョブの実行要求回数がある時間内で、１０回だった場合には、若干要求タイミングからの遅れは発生しても、実行回数は１０回を確保したい。
【００１２】
本発明は、前記解決しようとする課題に鑑みてなされたものであって、その目的とするところは、所定周期毎に実行するジョブの実行抜けを回避し、予約されたジョブの実行を確保するデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムを提供することにある。
【課題を解決するための手段】
【００１３】
前記目的を達成するために、本発明によるデジタル演算処理装置のジョブ制御方法は、互いに異なる設定周期の複数種類のジョブを実行するデジタル演算処理装置のジョブ制御方法であって、予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約工程と、前記ジョブ起動予約工程にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期により当該ジョブの次の起動予約がなされた場合に、当該ジョブの起動を追加で予約するジョブ起動追加予約工程と、前記ジョブ起動予約工程あるいはジョブ起動追加予約工程によって予約されたジョブを予め設定された優先順位に従い実行するジョブ管理工程とを有する。
【００１４】
これにより、設定周期内に予約されたジョブが終了しない間に、さらに、設定周期によるそのジョブの次回のジョブ起動予約が行われた場合に、まだ実行していないジョブの予約を取り消すことなく、１回目の予約によるジョブの実行が完了したあと、その次に予約された２回目のジョブの実行することができ、予約されたジョブが抜けることなくジョブを実行させることができる。これにより、ジョブがオーバーランしたときでも、予約されたジョブは必ず実行されるので、設定周期に対して、実際の処理タイミングに若干の遅れが生じるものの、設定周期ごとに実行されるジョブの実行回数を確保することができる。
【００１５】
ジョブのオーバーランにより、ジョブの予約を管理する方法として、予約フラグによる管理方法と、ジョブが待たされている回数をジョブ予約カウンタに持たせる方法がある。ジョブ予約カウンタによる場合には、設定周期内に予約されたジョブが終了しない間に、さらに設定周期による割込み処理が発生した場合に、ジョブ予約カウンタをカウントアップ（インクリメント）し、ジョブの予約が何回行われたかをカウントする。１回目のジョブの実行が終了したあと、ジョブ予約カウンタの値が０でなければ、続けてカウンタに記憶された回数分のジョブを実行することで、ジョブが予約された回数分の実行が可能となる。
【００１６】
また、前記目的を達成するために、本発明によるジョブ制御プログラムは、互いに異なる設定周期の複数種類のジョブをコンピュータに実行させるためのジョブ制御プログラムであって、コンピュータに予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約処理と、前記ジョブ起動予約処理にて予約されたジョブが、起動される以前、あるいは実行中に、前記設定周期により、当該ジョブの次の起動予約がなされた場合に、当該ジョブの起動を追加で予約するジョブ起動追加予約処理と、前記ジョブ起動予約処理あるいはジョブ起動追加予約処理によって予約されたジョブを予め設定された優先順位に従い実行するジョブ管理処理を実行させるためのジョブ制御プログラムである。
【発明の効果】
【００１７】
本発明によれば、設定周期ごとに発生する割込みの回数と、割込み発生ごとに実行されるジョブの実行回数を同一にすることができ、ジョブの実行抜けを防ぐことができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明のデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態を、図面を用いて説明する。
【００１９】
（実施形態１）
本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態１を、図１〜図３を参照して説明する。本発明によるジョブ制御プログラムは、ジョブ管理をコンピュータに実行させるためのプログラムであり、以下に示す処理をコンピュータに実行させる。
【００２０】
図１は、各ジョブの起動予約を行う割込み処理ルーチンを示すフローチャートである。本割込み処理ルーチンは、ＣＰＵのタイマによる時間管理のもとに、予め定められた割込みタイミングごとに呼び出される。
【００２１】
ジョブ起動予約処理は、割込み処理によって、複数のジョブの起動予約を行うものであり、本実施形態では、ＪＯＢ１、ＪＯＢ２、ＪＯＢ１０の３個のジョブの起動予約を行う。本実施形態では、ＪＯＢ１は割込み発生ごとに起動されるジョブ、ＪＯＢ２は割込み発生が２回に１回起動されるジョブ、ＪＯＢ１０は割込み発生が１０回に１回起動されるジョブとする。
【００２２】
ＪＯＢ１とＪＯＢ２は、起動頻度が高いので、比較的、処理時間が短いジョブが割当てられることを想定し、ＪＯＢ１０は、起動周期が長いので、ＪＯＢ１、ＪＯＢ２と比較すると、処理時間が長いジョブが割当てられることを想定している。これらのジョブは、割込み発生時に、ジョブの起動予約のみ行われ、その後、ジョブ管理処理ルーチンによって、予め設定された優先順位に従い、処理を実行するものである。
【００２３】
図１に示されている起動予約の割込み処理フローの詳細な説明を行う。
最初に、ステップ１の割込み禁止処理を行う。一般に、タイマ割込みによってジョブの起動を行う場合、ジョブの多重起動を防止するために、割込み処理中は、他の割込みをマスクし、割込み禁止状態にする。本実施形態でも、プログラムの誤動作を防止し、暴走に陥らないようにするために、割込み処理中は、他の割込みをマスクしている。
【００２４】
ステップ２〜４は、ＪＯＢ１の起動予約に関する処理である。ステップ２により、ＪＯＢ１がオーバーラン状態にあるかどうかの判定を行う。もし、ＪＯＢ１がオーバーランと判定した場合には、ステップ３のＪＯＢ１Ｘ予約フラグのセットを行う。その後、ステップ４にてＪＯＢ１予約フラグのセットを行う。つまり、割込み発生ごとにＪＯＢ１予約フラグはセットされるが、ＪＯＢ１がオーバーランと判定したときのみ、ＪＯＢ１予約フラグの他に、ＪＯＢ１Ｘ予約フラグもセットされる。
【００２５】
ここで、ＪＯＢ１のオーバーランとは、他のジョブ、例えば、ＪＯＢ１０の実行時間遅延によって、ＪＯＢ１の起動予約時に、まだ前回の起動予約のＪＯＢ１が実行されていない、あるいは前回の起動予約のＪＯＢ１が実行中であることを意味する。
【００２６】
次に、ステップ５〜６は、ＪＯＢ２の起動予約に関する処理である。ステップ５により、本割込み発生が２回に１回かどうかを判定し、成立していれば、ステップ６のＪＯＢ２予約フラグをセットする。この割込み発生回数の判定手段としては、例えば、割込み発生ごとにカウンタをカウントアップし、そのカウンタ値が奇数または偶数の場合で判断することが可能である。
【００２７】
次に、ステップ７〜８は、ＪＯＢ１０の起動予約に関する処理である。ステップ７により、本割込み発生が１０回に１回かどうかを判定し、成立していれば、ステップ８のＪＯＢ１０予約フラグをセットする。割込み回数が１０回の判定方法としては、前記ＪＯＢ２の判定方法と同様であり、そのカウンタ値が１０になったかで判定することができる。
【００２８】
次に、ステップ９で割込み禁止状態を解除し、割込みを許可とする。その後、ステップ１０でジョブ管理処理ルーチンをサブルーチンコールし、起動予約を行ったジョブの実行を行い、終了する。
【００２９】
つまり、本割込み処理においては、ジョブ起動の予約のみを行い、そのジョブが実行されているときに、前記設定周期ごとに発生する割込みは許可状態にある。よって、ジョブ実行中に割込みが発生した場合でも、各ジョブの起動予約が行われる。
【００３０】
このジョブ起動予約処理ルーチンにおいて、ステップ４、６、８のジョブの予約フラグセットが、予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約工程（ジョブ起動予約処理）であり、ステップ３の予約フラグのセットが、ジョブの起動を追加で予約するジョブ起動追加予約工程（ジョブ起動追加予約処理）である。
【００３１】
図２は、図１の割込み処理で起動予約されたジョブを、予め設定された優先順位に従い、起動実行するジョブ管理処理ルーチンを示すフローチャートである。このジョブ管理処理ルーチンは、ジョブ管理工程（ジョブ管理処理）を実行するものであり、ジョブの予約フラグがセットされることにより呼び出される。
【００３２】
ステップ１００では、現在ジョブが実行中かどうかを、ＪＯＢ実行中フラグによって判定する。ジョブ実行中であれば、すぐに、本ルーチンを終了する。
【００３３】
図１にて説明したように、各ジョブの実行中も割込みを許可している状態なので、設定周期ごとに発生する割込み処理が発生した場合には、ジョブの予約フラグをセットしたあと、本ジョブ管理処理ルーチンがサブルーチンコールされるが、ジョブ実行フラグがセットされているとき、つまり、ジョブ実行中であれば、それ以上のジョブ管理処理を行わない。ジョブ実行中でなければ、次に、ステップ１０１にて、ＪＯＢ実行中フラグをセットする。
【００３４】
ここで、本ジョブ管理処理における、各ジョブの優先順位について説明する。本実施形態では、ジョブの優先順位は、ＪＯＢ１（優先順位１位）＞ＪＯＢ２（優先順位２位）＞ＪＯＢ１０（優先順位３位）とする。
【００３５】
よって、ステップ１０２、１０７、１１２の正順で、各ジョブの予約フラグが設定されているかの判定を行う。全てのジョブ予約フラグがクリアされた場合には、ジョブの処理が終了したことを示すので、ステップ１１６でＪＯＢ実行中フラグをクリアする。
【００３６】
ステップ１０２で、ＪＯＢ１予約フラグがセットされている（ＪＯＢ１予約フラグ＝１）と判定されると、ステップ１０３でＪＯＢ１をサブルーチンコールし、ＪＯＢ１の処理を実行する。
【００３７】
ＪＯＢ１の処理が終了すると、次に、ステップ１０４にてＪＯＢ１Ｘ予約フラグの判定を行う。通常、ＪＯＢ１のオーバーランが発生していない状態であれば、このＪＯＢ１Ｘ予約フラグはクリアされた状態なので、“Ｙ”の判定をし、ステップ１０５のＪＯＢ１予約フラグのクリアを行う。
【００３８】
もし、ＪＯＢ１がオーバーランしていれば、起動予約の割込み処理によってＪＯＢ１Ｘ予約フラグ＝１がセットされているから、“Ｎ”の判定をし、ステップ１０５のＪＯＢ１予約フラグのクリアを行わずに、ステップ１０６のＪＯＢ１Ｘ予約フラグのクリアを行う。
【００３９】
つまり、ＪＯＢ１Ｘ予約フラグは毎回クリアされるが、ＪＯＢ１予約フラグは、ＪＯＢ１がオーバーランしていない場合のみクリアし、もしＪＯＢ１がオーバーランしていた場合には保持する。
【００４０】
次に、ステップ１１５にてＪＯＢ実行中フラグの判定を行う。ＪＯＢ実行中フラグがクリアされていなければ、つまり、ステップ１１６が実行されていなければ、“Ｙ”と判定し、再度、ステップ１０２のＪＯＢ１予約フラグの判定を行う。
【００４１】
オーバーランが起きていた場合には、ＪＯＢ１の実行直後でも、ＪＯＢ１予約フラグがクリアされていないため、“Ｙ”と判定し、続けてステップ１０３のＪＯＢ１をサブルーチンコールし、ＪＯＢ１の処理を実行する。
【００４２】
以上の動作内容を整理すると、ＪＯＢ１の処理が終了する前に再度、ＪＯＢ１の起動予約がなされた場合には、最初のＪＯＢ１を実行したあと、続けてＪＯＢ１が実行されることになる。つまり、割込みの回数に対してＪＯＢ１の実行回数に不足は起きない。
【００４３】
これにより、もし、ＪＯＢ１内でカウント処理を行っていた場合には、単位時間当たりの処理実行回数は一定になるので、例えば、割込み処理が１０回発生した場合に、ＪＯＢ１処理内でカウントされるカウンタの値は１０となり、カウント不足は発生しない。
【００４４】
続けてフローチャートの処理の説明に戻る。ステップ１０２でＪＯＢ１予約フラグがクリアされていた場合には、ＪＯＢ１処理が終了したことを示すので、“Ｎ”と判定し、次にステップ１０７のＪＯＢ２判定を行う。
【００４５】
もし、ＪＯＢ２予約フラグがセットされていた場合には、“Ｙ”と判定し、ステップ１０８のＪＯＢ２をサブルーチンコールし、ＪＯＢ２の処理を実行する。その後、ＪＯＢ２の処理が終了したときに、ステップ１０９のＪＯＢ２予約フラグをクリアする。ＪＯＢ１０の処理であるステップ１１３〜ステップ１１４も同様である。
【００４６】
上述したように、全てのジョブの処理が終了し、ジョブの予約フラグがクリアされたときは、ステップ１０２、１０７、１１２の判定は、全て“Ｎ”と判定し、ステップ１１６のＪＯＢ実行中フラグをクリアする。このフラグがクリアされると、ステップ１１５のＪＯＢ実行中フラグの判定で“Ｎ”と判定し、本ジョブ管理処理は終了する。
【００４７】
実施形態１の動作のタイムチャートを図３（ａ）、（ｂ）に示す。なお、図中の斜め矢印は、設定周期ごとに発生する割込み発生を示し、黒い四角形はジョブ実行中、白い四角形はジョブ待機中であることを示している。
【００４８】
図３（ａ）は、ジョブのオーバーランがない通常の実行状態を示したものである。Ｉ０（ゼロ）の割込みタイミングで、ＪＯＢ１とＪＯＢ２の起動予約が行われる。ＪＯＢ１は優先順位が一番高いので、すぐに実行されるが、ＪＯＢ２はＪＯＢ１の処理が終了するまで待たされ、ＪＯＢ１の終了後に処理が実行される。Ｉ１の割込みタイミングでは、ＪＯＢ１だけが実行される。Ｉ２の割込みタイミングでは、ＪＯＢ１、ＪＯＢ２、ＪＯＢ１０の全てのジョブが実行されるタイミングである。ＪＯＢ１は、すぐに実行されるが、ＪＯＢ２は、ＪＯＢ１の処理が終了するのを待って処理を実行し、ＪＯＢ１０は、さらに、ＪＯＢ２が終了するのを待って処理を実行する。
【００４９】
ここで、ＪＯＢ１０は、ＪＯＢ１、ＪＯＢ２よりも処理時間が長い処理が割り当てられているので、ＪＯＢ１０の処理が終了する前に、Ｉ３の割込みが発生する可能性がある。この場合には、ＪＯＢ１の起動予約がを行うことが出来るので、Ｉ３の割込みタイミングによる割込み処理にて、ＪＯＢ１の起動予約のみ行い、処理自体はＪＯＢ１０が終了するのを待ってＪＯＢ１を実行する。Ｉ４の割込みタイミング以降の動作は、前記と同様である。
【００５０】
これに対し、図３（ｂ）はジョブのオーバーランが発生したときの動作を示す。Ｉ１２の割込みタイミングで、ＪＯＢ１０の処理実行中に、Ｉ１３の割込み発生が発生し、ＪＯＢ１の処理が予約される。ここまでは問題ないが、予約されたＪＯＢ１がまだ実行されていない、あるいはＪＯＢ１処理実行中に、さらにＩ１４の割込みが発生した場合には、再度ＪＯＢ１の起動予約を行うことになる。
【００５１】
この場合、従来であれば、ＪＯＢ１の予約フラグに上書きしたことになるので、それより以前に予約されていたＪＯＢ１がキャンセルされ、ＪＯＢ１の処理が一回抜けてしまっていた。
【００５２】
これに対し、本実施形態によれば、このような場合でも、追加でジョブの起動を予約することができ、ＪＯＢ１のジョブ待ち行列ができるので、一回前の割込みタイミングで予約されたＪＯＢ１がキャンセルされることなく、実行することができる。
【００５３】
つまり、図３（ｂ）の場合、割込み回数は、Ｉ１０〜Ｉ１５まで６回発生しているが、その間のＪＯＢ１の実行回数は６回であり、割込み回数とＪＯＢ１の実行回数に相違は生じない。この場合、割込み発生タイミングに対して、ジョブの実行タイミングが若干遅れることになるが、割込みタイミングで、即刻に処理を行う必要がある場合には、ジョブの予約を行う時点、つまり図１のステップ４にて、ＪＯＢ１予約フラグをセットしたあと、割込み発生即時起動処理を追加し、実行させればよい。
【００５４】
（実施形態２）
本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態２を、図４〜図６を参照して説明する。本発明によるジョブ制御プログラムも、ジョブ管理をコンピュータに実行させるためのプログラムであり、以下に示す処理をコンピュータに実行させる。
【００５５】
図４は、各ジョブの起動予約を行う割込み処理ルーチンを示すフローチャートである。本割込み処理ルーチンも、実施形態２と同様に、ＣＰＵのタイマによる時間管理のもとに、予め定められた割込みタイミングごとに呼び出される。
【００５６】
最初に、ステップ４１の割込み禁止処理を行う。本実施形態でも、プログラムの誤動作を防止し、暴走に陥らないようにするために、割込み処理中は、他の割込みをマスクしている。
【００５７】
ステップ４２〜４４は、ＪＯＢ１の起動予約に関する処理である。ステップ４２により、ＪＯＢ１がオーバーラン状態にあるかどうかの判定を行う。もし、ＪＯＢ１がオーバーランと判定した場合には、ステップ４３のＪＯＢ１予約カウンタを＋１カウントアップ（一つインクリメント）する。その後、ステップ４４にてＪＯＢ１予約フラグのセットを行う。つまり、割込み発生ごとにＪＯＢ１予約フラグはセットされるが、ＪＯＢ１がオーバーランと判定したときには、ステップ４３のＪＯＢ１予約カウンタを一つインクリメントする。
【００５８】
ここで、ＪＯＢ１のオーバーランとは、ＪＯＢ１の起動予約時に、他のジョブ、例えば、ＪＯＢ１０の実行時間遅延によって、まだ前回の起動予約のＪＯＢ１が実行されていない、あるいは前回の起動予約のＪＯＢ１が実行中であることを意味する。
【００５９】
次に、ステップ４５〜４８は、ＪＯＢ２の起動予約に関する処理である。ステップ４５により、本割込み発生が２回に１回かどうかを判定し、成立していれば、ステップ４６により、ＪＯＢ２がオーバーラン状態にあるかどうかの判定を行う。もし、ＪＯＢ２がオーバーランと判定した場合には、ステップ４７のＪＯＢ２予約カウンタを＋１カウントアップ（一つインクリメント）する。その後、ステップ４８にてＪＯＢ２予約フラグのセットを行う。つまり、割込み発生２回ごとにＪＯＢ２予約フラグはセットされるが、ＪＯＢ２がオーバーランと判定したときには、ステップ４７のＪＯＢ２予約カウンタを一つインクリメントする。
【００６０】
ここで、ＪＯＢ２のオーバーランとは、ＪＯＢ２の起動予約時に、他のジョブ、例えば、ＪＯＢ１０の実行時間遅延によって、まだ前回の起動予約のＪＯＢ２が実行されていない、あるいは前回の起動予約のＪＯＢ２が実行中であることを意味する。
【００６１】
次に、ステップ４９〜５０は、ＪＯＢ１０の起動予約に関する処理である。ステップ４９により、本割込み発生が１０回に１回かどうかを判定し、成立していれば、ステップ５０のＪＯＢ１０予約フラグをセットする。本実施形態では、ＪＯＢ１０に関しては、設定周期がＪＯＢ１、ＪＯＢ２に対して長いので、ＪＯＢ１０の予約カウンタの設定は行わないことにする。
【００６２】
次に、ステップ５１で割込み禁止状態を解除し、割込みを許可とする。その後、ステップ５２でジョブ管理処理ルーチンをサブルーチンコールし、起動予約を行ったジョブの実行を行い、終了する。
【００６３】
このジョブ起動予約処理ルーチンにおいては、ステップ４４、４８、５０のジョブの予約フラグセットが、予め定められた所定の設定周期ごとに各ジョブの起動を予約するジョブ起動予約工程（ジョブ起動予約処理）であり、ステップ４３、４７の予約カウンタのインクリメントが、ジョブの起動を追加で予約するジョブ起動追加予約工程（ジョブ起動追加予約処理）である。
【００６４】
図５は、図４の割込み処理で起動予約されたジョブを、予め設定された優先順位に従い、起動実行するジョブ管理処理ルーチンを示すフローチャートである。このジョブ管理処理ルーチンは、ジョブ管理工程（ジョブ管理処理）を実行するものであり、ジョブの予約フラグがセットされることにより呼び出される。
【００６５】
ステップ２００では、現在ジョブが実行中かどうかを、ＪＯＢ実行中フラグによって判定する。ジョブ実行中であれば、すぐに、本ルーチンを終了する。
【００６６】
ジョブ実行中でなければ、次に、ステップ２０１にて、ＪＯＢ実行中フラグをセットする。
【００６７】
なお、実施形態２でも、ジョブの優先順位は、ＪＯＢ１（優先順位１位）＞ＪＯＢ２（優先順位２位）＞ＪＯＢ１０（優先順位３位）とする。
【００６８】
よって、ステップ２０２、２０７、２１２の正順で、各ジョブの予約フラグが設定されているかの判定を行う。全てのジョブ予約フラグがクリアされた場合には、ジョブの処理が終了したことを示すので、ステップ２１６でＪＯＢ実行中フラグをクリアする。
【００６９】
ステップ２０２で、ＪＯＢ１予約フラグがセットされている（ＪＯＢ１予約フラグ＝１）と判定されると、ステップ２０３でＪＯＢ１をサブルーチンコールし、ＪＯＢ１の処理を実行する。
【００７０】
ＪＯＢ１の処理が終了すると、次に、ステップ２０４にてＪＯＢ１予約カウンタが０かどうかを判定する。つまり、この予約カウンタが０以外であれば、ＪＯＢ１が実行待ち状態だったとき、またはＪＯＢ１実行中に、設定周期による割込み処理が発生し、ＪＯＢ１の実行予約が追加で行われたことを示す。例として、ステップ２０４の判定で、ＪＯＢ１予約カウンタが“２”だった場合には、直前に実行終了した１回目のＪＯＢ１処理の他に、あと２回ＪＯＢ１処理の実行が必要であることを示す。
【００７１】
次に、ステップ２１５にてＪＯＢ実行中フラグの判定を行う。ＪＯＢ実行中フラグがクリアされていなければ、つまり、ステップ２１６が実行されていなければ、“Ｙ”と判定し、再度、ステップ２０２のＪＯＢ１予約フラグの判定を行う。
【００７２】
オーバーランが起きていた場合には、ＪＯＢ１の実行直後でも、ＪＯＢ１予約フラグがクリアされていないため、“Ｙ”と判定し、続けてステップ２０３のＪＯＢ１をサブルーチンコールし、ＪＯＢ１の処理を実行する。
【００７３】
よって、ＪＯＢ１予約カウンタが“２”であると、ステップ２０４では、”Ｎ“と判定し、ステップ２０５のＪＯＢ１予約フラグのクリアを行わずに、ステップ２０６にてＪＯＢ１予約カウンタを−１デクリメントする。同様の動作を再度行い、合計３回のＪＯＢ１処理を実行したあと、ステップ２０４の判定で、ＪＯＢ１カウンタは０になっているので、”Ｙ“と判定し、ステップ２０５にてＪＯＢ１予約フラグをクリアする。これで、ＪＯＢ１処理は、予約されていた回数分を実行したことになる。
【００７４】
これにより、割込みの回数に対してＪＯＢ１の実行回数に不足は起きず、もし、ＪＯＢ１内でカウント処理を行っていた場合には、単位時間当たりの処理実行回数は一定になるので、例えば、割込み処理が１０回発生した場合に、ＪＯＢ１処理内でカウントされるカウンタの値は１０となり、カウント不足は発生しない。
【００７５】
ステップ２０２でＪＯＢ１予約フラグがクリアされていた場合には、ＪＯＢ１処理が終了したことを示すので、“Ｎ”と判定し、次にステップ２０７のＪＯＢ２判定を行う。
【００７６】
もし、ＪＯＢ２予約フラグがセットされていた場合には、“Ｙ”と判定し、ステップ２０８のＪＯＢ２をサブルーチンコールし、ＪＯＢ２の処理を実行する。
【００７７】
ＪＯＢ２の処理が終了すると、次に、ステップ２０９にてＪＯＢ２予約カウンタが０かどうかを判定する。つまり、この予約カウンタが０以外であれば、ＪＯＢ２が実行待ち状態だったとき、またはＪＯＢ２実行中に、設定周期による割込み処理が発生し、ＪＯＢ２の実行予約が追加で行われたことを示す。
【００７８】
ＪＯＢ２予約カウンタが０以外、例えば“１”であれば、”Ｎ“と判定し、ステップ２１１にてＪＯＢ２予約カウンタを−１デクリメントし、再度ＪＯＢ２処理を実行する。
【００７９】
その後、ＪＯＢ２の処理が終了したときに、ステップ２１０のＪＯＢ２予約フラグをクリアする。
【００８０】
ステップ２０７でＪＯＢ２予約フラグがクリアされていた場合には、ＪＯＢ２処理が終了したことを示すので、“Ｎ”と判定し、次にステップ２１２のＪＯＢ１０判定を行う。
【００８１】
もし、ＪＯＢ１０予約フラグがセットされていた場合には、“Ｙ”と判定し、ステップ２１３のＪＯＢ１０をサブルーチンコールし、ＪＯＢ１０の処理を実行する。その後、ＪＯＢ１０の処理が終了したときに、ステップ２１４のＪＯＢ１０予約フラグをクリアする。
【００８２】
上述したように、全てのジョブの処理が終了し、ジョブの予約フラグがクリアされたときは、ステップ２０２、２０７、２１２の判定は、全て“Ｎ”と判定し、ステップ２１６のＪＯＢ実行中フラグをクリアする。このフラグがクリアされると、ステップ２１５のＪＯＢ実行中フラグの判定で“Ｎ”と判定し、本ジョブ管理処理は終了する。
【００８３】
実施形態２の動作のタイムチャートを図６に示す。なお、図中の斜め矢印は、設定周期ごとに発生する割込み発生を示し、黒い四角形はジョブ実行中、白い四角形はジョブ待機中であることを示している。
【００８４】
割込みタイミングＩ２０は、ＪＯＢ１、ＪＯＢ２、ＪＯＢ１０が同時に起動予約されるタイミングである。ＪＯＢ１０が実行中に、設定周期による割込みＩ２１が発生した場合には、ＪＯＢ１の起動予約が行われる。
【００８５】
その後、Ｉ２２の割込みタイミング発生時点でも、まだＪＯＢ１０が完了していない場合には、ＪＯＢ１予約カウンタを＋１する。同時にＪＯＢ２の起動タイミングでもあるので、ＪＯＢ２の実行予約を行う。
【００８６】
さらに、Ｉ２３の割込みタイミングにおいても、まだＪＯＢ１０が完了していないときには、さらに、ＪＯＢ１予約カウンタを＋１する（合計２となる）。
【００８７】
その後、ＪＯＢ１０が完了した時点で、ＪＯＢ１が実行される。ＪＯＢ１が１回終了するごとにＪＯＢ１予約カウンタを−１する。ＪＯＢ１が２回終了した時点で、ＪＯＢ１予約カウンタは０となり、最後の１回を実行する。そのとき、さらにＩ２４の割込みが発生した場合には、まだＪＯＢ１処理が完了していないので、ＪＯＢ１予約カウンタを＋１する。同時にＪＯＢ２の起動タイミングでもあるが、Ｉ２２の時点で予約されたＪＯＢ２はまだ実行していないので、ＪＯＢ２予約カウンタを＋１する。ＪＯＢ１がＩ２１からＩ２４までで予約された計４回の処理を完了した時点で、ＪＯＢ２を実行する。１回目のＪＯＢ２終了後、ＪＯＢ２予約カウンタを−１し、再度ＪＯＢ２を実行する。つまり、Ｉ２２、Ｉ２４で予約された分のＪＯＢ２を２回連続で実行する。Ｉ２５以降はオーバーランが発生していないので、通常の処理となる。
【００８８】
以上の動作を整理すると、割込みタイミングＩ２０〜Ｉ２６まで、７回の割込みが発生しているが、ＪＯＢ１の実行回数は７回であり、割込み回数とＪＯＢ１の実行回数に差異は発生しない。また、同様にＪＯＢ２の起動タイミングは４回あるが、ＪＯＢ２の実行回数も４回であり、差異は発生しない。
【００８９】
この実施形態では、ジョブの予約回数をカウンタで持たせる方法であり、この方法を用いることにより、実施形態１よりも、ジョブ抜けを防止する範囲を広くとることができる。
【００９０】
なお、このジョブ制御プログラムは、ハードディスク、フロッピーディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行され、またこのプログラムは、上述のような記録媒体を介してインターネット等のネットワークを介して配布することもできる。
【産業上の利用可能性】
【００９１】
ジョブを周期的に実行するデジタル演算処理装置およびこれを用いたエンジン制御装置において、急激な演算負荷の増加などの原因により、一時的にジョブの実行時間が長くなった場合においても、ジョブの実行回数を確保できるため、演算精度を確保することが可能となる。また、ジョブがオーバーランしない通常の状態であれば、本発明を組み込むことによる動作上の影響はないので、同様の構成のＯＳを用いたプログラムであれば、全てに適用可能である。
【図面の簡単な説明】
【００９２】
【図１】本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態１におけるジョブ起動予約処理のフローチャート。
【図２】本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態１におけるジョブ管理処理のフローチャート。
【図３】（ａ）、（ｂ）の実施形態１の動作を示すタイムチャート。
【図４】本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態２におけるジョブ起動予約処理のフローチャート。
【図５】本発明によるデジタル演算処理装置のジョブ制御方法およびジョブ制御プログラムの実施形態２におけるジョブ管理処理のフローチャート。
【図６】実施形態２の動作を示すタイムチャートである。
【図１】
2008033434.tif 000003
【図２】
2008033434.tif 000004
【図３】
2008033434.tif 000005
【図４】
2008033434.tif 000006
【図５】
2008033434.tif 000007
【図６】
2008033434.tif 000008