制御対象の制御に関する処理を行う制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをスケジューリングして実行するスケジューリング手段と、前記制御関連タスクの実行終了又は実行未終了を示す実行終了情報が格納される記憶部と、を備え、前記スケジューリング手段は、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新するとともに、前記制御関連タスクの実行終了時に前記実行終了情報を実行終了に更新し、前記スケジューリング手段は、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新する前に前記実行終了情報が実行未終了を示している場合を検出する、制御装置。前記スケジューリング手段は、前記スケジューリング情報に従って、前記制御関連タスクをスケジューリングして実行するシステムプログラムと、前記システムプログラムを実行するプロセッサと、を含む、請求項1に記載の制御装置。前記システムプログラムは、前記制御関連タスクが呼び出したときに、当該制御関連タスクを実行終了してスリープさせるための関数を提供し、前記関数は、前記実行終了情報を前記制御関連タスクの実行終了に更新する処理を含む、請求項2に記載の制御装置。前記システムプログラムは、前記スケジューリング情報に従って、前記複数のタイムパーティションをスケジューリングするパーティションスケジューラを含み、前記パーティションスケジューラは、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新するとともに、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新する前に前記実行終了情報が実行未終了を示している場合を検出する、請求項3に記載の制御装置。前記関数は、前記実行終了情報が実行未終了を示している場合の検出状況に応じた戻り値を前記制御関連タスクに返す請求項4に記載の制御装置。前記記憶部は、初期値として正常であることを示す正常値が設定される検出結果値がさらに格納され、前記システムプログラムは、前記実行終了情報が実行未終了を示している場合を検出したときに、前記検出結果値を異常であることを示す異常値に更新し、前記関数は、前記検出結果値に対応する値を前記戻り値に設定する請求項5に記載の制御装置。前記記憶部は、カウンタ値がさらに格納され、前記システムプログラムは、前記実行終了情報が実行未終了を示している場合を検出したときに、前記カウンタ値を更新し、前記関数は、前記カウンタ値を前記戻り値に設定する請求項5に記載の制御装置。前記制御関連タスクは、前記関数の戻り値が異常値に対応する値である場合、通常の処理に代えて、異常に対応する処理を実行する請求項6に記載の制御装置。前記システムプログラムは、前記実行終了情報が実行未終了を示している場合を検出したときに、前記カウンタ値をカウントアップし、前記制御関連タスクは、前記関数の戻り値が所定の閾値以上である場合、通常の処理に代えて、異常に対応する処理を実行する請求項7に記載の制御装置。前記スケジューリング情報は、異常に対応する処理を行う異常処置タスクが実行される異常処理タイムパーティションを含む複数のタイムパーティションのスケジューリング内容をさらに示し、前記制御関連タスクにおける異常に対応する処理は、前記パーティションスケジューラに異常を通知する処理を含み、前記パーティションスケジューラは、前記制御関連タスクからの通知に応じて、前記異常処理タイムパーティションを含む複数のタイムパーティションのスケジューリング内容に従った前記異常処置タスクのスケジューリングを開始する、請求項8又は9に記載の制御装置。前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時は、他のタイムパーティションから前記制御関連タイムパーティションへの切り替え時、及び、前記制御関連タイムパーティションから他のタイムパーティションへの切り替え時のいずれかである請求項1乃至10のいずれか1項に記載の制御装置。制御対象の制御に関する処理を行う制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをプロセッサによってスケジューリングして実行する制御方法であって、前記プロセッサが、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に、前記制御関連タスクの実行終了又は実行未終了を示す実行終了情報を実行未終了に更新するステップと、前記プロセッサが、前記制御関連タスクの実行終了時に前記実行終了情報を実行終了に更新するステップと、前記プロセッサが、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を前記制御関連タスクの実行未終了に更新する前に、前記実行終了情報が実行未終了を示している場合を検出するステップと、を備えた制御方法。しかしながら、特許文献1に例示されるような安全制御装置には、以下に説明する課題があった。以下、図22及び図23を参照して、その課題について説明する。機能安全規格のIEC61508において、サービスロボット等のECUElectronicControlUnitでは、シーケンスモニタ機能によって、予定されている時間内に処理が正しく実行することができているかを監視することが必要とされている。例えば、サービスロボット等の制御では、図22に例示するように一定周期で繰り返し実行する必要のある処理が存在している。そのような処理として、サービスロボットのアクチュエータを制御する処理や、サービスロボットのセンサから情報を取得して、取得した情報を確認することでサービスロボットの状態を監視する処理等がある。ここで、図22及び図23において、Partition1及びPartition2は、タイムパーティションを示し、Taskは、Partition1で実行されるタスクを示している。タスクは、一定周期で繰り返し実行する必要のある処理を実行する。図22では、一定周期でアクティブとなるPartition1でタスクを実行することによって、一定周期でタスクが実行されるようにしている。このようにすることで、例えば、定期的に監視結果に応じた制御対象の制御を行うことができるため、より安定した制御対象の制御を行うことが可能となる。しかしながら、図22に例示する場合において、一定周期でタスクが実行されるようにするためには、一定周期毎にタスクの実行が終了している必要がある。例えば、図23に例示するように、Partition1の時間内にタスクの実行が終了していない場合、次にPartition1がアクティブとなったときに、タスクは前回のPartition1の時間の終了時に中断されたところからその実行を継続することになる。すなわち、この場合は、次にPartition1がアクティブとなったときからタスクを再実行することができず、一定周期でタスクを実行することができなくなってしまう。したがって、一定周期でタスクを実行できていることを保障するためには、タイムパーティションの時間内にタスクを実行終了することができているか否かを監視することを可能とする必要がある。本発明は、上述した知見に基づいてなされたものであって、タイムパーティションの時間内にタスクを実行終了することができているか否かを監視することが可能となる制御装置及び制御方法を提供することを目的とする。本発明の第1の態様にかかる制御装置は、制御対象の制御に関する処理を行う制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをスケジューリングして実行するスケジューリング手段と、前記制御関連タスクの実行終了又は実行未終了を示す実行終了情報が格納される記憶部と、を備え、前記システムプログラムは、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新するとともに、前記制御関連タスクの実行終了時に前記実行終了情報を実行終了に更新し、前記システムプログラムは、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を実行未終了に更新する前に前記実行終了情報が実行未終了を示している場合を検出するものである。本発明の第2の態様にかかる制御方法は、制御対象の制御に関する処理を行う制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをプロセッサによってスケジューリングして実行する制御方法であって、前記プロセッサが、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に、前記制御関連タスクの実行終了又は実行未終了を示す実行終了情報を実行未終了に更新するステップと、前記プロセッサが、前記制御関連タスクの実行終了時に前記実行終了情報を実行終了に更新するステップと、前記プロセッサが、前記制御関連タイムパーティションに関する前記タイムパーティションの切り替え時に前記実行終了情報を前記制御関連タスクの実行未終了に更新する前に、前記実行終了情報が実行未終了を示している場合を検出するステップとを備えたものである。上述した本発明の各態様によれば、タイムパーティションの時間内にタスクを実行終了することができているか否かを監視することが可能となる制御装置及び制御方法を提供することができる。以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。<発明の実施の形態1>本実施の形態にかかる安全制御装置1は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置1は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図1は、本実施の形態にかかる安全制御装置1の構成例を示すブロック図である。プロセッサ10は、プログラム命令ストリームの取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図1では、1つのプロセッサ10のみを示しているが、安全制御装置1は、複数のプロセッサ10を有するマルチプロセッサ構成であってもよい。また、プロセッサ10は、マルチコアプロセッサでもよい。プロセッサ10は、システムプログラムとしてのオペレーティングシステムOS100を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ10が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。実行用メモリ11は、プロセッサ10によるプログラム実行のために使用されるメモリである。実行用メモリ11には、不揮発性メモリ13からロードされたプログラムOS100及びアプリケーション101~103等、プロセッサ10の入出力データ等が記憶される。なお、プロセッサ10は、プログラムを不揮発性メモリ13から実行用メモリ11にロードすることなく、これらのプログラムを不揮発性メモリ13から直接実行してもよい。具体的には、実行用メモリ11は、SRAMStaticRandomAccessMemory、DRAMDynamicRandomAccessMemory等のランダムアクセス可能な揮発性メモリとすればよい。図1の実行用メモリ11は、論理的な構成単位を示している。すなわち、実行用メモリ11は、例えば、複数のSRAMデバイスの組み合わせ、複数のDRAMデバイスの組み合わせ、又はSRAMデバイスとDRAMデバイスの組み合わせでもよい。I/Oポート12は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置1がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。不揮発性メモリ13は、電力の供給を受けることなく、実行用メモリ11に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ13は、ROMReadOnlyMemory、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ13は、OS100及びアプリケーション101~103を格納する。なお、不揮発性メモリ13の少なくとも一部は安全制御装置1から取り外し可能に構成されてもよい。例えば、アプリケーション101~103が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ13の少なくとも一部は、安全制御装置1の外部に配置されてもよい。OS100は、プロセッサ10によって実行されることにより、プロセッサ10及び実行用メモリ11及び不揮発性メモリ13等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。さらに、機能安全の確保に関連する安全監視アプリケーション101及び安全制御アプリケーション103の通常制御アプリケーション102からの独立性を高めるため、OS100は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ10、実行用メモリ11、I/Oポート12を含む。このうち、時間的な保護は、プロセッサ10の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ10の実行時間をパーティショニングし、各パーティションタイムパーティションと呼ぶにタスクプロセス又はスレッドを割り当てることにより行う。OS100のスケジューリング機能パーティションスケジューラ21は、各タイムパーティション以下、TPと略称する場合がある。に割り当てられたタスクに対して、プロセッサ10の実行時間を含む資源の利用を保証する。図2は、タイムパーティショニングに関する概念図である。図2の例では、予め定められた1サイクル時間を3つのTP1、TP2及びTP3に分割する例を示している。例えば、1サイクル時間を100Tickとした場合、このうち前半の20TickがTP1、中間の30TickがTP2、後半の50TickがTP3と規定される。また、図2の例では、第1アプリケーションAPL1~第4アプリケーションAPL4が、TP1~TP3のいずれかに割り当てられている。OS100のスケジューリング機能パーティションスケジューラ21は、時間の経過に応じて、TP1~TP3のいずれをアクティブにするかを選択決定する。そして、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。一方、空間的な保護は、実行用メモリ11及びI/Oポート12を含む固定的な資源をパーティショニングし、各パーティションリソースパーティションと呼ぶにタスクを割り当てることにより行う。OS100のスケジューリング機能パーティションスケジューラ21は、予め割り当てられたリソースパーティション以下、RPと略称する場合がある。を超えてタスクが他のリソースにアクセスすることを禁止する。図3は、リソースパーティショニングに関する概念図である。図3の例では、2つのRPRP1及びRP2を示している。RP1には、実行用メモリ11及び不揮発性メモリ13の一部A領域と、I/Oポート12の一部ポートAが割り当てられている。また、RP2には、実行用メモリ11及び不揮発性メモリ13の他の一部B領域と、I/Oポート12の他の一部ポートBが割り当てられている。RP1からはRP2に割り当てられたリソースへのアクセスが禁止され、RP2からはRP1に割り当てられたリソースへのアクセスが禁止される。なお、全てのリソースがいずれかのRPに排他的に割り当てられる必要はない。つまり、複数のRPによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション102及び安全制御アプリケーション103の双方からアクセスできる必要がある。よって、通常制御アプリケーション102が属するRPと安全制御アプリケーション103が属するRPによって、アクチュエータを制御するためのI/Oポートを共有するとよい。図1に戻り説明を続ける。アプリケーション101~103は、OS100及びプロセッサ10によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション101は、通常制御アプリケーション102の実行状況の監視と、安全制御アプリケーション103の実行状況の監視と、I/Oポート12への入出力データの監視と、をプロセッサ10に実行させるための命令コードを含む。さらに、安全監視アプリケーション101は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全監視アプリケーション101は、安全関連アプリケーションである。また、通常制御アプリケーション102は、サービスロボット等の制御対象に通常の機能動作を行わせるための制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、通常制御アプリケーション102は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、通常制御アプリケーション102は、非安全関連アプリケーションである。また、安全制御アプリケーション103は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、安全制御アプリケーション103は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全制御アプリケーション103は、安全関連アプリケーションである。リセット回路14は、OS100からの信号に基づき、マイクロコントローラ15のリセットを行う。パーティションスケジューラ21からリセット回路14に定期的に送信信号を送信するようにし、リセット回路14は、パーティションスケジューラ21からの送信信号が途絶えた場合に、マイクロコントローラ15をリセットする。例えば、パーティションスケジューラ21は、後述するように、1Tickごとに動作するタイミングで送信信号を送信する。また、OS100で異常を検知した場合、又は、アプリケーション101~103のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ21がリセット回路14にリセット信号を送信するようにして、それに応じて、リセット回路14がマイクロコントローラ15をリセットするようにしてもよい。このようにすることで、マイクロコントローラ15に不具合が発生した場合に、マイクロコントローラ15をリセットして復旧することができる。続いて以下では、パーティションスケジューラ21と、アプリケーション101~103の起動により生成されるタスクと、の関係について、図4を用いて説明する。図4は、OS100によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ21とタスク24、26、28との関係を示す図である。マイクロコントローラ15は、プロセッサ10、実行用メモリ11、I/Oポート12、不揮発性メモリ13等を含む。なお、図4では、マイクロコントローラ15の外部にリセット回路14を備える構成を例示しているが、マイクロコントローラ15の内部にリセット回路14を含む構成としてもよい。マイクロコントローラ15には、外部のクロック源からのクロック信号が供給され、プロセッサ10等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、1Tickであるとして説明する。このため、プロセッサ10によりOS100が実行されることで、パーティションスケジューラ21が1Tickごとに動作すると共に、各TPにおいて、タスクスケジューラ23、25、27およびタスク安全監視タスク24、通常制御タスク26、安全制御タスク28が1Tickごとに動作する。パーティションスケジューラ21は、1Tickごとに動作し、TPの切り替えパーティションスケジューリングを行う。パーティションスケジューラ21は、次の1Tickの間にTP1~TP3のいずれをアクティブにするかを選択決定する。さらに、パーティションスケジューラ21は、選択したTPに関するタスクスケジューラの動作を開始させる。パーティションスケジューラ21によるパーティションスケジューリングについて具体的に述べると、パーティションスケジューラ21は、スケジューリングテーブル22を参照し、TPの設定を定めたスケジューリングパターンに従って、パーティションスケジューリングを行う。スケジューリングテーブル22は、TPの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル22は、例えば、実行用メモリ11に予め格納されている。なお、スケジューリングテーブル22は、少なくとも2つの異なるスケジューリングパターンを保持している。1つは、安全監視タスク24による異常検知が行われていない場合つまり通常時に適用されるスケジューリングパターンである。もう1つは、安全監視タスク24によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを通常制御スケジューリングパターンと呼ぶ。また、異常検知時に適用されるスケジューリングパターンを安全制御スケジューリングパターンと呼ぶ。図5Aは、通常制御スケジューリングパターンの具体例を示している。図5Aでは、通常制御タスク26が属するTP2が1サイクル時間の前半T1に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半T2に割り当てられている。図5Aのスケジューリングパターンによれば、通常制御タスク26と安全監視タスク24が繰り返しスケジューリングされる。図5Bは、安全制御スケジューリングパターンの具体例を示している。図5Bでは、安全制御タスク28が属するTP3が1サイクル時間の前半T3に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半T4に割り当てられている。図5Bのスケジューリングパターンによれば、安全制御タスク28と安全監視タスク24が繰り返しスケジューリングされる。図4に戻り説明を続ける。タスクスケジューラ23、25、27は、それぞれが属するTP内でのタスクのスケジューリングを行う。各TP内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図4では、各TPはそれぞれ1つのタスクのみを含むものとして図示しているが、1以上のタスクが含まれるようにしてもよい。例えば、通常制御用のTP2内には、通常制御タスクA及び通常制御タスクBの2つのタスクが含まれていてもよい。安全監視タスク24は、安全監視アプリケーション101の起動によって生成されるタスクである。図4の例では、安全監視タスク24は、TP1及びRP1に割り当てられている。安全監視タスク24は、非安全関連アプリケーションである通常制御タスク26の実行状況の監視と、安全関連アプリケーションである安全制御タスク28の実行状況の監視と、I/Oポート12の入出力データを監視する。さらに、安全監視タスク24は、タスクの実行状況を、パーティションスケジューラ21へ通知する。通常制御タスク26は、通常制御アプリケーション102の起動によって生成されるタスクである。図4の例では、通常制御タスク26は、TP2及びRP2に割り当てられている。通常制御タスク26は、サービスロボット等の制御対象に通常の機能動作を行わせるための制御を行う。さらに、通常制御タスク26は、タスクの実行状況を、パーティションスケジューラ21へ通知する。安全制御タスク28は、安全制御アプリケーション103の起動によって生成されるタスクである。図4の例では、安全制御タスク28は、TP3及びRP3に割り当てられている。安全制御タスク28は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。さらに、安全制御タスク28は、タスクの実行状況を、パーティションスケジューラ21へ通知する。なお、各タスクからパーティションスケジューラ21へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがOS100のシステムコールサービスコールを呼び出し、OS100を介して、パーティションスケジューラ21に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ11に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ21がフラグの設定値に応じてタスクの実行状況を判断することもできる。ここで、OS100は、各タスク24、26、28に対して、次回にタスクが属するタイムパーティションがアクティブとなるまで、そのタスクを実行終了してスリープさせるAPIApplicationProgramInterface関数を提供する。したがって、一定周期でアクティブとなるTPに属するタスクに、このAPI関数を呼び出してスリープさせるようにすることで、そのタスクが一定周期で実行されるようにすることができる。以下、このAPI関数をwaipswと記載する。waipswフラグ29は、タスク24、26、28のそれぞれに対応するように、複数用意される。waipswフラグ29は、例えば、実行用メモリ11に格納される。waipswフラグ29は、OK又はNGのいずれかを示す値をとる変数である。waipswフラグ29がOKである場合、そのwaipswフラグ29に対応するタスクが実行終了していることを意味する。一方、waipswフラグ29がNGである場合、そのwaipswフラグ29に対応するタスクが実行終了していないことを意味する。waipswフラグ29は、初期値がOKを示す値になっている。パーティションスケジューラ21は、TPがアクティブになったときに、そのTPに属するタスクに対応するwaipswフラグ29をNGに更新する。そして、各タスク24、26、28のそれぞれは、TP内で実行すべき処理を実行終了したとき、waipswを呼び出すことによって、スリープするとともにwaipswフラグ29をOKに更新する。つまり、waipswには、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新する処理が含まれている。これらの処理によれば、次にTPがアクティブとなったときにwaipswフラグ29がOKであれば、前回のTPの時間内にタスクが実行終了していたこと分かり、次にTPがアクティブとなったときにwaipswフラグ29がNGであれば、前回のTPの時間内にタスクが実行終了していなかったことが分かる。ここで、waipswフラグ29は、例えば、OKを示す値を0とし、NGを示す値を1としてもよく、OKを示す値を1とし、NGを示す値を0としてもよい。また、waipswフラグ29は、OK又はNGを示す情報であれば、フラグのように2値化された情報に限られない。起床フラグ30は、タスク24、26、28のそれぞれに対応するように、複数用意される。起床フラグ30は、例えば、実行用メモリ11に格納される。起床フラグ30は、EOK又はETMOUTのいずれかを示す値をとる変数である。起床フラグ30がEOKである場合、その起床フラグ30に対応するタスクが、そのタスクが属するTPの時間内に実行終了できていたことを意味する。起床フラグ30がETMOUTである場合、その起床フラグ30に対応するタスクが、そのタスクが属するTPの時間内に実行終了できていなかったことを意味する。起床フラグ30は、初期値がEOKを示す値になっている。パーティションスケジューラ21は、TPがアクティブになったときに、そのTPに属するタスクに対応するwaipswフラグ29がNGである場合、そのタスクに対応する起床フラグ30をETMOUTに更新する。これによって、起床フラグ30がETMOUTに更新されている場合、その起床フラグ30に対応するタスクがTPの時間内に実行終了できていなかったことが分かる。waipswは、呼び出し元のタスクに対応する起床フラグ30がEOKある場合、EOKを示す値を戻り値として呼び出し元のタスクに返す。一方、waipswは、呼び出し元のタスクに対応する起床フラグ30がETMOUTである場合、ETMOUTを示す値を戻り値として呼び出し元のタスクに返す。この戻り値は、waipswを呼び出してスリープしていたタスクが起床してwaipswから復帰するときに、そのタスクに返される。これによって、呼び出し元のタスクは、waipswからの戻り値がEOKである場合、TPの時間内に自身が実行終了できていたことを認識することができる。逆に、呼び出し元のタスクは、waipswからの戻り値がETMOUTである場合、TPの時間内に自身が実行終了できていなかったことを認識することができる。そして、呼び出し元のタスクは、waipswからの戻り値に応じた処理を実行する。例えば、waipswからの戻り値がEOKである場合、呼び出し元のタスクは、通常の処理を実行する。逆に、waipswからの戻り値がETMOUTである場合、呼び出し元のタスクは、異常処置を実行する。ここで、異常処置は、制御対象を安全な方向に動作させるための処置であればどのようなものであってもよい。例えば、図5Aに示す通常制御スケジューリングパターンに従って動作している場合、呼び出し元のタスクは、タスクの実行状況が異常である旨をパーティションスケジューラ21に通知する。そして、パーティションスケジューラ21は、その通知に応じて、スケジューリングパターンを、図5Bに示す安全制御スケジューリングパターンに切り替えるようにしてもよい。また、パーティションスケジューラ21は、その通知に応じて、次の動作タイミングで、TPを強制的にTP3に切り替えるようにしてもよい。そして、TP3へ切り替えた後は、例えば、安全制御タスク28によって制御対象を停止させる。また、パーティションスケジューラ21は、タスクの実行状況が異常である旨の通知を安全制御タスク28から通知された場合、パーティションスケジューラ21自身が、制御対象を停止させるように制御するようにしてもよい。ここで、起床フラグ30及び戻り値のそれぞれは、例えば、EOKを示す値を0とし、ETMOUTを示す値を1としてもよく、EOKを示す値を1とし、ETMOUTを示す値を0としてもよい。また、起床フラグ30及び戻り値のそれぞれは、EOK又はETMOUTを示す情報であれば、フラグのように2値化された情報に限られない。さらに、起床フラグ30と戻り値とで、EOKを示す値及びETMOUTを示す値のそれぞれが異なる値で定義されていてもよい。上述したように、パーティションスケジューラ21が1Tickごとに動作し、TP1~TP3のいずれをアクティブにするかを選択決定する。さらに、パーティションスケジューラ21が、選択したTPに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ23、25、27が動作を開始することでタスクのスケジューリングが行われ、プロセッサ10が、タスクスケジューラ23、25、27によりスケジューリングされた順序に従って、TP内でのタスクを実行していく。これによって、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。続いて以下では、パーティションスケジューラ21によるパーティションスケジューリング処理及びフラグ制御処理について、図6を用いて説明する。図6は、発明の実施の形態1にかかるパーティションスケジューラ21の処理手順の具体例を示すフローチャートである。なお、図6では、通常制御スケジューリングパターン例えば図5Aまたは安全制御スケジューリングパターン例えば図5Bに従って、スケジューリングを実行する場合を例に説明する。すなわち、TP2またはTP3に続く次のTPはTP1であり、かつ、TP2での異常がTP1で検知された場合に、TP1からの結果を受けて次に選択決定されるTPはTP3である場合を例に説明する。OS100は、1Tick経過するごとにS11、パーティションスケジューラ21を起動するS12。パーティションスケジューラ21は、スケジューリングパターンを参照して、TPの切り替えタイミングか否かを判定するS13。TPの切り替えタイミングでないと判定した場合S13でNo、パーティションスケジューラ21は、同一のTPXについての動作を継続させて、S19に進む。このため、TPの切り替えタイミングとなるまでの間、S11~S13、S19、S20の処理が繰り返される。ここで、変数XはTPの番号を示し、Xは1~3のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティションスケジューリングを実施している場合は、安全制御用のTP3を除いた、TP2又はTP1のいずれかを動作させる。一方、TPの切り替えタイミングであると判定した場合S13でYes、パーティションスケジューラ21は、TPの切り替えを実行するS14。このように、パーティションスケジューラ21は、次にアクティブにするTPを変更するS13でYes場合には、さらに、切り替え前のTPに属するタスクからの通知結果に応じて、タスクの実行状況が正常であったか否かを判断する。判断の結果、タスクの実行状況が異常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPを、安全制御スケジューリングパターンに従って選択決定する。そして、パーティションスケジューラ21は、切り替え先のTPに属するタスクに対応するwaipswフラグ29がOKか否かを判定するS15。切り替え先のTPに属するタスクに対応するwaipswフラグ29がOKである場合S15でYes、切り替え先のTPが前回にアクティブだったときに、そのTPの時間内で、そのwaipswフラグ29に対応するタスクが実行終了していたことを意味する。そのため、パーティションスケジューラ21は、そのタスクに対応する起床フラグ30をEOKに更新するS16。そして、パーティションスケジューラ21は、S18に進む。一方、切り替え先のTPに属するタスクに対応するwaipswフラグ29がOKでない場合S15でNo、切り替え先のTPが前回にアクティブだったときに、そのTPの時間内で、そのwaipswフラグ29に対応するタスクが実行終了していなかったことを意味する。そのため、パーティションスケジューラ21は、そのタスクに対応する起床フラグ30をETMOUTに更新するS17。すなわち、切り替え先のTPに属するタスクに対応するwaipswフラグ29がNGである場合に、S17を実行する。そして、パーティションスケジューラ21は、S18に進む。S18では、パーティションスケジューラ21は、切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新するS18。これによれば、切り替え先のTPでタスクが実行終了するためにwaipswを呼び出してwaipswフラグ29をOKに更新しなかった場合に、waipswフラグ29がNGのままとなる。すなわち、切り替え先のTPの時間内にタスクが実行終了しなかったことを、次回にその切り替え先のTPがアクティブとなったときのwaipswフラグ29の値によって判定することS15が可能となる。そして、パーティションスケジューラ21は、S19に進む。なお、S15~S18の処理は、TP内に複数のタスクが属している場合、その複数のタスクに対応するwaipswフラグ29及び起床フラグ30のそれぞれに対して行われることになる。S19では、パーティションスケジューラ21は、現在アクティブになっているTPXのタスクスケジューラを動作させるS19。S19で動作を開始したTPXのタスクスケジューラは、TPX内のタスクを優先度に応じて実行するS20。具体的には、TPXのタスクスケジューラは、スリープしていたTPX内のタスクを優先度に応じた順番で起床させる。起床したタスクは、waipswから復帰する。このとき、起床したタスクは、上述したようにwaipswの戻り値に応じた処理を実行する。すなわち、waipswからの戻り値がEOKである場合、起床したタスクがTPの時間内に実行終了できていたことになるため、通常の処理を実行する。逆に、waipswからの戻り値がETMOUTである場合、起床したタスクがTPの時間内に実行終了できていなかったことになるため、タスクの実行状況が異常である旨をパーティションスケジューラ21に通知する処理を実行する。そして、これらのTP内で実行すべき処理が終了した場合、タスクは、waipswを呼び出して再びスリープする。なお、waipswにおけるフラグ制御処理の処理手順については、図7を参照して後述する。そして、1Tickが経過するとS11、パーティションスケジューラ21が、再びTPのスケジューリングを開始するS12。すなわち、パーティションスケジューラ21は、スケジューリングパターンに従って、次の1Tickの間にいずれのTPをアクティブにするかを選択決定する。続いて以下では、タスクにおけるフラグ制御処理について、図7を用いて説明する。図7は、発明の実施の形態1にかかるAPI関数waipswの処理手順の具体例を示すフローチャートである。タスクスケジューラによって実行されたタスクは、TP内で実行すべき処理を実行終了した後、次のTPまでスリープするときに、waipswを呼び出すS21。呼び出されたwaipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。そして、waipswは、呼び出し元のタスクに対応する起床フラグ30がETMOUTであるか否かを判定するS23。呼び出し元のタスクに対応する起床フラグ30がETMOUTでない場合S23でNo、waipswは、waipswの戻り値にEOKを設定しS24、S26に進む。すなわち、呼び出し元のタスクに対応する起床フラグ30がEOKである場合、S24が実行される。一方、起床フラグがETMOUTである場合、waipswは、waipswの戻り値にETMOUTを設定しS25、S26に進む。waipswは、タスクスケジューラに、呼び出し元のタスクをスリープさせるスリープ処理を実行させるS26。すなわち、タスクスケジューラは、呼び出し元のタスクを実行終了して、スリープ状態に遷移させる。これによって、呼び出し元のタスクに対して割り当てたプロセッサ10の実行時間が解放される。なお、上述したように、waipswによってスリープしたタスクは、そのタスクが属するTPが次にアクティブとなるまでは、スリープ状態を継続する。そして、次にそのTPがアクティブになって、タスクスケジューラによってプロセッサ10の実行時間が割り当てられたときに、タスクは、スリープ時に設定された戻り値をwaipswから受け取って、waipswから復帰する。つまり、タスクが起床して、タスクの実行が開始される。そして、タスクは、waipswからの戻り値がEOKである場合、通常の処理を実行し、waipswからの戻り値がETMOUTである場合、異常処置を実行する。ここで、タスクが属するTPが次にアクティブとなるまで、そのタスクをスリープさせる方法は、例えば、次に説明する方法で実現するようにしてもよく、同様の方法であれば、この方法にも限定されない。具体的には、タスクのそれぞれに対応する起床抑止フラグを実行用メモリ11上に用意し、タスクがスリープしたときに、そのタスクに対応する起床抑止フラグを有効な値に更新する。例えば、waipswによって更新する。そして、起床抑止フラグが有効な値を示す場合は、同一TP内で、再度、その起床抑止フラグに対応するタスクの起床することを抑止するようにすればよい。なお、この場合、起床抑止フラグは、TPの時間が終了してから、そのTPが次にアクティブとなったときまでに、OS100又はパーティションスケジューラ21等によって、無効な値に更新するようにすればよい。図6及び図7で示した処理に関して、パーティションスケジューリングの具体例を説明する。まず、図5Aに例示した通常制御スケジューリングパターンに従って、S19においてTP2がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S19ではTPX=TP2として開始し、続くS20、S11~S13にかけてもTPX=TP2のままである。そして、S13でNoが続く限り、TPX=TP2の状態が維持される。S13でYesとなり、S14でTP2からTP1へと変更された場合、続くS15~S20、S11~S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S20で、TP2に関する実行状況データ入出力等が正常であると判定されており、かつ、TP1に関するタスクの実行状況が正常戻り値がEOKであると判定されていた場合には、次のS14では、TPX=TP2となるつまり、TP2から開始する通常制御スケジューリングパターンが継続される。。一方で、S20で、TP2に関する実行状況データ入出力等が異常であると判定されていた場合、又は、TP1に関するタスクの実行状況が異常戻り値がETMOUTであると判定されていた場合には、次のS14で、TPX=TP3となるつまり、TP3から開始する安全制御スケジューリングパターンに切り替わる。。また、図5Bに例示した安全制御スケジューリングパターンに従って、S19においてTP3がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S19ではTPX=TP3として開始し、続くS20、S11~S13にかけてもTPX=TP3のままである。そして、S13でNoが続く限り、TPX=TP3の状態が維持される。S13でYesとなり、S14でTP3からTP1へと変更された場合、続くS15~S20、S11~S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S20で、TP3に関する実行状況データ入出力等が正常であると判定されており、かつ、TP1に関するタスクの実行状況が正常戻り値がEOKであると判定されていた場合には、次のS14では、TPX=TP2としてもよいつまり、TP2から開始する通常制御スケジューリングパターンに切り替わる。。ただし、制御対象の状態に応じては、スケジューリングパターンの切り替えは行わず、異常処理を継続して制御対象を停止させるようにしてもよい。一方で、S20で、TP3に関する実行状況データ入出力等に異常があると判定されていた場合、又は、TP1に関するタスクの実行状況が異常戻り値がETMOUTであると判定されていた場合には、次のS14で、TPX=TP3となるつまり、TP3から開始する安全制御スケジューリングパターンが継続される。。続いて、図6及び図7を参照して説明したフラグ制御処理によるタスクの実行状況監視の具体例について、図8及び図9を参照して説明する。図8は、TPの時間内にタスクが実行終了した場合におけるタスクの実行状況の具体例を示す図であり、図9は、TPの時間内にタスクが実行終了しなかった場合におけるタスクの実行状況の具体例を示す図である。なお、図8及び図9において、Partition1及びPartition2は、タイムパーティションを示し、Taskは、Partition1に属するタスクを示している。例えば、図5Aに示す通常制御スケジューリングパターンに従って動作している場合、Partition1及びPartition2は、TP1及びTP2に相当する。まず、図8を参照して、TPの時間内にタスクが実行終了した場合について説明する。ここで、waipswフラグ29はOKであり、起床フラグ30はEOKであるものとする。図8は、1Tickが経過して起動されたパーティションスケジューラ21が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグ29はOKとなっているためS15でYes、パーティションスケジューラ21は、Partition1に属するタスクに対応する起床フラグ30をEOKに更新するS16。また、パーティションスケジューラ21は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグをOKに更新するS22。また、上記S16で起床フラグ30はEOKとなっているためS23でNo、waipswは、戻り値にEOKを設定するS24。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ21が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ21は、Partition1に属するタスクに対応する起床フラグ30をEOKに更新するS16。すなわち、起床フラグ30は、EOKのままとなる。また、パーティションスケジューラ21は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定されたEOKを戻り値としてwaipswから受け取って、waipswから復帰する。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、上記S16で起床フラグ30はEOKとなっているため、waipswは、戻り値にEOKを設定するS24。そして、waipswは、呼び出し元のタスクをスリープさせるS26。次に、Partition1がアクティブとなったときも、waipswフラグ29にEOKが設定されており、waipswの戻り値にEOKが設定されているため、同様の処理が繰り返される。このように、タスクがPartition1の時間内に実行終了できているときはwaipswの戻り値がEOKとなることに基づいて、タスクは、通常の処理を実行してもよいということを認識することが可能となる。次に、図9を参照して、TPの時間内にタスクが実行終了しなかった場合について説明する。ここで、waipswフラグ29はOKであり、起床フラグ30はEOKであるものとする。図9は、1Tickが経過して起動されたパーティションスケジューラ21が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ21は、Partition1に属するタスクに対応する起床フラグ30をEOKに更新するS16。また、パーティションスケジューラ21は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。図9では、このときに、Partition1の時間内にタスクが実行終了しなかった場合について図示している。この場合、Partition1の時間が満了したときにタスクスケジューラによってタスクの実行が中断され、パーティションスケジューラ21によってTPがPartition2に切り替えられるS11~S14。この場合は、タスクによってwaipswが呼び出されていないため、waipswフラグ29はNGのままとなる。パーティションスケジューラ21が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はNGであるためS15でNo、パーティションスケジューラ21は、Partition1に属するタスクに対応する起床フラグ30をETMOUTに更新するS17。また、パーティションスケジューラ21は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、中断されたところから実行が再開される。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、上記S17で起床フラグ30はETMOUTとなっているため、waipswは、戻り値にETMOUTを設定するS25。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ21が、次にPartition1をアクティブにしたときS11~S14、上記と同様にS15でYesの場合の処理が実行された後、Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定されたETMOUTを戻り値としてwaipswから受け取って、waipswから復帰する。このように、waipswの戻り値がETMOUTであることに基づいて、タスクは、自身がPartition1の時間内に実行終了できていなかったため、異常処置を実行する必要があるということを認識することが可能となる。以上に説明したように、本実施の形態1では、TPの切り替え時に切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新するとともに、そのタスクの実行終了時にwaipswフラグ29をOKに更新するようにしている。そして、TPの切り替え時に切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新する前に、waipswフラグ29がNGとなっていることを検出するようにしている。これによれば、TPの時間内にタスクが実行終了しなかったことを、waipswフラグ29がNGであることによって検出することができる。すなわち、TPの時間内にタスクを実行終了することができているか否かを監視することが可能となる。また、所定のタイミングで情報waipswフラグ29を更新するのみという簡易な処理での監視が可能となる。ここで、一定周期でタスクの実行が終了しているか否かを監視する方法として、個々のタスクにおいて一定周期で実行が終了しているか否かを監視する仕組みを作り込む方法も考えることもできる。しかしながら、そのようにした場合、タスクを生成するアプリケーションプログラムのそれぞれに対して独立して監視する仕組みを実装した場合には、アプリケーションプログラムが複雑になってしまうという問題があった。それに対して、さらに、本実施の形態1では、タスクがその処理を実行終了してスリープするときに呼び出すAPI関数において、waipswフラグ29をOKに更新するようにしている。また、TPをスケジューリングするパーティションスケジューラ21において、TPの切り替え時にwaipswフラグ29をNGに更新するとともに、TPの切り替え時にwaipswフラグ29を更新する前にwaipswフラグ29がNGとなっているかを検出するようにしている。これによれば、タイムパーティショニングを採用したマルチタスクシステムにおける既存の処理タイミングを利用して、監視する仕組みを実装することができる。すなわち、より簡易に、TPの時間内にタスクを実行終了することができているか否かを監視することが可能となる。なお、上述の例では、スケジューリングパターンとして、3つのTP安全監視用のTP1、通常制御用のTP2、安全制御用のTP3のみを組み合わせた場合を例に説明したが、TP2のような通常制御用パーティションや、TP3のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、2つの通常制御用のTP2及びTP4と、安全監視用のTP1と、2つの安全制御用のTP3及びTP5と、が存在し、これら5つのTPTP1~TP5を組み合わせてスケジューリングパターンを構成してもよい。この場合、S14では、パーティションスケジューラ21が、TPXに関する実行状況データ入出力等の異常状態の種類を判定し、その異常種類に応じて、安全制御用のTP3またはTP5のいずれかを選択すればよい。また、S14では、通常制御用のTP2またはTP4のいずれかを選択すればよい。上述したように、本実施の形態では、OS100は、安全監視用のTP1からの通知、または、各TPからの通知に応じて、次にアクティブとするパーティションを選択決定するパーティションスケジューラ21を備えている。パーティションスケジューラ21は、各TPにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。独立に動作するパーティションスケジューラ21が、全てのTPから結果通知を受ける構成とすることで、パーティションスケジューラ21は、全てのTPに関する状況を一元的に把握することができる。このため、例えば、安全監視用のTP1からの結果通知に応じて、パーティションスケジューラ21が次のパーティションを決定選択しようとする場合には、パーティションスケジューラ21は、各TPの状況を考慮した上で、正常状態にあるTPのみから次のパーティションを決定選択することもできる。これによれば、より正確なパーティションスケジューリングを実現することができるという効果を奏する。<発明の実施の形態2>続いて、本発明の実施の形態2にかかる安全制御装置について説明する。本実施の形態2にかかる安全制御装置の構成は、OS100に代えてOS200を有すること以外は、図1を参照して説明した実施の形態1にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ31と、アプリケーション101~103の起動により生成されるタスクと、の関係について、図を用いて説明する。図10は、OS200によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ31とタスク24、26、28との関係を示す図である。図10に示すように、本実施の形態2は、実施の形態1と比較して、OS100に代えてOS200を有し、パーティションスケジューラ21に代えてパーティションスケジューラ31を有し、起床フラグ30に代えて起床カウンタ32を有する点が異なる。以下、実施の形態1と同様の内容については、適宜省略して説明する。パーティションスケジューラ31は、実施の形態1にかかるパーティションスケジューラ21と比較して、起床フラグ30の更新に代えて、起床カウンタ32を更新する点が異なる。起床カウンタ32は、タスク24、26、28のそれぞれに対応するように、複数用意される。起床カウンタ32は、例えば、実行用メモリ11に格納される。起床カウンタ32は、カウンタ値をとる変数である。起床カウンタ32の値が0である場合、その起床カウンタ32に対応するタスクが、そのタスクが属するTPの1TP分の時間内に実行終了できていたことを意味する。起床カウンタ32が1以上の値である場合、そのタスクが属するTPの1TP分の時間内に実行終了できていなかったことを意味する。また、この場合、その起床カウンタ32の値は、その起床カウンタ32に対応するタスクが実行開始されてから実行終了するまでに、そのタスクが属するTPをいくつ跨いだのかを意味する。起床カウンタ32は、初期値が0になっている。パーティションスケジューラ31は、TPがアクティブになったときに、そのTPに属するタスクに対応するwaipswフラグ29がNGである場合、そのタスクに対応する起床カウンタ32をカウントアップする。すなわち、タスクが実行終了せずに、いくつものTPを跨って実行が継続され続けてしまった場合、そのタスクに対応する起床カウンタ32の値がカウントアップされ続けていくことになる。これによって、起床カウンタ32が1以上の値に更新されている場合、その起床カウンタ32に対応するタスクがTPの1TP分の時間内に実行終了できていなかったこと、及び、その起床カウンタ32に対応するタスクが実行終了するまでにそのタスクが属するTPをいくつ跨いだのかが分かる。OS200は、実施の形態1にかかるOS100と比較して、提供するwaipswの処理内容が一部異なる。OS200の提供するwaipswは、実施の形態1にかかるOS100と比較して、起床フラグ30に応じた値に代えて起床カウンタ32の値を戻り値として呼び出し元のタスクに返す点、及び、起床カウンタ32の値を初期化する点が異なる。この戻り値は、waipswを呼び出してスリープしていたタスクが起床してwaipswから復帰するときに、そのタスクに返される。これによって、呼び出し元のタスクは、waipswからの戻り値が0である場合、1TPの時間内に自身が実行終了できていたことを認識することができる。逆に、呼び出し元のタスクは、waipswからの戻り値が1以上である場合、1TPの時間内に自身が実行終了できていなかったこと、及び、自身が実行終了するまでにTPをいくつ跨いだのかを認識することができる。そして、呼び出し元のタスクは、waipswからの戻り値に応じた処理を実行する。まず、呼び出し元のタスクが、1TPの時間内に実行を終了する必要があるタスクである場合について説明する。この場合、waipswからの戻り値が0であるときに、呼び出し元のタスクは、通常の処理を実行する。逆に、waipswからの戻り値が1以上であるときに、呼び出し元のタスクは、異常処置を実行する。次に、呼び出し元のタスクが、合計で2TPの時間内に実行を終了すればよいタスクである場合について説明する。この場合、waipswからの戻り値が0又は1であるときに、呼び出し元のタスクは、通常の処理を実行する。逆に、waipswからの戻り値が2以上であるときに、呼び出し元のタスクは、異常処置を実行する。このように、本実施の形態2では、処理を必ずしも1TP内で実行終了する必要がないタスクに対しても、それに応じた適切な監視を行うことが可能となる。すなわち、それぞれのタスクに適した、戻り値に対する閾値を設定し、戻り値が閾値以上である場合に、異常処置を実行するようにすればよい。ここで、タスクの処理にかかる時間が可変である場合も、動的に閾値を変更することで適切な監視を行うようにすることも可能である。例えば、タスクのそれぞれに対応する閾値を実行用メモリ11上に用意し、タスクもしくはパーティションスケジューラ31がその閾値を任意のタイミングで更新するようにする。続いて以下では、パーティションスケジューラ31によるパーティションスケジューリング処理及びフラグ制御処理について、図11を用いて説明する。図11は、発明の実施の形態1にかかるパーティションスケジューラ31の処理手順の具体例を示すフローチャートである。なお、図6を参照して説明した、実施の形態1にかかる処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態2にかかる処理手順では、実施の形態1にかかる処理手順と比較して、S15でYesとなったときにS16を実行せずにS18を実行し、S17に代えてS27を実行するようにしている点が異なる。本実施の形態2では、切り替え先のTPに属するタスクに対応するwaipswフラグ29がOKである場合S15でYes、パーティションスケジューラ31は、S18に進む。一方、切り替え先のTPに属するタスクに対応するwaipswフラグ29がNGである場合S15でNo、パーティションスケジューラ31は、そのタスクに対応する起床カウンタ32をカウントアップするS27。そして、パーティションスケジューラ31は、S18に進む。続いて以下では、タスクにおけるフラグ制御処理について、図12を用いて説明する。図12は、発明の実施の形態2にかかるAPI関数waipswの処理手順の具体例を示すフローチャートである。なお、図7を参照して説明した、実施の形態1にかかる処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態2では、S22の処理を実行した後、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値を設定するS28。そして、waipswは、起床カウンタ32の値を0で初期化しS29、S26に進む。続いて、図11及び図12を参照して説明したフラグ制御処理によるタスクの実行状況監視の具体例について、図13及び図14を参照して説明する。図13は、1TPの時間内にタスクが実行終了した場合におけるタスクの実行状況の具体例を示す図であり、図14は、1TPの時間内にタスクが実行終了しなかった場合におけるタスクの実行状況の具体例を示す図である。なお、図13及び図14において、Partition1及びPartition2は、タイムパーティションを示し、Taskは、Partition1に属するタスクを示している。まず、図13を参照して、1TPの時間内にタスクが実行終了した場合について説明する。ここで、waipswフラグ29はOKであり、起床カウンタ32は0であるものとする。図13は、1Tickが経過して起動されたパーティションスケジューラ31が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグはOKとなっているためS15でYes、パーティションスケジューラ31は、Partition1に属するタスクに対応する起床カウンタ32はカウントアップしない。また、パーティションスケジューラ31は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。タスクは、通常の処理が実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値0を設定するS28。さらに、waipswは、呼び出し元のタスクに対応する起床カウンタ32の値を0に初期化するS29。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ31が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ31は、Partition1に属するタスクに対応する起床カウンタ32はカウントアップしない。すなわち、起床カウンタ32の値は、0のままとなる。また、パーティションスケジューラ31は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定された値0を戻り値としてwaipswから受け取って、waipswから復帰する。タスクは、通常の処理が実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値0を設定するS28。さらに、waipswは、呼び出し元のタスクに対応する起床カウンタ32の値を0に初期化するS29。そして、waipswは、呼び出し元のタスクをスリープさせるS26。次に、Partition1がアクティブとなったときも、waipswフラグ29にEOKが設定されており、waipswの戻り値に0が設定されているため、同様の処理が繰り返される。このように、タスクが1つ分のPartition1の時間内に実行終了できているときはwaipswの戻り値が0となることに基づいて、タスクは、通常の処理を実行してもよいということを認識することが可能となる。次に、図14を参照して、1TPの時間内にタスクが実行終了しなかった場合について説明する。ここで、waipswフラグ29はOKであり、起床カウンタ32は0であるものとする。図14は、1Tickが経過して起動されたパーティションスケジューラ31が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ31は、Partition1に属するタスクに対応する起床カウンタ32はカウントアップしない。また、パーティションスケジューラ31は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。図14では、このときに、Partition1の時間内にタスクが実行終了しなかった場合について図示している。この場合、Partition1の時間が満了したときにタスクスケジューラによってタスクの実行が中断され、パーティションスケジューラ31によってTPがPartition2に切り替えられるS11~S14。この場合は、タスクによってwaipswが呼び出されていないため、waipswフラグ29はNGのままとなる。パーティションスケジューラ31が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はNGであるためS15でNo、パーティションスケジューラ31は、Partition1に属するタスクに対応する起床カウンタ32をカウントアップするS27。すなわち、起床カウンタ32の値が1となる。また、パーティションスケジューラ31は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、中断されたところから実行が再開される。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値1を設定するS28。さらに、waipswは、呼び出し元のタスクに対応する起床カウンタ32の値を0に初期化するS29。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ31が、次にPartition1をアクティブにしたときS11~S14、上記と同様にS15でYesの場合の処理が実行された後、Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定された1を戻り値としてwaipswから受け取って、waipswから復帰する。このように、waipswの戻り値が1であることによって、タスクは、自身が1つ分のPartition1の時間内に実行終了できていなかったため、異常処置を実行する必要があることを認識することが可能となる。なお、上述したように、タスクが、そのタスクが属するTPを1回だけ跨ぐことが許容されているような場合、タスクは、異常と判断せずに通常の処理の実行するようにしてもよい。この場合、タスクは、waipswの戻り値が2以上である場合に、異常と判断して異常処理を実行する。以上に説明したように、本実施の形態2では、TPの切り替え時に切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新するとともに、そのタスクの実行終了時にwaipswフラグ29をOKに更新するようにしている。そして、TPの切り替え時に切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新する前にwaipswフラグ29がNGとなっていることを検出したときに、カウンタ値を更新するようにしている。これによれば、タスクが実行開始から実行終了するまでに、そのタスクが属するTPをいくつ跨いだかをカウンタ値によって認識することが可能となる。すなわち、所定数のTPの時間内にタスクを実行終了することができているか否かをカウンタ値によって監視することが可能となる。また、所定のタイミングでフラグ及びカウンタ値を更新するのみという簡易な処理での監視が可能となる。<発明の実施の形態3>続いて、本発明の実施の形態3にかかる安全制御装置について説明する。本実施の形態3にかかる安全制御装置の構成は、OS100に代えてOS300を有すること以外は、図1を参照して説明した実施の形態1にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ33と、アプリケーション101~103の起動により生成されるタスクと、の関係について、図を用いて説明する。図15は、OS300によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ31とタスク24、26、28との関係を示す図である。図15に示すように、本実施の形態3は、実施の形態2と比較して、OS200に代えてOS300を有し、パーティションスケジューラ31に代えてパーティションスケジューラ33を有する点が異なる。以下、実施の形態2と同様の内容については、適宜省略して説明する。パーティションスケジューラ33は、実施の形態2にかかるパーティションスケジューラ31と比較して、起床カウンタ32をカウントアップするのではなく、カウントダウンして更新する点が異なる。つまり、本実施の形態3では、実施の形態2とは、起床カウンタ32の扱い方が異なる。具体的には、本実施の形態3では、起床カウンタ32の初期値は、その起床カウンタ32に対応するタスクが、そのタスクが属するTPを跨ぐことが許容される数になっている。パーティションスケジューラ33は、TPがアクティブになったときに、そのTPに属するタスクに対応するwaipswフラグ29がNGである場合、そのタスクに対応する起床カウンタ32をカウントダウンする。すなわち、タスクが実行終了せずに、いくつものTPを跨って実行が継続され続けてしまった場合、そのタスクに対応する起床カウンタ32の値がカウントダウンされ続けていくことになる。これによって、起床カウンタ32が0未満の値に更新されている場合、その起床カウンタ32に対応するタスクが許容されるTP数分の時間内に実行終了できていなかったことが分かる。OS300は、実施の形態2にかかるOS200と比較して、提供するwaipswの処理内容が一部異なる。OS300の提供するwaipswは、実施の形態2にかかるOS200と比較して、起床カウンタ32の値を、タスクが跨ぐことが許容されるTP数で初期化する点が異なる。これによって、呼び出し元のタスクは、waipswからの戻り値が0以上である場合、許容されるTP数分の時間内に自身が実行終了できていたことを認識することができる。逆に、呼び出し元のタスクは、waipswからの戻り値が0未満である場合、許容されるTP数分の時間内に自身が実行終了できていなかったこと、及び、自身がTPをいくつ余分に跨いだのかを認識することができる。例えば、戻り値が-1である場合、TPを1つ余分に跨いだことになる。そして、呼び出し元のタスクは、waipswからの戻り値に応じた処理を実行する。まず、呼び出し元のタスクが、1TPの時間内に実行を終了する必要があるタスクである場合について説明する。この場合、TPを跨ぐことが許容されないため、起床カウンタ32の初期値は0となる。そして、waipswからの戻り値が0である場合、呼び出し元のタスクは、通常の処理を実行する。逆に、waipswからの戻り値が0未満である場合、呼び出し元のタスクは、異常処置を実行する。次に、呼び出し元のタスクが、合計で2TPの時間内に実行を終了すればよいタスクである場合について説明する。この場合、1回だけTPを跨ぐことが許容されるため、起床カウンタ32の初期値は1となる。そして、waipswからの戻り値が0又は1である場合、呼び出し元のタスクは、通常の処理を実行する。逆に、waipswからの戻り値が0未満である場合、呼び出し元のタスクは、異常処置を実行する。このように、本実施の形態3では、実施の形態2と同様に、処理を必ずしも1TP内で実行終了する必要がないタスクに対しても、それに応じた適切な監視を行うことが可能となる。すなわち、それぞれのタスクに適した、起床カウンタ32の初期値を設定し、それからカウントダウンされた起床カウンタ32の値が0未満である場合に、異常処置を実行するようにすればよい。ここで、実施の形態2と同様にして、タスクの処理にかかる時間が可変である場合も、動的に初期値を変更することで適切な監視を行うようにすることを可能としてもよい。例えば、タスクのそれぞれに対応する起床カウンタ32の初期値を実行用メモリ11上に用意し、タスクもしくはパーティションスケジューラ33がその初期値を任意のタイミングで更新するようにしてもよい。そして、waipswは、起床カウンタ32の初期値として、実行用メモリ11に用意された初期値を設定するようにする。続いて以下では、パーティションスケジューラ33によるパーティションスケジューリング処理及びフラグ制御処理について、図16を用いて説明する。図16は、発明の実施の形態1にかかるパーティションスケジューラ33の処理手順の具体例を示すフローチャートである。本実施の形態3にかかる処理手順では、実施の形態2にかかる処理手順と比較して、S27に代えてS30を実行するようにしている点のみ異なる。すなわち、本実施の形態3では、切り替え先のTPに属するタスクに対応するwaipswフラグ29がNGである場合S15でNo、パーティションスケジューラ33は、そのタスクに対応する起床カウンタ32をカウントダウンしてS30、S18に進む。続いて以下では、タスクにおけるフラグ制御処理について、図17を用いて説明する。図17は、発明の実施の形態2にかかるAPI関数waipswの処理手順の具体例を示すフローチャートである。本実施の形態3にかかる処理手順では、実施の形態2にかかる処理手順と比較して、S29に代えてS31を実行するようにしている点のみ異なる。すなわち、本実施の形態3では、S28の処理を実行した後、waipswは、起床カウンタ32の値を、上述したような初期値で初期化してS31、S26に進む。続いて、フラグ制御処理によるタスクの実行状況監視の具体例について説明する。ここで、TPを跨ぐことが許容されないタスクである場合、起床カウンタ32の初期値は0となる。そのため、図13に示すケースでは、起床カウンタ32の初期値、起床カウンタ32の更新S30が無い点、waipswの戻り値、及びwaipswの戻り値に応じたタスクの処理も、実施の形態2と同様となる。また、図14に示すケースでは、waipswの戻り値が-1となること以外は、実施の形態2と同様となる。そのため、本実施の形態3では、その特徴をより明確に説明するために、1回だけTPを跨ぐことが許容されるタスクが、図18及び図19に示す実行状況となった場合について説明する。まず、図18を参照して、1TPの時間内にタスクが実行終了しなかった場合について説明する。ここで、waipswフラグ29はOKであり、起床カウンタ32は初期値の1であるものとする。図18は、1Tickが経過して起動されたパーティションスケジューラ33が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ33は、Partition1に属するタスクに対応する起床カウンタ32はカウントダウンしない。また、パーティションスケジューラ33は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。図18では、このときに、Partition1の時間内にタスクが実行終了しなかった場合について図示している。この場合、Partition1の時間が満了したときにタスクスケジューラによってタスクの実行が中断され、パーティションスケジューラ33によってTPがPartition2に切り替えられるS11~S14。この場合は、タスクによってwaipswが呼び出されていないため、waipswフラグ29はNGのままとなる。パーティションスケジューラ33が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はNGであるためS15でNo、パーティションスケジューラ33は、Partition1に属するタスクに対応する起床カウンタ32をカウントダウンするS30。すなわち、起床カウンタ32の値が0となる。また、パーティションスケジューラ33は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、中断されたところから実行が再開される。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値0を設定するS28。さらに、waipswは、呼び出し元のタスクに対応する起床カウンタ32の値を1に初期化するS29。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ33が、次にPartition1をアクティブにしたときS11~S14、上記と同様にS15でYesの場合の処理が実行された後、Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定された0を戻り値としてwaipswから受け取って、waipswから復帰する。このように、waipswの戻り値が0であることによって、タスクは、自身が許容される2つ分のPartition1の時間内に実行終了できていたため、通常の処理を実行してもよいということを認識することが可能となる。まず、図19を参照して、合計で2TPの時間内にタスクが実行終了しなかった場合について説明する。ここで、waipswフラグ29はOKであり、起床カウンタ32は初期値の1であるものとする。図19は、1Tickが経過して起動されたパーティションスケジューラ33が、Partition1をアクティブにしたときS11~S14から図示されている。この場合、Partition1に属するタスクに対応するwaipswフラグ29はOKであるためS15でYes、パーティションスケジューラ33は、Partition1に属するタスクに対応する起床カウンタ32はカウントダウンしない。また、パーティションスケジューラ33は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。図19では、このときに、Partition1の時間内にタスクが実行終了しなかった場合について図示している。この場合、Partition1の時間が満了したときにタスクスケジューラによってタスクの実行が中断され、パーティションスケジューラ33によってTPがPartition2に切り替えられるS11~S14。この場合は、タスクによってwaipswが呼び出されていないため、waipswフラグ29はNGのままとなる。パーティションスケジューラ33が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はNGであるためS15でNo、パーティションスケジューラ33は、Partition1に属するタスクに対応する起床カウンタ32をカウントダウンするS30。すなわち、起床カウンタ32の値が0となる。また、パーティションスケジューラ33は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、中断されたところから実行が再開される。図19では、このときに、再度、Partition1の時間内にタスクが実行終了しなかった場合について図示している。この場合、Partition1の時間が満了したときにタスクスケジューラによってタスクの実行が中断され、パーティションスケジューラ33によってTPがPartition2に切り替えられるS11~S14。この場合は、タスクによってwaipswが呼び出されていないため、waipswフラグ29はNGのままとなる。パーティションスケジューラ33が、次にPartition1をアクティブにしたときS11~S14、Partition1に属するタスクに対応するwaipswフラグ29はNGであるためS15でNo、パーティションスケジューラ33は、Partition1に属するタスクに対応する起床カウンタ32をカウントダウンするS30。すなわち、起床カウンタ32の値が-1となる。また、パーティションスケジューラ33は、Partition1に属するタスクに対応するwaipswフラグ29をNGに更新するS18。Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、中断されたところから実行が再開される。タスクは、通常の処理を実行終了したとき、waipswを呼び出すS21。waipswは、呼び出し元のタスクに対応するwaipswフラグ29をOKに更新するS22。また、waipswは、waipswの戻り値に、呼び出し元のタスクに対応する起床カウンタ32の値-1を設定するS28。さらに、waipswは、呼び出し元のタスクに対応する起床カウンタ32の値を1に初期化するS29。そして、waipswは、呼び出し元のタスクをスリープさせるS26。パーティションスケジューラ33が、次にPartition1をアクティブにしたときS11~S14、上記と同様にS15でYesの処理が実行された後、Partition1のタスクスケジューラは、動作を開始してS19、Partition1内のタスクを実行するS20。このとき、タスクは、スリープ時に設定された-1を戻り値としてwaipswから受け取って、waipswから復帰する。このように、waipswの戻り値が-1であることによって、タスクは、自身が許容される2つ分のPartition1の時間内に実行終了できていなかったため、異常処置を実行する必要があることを認識することが可能となる。以上に説明したように、本実施の形態3のように、TPの切り替え時に切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新する前にwaipswフラグ29がNGとなっていることを検出したときに、カウンタ値をカウントダウンすることによって更新することでも監視が可能である。発明の他の実施の形態.本実施の形態では、TPのそれぞれに属するタスクが、それぞれ安全監視タスク24、通常制御タスク26及び安全制御タスク28である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク24、通常制御タスク26及び安全制御タスク28に限られず、他の任意の制御対象の制御に関する処理を実行するタスクを有するようにしてもよい。例えば、図20に示すようなタスク34~36を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101~103に代えて、タスク34~36に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。監視制御タスク34は、制御対象を制御する。具体的には、監視制御タスク34は、通常制御タスク35及び安全制御タスク36からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク35は、制御対象に通常の機能動作を行わせるための制御計算を行う。具体的には、通常制御タスク35は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク35は、算出した指令値を監視制御タスク34に出力する。安全制御タスク36は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク36は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク36は、算出した指令値を監視制御タスク34のそれぞれに出力する。監視制御タスク34は、通常制御タスク41又は安全制御タスク36から出力された指令値に基づいてアクチュエータを制御する。さらに、監視制御タスク34は、制御対象のセンサから、センサ値を取得する。監視制御タスク34は、取得したセンサ値を通常制御タスク35及び安全制御タスク36に出力する。通常制御タスク35及び安全制御タスク36のそれぞれは、監視制御タスク34から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。また、その他に、例えば、図21に示すようなタスク37~39を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101~103に代えて、タスク37~39に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。監視タスク37は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク37は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク37は、取得したセンサ値をHMIHumanMachineInterfaceタスク39に出力する。HMIタスク39は、監視タスク37から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。HMIタスク39は、算出した指令値を制御タスク38に出力する。制御タスク38は、HMIタスク39から出力された指令値に基づいて、アクチュエータを制御する。これによれば、搭乗者の操作に応じて制御対象が制御されるというHMIを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態1~3及び図21によって説明した例についても同様のことが言える。具体的には、安全監視タスク24又は監視制御タスク34が取得したセンサ値に応じて、通常制御タスク26及び安全制御タスク28、もしくは、通常制御タスク35及び安全制御タスク36が同様の制御をすることで、HMIを実現することが可能である。また、本実施の形態によれば、より安定した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。本実施の形態では、OSが、TP1~TP3を有する場合について例示したが、TPの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。また、本実施の形態では、タスクの数が3つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、TPがTP1~TP3の3つである場合について例示したが、TPの数を3つ以外の数とし、それぞれのTPが1つ以上の任意の数のタスクを有するようにしてもよい。本実施の形態では、TPの切り替え時に、切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新するとともに、切り替え先のTPに属するタスクに対応するwaipswフラグ29をNGに更新するS18前に、waipswフラグ29がNGとなっていることを検出してS15でNo、起床フラグ30をETMOUTに更新するS17ようにしているが、これに限られない。例えば、TPの切り替え時に、切り替え前のTPに属するタスクに対応するwaipswフラグ29をNGに更新するとともに、切り替え前のTPに属するタスクに対応するwaipswフラグ29をNGに更新する前に、waipswフラグ29がNGとなっていることを検出して、起床フラグ30をETMOUTに更新するようにしてもよい。本実施の形態では、パーティションスケジューラが、waipswフラグ29がNGとなっていることを検出したときにS15でNo、起床フラグ30の更新のみを行うようにしているがS17、これに限られない。例えば、パーティションスケジューラが、waipswフラグ29がNGとなっていることを検出したときに、異常処置に対応する処理を即時実施するようにしてもよい。しかしながら、本実施の形態のように、起床フラグ30によってタスクにおいて異常を認識して、タスクからパーティションスケジューラに異常を通知する構成とすることで、その他の異常等をタスクからパーティションスケジューラに通知をする仕組みに統合することができ、より少ない変更量でより簡易に実装することが可能となる。本実施の形態1では、waipswは、起床フラグ30がETMOUTの場合に、戻り値にETMOUTを設定してタスクをスリープさせるようにしているが、これに限られない。例えば、起床フラグ30がETMOUTの場合に、タスクをスリープさせずに、ETMOUTを戻り値として即時復帰するようにしてもよい。このようにすることで、タスクによる異常処置の応答性を高めることができる。しかしながら、本実施の形態1のように、正常系と異常系とで処理を統一することによって、より少ない変更量でより簡易に実装することが可能となる。なお、このことは、実施の形態2及び3においても、同様のことが言える。すなわち、実施の形態2において、waipswは、起床カウンタ32が閾値以上となっている場合に、タスクをスリープさせずに、即時復帰するようにしてもよい。また、実施の形態3において、waipswは、起床カウンタ32が0未満となっている場合に、タスクをスリープさせずに、即時復帰するようにしてもよい。本実施の形態2では、起床カウンタ32の初期値を0としているが、これに限られない。例えば、起床カウンタ32の初期値を0以外の値とし、それに応じて閾値を設定するようにしてもよい。これは、本実施の形態3においても、同様のことが言える。すなわち、本実施の形態3において、0以外の値未満となったときに異常であると判定するようにし、それに応じて起床カウンタ32の初期値を設定するようにしてもよい。