(57)【要約】【課題】  マルチタスクシステムにおける的確なタスクの暴走検知を可能とする。【解決手段】  タスクの非実行中は休止状態であり、休止状態で起動されることによりタスクを実行すると共に、タスクの実行中は待機状態となる監視タスクを、プライオリティＰiごとに設け、検知タスクは、タスクの実行時間に基づいて設定しているプライオリティＰiごとのタスクの実行タイミングに合わせて監視タスクＷiに起動信号を出力し、監視タスクが起動したか否かを確認する（ステップ１００〜１１０）。ここで、タスクが暴走等のために無限ループに入ってしまうことにより、該当するタスクに対する監視タスクが待機状態となり、この監視タスクを起動しようとしたとき起動エラーが発生すると（ステップ１０６で肯定判定）、システムが再起動されるようにする（ステップ１１２）。【選択図】        図３
2006011686.tif 000002
【特許請求の範囲】
【請求項１】
優先順位が設定されている複数のタスクのそれぞれを、並行して実行するマルチタスクシステムにおいて、タスクの動作異常を検知するマルチタスクシステムの異常検知方法であって、
前記優先順位に設定されている前記タスクの動作状態を監視する監視タスクを優先順位ごとに設けると共に、前記監視タスクの動作状態を監視する検知タスクを設け、
前記検知タスクが前記監視タスクの動作状態から前記タスクの異常を検知する、
ことを特徴とするマルチタスクシステムの異常検知方法。
【請求項２】
前記優先順位ごとに設けている前記監視タスクが、前記タスクの非実行状態で起動可能となり、起動されることにより前記監視タスクを実行するときに、
前記優先順位ごとの前記タスクの実行時間に基づいて、前記監視タスクのそれぞれの起動タイミングを設定し、該設定に基づいた起動タイミングで前記監視タスクの起動を指示した時に、該指示に対する非起動時に、前記タスクに異常が発生していると検知することを特徴とする請求項１に記載のマルチタスクシステムの異常検知方法。
【請求項３】
前記監視タスクが前記優先順位内の前記タスクの何れか実行中又は該優先順位内の全てのタスクの非実行中を明示するときに、
前記監視タスクが所定時間以上継続して前記タスクの実行中を明示しているときに、前記検知タスクが異常発生と判定することを特徴とする請求項１に記載のマルチタスクシステムの異常検知方法。
【請求項４】
前記タスクの実行中の明示が、前記優先順位内の前記タスクの実行時間に基づいて設定した時間を越えたときに、前記検知タスクが異常発生と判定することを特徴とする請求項３に記載のマルチタスクシステムの異常検知方法。
【請求項５】
前記検知タスクによって異常が検知された前記優先順位の前記タスクを強制終了することを特徴とする請求項１から請求項４の何れか１項に記載のマルチタスクシステムの異常検知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクシステムにおいてプログラムの暴走による異常を検知するマルチタスクシステムの異常検知方法に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、中央処理装置（ＣＰＵ）の異常による誤動作を防止するフェイルセーフ手段としては、例えばウォッチドッグタイマを用いた監視などがある。
【０００３】
中央処理装置では、通常、一定のウォッチドッグパルスを出力しており、ウォッチドッグタイマは、このウォッチドッグパルスを常時監視し、このウォッチドッグパルスが出力されない時間が一定時間を越えたときに、中央処理装置に異常が生じたと判断し、リセットパルスを出力することにより、中央処理装置をリセットさせる。
【０００４】
このようなウォッチドッグタイマは、簡単な時定数回路などで構成することができ、比較的簡単に中央処理装置の異常を検出することができる。
【０００５】
ところで、近年のコンピュータシステムでは、複数のタスクを時分割で実行して、見掛け上、複数のタスクが同時に実行されているようにするマルチタスクシステムが用いられている。このようなマルチタスクシステムには、各タスクの動作が所定の時間間隔で周期的に実行するか、各タスクの間の優先度を考慮して、非周期的に実行する方法がある。
【０００６】
マルチタスクシステムにおいても、プログラムの防止を検知する必要があるが、前記したウォッチドックタイマを用いた異常検知方法は、シングルタスクシステムや無限ループシステムにおいては有効であるが、マルチタスクシステムに対しては、優先順位の低いタスクが無限ループに入ってしまうと暴走を検知できなくなってしまう。
【０００７】
図１０（Ａ）及び図１０（Ｂ）には、複数のタスクとして、タスクＴS1、ＴS2、ＴS3、ＴS4が設けられ、これらのタスクＴS1〜ＴS4とウォッチドッグタイマ（ＷＤＴ）の間で優先順位が設定されているマルチタスクシステムにおけるタイミングチャートの一例を示している。なお、このマルチタスクシステムでは、ＷＤＴが１位、タスクＴS1、ＴS2が２位、タスクＴS3、ＴS4が３位として優先順位を設定している。
【０００８】
図１０（Ａ）に示すように、タスクＴS1〜ＴS4が所定のタイミング、優先順位に沿って実行されることにより、ＷＤＴがリフレッシュされる。
【０００９】
ここで、図１０（Ｂ）に示すように、例えば優先順位の高いタスクＴS1が暴走するなどして無限ループに入ってしまうと、ＷＤＴがリフレッシュするごとに、無限ループに入っているタスクＴS1が実行されてしまい、このタスクＴS1と優先順位が同じタスクＴS2や、優先順位が低いタスクＴS3、ＴS4が実行されなくなってしまう。
【００１０】
ここから、タスクの周期的動作及び非周期的動作にかかわらず、各タスクに実行許容時間を持たせ、動作開始時に暴走監視システムに時間を設定し、動作終了時に解除を行うことにより、暴走による異常を検知する方法が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開２０００−１８１７５５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、上記提案では、全てのタスクに対して、実行許容時間の設定処理及び解除処理が必要となるため、中央処理装置の負荷の増大、開発工数への影響、品質低下などの懸念が生じる。また、タスク内のロジック修正時には、タスクの実行許容時間の見直しが必要となり、そのための開発工数も増加する。さらに、タスクの実行許容時間の設定前や、設定時間の解除処理後の暴走は検知できないという問題がある。
【００１２】
本発明は上記事実に鑑みてなされたものであり、中央処理装置（ＣＰＵ）への負荷増大、開発工数の増加を抑え、タスクの暴走を確実に防止することができるマルチタスクシステムの異常検知方法を提案することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために本発明は、優先順位が設定されている複数のタスクのそれぞれを、並行して実行するマルチタスクシステムにおいて、タスクの動作異常を検知するマルチタスクシステムの異常検知方法であって、前記優先順位に設定されている前記タスクの動作状態を監視する監視タスクを優先順位ごとに設けると共に、前記監視タスクの動作状態を監視する検知タスクを設け、前記検知タスクが前記監視タスクの動作状態から前記タスクの異常を検知する、ことを特徴とする。
【００１４】
この発明によれば、優先順位ごとに監視タスクを設け、監視タスクの動作状態から、検知タスクが、何れかのタスクに動作異常が発生しているか否かを判定することにより、タスクの動作異常を検知する。
【００１５】
これにより、優先順位の高いタスクに動作異常が発生したときにも、タスクの動作異常を的確に検知することができる。
【００１６】
また、本発明は、前記優先順位ごとに設けている前記監視タスクが、前記タスクの非実行状態で起動可能となり、起動されることにより前記監視タスクを実行するときに、前記優先順位ごとの前記タスクの実行時間に基づいて、前記監視タスクのそれぞれの起動タイミングを設定し、該設定に基づいた起動タイミングで前記監視タスクの起動を指示した時に、該指示に対する非起動時に、前記タスクに異常が発生していると検知することを特徴とする。
【００１７】
この発明によれば、検知タスクによって監視タスクを起動することによりタスクを実行するときに、タスクが実行されているために監視タスクが起動しなければ、タスクに異常が発生していると判定する。
【００１８】
このとき、監視タスクの起動タイミングを、各優先順位ごとのタスクの実行時間に基づいて設定することにより、タスクごとの実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
【００１９】
また、本発明は、前記監視タスクが前記優先順位内の前記タスクの何れか実行中又は該優先順位内の全てのタスクの非実行中を明示するときに、前記監視タスクが所定時間以上継続して前記タスクの実行中を明示しているときに、前記検知タスクが異常発生と判定することを特徴とする。
【００２０】
この発明によれば、例えば各優先順位内のタスクの実行中、非実行中を明示するイベントフラグ等を用い、このイベントフラグの状態から、タスクが所定時間以上継続して実行されていることを明示している監視タスクがあれば、該監視タスクに対応する優先順位のタスクに異常が発生していることを検知する。
【００２１】
このような本発明においては、前記タスクの実行中の明示が、前記優先順位内の前記タスクの実行時間に基づいて設定した時間を越えたときに、前記検知タスクが異常発生と判定するものであればよく、これにより、各優先順位内のタスクに設定されている実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
【００２２】
このような本発明においては、前記検知タスクによって異常が検知された前記優先順位の前記タスクを強制終了することができる。
【００２３】
すなわち、本発明においては、優先順位ごとにタスクの異常発生の有無を判定できるので、タスクに異常が発生した時には、該当する優先順位のタスクのみを強制終了させることにより、異常を解消することができ、正常に動作可能なタスクを強制的に終了させる必要が無くなる。
【発明の効果】
【００２４】
以上説明したように本発明によれば、優先順位ごとに監視タスクを設けて、それぞれの監視タスクの動作状態から異常発生の有無を検知するために、優先順位に拘わらず、異常が発生したタスクを的確に検知することができるという優れた効果が得られる。
【００２５】
また、本発明においては、タスクごとの実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
【００２６】
さらに、開発途上において、処理変更を行い各優先順位の許容実行時間が変化したときでも、修正は検知タスクのみで、各優先順位に設けた監視タスクを修正する必要が無く、開発効率の向上と品質安定が得られる。
【発明を実施するための最良の形態】
【００２７】
以下に図面を参照しながら本発明の実施の形態を説明する。図１には、本実施の形態に適用したコンピュータ１０のハードウェア構成の概略を示している。コンピュータ１０は、ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６と共に、記憶媒体の一例としてＨＤＤ１８を備えており、これらがバス２０によって接続されている。
【００２８】
これにより、コンピュータ１０は、ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、ＨＤＤ１８の間で相互に信号ないしデータの伝送が可能な一般的構成となっている。
【００２９】
また、コンピュータ１０には、ウォッチドッグタイマ回路２２が設けられており、このウオッチドッグタイマ回路２２が、バス２０に接続している。
【００３０】
このように構成されているコンピュータ１０には、マルチタスクシステムが構築されている。図２には、コンピュータ１０に構築されているマルチタスクシステム３０の概略構成を示している。
【００３１】
マルチタスクシステム３０は、複数のタスクＴ及び、タスクＴの実行制御を行うＯＳ３２が形成されている。なお、本実施の形態では、一例としてｍ個のタスクＴ1〜Ｔmを設けている。
【００３２】
マルチタスクシステム３０には、タスク属性情報記憶部３４が設けられている。マルチタスクシステム３０では、タスクＴを実行するときの優先順位が設定されており、また、タスクＴのそれぞれには、実行時間等が設定されている。
【００３３】
タスク属性情報記憶部３４には、タスクＴごとの優先順位を示すプライオリティ情報及び実行時間などがタスク属性情報として記憶されている。なお、プライオリティＰは、例えば、ｍ個のタスクＴ1〜Ｔmの間で、優先順位の最も高いタスクＴをプライオリティＰ1とし、タスクＴに順に順位を設定したものであり、図２では、最下位をプライオリティＰnとしている。また、実行時間は、タスクごとに、例えばタスク（ソフトウェア）Ｔの設計段階などにおいて実行開始から実行終了までの時間として設定される。
【００３４】
また、マルチタスクシステム３０には、各タスクＴの動作管理に用いる動作管理テーブル３６が設けられている。この動作管理テーブル３６では、タスク属性情報記憶部３４に記憶されているタスクＴごとのタスク属性情報に基づいて、実行中のタスクＴを複数段階（本実施の形態ではｎ段階）のプライオリティＰに分けて管理している。
【００３５】
すなわち、マルチタスクシステム３０では、ｍ個のタスクＴ1〜Ｔmをｎ段階のプライオリティＰ1〜Ｐnに分けて管理している。また、マルチタスクシステム３０では、同一のプライオリティＰに複数のタスクＴが存在することができるが、動作管理テーブル３６では、同一のプライオリティＰのタスクＴは、例えば発生順序で実行されるなどして、同一の時間帯には、単一のタスクＴが実行されるようにしている。
【００３６】
これにより、マルチタスクシステム３０では、複数のタスクＴをプライオリティ情報に基づいて順次実行することにより、複数のタスクＴが、あたかも並行して実行されているようにしている。
【００３７】
なお、各タスクＴに対する実行プログラム及びタスク属性情報は、ＲＯＭ１６ないしＨＤＤ１８に格納され、動作管理テーブル３６は、例えばＲＡＭ１４にプライオリティＰごとにメモリ領域が確保されて保持される。
【００３８】
ところで、マルチタスクシステム３０には、監視タスクテーブル４０が設けられている。この監視タスクテーブル４０には、プライオリティＰごとの監視タスクＷが設けられている。
【００３９】
例えば、プライオリティＰがｎ段階（Ｐ1〜Ｐn）に設定されているときには、プライオリティＰ1に対する監視タスクＷ1から、最下位のプライオリティＰnに対する監視タスクＷnまで（監視タスクＷ1〜Ｗn）設けられる。
【００４０】
プライオリティＰごとに設けられている監視タスクＷのそれぞれは、起動信号が入力されることにより起動し、プライオリティＰ内のタスクＴの起動を制御する。また、監視タスクＷは、対応するプライオリティＰ内のタスクＴの実行中は待機状態であり、プライオリティＰ内のタスクＴが正常に終了することにより起動を終了し、次の起動信号によって起動可能となる休止状態へ移行する。
【００４１】
すなわち、監視タスクＷは、各プライオリティＰ内において、最優先で起動されるタスクとなっており、起動信号によって休止状態から待機状態に移行して起動し、タスクＴの実行中は待機状態を保持し、タスクＴが終了することにより休止状態へ移行する。また、監視タスクＷは、待機状態にあると、起動信号を受付ないようになっている。なお、この監視タスクＷのそれぞれは、マルチタスクシステム３０が起動されることにより、例えばＲＡＭ１４に常駐して実行される。
【００４２】
また、マルチタスクシステム３０には、検知タスクＴｗ及び順位監視テーブル４２が設けられている。順位監視テーブル４２には、監視タスクＷの実行順序と共に、実行開始タイミング等の監視タスク属性情報が記憶されている。
【００４３】
すなわち、プライオリティＰに対応する監視タスクＷの起動順位（監視順位）と共に、プライオリティＰに設定されているタスクＴのタスク属性情報から得られる実行時間等に基づいた監視タイミング（監視間隔）が記憶される。なお、この順位監視テーブル４２は、ＲＡＭ１４上に所定のメモリ領域が確保されて形成されて保持される。
【００４４】
検知タスクＴｗは、例えばＲＡＭ１４に常駐されて実行され、順位監視テーブル４２に記憶されている監視タスクＷごとの監視タスク属性情報に基づいて、監視タスクＷのそれぞれを順にチェックする。
【００４５】
このとき、例えば、検知タスクＴｗは、監視タスクＷに起動信号を出力する。監視タスクＷでは、この起動信号がトリガとなって起動される。すなわち、検知タスクＴｗは、監視タスク属性情報に基づいて、プライオリティＰの順序で監視タスクＷを順に起動する。
【００４６】
検知タスクＴｗは、監視タスクＷに起動信号を出力したときに、監視タスクＷが起動したか否かを確認し、これにより、該当するプライオリティＰのタスクＴに異常が発生していないかを検知する。すなわち、監視タスクＷは、休止状態で起動信号を受信することにより起動するが、待機状態で起動信号を受信しても、起動しないようになっている。また、監視タスクＷの待機状態では、対応するプライオリティＰ内のタスクＴが実行中であり、ここから、検知タスクＴｗは、起動信号の出力に先立って実行中のタスクＴがあれば、該当するプライオリティＰ内の何れかのタスクＴに暴走等の異常が発生していると判定する。
【００４７】
一方、ウォッチドッグタイマ回路（ＷＤＴ回路２２）は、所定の信号（以下、生存信号とする）が入力されることによりリフレッシュされるが、リフレッシュしてから所定時間経過するまでに生存信号が入力されないとき（所定時間異常生存信号が入力されないとき）には、コンピュータ１０のＣＰＵ１２（ＯＳ３２）へリセット信号（再起動信号）を出力する。
【００４８】
マルチタスクシステム３０では、検知タスクＴｗが、所定のタイミングでＷＤＴ回路２２へ生存信号を出力する。また、検知タスクＴｗは、何れかの監視タスクＷに対応するプライオリティＰ内のタスクＴの異常を検知すると、ＷＤＴ回路２２への生存信号の出力を停止する。すなわち、検知タスクＴｗは、タスクＴの何れかに暴走などの動作異常が発生したと判定すると、ＷＤＴ回路２２への生存信号の出力を停止する。
【００４９】
ＯＳ３２は、再起動信号が入力されることにより、実行中のタスクＴを強制終了して再起動を行う。これにより、ＷＤＴ回路２２では、何れかのタスクＴに暴走等の異常を停止する一般的構成となっている。
【００５０】
このように構成されているマルチタスクシステム３０が形成されているコンピュータ１０では、電源が投入されることによりブートシーケンスが実行されて各デバイスのセットアップが行われて、ＯＳ３２（マルチタスクシステム３０）が立ち上がる。
【００５１】
この後に、先ず、検知タスクＴｗ用のプログラムが、例えばＨＤＤ１８から読み出されてＲＡＭ１４に格納される。これと共に、動作管理テーブル３６、監視タスクテーブル４０及び順位監視テーブル４２用のメモリ領域がＲＡＭ１４上に確保されて、動作管理テーブル３６、監視タスクテーブル４０及び順位監視テーブル４２が形成され、各プライオリティＰのそれぞれに対する監視タスクＴ（監視タスクＴ1〜Ｔn）用のプログラムが例えばＨＤＤ１８から読み出されて監視タスクテーブル４２に格納される。
【００５２】
なお、監視タスクＷは、起動信号によって起動可能な休止状態で監視タスクテーブル４０に格納される。監視タスクテーブル４０は、一つの監視タスクＷを、プライオリティＰの数に応じて確保している領域のそれぞれに格納することにより、監視タスクＷ1〜Ｗnが形成されるものであっても良い。
【００５３】
動作管理テーブル３６には、タスク属性情報記憶部３４から読み出されたタスクＴごとのタスク属性情報が、プライオリティＰごとに格納される。これにより、プライオリティＰごとのタスクＴと共にタスクＴの実行時間が得られる。
【００５４】
順位監視テーブル４２には、監視タスク属性情報としてプライオリティＰの順位に基づいた監視タスクＷの起動順位（チェック順位）と共に、プライオリティＰごとのタスクＴの実行時間に基づいた監視タスクＷの起動タイミング（チェックタイミング）が格納される。
【００５５】
これにより、マルチタスクシステム３０では、タスクＴの実行が可能となる。
【００５６】
ここで、図３及び図４を参照しながら、マルチタスクシステム３０に設けている検知タスクＴｗと監視タスクＷ（Ｗ1〜Ｗn）での処理の一例を説明する。なお、ここでの説明は、プライオリティＰごとのタスクＴの実行時間に基づいた周期で、タスクＴの異常発生を監視する。
【００５７】
図３には、タスクＴの暴走等の異常を検知する検知タスクＴｗの処理の一例を示している。なお、検知タスクＴｗは、タスクＴ等が正常に動作していると判定される定常時は、予め設定されたタイミングでＷＤＴ回路２２へ生存信号を出力しており、これにより、ＷＤＴ回路２２がリフレッシュされ、ＯＳ３２の再起動信号の出力停止状態が維持されるようになっている。
【００５８】
検知タスクＴｗは、最初のステップ１００で、プライオリティＰiに対するインデックスｉの初期値設定を行う。すなわち、プライオリティＰiが１（プライオリティＰ1）〜ｎ（プライオリティＰn）までのｎ段階に設定されているときには、インデックスｉに初期値として「１」をセットする（ｉ＝１）。
【００５９】
次のステップ１０２では、プライオリティＰiのタスクＴの実行タイミングとなったか否かを確認する。すなわち、プライオリティＰi内のタスクＴに暴走等の異常が発生しているか否かの検知タイミングとなったか否かを確認している。
【００６０】
ここでプライオリティＰiのタスクＴの実行タイミング（タスクＴの暴走検知タイミング）であれば、ステップ１０２で肯定判定してステップ１０４へ移行し、プライオリティＰiに対応する監視タスクＷiを起動する（sta_tsk）。
【００６１】
この後、ステップ１０６では、該当する監視タスクＷiが正常に起動したか否かを確認し、正常に起動しているときには、ステップ１０６で肯定判定してステップ１０８へ移行する。
【００６２】
このステップ１０８では、プライオリティＰiのインデックスｉをインクリメント（ｉ＝ｉ＋１）し、次のステップ１１０では、インデックスｉがプライオリティＰの段階数であるｎを越えたか否かを確認する。
【００６３】
これにより、インデックスｉがｎを越えるまでは、順にステップ１０２〜ステップ１０６を実行し、監視タスクＷのそれぞれが正常に起動するか否かを確認している。
【００６４】
一方、図４には、監視タスクＷ（監視タスクＷ1〜Ｗn）での処理の概略を示している。このフローチャートは、監視タスクＷが休止状態であるときに開始され、ステップ１２０では、検知タスクＴｗから起動信号が入力されたか否かを確認し、起動信号が入力されることによりステップ１２０で肯定判定する。
【００６５】
これにより、監視タスクＷが起動する。このとき、監視タスクＷは、休止状態から待機状態に移行したのち起動（run）する。また、監視タスクWは、例えば起動開始時に検知タスクＴｗへ起動信号に対する応答信号を出力する。なお、起動開始時に監視タスクWが検知タスクＴｗに応答信号を出力するのではなく、監視タスクＷが正常に起動を開始したか否かを、検知タスクＴｗが確認するものであっても良い。
【００６６】
これにより、図３のフローチャートでは、ステップ１０６で、監視タスクＷに起動エラーが発生していないことを確認する（ステップ１０６で肯定判定）。
【００６７】
また、監視タスクＷは、起動することにより、対応するプライオリティＰに設定されているタスクＴを実行する。このとき、同じプライオリティＰに複数のタスクＴが設定されているときには、設定されている複数のタスクＴを順に実行する。
【００６８】
また、図４に示すように、監視タスクＷは、ステップ１２２でタスクＴが終了したか否かを確認している。タスクＴは、予め設定されている実行時間が経過することにより終了し、タスクＴが終了することにより、ステップ１２２で肯定判定され、監視タスクＷが終了（exit_tsk）して、休止状態に移行する。
【００６９】
このようにして検知タスクＴｗと監視タスクＷが作動することにより、設定された優先順位にしたがってタスクＴが実行される。図５（Ａ）には、検知タスクＴｗ、監視タスクＷ及びタスクＴの実行タイミングの概略を示している。
【００７０】
図５（Ａ）では、優先順位であるプライオリティＰが１位（プライオリティＰ1）のタスクＴ1、Ｔ2と、２位（プライオリティＰ2）のタスクＴ3、Ｔ4を例示している。このとき、プライオリティＰ1に対応する監視タスクＷ1がタスクＴ1、Ｔ2と同じ優先順位となり、プライオリティＰ2に対応する監視タスクＷ2が、タスクＴ3、Ｔ4と同じ優先順位となる。
【００７１】
また、検知タスクＴｗは、監視タスクＷ1よりも優先順位が高く、ここから、検知タスクＴｗの優先順位を０位としている。なお、検知タスクＴｗの優先順位は、１位としても良く、このときには、監視タスクＷ及びタスクＴの優先順位２位から（ｎ＋１）まで順に繰り下げれば良い。
【００７２】
さらに、タスクＴ1〜Ｔ4に対する実線は、プログラムの実行中を示し、監視タスクＷ（Ｗ1、Ｗ2）に対する実線は、起動処理を示し、検知タスクＴｗに対する実線は、一例としてＷＤＴ回路２２へのリフレッシュ信号の出力を示している。
【００７３】
図５（Ａ）では、一例として検知タスクＴｗがＷＤＴ回路２２へリフレッシュ信号を出力した後に、設定されている優先順位に基づいてタスクＴ1〜Ｔ4を実行するようにしている。
【００７４】
このとき、プライオリティＰ1とプライオリティＰ2の実行間隔である監視タスクＷ1と監視タスクＷ2の起動間隔ｔ(1-2)は、タスクＴ1の実行時間ｔ1とタスクＴ2の実行時間ｔ2によって定まり、監視タスクＷ2と監視タスクＷ1の起動間隔ｔ(2-1)は、タスクＴ3の実行時間ｔ3とタスクＴ4の実行時間ｔ4によって定まる。
【００７５】
したがって、タスクＴのタスク属性情報に基づいて、適切なタイミングで監視タスクＷ、すなわち、プライオリティＰごとの各タスクＴを起動することができる。
【００７６】
一方、何れかのタスクＴが暴走して無限ループに入ってしまうなどの異常が生じることがある。図５（Ｂ）には、一例として、プライオリティＰ1のタスクＴ1が暴走した例を示しており、これにより、プライオリティＰ1の監視用に設けている監視タスクＷ1は、タスクＴ1が終了しないために待機状態を維持する。
【００７７】
すなわち、図４のフローチャートにおいて、ステップ１２４で肯定判定されずに否定判定され続け、検知タスクＴｗから起動信号が入力されたときに起動エラーが生じることになる。
【００７８】
これにより、図３のフローチャートでは、この監視タスクＷに対する次の起動タイミング（チェックタイミング）に達したときに、ステップ１０６で肯定判定され、プライオリティＰi内のタスクＴに暴走が発生したと判定してステップ１１２へ移行する。
【００７９】
このステップ１１２では、ＷＤＴ回路２２への生存信号を停止する。これにより、ＷＤＴ回路２２がＯＳ３２（ＣＰＵ１２）へリセット信号を出力する。
【００８０】
ＯＳ３２は、リセット信号が入力されることにより、再起動するために、暴走しているタスクＴの暴走が停止される。
【００８１】
したがって、プライオリティＰごとの監視タスクＷと、この監視タスクＷを監視する検知タスクＴｗを設けているマルチタスクシステム３０では、タスクＴの暴走を的確に検知して、的確にシステムリセットを行うことができる。
【００８２】
一方、以上の説明では、プライオリティＰごとのタスクＴのタスク属性情報に含まれる実行時間に基づいた優先順位別の監視タスク起動方式で異常検知（暴走検知）を行う例を説明したが、これに限らず、イベントフラグを用いて周期的に監視タスクＴの動作状態を検知する方式（以下、同期通信方式とする）を適用することも可能である。
【００８３】
ここで、図６乃至図８を用いて、同期通信方式を用いたタスクＴの異常検知を説明する。なお、同期通信方式を用いるときの異常検知は、前記した所定周期で監視タスクＷを起動しながら起動確認を行うときと同じである。
【００８４】
同期通信方式では、優先順位に基づいてプライオリティＰに対応する監視タスクＷが起動され、タスクＴが実行される。また、監視タスクＷ（Ｗ1〜Ｗn）のそれぞれに対して、イベントフラグＦ（Ｆ1〜Ｆn）が設定されており、監視タスクＷは、イベントフラグＦがセット（Ｆ＝１）されることにより起動して、イベントフラグＦをクリア（Ｆ＝０）すると共に、各タスクＴを実行する。。
【００８５】
検知タスクＴｗは、監視タスクＷのそれぞれに対する監視カウンタを備え、予め設定している一定の周期で、監視タスクＷのイベントフラグＦを確認し、イベントフラグＦがクリアされておらずセットされた状態であれば、該当監視タスクＷ（Ｗ1〜Ｗn）に対する監視カウンタのカウント値Ｃ（Ｃ1〜Ｃn）をカウントアップする。
【００８６】
また、検知タスクＴｗは、イベントフラグＦがクリアされていると、該当する監視タスクＷに対する監視カウンタのカウント値Ｃをクリアするが、カウント値Ｃが、監視タスクＷごとに設定している規定値Ｓ（Ｓ1〜Ｓn）に達すると、監視タスクＷに対応するプライオリティＰ内のタスクＴに暴走等の異常が発生していると判定する。
【００８７】
このときの、規定値Ｓは、プライオリティＰ内のタスクＴの実行時間と、検知タスクＴｗの検知周期に基づいて設定されており、実行時間が長いタスクＴを含むときには、規定値Ｓの値が大きく、実行時間が短いタスクＴを含むときには、規定値Ｓが小さくなっている。
【００８８】
この規定値Ｓは、タスク属性情報に基づいて設定されて、監視タスク属性情報として順位監視テーブル４２に格納されるようになっている。
【００８９】
このように構成されているときのマルチタスクシステム１０では、優先順位に基づいて監視タスクＷが順に起動されて、タスクＴが実行される。なお、優先順位に基づいた監視タスクＷの起動は、検知タスクＴｗで行うものであって良い。
【００９０】
図７には、監視タスクＷでの処理の概略を示している。なお、図６及び図７では、前記した図３及び図４での処理と同等の処理には、図３及び図４で使用したステップ番号を併記している。
【００９１】
このフローチャートでは、最初のステップ１５０でイベントフラグＦがセットされているか否かを確認し、イベントフラグＦがセットされることにより、ステップ１５０で肯定判定する。
【００９２】
すなわち、監視タスクＷが休止状態では、このイベントフラグＦがクリア（Ｆ＝０）されており、ステップ１５０、１５２では、イベントフラグＦの設定待ち（wai_flg）となっている。
【００９３】
これにより、イベントフラグＦがセットされると監視タスクＷが起動されて対応するプライオリティＰのタスクＴが実行される。このときに、ステップ１５２では、イベントフラグＦをクリア（Ｆ＝０）する（clr_flg）。なお、イベントフラグＦのクリアは、プライオリティＰのタスクＴの実行が終了することにより行われるものであっても良い。
【００９４】
監視タスクＷが起動されることにより、対応するプライオリティＰのタスクＴが実行される。
【００９５】
これにより、例えば、図８に示すように、プライオリティＰ1のタスクＴ1、Ｔ2の実行中は、監視タスクＷ1でイベントフラグＦ1がセットされ、タスクＴ1、Ｔ2が終了すると、イベントフラグＦ1がクリアされる。また、プライオリティＰ2のタスクＴ3、Ｔ4の実行中は、監視タスクＷ2のイベントフラグＦ2がセットされ、タスクＴ3、Ｔ4が終了することにより、このイベントフラグＦ2がクリアされる。なお、監視タスクＷで、タスクＴの実行に先立ってイベントフラグＦをクリアするものであれば、図８において、イベントフラグＦがクリアされた後にタスクＴが実行される。
【００９６】
すなわち、プライオリティＰの各タスクが正常に実行されているときには、イベントフラグＦがクリアされる。
【００９７】
一方、図６には、検知タスクＴｗの処理の概略を示している。このフローチャートは、予め設定された一定の時間間隔で実行される。なお。検知タスクＴｗは、起動されることにより所定の時間間隔でＷＤＴ回路２２へ生存信号を出力し、正常状態でＷＤＴ回路２２がリセット信号を出力しないようにしている。
【００９８】
このフローチャートでは、最初のステップ１３０でプライオリティＰi（ｉは１からｎ）のインデックスｉの初期値設定を行い（ｉ＝１）、次のステップ１３２では、プライオリティＰiに対するイベントフラグＦiがクリア（Ｆi＝０）されているか否かを確認する。
【００９９】
すなわち、ステップ１３２では、プライオリティＰiに対応する監視タスクＷiに対して設定されているイベントフラグＦiがクリアされているか否かを確認する。
【０１００】
ここで、イベントフラグＦiがクリアされているとき（Ｆi＝０）には、ステップ１３２で肯定判定する。これにより、ステップ１３４へ移行すると、監視タスクＷiの起動タイミングに併せて、イベントフラグＦiをセットする。
【０１０１】
この後に、ステップ１３６へ移行し、監視タスクＷiに対応する監視カウンタのカウント値Ｃiをクリアする（Ｃi＝０）。なお、マルチタスクシステム３０の起動時には、監視カウンタのカウント値Ｃ（Ｃ1〜Ｃn）がクリアされている（初期状態）。
【０１０２】
次のステップ１３８では、インデックスｉをインクリメントし、ステップ１４０では、インデックスｉがｎを越えたか否かを確認し、インデックスｉがｎを越えていないときには、ステップ１４０で否定判定してステップ１３２へ移行して、新たに設定したインデックスｉに基づいた処理を行う。
【０１０３】
このように検知タスクＴｗでは、プライオリティＰ1〜Ｐn（監視タスクＷ1〜Ｗn）に対して設定しているイベントフラグＦ（Ｆ1〜Ｆn）の状態を確認しながら、所定のタイミングで監視タスクＷiを実行する。
【０１０４】
ここで、何れかのプライオリティＰにおいてタスクＴが実行中であると、そのプライオリティＰ（監視タスクＷ）に対するイベントフラグＦがクリアされずにセットされたままとなる。
【０１０５】
これにより、ステップ１３２で否定判定されることにより、ステップ１４２へ移行する。このステップ１４２では、監視カウンタのカウント値Ｃiをインクリメント（カウントアップ）する（Ｃi＝Ｃi＋１）。
【０１０６】
次のステップ１４４では、カウントアップした監視カウンタのカウント値Ｃiが、該当するプライオリティＰi（監視タスクＷi）に対して設定している規定値Ｓiに達したか否かを確認し、カウント値Ｃiが規定値Ｓiに達していないとき（Ｃi＜Ｓi）には、ステップ１４４で否定判定してステップ１３８へ移行する。
【０１０７】
一方、図８に示すように、例えば、プライオリティＰ1のタスクＴ1が暴走するなどして無限ループに入ると、監視タスクＷ1のイベントフラグＦ1がクリアされずにセットされた状態となってしまう。
【０１０８】
この状態となると、図６のフローチャートでは、ステップ１３４で否定判定され、この監視タスクＷ1に対応する監視カウンタのカウント値Ｃ（例えばカウント値Ｃ1）が、カウントアップされ続ける。
【０１０９】
これにより、カウント値Ｃiが規定値Ｓiに達すると、タスクＴの暴走等の異常が発生したと判定されて、ステップ１４４で肯定判定してステップ１４６へ移行する。
【０１１０】
このステップ１４６では、検知タスクＴｗからＷＤＴ回路２２へ出力している生存信号を停止する。これにより、ＷＤＴ回路２２からリセット信号が出力されて、マルチタスクシステム３０が再起動されるため、タスクＴの暴走が止められる。
【０１１１】
このようにマルチタスクシステム３０では、優先順位の高いタスクＴで暴走等の異常が発生したときに、このタスクＴの異常を的確に検知して再起動をかけることができる。
【０１１２】
なお、図６では、監視タスクWのそれぞれに対して設けている監視カウンタのカウント値Ｃをカウントアップしたが、これに限らず、監視カウンタのカウント値Ｃをカウントダウン（デクリメント）しても良い。このときには、カウント値Ｃの初期値として規定値Ｓを用い、カウント値ＣがＣ≦０又はＣ＜０となったときに、タスクＴに異常が発生したと判定するようにしても良い。
【０１１３】
一方、以上説明した本実施の形態では、タスクＴの異常を検知したときに、システムを再起動するように説明したが、何れかのタスクＴに異常が発生した時に、タスクＴ1〜タスクＴmに対してリセットをかけるなどして、強制終了させるものであっても良い。
【０１１４】
また、検知タスクＴｗでは、異常が発生したプライオリティＰを特定できることから、異常が発生したプライオリティＰ内のタスクＴに対して強制終了を行うようにしてもよく、これにより、正常に動作可能なタスクＴを強制的終了させてしまう必要が無くなる。
【０１１５】
図９には、図４に示す監視タスク起動方式を用いたときを例に、異常が発生したタスクＴを強制終了させるときの処理の概略を示している。
【０１１６】
このフローチャートでは、プライオリティＰi内のタスクＴに異常が発生して、監視タスクWiの起動エラーを検出することによりステップ１０６で肯定判定されるとステップ１１４へ移行する。このステップ１１４では、監視タスクＴiで監視しているプライオリティＰi内のタスクＴを強制終了する。
【０１１７】
この後、ステップ１１０へ移行することにより、インデックスｉをインクリメントすることにより、次の監視タスクＷi（プライオリティＰi）に対する処理を継続する。
【０１１８】
これにより、異常の発生した可能性のあるタスクＴのみを強制終了するので、正常に動作可能なタスクＴを強制終了させる必要が無く、正常に動作可能なタスクＴの処理を継続して実行することができる。
【０１１９】
また、マルチタスクシステム３０の全体を再起動する必要が無いため、ＷＤＴ回路２２の省略も可能となる。
【０１２０】
なお、以上説明した本実施の形態は、本発明の一例を示すものであり、本発明の構成を限定するものではなく、本発明は、任意の構成のマルチタスクシステムに適用することができる。
【図面の簡単な説明】
【０１２１】
【図１】本実施の形態に適用したコンピュータの基本構成図である。
【図２】本実施の形態に適用したマルチタスクシステムの概略構成図である。
【図３】検知タスクによる処理の一例を示す流れ図である。
【図４】図３の検知タスクの処理に対する監視タスクの処理の概略を示す流れ図である。
【図５】（Ａ）及び（Ｂ）は、図３及び図４の処理に応じた検知タスク、監視タスク及びタスクの動作の概略を示しタイミングチャートの一例であり、（Ａ）は通常状態を示し、（Ｂ）はタスクに無限ループが発生した状態の一例を示している。
【図６】同期通信方式により暴走検知を行うときの検知タスクによる処理の一例を示す流れ図である。
【図７】図６の検知タスクの処理に対する監視タスクの処理の概略を示す流れ図である。
【図８】図６及び図７の処理に応じた検知タスク、監視タスク及びタスクの動作の概略を示しタイミングチャートの一例である。
【図９】タスクの異常検知時の処理の一例を示す流れ図である。
【図１０】（Ａ）及び（Ｂ）は従来のマルチタスクシステムの一例を示すタイミングチャートであり、（Ａ）は正常動作時を示し、（Ｂ）は優先順位の高いタスクに異常が発生したときを示している。
【符号の説明】
【０１２２】
１０    コンピュータ
１２    ＣＰＵ
２２    ＷＤＴ回路
３０    マルチタスクシステム
３２    ＯＳ
３４    タスク属性情報記憶部
３６    動作管理テーブル
４０    監視タスクテーブル
４２    順位監視テーブル
Ｃ（Ｃ1〜Ｃn）    カウント値
Ｐ（Ｐ1〜Ｐn）    プライオリティ（優先順位）
Ｔ（Ｔ1〜Ｔm）    タスク
Ｔｗ    検知タスク
Ｗ（Ｗ1〜Ｗn）    監視タスク
【図１】
2006011686.tif 000003
【図２】
2006011686.tif 000004
【図３】
2006011686.tif 000005
【図４】
2006011686.tif 000006
【図５】
2006011686.tif 000007
【図６】
2006011686.tif 000008
【図７】
2006011686.tif 000009
【図８】
2006011686.tif 000010
【図９】
2006011686.tif 000011
【図１０】
2006011686.tif 000012