(57)【特許請求の範囲】
【請求項１】
複数のタスクに対するＣＰＵ使用時間の割り当てをスケジューリングするタスクスケジューリング装置において、
前記複数のタスクの実際の処理時間を計測するクロック部と、
前記複数のタスク毎の処理時間を管理する時間管理テーブルと、
前記時間管理テーブルに格納された所定の処理周期内で、前記クロック部により得られる前記所定の周期におけるタスク終了時刻の誤差を補正する終了演算・管理部とを有し、
前記終了演算・管理部は、前記クロック部により得られる実績終了時刻に基づいて、前記タスク終了時刻の誤差を補正し、次周期の終了時刻に反映させて前記複数のタスクのスケジューリングを行い、
前記複数のタスク毎に予め設定したＣＰＵ使用時間の時間配分比率に基づいて、前記所定の処理周期内における各タスクの割り当てを行い、
前記複数のタスクには、繰り返し型タスクを含み、前記時間配分比率は、多数の周期にまたがって各周期で少しずつ処理を継続する前記繰り返し型タスクが１つの処理周期内で複数存在する場合に、複数の前記繰り返し型タスクが同一の処理周期内で終了するように設定されることを特徴とするタスクスケジューリング装置。
【請求項２】
複数のタスクに対するＣＰＵ使用時間の割り当てをスケジューリングするタスクスケジューリング方法において、
前記複数のタスクの実際の処理時間を計測する計測ステップと、
前記複数のタスク毎の処理時間を管理する時間管理テーブルに格納された所定の処理周期内で、前記計測ステップにより得られる前記所定の周期におけるタスク終了時刻の演算誤差を補正する終了演算管理ステップとを有し、
前記終了演算管理ステップは、前記計測ステップにより得られる実績終了時刻に基づいて、前記タスク終了時刻の誤差を補正し、次周期の終了時刻に反映させて前記複数のタスクのスケジューリングを行い、
前記複数のタスク毎に予め設定したＣＰＵ使用時間の時間配分比率に基づいて、前記所定の処理周期内における各タスクの割り当てを行い、
前記複数のタスクには、繰り返し型タスクを含み、前記時間配分比率は、多数の周期にまたがって各周期で少しずつ処理を継続する前記繰り返し型タスクが１つの処理周期内で複数存在する場合に、複数の前記繰り返し型タスクが同一の処理周期内で終了するように設定されることを特徴とするタスクスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスクスケジュール装置及びタスクスケジュール方法に係り、特に、より安全な処理及びＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）使用効率の向上を実現させるためのタスクスケジュール装置及びタスクスケジュール方法に関する。
【背景技術】
【０００２】
従来、複数のタスクをＣＰＵに割り当て、所定の順序でタスクを処理させるためのスケジューリング手法が知られており、複数のタスクを割り当てる場合において、高い安全性が求められるソフトウェアにはシングルスレッド方式が優れていることが知られている（例えば、非特許文献１参照）。
【０００３】
ここで、シングルスレッド方式は、一連のプログラムを予め決めた一定の周期、一定の順序で動作させる方式である。なお、順序としては、例えば入力、処理、出力等の順とし、また一連の処理の途中で入力及び内部状態が不用意に変化しないようにするため、プログラム同士が互いに干渉しない構造を有する。
【０００４】
ここで、上述のシングルスレッド方式を実施するうえでの条件について説明すると、まず第１の条件は、スレッド実行時に割込みを受け付けないというものである。つまり、タスクの動作中に割込みを受け付けず、一連の処理の最終タスクが終わって再度スレッドの先頭タスクに戻る際に、初めて割込みの有無と要因とを分析し、次のスレッドで対応する処理を行う。また、第２の条件は、処理はサイクリックに行うというものである。つまり、イベント生成に応じて必要な処理を行うのではなく、シングルスレッドで繰り返し処理されるため、同じ処理がサイクリックに行われる。
【０００５】
また、第３の条件は、タスク間通信には非対称な受信チェックを行うというものである。また、第４の条件は、入力変化にも非対称入力チェックを行うというものである。つまり、入力の変化をそのまま受け入れるのでなく、安全性を配慮した妥当性診断処理を組込む。最後に第５の条件は、入力変化の合理性診断というものである。つまり、入力変化に対しては、非対称診断に加え、処理上の合理性診断を行ったうえで使う。なお、非特許文献１に示す方式は、日本の鉄道保安機器用のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の要件となっている。
【０００６】
また従来では、優先制御されたマルチプロセスの計算時間配分を求める方法が開示されている（例えば、特許文献１参照）。特許文献１に示されている技術は、一定の測定期間で処理能力の測定を行い、次の測定期間での計算時間配分を求める方法である。
【０００７】
また従来では、優先度の高い方を第１のストリーム処理とし、優先度の低い方を第２のストリーム処理として、第１のストリーム処理の終了時刻に、第２のストリーム処理の開始時刻を同期させる処理が開示されている（例えば、特許文献２参照）。
【０００８】
また従来では、マルチタスクシステムで実行される遅延保証が必要なタスク毎に、そのタスクを実行する周期、その１周期内でそのタスクを実行するために要求された要求処理時間、及びそのタスクの実行遅延の許容範囲を示す許容遅延時間をそれぞれ設定し、各タスクの要求処理時間と許容遅延時間との和による優先度及び各タスクに設定された周期に基づいて各タスクの実行を制御する手法が開示されている（例えば、特許文献３参照）。
【０００９】
更に従来では、統括制御タスクにおける一連の処理が連続的に実行される時間を検出し、ロボット管理タスクの実行時間に対する統括制御タスクの実行時間比率が、実行周期内において予め定めた一定の割合以下となるように制御する手法が開示されている（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特表２００５−５２４９０４号公報
【特許文献２】特開２００６−３５０８２８号公報
【特許文献３】特開２０００−５６９８９号公報
【特許文献４】特開２００６−４８２３１号公報
【非特許文献】
【００１１】
【非特許文献１】樋口文仁  他２名、鉄道保安機器用次世代ＯＳ、日本信頼性学会第１７会春季信頼性シンポジウム論文集、Ｐ２７−Ｐ３０
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、非特許文献１に示されているシングルスレッド方式では、ＣＰＵの処理能力を活かしきれず、また、ソフトウェアを追加した場合にプログラムの改修等が要るという問題点が記載されている。また、非特許文献１に示されている技術は、この問題点を解決するために排他ダブルスレッド方式が提案されているが、当該方式では通常スレッドのタスクが優先スレッドの動作により中断され、優先スレッドの終了で再開することになる。そのため、不定のタイミングでタスクの切り替え処理が発生し、再開アドレスや状態情報の保存・共有のため、例えばレジスタ保存のためオーバフローの可能性があり、非安全であるスタック領域の使用が必要となる。また、当該領域を利用した使用中レジスタの保存や再設定等、処理の途中で内部状態が変化し、非安全な処理が発生するという問題点がある。
【００１３】
更に、特許文献１に示されている技術は、優先制御されたマルチプロセスの計算時間配分を求める方法が記載されているが、これは測定期間の次の測定期間について時間配分をするものであり、測定期間内での時間配分をすることができない。そのため、当該測定期間内で上位レベルの処理時間が大きくなった場合、前回の測定期間で設定した今回の時間配分では時間的に収まらない場合が想定される。
【００１４】
また、特許文献２に示されている技術は、タスク割り当てを動的に一定周期で行うことは記載されているが、タスクによって一定周期と実績終了時刻とに差がある場合には、その時間が非効率になってしまう。
【００１５】
また、特許文献３に示されている技術は、タスクに対する許容遅延時間をそれぞれ設定し、各タスクの要求処理時間と許容遅延時間との和に基づいてタスクを制御するため、前回の実績終了時刻を考慮して、次周期の終了時刻演算に反映するといった動的な制御をすることができず、効率的なタスクの割り当てを行うことができなかった。
【００１６】
更に、特許文献４に示されている技術は、統括制御タスクの実行時間比率が、実行周期内において予め定めた一定の割合以下となるように実行時間比率を調整する技術であるため、前回の実績終了時刻を考慮して、次周期の終了時刻演算に反映するといった動的な制御をすることができず、効率的なタスクの割り当てを行うことができなかった。
【００１７】
本発明は、上述した課題に鑑みてなされたものであって、より安全な処理及びＣＰＵ使用効率の向上を実現させるためのタスクスケジュール装置及びタスクスケジュール方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上述した課題を解決するために、本件発明は、以下の特徴を有する課題を解決するための手段を採用している。
【００１９】
本発明は、複数のタスクに対するＣＰＵ使用時間の割り当てをスケジューリングするタスクスケジューリング装置において、前記複数のタスクの実際の処理時間を計測するクロック部と、前記複数のタスク毎の処理時間を管理する時間管理テーブルと、前記時間管理テーブルに格納された所定の処理周期内で、前記クロック部により得られる前記所定の周期におけるタスク終了時刻の誤差を補正する終了演算・管理部とを有し、前記終了演算・管理部は、前記クロック部により得られる実績終了時刻に基づいて、前記タスク終了時刻の誤差を補正し、次周期の終了時刻に反映させて前記複数のタスクのスケジューリングを行い、前記複数のタスク毎に予め設定したＣＰＵ使用時間の時間配分比率に基づいて、前記所定の処理周期内における各タスクの割り当てを行い、前記複数のタスクには、繰り返し型タスクを含み、前記時間配分比率は、多数の周期にまたがって各周期で少しずつ処理を継続する前記繰り返し型タスクが１つの処理周期内で複数存在する場合に、複数の前記繰り返し型タスクが同一の処理周期内で終了するように設定されることを特徴とする。
【００２１】
更に本発明は、複数のタスクに対するＣＰＵ使用時間の割り当てをスケジューリングするタスクスケジューリング方法において、前記複数のタスクの実際の処理時間を計測する計測ステップと、前記複数のタスク毎の処理時間を管理する時間管理テーブルに格納された所定の処理周期内で、前記計測ステップにより得られる前記所定の周期におけるタスク終了時刻の演算誤差を補正する終了演算管理ステップとを有し、前記終了演算管理ステップは、前記計測ステップにより得られる実績終了時刻に基づいて、前記タスク終了時刻の誤差を補正し、次周期の終了時刻に反映させて前記複数のタスクのスケジューリングを行い、前記複数のタスク毎に予め設定したＣＰＵ使用時間の時間配分比率に基づいて、前記所定の処理周期内における各タスクの割り当てを行い、前記複数のタスクには、繰り返し型タスクを含み、前記時間配分比率は、多数の周期にまたがって各周期で少しずつ処理を継続する前記繰り返し型タスクが１つの処理周期内で複数存在する場合に、複数の前記繰り返し型タスクが同一の処理周期内で終了するように設定されることを特徴とする。
【００２３】
なお、本発明の構成要素、表現又は構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造等に適用したものも本発明の態様として有効である。
【発明の効果】
【００２４】
本発明によれば、タスクスケジュールに関して、より安全な処理及びＣＰＵ使用効率の向上を実現させることができる。また、一連のタスクを予め決めた一定の周期、一定の順序で動作させる方式を用いてＣＰＵ資源を最大限に活用することができる。
【図面の簡単な説明】
【００２５】
【図１】タスクスケジューリング装置のブロック構成の一例を示す図である。
【図２】計算時間管理テーブルの一例を示す図である。
【図３】第１の実施形態における終了演算・管理処理の一例を示すフローチャートである。
【図４】第１の実施形態における終了時刻の設定処理の一例を示すフローチャートである。
【図５】第１の実施形態における終了チェック関数の処理の一例を示すフローチャートである。
【図６】第１の実施形態における繰り返し型タスクの一例を示すフローチャートである。
【図７】タスクの割り当て内容（第１の実施例）を示すタイムチャートである。
【図８】タスクの割り当て内容（第２の実施例）を示すタイムチャートである。
【図９】第２の実施形態における終了演算・管理処理の一例を示すフローチャートである。
【図１０】第２の実施形態における終了チェック関数の処理の一例を示すフローチャートである。
【図１１】第２の実施形態における終了時刻設定処理の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００２６】
以下に、本発明におけるタスクスケジュール装置及びタスクスケジュール方法を好適に実施した形態について、図面を用いて説明する。なお、以下に示す実施形態では、一例として、一連のタスクを予め決めた一定の周期、一定の順序で動作させる方式を採用する。また、タスクの動作としては、例えば安全機能タスク、非繰り返し型タスク、繰り返し型タスク等を有し、本実施形態では少なくとも繰り返し型タスクが実行されるものとする。
【００２７】
ここで、安全機能タスク及び非繰り返し型タスクは、安全機能の実施、伝送の送信や受信処理、入力や出力の診断処理等、処理時間が各周期での状態により各周期で変化するタスクである。また、繰り返し型タスクは、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の自己診断、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の自己診断等、一定の処理を繰り返し実行するタスクである。ここで、ＲＡＭの自己診断やＲＯＭの自己診断は、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）演算やギャルパット等の診断手法を用いるが、当該手法は使用するＲＡＭやＲＯＭの全領域に対してＣＲＣ演算等を行うため、上述の一定の周期内では完了せず、多数の周期にまたがって各周期で少しずつ処理をすることになる。
【００２８】
また、ＲＡＭの自己診断、ＲＯＭの自己診断は、安全ＣＰＵの故障を検出するために必須の機能であり、安全度水準を向上させるにはＣＰＵ資源を多量に必要とする診断手法を必要とする。そこで、本発明では、繰り返し型タスクの処理を一定周期内で最大のＣＰＵの処理能力を使用して実施するため、繰り返し型タスクについてＣＰＵ時間の割り当てを行う。
【００２９】
＜第１の実施形態＞
図１は、タスクスケジューリング装置のブロック構成の一例を示す図である。図１に示すタスクスケジューリング装置としてのＣＰＵ１０は、クロック部１１と、計算時間管理テーブル１２と、終了演算・管理処理部１３と、安全機能タスク１４と、繰り返し型タスク１５と、終了チェック処理部１６とを有するよう構成されている。
【００３０】
クロック部１１は、ＣＰＵ１０に内蔵されており減算カウンタの機能を有する。例えば、クロック部１１は、予め設定されたカウント値を基準として所定のタイミングに基づく減算処理を実行し、カウント０で終了演算・管理処理部１３を読み出して起動する。また、クロック部１１は、時刻等を格納するレジスタを有しており、レジスタによりソフトウェアとのインタフェースを行う。また、クロック部１１は、各周期の終了時刻演算や実績終了時刻を求めるために用いられる。
【００３１】
計算時間管理テーブル１２は、終了時刻計算等の計算に必要な情報を有している。なお、計算時間管理テーブル１２の具体的な内容については後述する。
【００３２】
終了演算・管理処理部１３は、クロック部１１による時間計測に基づいて定周期に起動し、終了時刻演算等を行う。また、終了演算・管理処理部１３は、所定の順序にしたがってタスクが動作するように管理を行う。具体的には、終了時に次に処理すべきタスクを呼び出す等の処理を行う。
【００３３】
安全機能タスク１４は、異常時に停止出力をする等、安全に直接関係する機能を実行するタスクである。また、安全機能タスク１４は、図１に示すように繰り返し型タスクを呼び出す。なお、図１には図示していないが、上述した非繰り返し型タスクがある場合、安全機能タスク１４は、非繰り返し型タスクを呼び出し、更に非繰り返し型タスクは、タスク実行後に繰り返し型タスク１５を呼び出す。
【００３４】
繰り返し型タスク１５は、上述したようにＲＡＭの自己診断、ＲＯＭの自己診断等一定の処理を繰り返し実行する１又は複数のタスクである。繰り返し型タスク１５は、繰り返しの一定の処理間隔で終了チェック処理部１６の終了チェック関数を呼び出す。また、繰り返し型タスク１５は、終了チェック処理部１６から終了指示があれば当該タスクを終了する。
【００３５】
終了チェック処理部１６は、予め設定された終了チェック関数により、クロック部１１の値と終了時刻を比較して終了時刻に達したか否かを判断する。また、終了チェック処理部１６は、終了時刻に達したら実績終了時刻を格納し繰り返し型タスク１５の終了指示をする。
【００３６】
ここで、本実施形態では、上述した構成を用いて、繰り返し型タスク１５の処理を、一定周期内で最大のＣＰＵ１０の処理能力を使用して実施するため、繰り返し型タスク１５についてＣＰＵ時間の割り当てを行う。このとき、ＣＰＵ時間は、予め指定した標準終了時刻又は周期最大時間から、クロック部１１の値を引用して演算した終了時刻を各周期の最初で設定する。
【００３７】
繰り返し型タスク１５では、上述した終了チェック処理部１６の終了チェック関数を呼び出し、予め設定した時刻に達したか否かをクロック部１１の値と比較して確認する。また、設定した時刻に達したら、その繰り返し型タスク１５の処理を終了する。また、当該処理は、次の周期で前回終了の次の繰り返し処理から開始する。ここで、本発明では、終了時刻の演算誤差を校正するため、実績終了時刻を測定し、次周期の終了時刻演算に反映する。
【００３８】
つまり、繰り返し型タスク１５は、多数の周期にまたがって各周期で少しずつ処理を継続できるよう、ＲＯＭ自己診断済の最終アドレス等の処理経過情報を有している。したがって、この処理経過情報を用いて、各繰り返し型タスクの全体処理時間を同一周期にすることにより、次の繰り返し型タスクの処理開始周期を制御することができる。例えば、各繰り返し型タスクの全体処理終了の次の周期から次の繰り返し型タスクを開始することができる。これにより、各繰り返し型タスクの全体処理の実行周期を最短にすることもできる。
【００３９】
＜計算時間管理テーブル１２の具体例について＞
次に、上述した計算時間管理テーブル１２の具体例について、図を用いて説明する。図２は、計算時間管理テーブルの一例を示す図である。なお、図２（ａ）は、処理時間基礎データを示し、図２（ｂ）は終了時刻設定テーブルを示し、図２（ｃ）は、時刻補正テーブルを示している。
【００４０】
図２（ａ）は、所定の処理時間基礎データを予め設定し格納しておく領域であり、項目としては、例えば「処理周期」、「余裕時間」、「処理番号」、「標準終了時刻」、「処理時間」、「時間配分比率」等を有している。ここで、「処理周期」には、終了演算・管理処理を起動する周期を格納する。また、「余裕時間」は、処理が終了してから次の周期が始まるまでの時間誤差等を吸収するための余裕時間を格納する。また、「処理番号」は、繰り返し型タスクの通番を格納する。なお、図２に示す「処理番号」の例では、処理する順番に番号を付与している。
【００４１】
また、「標準終了時刻」は、上述した繰り返し型タスク１５に予め与えた周期あたりの繰り返し型タスク処理時間を格納する。また、「処理時間」は、繰り返し型タスク１５に予め与えた繰り返し処理の１回分の繰り返しに必要な処理時間を格納する。更に、「時間配分比率」は、当該処理番号の繰り返し型タスク１５に与えられた処理時間内の時間配分の比率を示す。
【００４２】
なお、具体的に図２（ａ）に示す例では、「処理周期」を１０ｍｓとし、「余裕時間」を１ｍｓとしている。また、タスクの処理番号１については、「標準終了時刻」を６ｍｓとし、処理周期中の「処理時間」を１ｍｓとし、「時間配分比率」を４０％とし、また、タスクの処理番号２については、「標準終了時刻」を８ｍｓとし、処理周期中の「処理時間」を０．５ｍｓとし、「時間配分比率」を６０％としている。なお、図２（ａ）に示す例は、あくまでも一例であり、他の設定条件や他のタスクに対しても同様に設定することができる。
【００４３】
また、１つの処理周期内で処理されるタスク数は、上述したように２つ（処理番号１，処理番号２）に限定されるものではなく、例えば３つ以上でもよい。その場合には、例えば、図２（ａ）に示す処理時間基礎データの「時間配分比率」は、１つの処理周期内で処理されるタスク数に応じて比率を逐次変更することができる。
【００４４】
また、図２（ｂ）に示す終了時刻設定テーブルは、終了演算・管理処理で演算した処理番号に対応した終了時刻を設定し格納しておく領域であり、項目としては、例えば「処理番号」、「終了時刻」等を有している。また、終了時刻設定テーブルは、ＣＰＵクロックであるクロック部１１の時刻データに対応した単位で時刻が設定される。
【００４５】
なお、具体的に図２（ｂ）に示す例では、処理番号１，処理番号２に対してそれぞれの「終了時刻」が６ｍｓ、８ｍｓと設定されている。
【００４６】
また、図２（ｃ）に示す時刻補正テーブルは、処理番号に対応した実績終了時刻を格納しておく領域であり、項目としては、例えば「処理番号」、「実績終了時刻」等を有している。
【００４７】
また、時刻補正テーブルの時刻補正には、処理番号が最大値の繰り返し処理の終了チェック関数が書き込んだクロック部１１から得られる時刻データが使用される。なお、具体的に図２（ｃ）に示す例では、処理番号２の実績終了時刻として８．５ｍｓが格納されている。この格納される実績終了時刻は、その都度、終了時刻の演算誤差を校正するため、現在の周期で処理されているタスクの実績終了時刻を測定し、その誤差から次周期の終了時刻の演算を行い、その結果を格納する。
【００４８】
＜終了演算・管理処理について＞
次に、第１の実施形態における終了演算・管理処理部１３の終了演算・管理処理について、フローチャートを用いて説明する。図３は、第１の実施形態における終了演算・管理処理の一例を示すフローチャートである。なお、図３に示す終了演算・管理処理は、予め設定された周期で起動される。
【００４９】
図３に示す例では、まず、ＣＰＵクロックであるクロック部１１の時刻カウンタを設定し、次回に定周期で起動するトリガーとする（Ｓ０１）。次に、上述した計算時間管理テーブル１２のうち、図２（ａ）に示す処理時間基礎データを読み込み、次に図２（ｂ）に示す終了時刻設定テーブルに終了時刻を設定する（Ｓ０３）。その後、図２（ｃ）に示す時刻補正テーブルを初期化する。
【００５０】
ここで、上述したＳ０３の処理における終了時刻の設定処理の具体例について、フローチャートを用いて説明する。図４は、第１の実施形態における終了時刻の設定処理の一例を示すフローチャートである。ここで、図４の説明では、一例として処理番号順にタスクを実行するものとし、予めどの程度のタスクがあるか（すなわちタスクの最大値）が把握されているものとする。
【００５１】
図４の処理では、まず処理番号が最大であるか否かを判断し（Ｓ１１）、最大でない場合（Ｓ１１において、ＮＯ）、図２（ａ）の処理時間基礎データに含まれる標準終了時刻を図２（ｂ）の終了時刻設定テーブルの終了時刻に設定する（Ｓ１２）。また、Ｓ１１の処理において、処理番号が最大である場合（Ｓ１１において、ＹＥＳ）、次に、図３に示す終了演算・管理処理が、初回の場合、又は、実績終了時刻が処理周期よりも大きい場合（「実績終了時刻＞処理周期」の場合）を満たすか否かを判断する（Ｓ１３）。
【００５２】
ここで、終了演算・管理処理が初回の場合、又は、「実績終了時刻＞処理周期」の場合を満たす場合（Ｓ１３において、ＹＥＳ）、終了時刻を「終了時刻＝処理周期−処理時間−余裕時間」として算出する（Ｓ１４）。また、Ｓ１３の処理において、終了演算・管理処理が初回の場合、又は、「実績終了時刻＞処理周期」の場合を満たさない場合（Ｓ１３において、ＮＯ）、終了時刻を「終了時刻＝（処理周期−処理時間）−（終了時刻−実績終了時刻）−余裕時間」として算出する（Ｓ１５）。また、Ｓ１４又はＳ１５の処理終了後、図２（ｂ）の終了時刻設定テーブルに算出された終了時刻を設定する（Ｓ１６）。
【００５３】
＜終了チェック関数の具体例について＞
次に、第１の実施形態における終了チェック関数の具体例について、フローチャートを用いて説明する。図５は、第１の実施形態における終了チェック関数の処理の一例を示すフローチャートである。
【００５４】
なお、図５に示す終了チェック処理部１６の終了チェック関数における処理は、例えば、上述した繰り返し型タスク１５から呼ばれるものである。また、図５の例における指示入力時のパラメータとしては、例えば処理番号を用いることとするが、本発明においてはこれに限定されるものではない。
【００５５】
繰り返し型タスクから呼ばれる終了チェック関数は、その呼ばれた指示入力（ＥＮＴＲＹ）に対して以下の処理行う。まず、計算時間管理テーブル１２からデータを読み込み（Ｓ２１）、次に、クロック部１１のレジスタから時刻を読み込む（Ｓ２２）。その後、終了時刻超過を判定する。具体的には、Ｓ２１及びＳ２２の各処理で得られた時刻から、終了時刻を超過しているか否かを判断し（Ｓ２３）、終了時刻を超過していない場合（Ｓ２３において、ＮＯ）、「継続」を復帰情報とし復帰（ＲＥＴＵＲＮ）する（Ｓ２４）。また、終了時刻を超過した場合（Ｓ２３において、ＹＥＳ）、計算時間管理テーブル１２に実績終了時刻を書き込み、「終了」を復帰情報とし復帰（ＲＥＴＵＲＮ）する（Ｓ２５）。
【００５６】
＜繰り返し型タスク１５について＞
次に、第１の実施形態における繰り返し型タスク１５の具体例について、フローチャートを用いて説明する。図６は、第１の実施形態における繰り返し型タスクの一例を示すフローチャートである。図６に示す繰り返し型タスク１５では、まず、処理経過情報等の繰り返しのためのデータを設定し（Ｓ３１）、予め設定された繰り返し型タスク１５の処理が実施される（Ｓ３２）。なお、Ｓ３２の処理において、予め設定された繰り返し型タスクの処理とは、例えばＲＡＭの自己診断やＲＯＭのＣＲＣ演算による自己診断の処理等が行われるが、本発明においてはこれに限定されるものではない。
【００５７】
次に、Ｓ３２の処理により得られる処理経過情報を保存する（Ｓ３３）。なお、Ｓ３３の処理としては、例えば自己診断済の最終アドレス等の処理経過情報を保存する等があるが、本発明においてはこれに限定されるものではない。
【００５８】
また、Ｓ３３の処理が終了後、上述した終了チェック関数を呼び出す（Ｓ３４）。ここで、Ｓ３４の処理における終了チェック関数の復帰情報が「継続」は否かを判断し（Ｓ３５）、継続である場合（Ｓ３５において、ＹＥＳ）、Ｓ３２に戻り以降の処理を行う。また、Ｓ３５の処理において、復帰情報が「継続」でない場合（Ｓ３５において、ＮＯ）、上述した通り復帰情報が「終了」となっているため、次に、繰り返し型タスク１５の全処理が終了したか否かを判断する（Ｓ３６）。なお、Ｓ３６の処理としては、例えばＲＡＭの自己診断やＲＯＭのＣＲＣ演算による自己診断を完了した等、繰り返し型タスクの全処理終了が終了したか否かが判断されるが、本発明においてはこれに限定されるものではない。
【００５９】
ここで、繰り返し型タスク１５の全処理が終了していない場合（Ｓ３６において、ＮＯ）、当該周期での処理を終了する。また、繰り返し型タスク１５の全処理が終了した場合（Ｓ３６において、ＹＥＳ）、処理経過情報をクリアして（Ｓ３７）、例えば１時間置き等の指定したタイミングで始めからスタートする。
【００６０】
なお、上述した図６に示す繰り返し型タスク１５において、Ｓ３２〜Ｓ３５の処理は、上述した計算時間管理テーブル１２における「処理時間」の対象範囲となる。
【００６１】
＜タイムチャート例＞
＜第１の実施例＞
ここで、上述した第１の本実施形態における各タスク処理のタイムチャート例について、図を用いて説明する。図７は、タスクの割り当て内容（第１の実施例）を示すタイムチャートである。図７に示すタイムチャートでは、各タスクの前後関係や処理周期、終了時刻、実績終了時刻の関係を示している。
【００６２】
なお、図７の縦軸には優先順位を示し、横軸は時間を示す。つまり、図７に示す第１の実施例では、タスクの優先順位を全部同一にして示しているが、優先順位のレベルが異なるタスクを複数有する場合でも以下に示す手法と同様の処理を行うことができる。ただし、安全上の面からは図７に示すようなノンプリエンプティブスケジューリング法が好ましい。
【００６３】
図７の例では、１つの処理周期内に「終了演算・管理処理」、「安全機能タスク」、「非繰り返し型タスク」、「繰り返し型タスク  処理番号１」、「繰り返し型タスク  処理番号２」を行う旨が示されている。図７に示すように、予め繰り返し型タスクの処理番号１及び処理番号２における標準終了時刻は、上述した計算時間管理テーブル１２の図２（ａ）に示す処理時間基礎データに設定されている。したがって、その基礎データを読み込み、処理番号１及び処理番号２の終了時刻が設定される。
【００６４】
ここで、実際の繰り返し型タスクは、例えばその実行されているタスクの内容や処理性能、割込処理への対応等により標準終了時刻と合わない場合がある。そのため、図７の例では、実際に１回目の処理周期で所定のタスク処理が行われた場合、処理番号１の処理は標準終了時刻と同時刻に終了したとしても、処理番号２の処理は終了時刻を超えてしまう場合がある。例えば、処理番号２の標準終了時刻が８ｍｓであった場合に、その実績の終了時刻が８．５ｍｓであったとする。このような場合には、上述した図２（ｃ）に示す時刻補正テーブルにその処理番号に対する実績終了時刻がセットされる。
【００６５】
そして、図７に示す処理周期（２回目）に対する終了演算・管理処理により、上述した処理周期（１回目）により時刻補正された実績終了時刻を基準にしてタスクに対するＣＰＵ資源の割り当てを行うことで、所定の処理周期内でＣＰＵの使用効率を向上させた処理を行うことができる。したがって、図７に示すように、１処理周期内における余裕時間も考慮して適切なタスクスケジューリングがなされている。余裕時間は、図７に示すように各処理周期内の最後に設けてもよく、また最初に設けてもよい。
【００６６】
また、本実施形態においては、上述したような手法を、処理周期の３回目や４回目以降にも適用し、現在の処理周期における実績終了時刻を測定し、次周期の終了時刻演算に反映させることで、一定周期内で最大のＣＰＵの処理能力を使用するタスクのＣＰＵ時間の割り当てを、動的に周期内で行うことができる。したがって、安全且つＣＰＵの使用効率を向上させたタスクスケジューリングを実現することができる。
【００６７】
＜第２の実施例＞
次に、タイムチャートの第２の実施例について説明する。図８は、タスクの割り当て内容（第２の実施例）を示すタイムチャートである。図８に示すタイムチャートでは、図７と同様に、タスクの前後関係や処理周期、終了時刻、実績終了時刻の関係を示しているため、ここでの具体的な説明については、省略する。
【００６８】
図８に示す第２の実施例では、１回目の処理周期において、繰り返し型タスクの処理番号２の処理が終了したとする。この場合、処理番号２は終了しているので、２回目の処理周期については、処理番号１にＣＰＵ資源が多く割り当てることができる。つまり、図８に示す２回目の処理周期については、上述した計算時間管理テーブル１２の図２（ａ）に示す処理時間基礎データから得られる処理番号１及び処理番号２の時間配分比率に関係なく、割り当てが行われる。したがって、２回目の処理周期においては、「終了演算・管理処理」、「安全機能タスク」、「非繰り返し型タスク」の時間の割り当てが終了した後の残りの時間に、まだ処理が終了していない「繰り返し型タスク  処理番号１」の処理のみを割り当てる。
【００６９】
上述したように、本実施形態によれば、タスク終了時刻の演算誤差を校正するため、実績終了時刻を測定し、次周期の終了時刻演算に反映させることで、一定周期内で最大のＣＰＵの処理能力を使用するタスクのＣＰＵ時間の割り当てを動的に周期内で行うことができる。
【００７０】
＜第２の実施形態＞
次に、第２の実施形態について説明する。第２の実施形態では、図２（ａ）の処理時間基礎データに含まれる各タスクの処理番号に予め設定されている時間配分比率を用いて繰り返し型タスクの時間配分を行うものである。
【００７１】
なお、時間配分比率による繰り返し型タスクの時間配分を行う場合にも上述した図１に示す第１の実施形態のブロック構成と同様の構成を用いることができるため、ここでの具体的な説明は省略する。
【００７２】
第２の実施形態において、複数の繰り返し型タスク１５の処理を一定周期内に時間割り付けする場合には、予め繰り返し型タスク毎に図２（ａ）に示すような時間配分比率を割り当てておくことで、繰り返し型タスクの処理完了時刻を調整することができる。具体的には、各繰り返し型タスク１５の全体処理時間を予め設定しておき、それから各周期での実行時間を減算し、以下に示す式（１）に示すように、
残処理時間ｉ＝全体処理時間ｉ−Σ各周期での実行時間ｎｉ  ・・・（１）
の演算から残処理時間を各繰り返し型タスク間で均しくすることにより、各繰り返し型タスクの終了する周期を同一にするすることが可能である。なお、上述した式（１）において、ｉは繰り返し型タスクの処理番号を示し、ｎは周期の通し番号を示す。つまり、以下に示す式（２）とすることにより終了する周期を同一にすることができる。
残処理時間ｉ＝残処理時間ｊ  ・・・（２）
なお、上述した式（２）において、ｉ，ｊは繰り返し型タスクの処理番号を示す。
【００７３】
更に、各繰り返し型タスクの全体処理時間を同一周期にすることにより、次の繰り返し型タスクの処理開始周期を制御することができる。したがって、時間配分比率を、１つの処理周期内で処理される複数の繰り返し型タスクの終了が同一になるように設定することができる。なお、時間配分比率は、繰り返し型タスク毎の標準終了時間等に基づいてい予め固定値に設定されていてもよく、また処理周期毎に変更してもよい。
【００７４】
なお、第２の実施形態では、上述した第１の実施形態と比較すると、終了演算・管理処理のフローチャートや終了チェック関数における処理のフローチャートが異なり、その他が略同一である。したがって、以下では、その異なる部分について具体的に説明する。
【００７５】
＜終了演算・管理処理について＞
まず、第２の実施形態における終了演算・管理処理部１３の終了演算・管理処理について、フローチャートを用いて説明する。図９は、第２の実施形態における終了演算・管理処理の一例を示すフローチャートである。図９に示す時間配分比率による繰り返し型タスクの時間配分を行う場合の終了演算・管理処理では、まずＣＰＵクロックであるクロック部１１の時刻カウンタを設定し、それを次回に定周期で起動するトリガーとする（Ｓ４１）。また、上述した計算時間管理テーブル１２の終了時刻テーブルを初期化して（Ｓ４２）、処理が終了する。
【００７６】
＜終了チェック関数の具体例について＞
次に、第２の実施形態における終了チェック関数の具体例について、フローチャートを用いて説明する。図１０は、第２の実施形態における終了チェック関数の処理の一例を示すフローチャートである。
【００７７】
なお、図１０に示す終了チェック処理部１６の終了チェック関数における処理は、例えば、上述した繰り返し型タスク１５から呼ばれるものである。また、図１０の例における指示入力時のパラメータとしては、例えば処理番号を用いることとするが、本発明においてはこれに限定されるものではない。
【００７８】
図１０に示すように、第２の実施形態において繰り返し型タスク１５から呼ばれる終了チェック関数は、その呼ばれた指示入力（ＥＮＴＲＹ）に対して以下の処理行う。まず、計算時間管理テーブル１２からデータを読み込み（Ｓ５１）、次に、クロック部１１のレジスタから時刻を読み込む（Ｓ５２）。その後、周期の初回か否かを判断する（Ｓ５３）。
【００７９】
ここで、Ｓ５３の処理としては、例えば計算時間管理テーブル１２の終了時刻テーブルが初期化されているか否かで判断し、初期化されている場合には周期の初回であると判断する。なお、Ｓ５３の処理においては上述した内容に限定されるものではない。
【００８０】
Ｓ５３の処理において、周期の初回である場合（Ｓ５３において、ＹＥＳ）、上述した計算時間管理テーブル１２の図２（ｂ）に示す終了時刻設定テーブルに終了時刻を設定する（Ｓ５４）。なお、Ｓ５４の処理の具体例については、後述する。また、Ｓ５４の処理後、計算時間管理テーブル１２の図２（ｃ）に示す時刻補正テーブルを初期化する（Ｓ５５）。
【００８１】
また、Ｓ５３の処理において、周期の初回でない場合（Ｓ５３において、ＮＯ）、その後、終了時刻超過を判定する。具体的には、Ｓ５１及びＳ５２の各処理で得られた時刻から、終了時刻を超過しているか否かを判断し（Ｓ５６）、終了時刻を超過していない場合（Ｓ５６において、ＮＯ）、「継続」を復帰情報とし復帰（ＲＥＴＵＲＮ）する（Ｓ５７）。また、終了時刻を超過した場合（Ｓ５６において、ＹＥＳ）、計算時間管理テーブル１２に実績終了時刻を書き込み、「終了」を復帰情報とし復帰（ＲＥＴＵＲＮ）する（Ｓ５８）。
【００８２】
＜第２の実施形態における終了時刻設定処理＞
次に、上述したＳ５４の処理における終了時刻設定処理の具体例について、フローチャートを用いて説明する。図１１は、第２の実施形態における終了時刻設定処理の一例を説明するためのフローチャートである。図１１に示す例では、まず、上述した計算時間管理テーブル１２の図２（ｂ）に示す終了時刻設定テーブルに終了時刻を設定する場合には、まず、上述した図２（ａ）に示す計算時間基礎データの時間配分比率にしたがい、「処理周期−余裕時間−現在時刻」を配分する（Ｓ６１）。なお、図２（ａ）の例では、処理番号１の「時間配分比率」は４０％であり、処理番号２の「時間配分比率」は６０％である。したがって、上記の比率にしたがって、「処理周期−余裕時間−現在時刻」により得られた時間を処理するタスク毎に分配する。また、「配分した時間−処理時間」を終了時刻に設定する（Ｓ６２）。
【００８３】
ここで、処理番号が最大の場合で、「実績終了時刻＞処理周期」の場合を満たすか否かを判断し（Ｓ６３）、処理番号が最大の場合で、「実績終了時刻＞処理周期」の場合を満たす場合（Ｓ６３において、ＹＥＳ）、終了時刻を「終了時刻＝配分した時間−余裕時間」として算出する（Ｓ６４）。また、処理番号が最大の場合で、「実績終了時刻＞処理周期」の場合を満たさない場合（Ｓ６３において、ＮＯ）、終了時刻を「終了時刻＝配分した時間−（終了時刻−実績終了時刻）−余裕時間」として算出する（Ｓ６５）。また、Ｓ６４又はＳ６５の処理終了後、終了時刻設定テーブルに算出された終了時刻を設定する（Ｓ６６）。
【００８４】
なお、上述した各実施形態では、繰り返し型タスクを２つ用いて説明しているが、１つの処理周期内で実行されるタスク数については、本発明においてはこれに限定されるものではなく、３以上のタスクにおいても適用できる。その場合には、例えば、図２（ａ）に示す処理時間基礎データの時間配分比率は、１つの処理周期内で処理されるタスク数に応じて比率を逐次変更することができる。
【００８５】
このように、第２の実施形態により、複数のタスクを予め設定したＣＰＵ時間配分比率にしたがい、一定周期内で割り当てることで、例えば、処理番号が異なる複数のタスクを同一又は近似するタイミングで終了させるといった配分も行うことができ安全性や機能性に優れたスケジュール方式を提供することができる。
【００８６】
なお、上述した第１の実施形態及び第２の実施形態を組み合わせても本発明における効果を得ることができる。
【００８７】
上述したように、本発明によれば、タスクスケジュールに関して、より安全な処理及びＣＰＵ使用効率の向上を実現させることができる。また、本発明によれば、一連のタスクを予め決めた一定の周期、一定の順序で動作させる方式を用いてＣＰＵ資源を最大限に活用することができる。
【００８８】
更に、本発明を適用することで、終了チェック関数を呼び出す処理部分等の少ない改造でプリエンプティブスケジューリングをタスクの切り替えが不要なシングルスレッド方式のノンプリエンプティブスケジューリングに変更することができる。
【００８９】
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
【符号の説明】
【００９０】
１０  ＣＰＵ（タスクスケジューリング装置）
１１  クロック部
１２  計算時間管理テーブル
１３  終了演算・管理処理部
１４  安全機能タスク
１５  繰り返し型タスク
１６  終了チェック処理部
【図１】
0005458987.tif 000002
【図２】
0005458987.tif 000003
【図３】
0005458987.tif 000004
【図４】
0005458987.tif 000005
【図５】
0005458987.tif 000006
【図６】
0005458987.tif 000007
【図７】
0005458987.tif 000008
【図８】
0005458987.tif 000009
【図９】
0005458987.tif 000010
【図１０】
0005458987.tif 000011
【図１１】
0005458987.tif 000012