(57)【特許請求の範囲】
【請求項１】
メモリと、
それぞれが前記メモリにアクセスする複数のタスクを実行するシステムプログラムと、
前記システムプログラムを実行するプロセッサと、
前記タスクの権限による前記プロセッサからの前記メモリに対するアクセスが、当該タスクに対してアクセス権限が付与されていない領域に対するアクセスである場合、当該アクセスをメモリ保護違反として検出するメモリ保護装置と、を備え、
前記複数のタスクは、制御対象を制御するとともに、それに伴って前記メモリに対してアクセスする制御関連タスクを含み、
前記システムプログラムは、前記制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをスケジューリングして実行し、
前記プロセッサは、前記システムプログラムを実行することによって、
前記タイムパーティションを前記制御関連タイムパーティションに切り替える前に、当該制御関連タイムパーティションで実行される制御関連タスクにアクセス権限が付与されている領域に隣接する、当該制御関連タスクにアクセス権限が付与されていない領域に、前記制御関連タスクの権限で意図的にアクセスし、
前記意図的なアクセスによって前記メモリ保護装置が前記メモリ保護違反を検出したか否かを判定し、
前記意図的なアクセスによって前記メモリ保護装置が前記メモリ保護違反を検出した場合に、前記メモリ保護装置が正常であると判定し、前記タイムパーティションを前記制御関連タイムパーティションに切り替える、
制御装置。
【請求項２】
前記プロセッサは、前記意図的なアクセスによって前記メモリ保護装置が前記メモリ保護違反を検出しなかった場合に、前記メモリ保護装置が異常であると判定して当該異常に応じた処理を実行する、
請求項１に記載の制御装置。
【請求項３】
前記プロセッサは、前記アクセス権限が付与されていない領域の先頭及び末尾のうち、少なくともいずれか１つの所定サイズのデータに対してアクセスする、
請求項１又は２に記載の制御装置。
【請求項４】
前記メモリ保護装置は、ＭＭＵ（Memory Management Unit）又はＭＰＵ（Memory Protection Unit）である、
請求項１乃至３のいずれか１項に記載の制御装置。
【請求項５】
それぞれがメモリにアクセスする複数のタスクを実行するシステムプログラムを実行するプロセッサからの前記タスクの権限による前記メモリに対するアクセスが、当該タスクに対してアクセス権限が付与されていない領域に対するアクセスである場合、当該アクセスをメモリ保護違反として検出するメモリ保護装置の動作確認方法であって、
前記複数のタスクは、制御対象を制御するとともに、それに伴って前記メモリに対してアクセスする制御関連タスクを含み、
前記システムプログラムは、前記制御関連タスクが実行される制御関連タイムパーティションを含む複数のタイムパーティションのスケジューリング内容を示すスケジューリング情報に従って、前記制御関連タスクをスケジューリングして実行するものであり、
前記プロセッサが、前記タイムパーティションを前記制御関連タイムパーティションに切り替える前に、当該制御関連タイムパーティションで実行される制御関連タスクに権限が付与されている領域に隣接する、当該制御関連タスクにアクセス権限が付与されていない領域に、前記制御関連タスクのアクセス権限で意図的にアクセスするステップと、
前記プロセッサが、前記意図的なアクセスによって前記メモリ保護装置が前記メモリ保護違反を検出したか否かを判定するステップと、
前記プロセッサが、前記意図的なアクセスによって前記メモリ保護装置が前記メモリ保護違反を検出した場合に、前記メモリ保護装置が正常であると判定し、前記タイムパーティションを前記制御関連タイムパーティションに切り替えるステップと、
を備えたメモリ保護装置の動作確認方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス権限の無いメモリアクセスを検出するメモリ保護装置を利用した情報処理装置およびメモリ管理装置の動作確認方法に関する。
【背景技術】
【０００２】
サービスロボットは、外界センサや自己診断装置によって安全状態を常時監視し、何らかの危険を検知した場合に適切な安全制御ロジックを実行することで、機能安全を確保する必要がある。
【０００３】
上述したサービスロボットのほか、運輸機器等の電気的な原理で動作するシステムを対象とした機能安全に関する国際標準としてIEC 61508が制定されている。IEC 61508では、機能安全の確保のために設けられるシステムのことを安全関連系と呼んでいる。IEC 61508は、マイクロプロセッサ及びPLC（Programmable Logic Controller）等のハードウェアとコンピュータプログラム（ソフトウェア）によって安全関連系を構築するための様々な技法を定めている。IEC 61508で定められている技法を用いることで、コンピュータシステムを用いて安全関連系を構築することが可能となる。
【０００４】
一方で、近年、マイクロプロセッサ等のプログラマブル電子機器の処理能力が向上している。このため、マルチタスクＯＳ（Operating System）を利用し、１つのコンピュータシステム上で様々なアプリケーションプログラムを並列実行することで、サービスロボット及び自動車等の機器に搭載されている複数用途のコンピュータシステムを統合することができる。
【０００５】
例えば特許文献１に、機能安全の確保に関するアプリケーションプログラム（以下、安全関連アプリケーションと呼ぶ）を、その他のアプリケーションプログラム（以下、非安全関連アプリケーションと呼ぶ）と共に１つのコンピュータシステム上で動作させる技術が開示されている。
【０００６】
IEC 61508で定められている技法を、安全関連アプリケーションおよび非安全関連アプリケーションを含むソフトウェア全体に適用すると、非安全関連アプリケーションにまで適用する必要性が生じる。このため、ソフトウェア開発コストが増大するという問題がある。
【０００７】
そこで、特許文献１に開示される技術では、システムプログラムのタイム・パーティションニングによって、安全関連アプリケーション（安全監視プログラム及び安全制御プログラム）を非安全関連アプリケーション（通常制御プログラム）から独立させている。このため、通常制御プログラムを安全関連系から除外することができ、コンピュータシステムを用いて構成される安全関連系の低コスト化に寄与することができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２７１７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、特許文献１に開示の技術では、リソース・パーティショニングという技術を採用している。この技術では、実行用メモリ等の固定的な資源をリソースパーティションと言われるパーティションにパーティショニングしている。そして、アプリケーションは、予め割り当てられたリソースパーティションを超えて他のリソースにアクセスすることが禁止される。
【００１０】
本願出願人は、上述したリソース・パーティショニングを、ＭＭＵ（Memory Management Unit）又はＭＰＵ（Memory Protection Unit）を利用して実現することを検討するにあたり、以下に説明する課題を見出した。以下、その課題について説明する。なお、以下に説明する内容は、本願出願人が新たに検討した内容であって、従来技術を説明したものではない。
【００１１】
タイム・パーティショニングを採用するオペレーティングシステムでは、図１７に例示するように、タイムパーティションを切り替えることで、動作するアプリケーションも切り替えられる。図１７では、「ＴＰ１」、「ＴＰ２」、「ＴＰ３」は、タイムパーティションを示し、「Ｔ１」、「Ｔ２」、「Ｔ３」のそれぞれは、ＴＰ１〜ＴＰ３のそれぞれに属するタスクを示している。なお、タスクは、非安全関連アプリケーション又は安全関連アプリケーションを実行することによって生成されているものとする。
【００１２】
このような場合、アプリケーションの切り替えの組み合わせとして、以下の４パターンが考えられる。
１）非安全関連アプリケーションから安全関連アプリケーション
２）安全関連アプリケーションから安全関連アプリケーション
３）安全関連アプリケーションから非安全関連アプリケーション
４）非安全関連アプリケーションから非安全関連アプリケーション
【００１３】
図１７では、ＴＰ１に属するＴ１は、非安全関連アプリケーションによって生成されており、ＴＰ２に属するＴ２は、安全関連アプリケーションによって生成されているものとする。この場合、機能安全上、非安全関連系であるＴＰ１に属するＴ１は、安全関連系であるＴＰ２のリソースパーティションにアクセスすることを抑止する必要がある。
【００１４】
これに対して、ＭＭＵ又はＭＰＵが有するメモリ保護機能を利用すれば、タイムパーティションのそれぞれに、そのタイムパーティションに対応するリソースパーティションに対するアクセス権限を付与することで、リソース・パーティショニングを行うことができる。具体的には、図１８に示すように、ＴＰ１に属するＴ１には、ＴＰ１のリソースパーティションに割り当てられたメモリの領域のみにアクセス可能なアクセス権限を付与し、ＴＰ２に属するＴ２には、ＴＰ２のリソースパーティションに割り当てられたメモリの領域のみにアクセス可能なアクセス権限を付与する。このようにすることで、例えば、Ｔ１が、Ｔ２のリソースパーティションに割り当てられたメモリの領域に対してアクセスした場合に、ＭＭＵ又はＭＰＵによって、そのアクセスをメモリ保護違反として検出することが可能となる。これによって、あるタイムパーティションに属するタスクが、他のタイムパーティションに割り当てられたリソースパーティションにアクセスすることを抑止することが可能となる。
【００１５】
しかしながら、ＭＭＵ又はＭＰＵが故障している場合、メモリを適切に保護することができなくなってしまう可能性があるという問題がある。例えば、故障によってメモリ保護機能が適切に動作しなくなってしまった場合には、本来ならアクセス権限が付与されていなかったタスクに対してアクセス権限が付与されてしまい、メモリ保護違反とするべきアクセスを、メモリ保護違反として検出できなくなってしまう可能性があるという問題がある。すなわち、Ｔ１が誤って、本来ならＴ１にアクセス権限が付与されていないメモリの領域にアクセスした場合であっても、メモリ保護違反が検出されず、アクセスが許容されてしまう可能性がある。
【００１６】
したがって、システムの信頼性をより向上するためには、このようなＭＭＵ又はＭＰＵの異常を検出して、ＭＭＵ又はＭＰＵが異常な状態のままシステムが動作を継続してしまうことを防止する必要がある。そのためには、ＭＭＵ又はＭＰＵが正常に動作していることを確認するための仕組みが必要である。しかしながら、ＭＭＵ又はＭＰＵが正常に動作していることを確認するための技術は見当たらない。
【００１７】
ここで、ＭＭＵとＭＰＵは、アクセス権限の無いメモリアクセスを検出するメモリ保護機能を有する点で共通する。それに対して、一般的に、ＭＭＵとＭＰＵは、仮想アドレスを物理アドレスに変換する仮想記憶管理機能を、ＭＭＵとＭＰＵのうち、ＭＭＵのみが有するという点で異なる。
【００１８】
本発明は、上述した知見に基づいてなされたものであって、アクセス権限の無いメモリアクセスを検出するメモリ保護装置が正常に動作しているか否かを確認することが可能となる情報処理装置及びメモリ保護装置の動作確認方法を提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明の第１の態様にかかる情報処理装置は、メモリと、それぞれが前記メモリにアクセスする複数のタスクを実行するシステムプログラムと、前記システムプログラムを実行するプロセッサと、前記タスクの権限による前記プロセッサからの前記メモリに対するアクセスが、当該タスクに対してアクセス権限が付与されていない領域に対するアクセスである場合、当該アクセスをメモリ保護違反として検出するメモリ保護装置と、を備え、前記プロセッサは、前記システムプログラムを実行することによって、前記タスクの権限で当該タスクに対してアクセス権限が付与されていない前記メモリの領域に意図的にアクセスし、当該アクセスによって前記メモリ保護装置が前記メモリ保護違反を検出したか否かを判定するものである。
【００２０】
本発明の第２の態様にかかるメモリ保護装置の動作確認方法は、それぞれがメモリにアクセスする複数のタスクを実行するシステムプログラムを実行するプロセッサからの前記タスクの権限による前記メモリに対するアクセスが、当該タスクに対してアクセス権限が付与されていない領域に対するアクセスである場合、当該アクセスをメモリ保護違反として検出するメモリ保護装置の動作確認方法であって、前記プロセッサが、前記タスクの権限で当該タスクに対してアクセス権限が付与されていない前記メモリの領域に意図的にアクセスするステップと、前記プロセッサが、当該アクセスによって前記メモリ保護装置が前記メモリ保護違反を検出したか否かを判定するステップと、を備えたものである。
【発明の効果】
【００２１】
上述した本発明の各態様によれば、アクセス権限の無いメモリアクセスを検出するメモリ保護装置が正常に動作しているか否かを確認することが可能となる情報処理装置及びメモリ管理装置の動作確認方法を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】発明の実施の形態１にかかる安全制御装置の構成例を示すブロック図である。
【図２】発明の実施の形態１におけるタイム・パーティショニングの概念を説明するための図である。
【図３】発明の実施の形態１におけるリソース・パーティショニングの概念を説明するための概念図である。
【図４】発明の実施の形態１におけるパーティションスケジューラとタスクとの関係を示す図である。
【図５Ａ】スケジューリングパターンの具体例を示す図である。
【図５Ｂ】スケジューリングパターンの具体例を示す図である。
【図６】発明の実施の形態１にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図７】発明の実施の形態１にかかるＭＭＵ確認ルーチンの処理手順の具体例を示すフローチャートである。
【図８】ＭＭＵ確認ルーチンの実行タイミングの一例を示す図である。
【図９】発明の実施の形態２におけるパーティションスケジューラとタスクとの関係を示す図である。
【図１０】発明の実施の形態２にかかるパーティションスケジューラの処理手順の具体例を示すフローチャートである。
【図１１】発明の実施の形態３にかかる安全制御装置の構成例を示すブロック図である。
【図１２】発明の実施の形態３におけるパーティションスケジューラとタスクとの関係を示す図である。
【図１３Ａ】スケジューリングパターンの具体例を示す図である。
【図１３Ｂ】スケジューリングパターンの具体例を示す図である。
【図１４】発明の実施の形態４におけるパーティションスケジューラとタスクとの関係を示す図である。
【図１５】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１６】その他の実施の形態にかかるパーティションスケジューラとタスクとの関係を示す図である。
【図１７】課題を説明するための図である。
【図１８】課題を説明するための図である。
【発明を実施するための形態】
【００２３】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００２４】
＜発明の実施の形態１＞
本実施の形態にかかる安全制御装置１は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置１は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図１は、本実施の形態にかかる安全制御装置１の構成例を示すブロック図である。
【００２５】
プロセッサ１０は、プログラム（命令ストリーム）の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図１では、１つのプロセッサ１０のみを示しているが、安全制御装置１は、複数のプロセッサ１０を有するマルチプロセッサ構成であってもよい。また、プロセッサ１０は、マルチコアプロセッサでもよい。プロセッサ１０は、システムプログラムとしてのオペレーティングシステム（ＯＳ）１００を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
【００２６】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ１０が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【００２７】
実行用メモリ１１は、プロセッサ１０によるプログラム実行のために使用されるメモリである。実行用メモリ１１には、不揮発性メモリ１３からロードされたプログラム（ＯＳ１００及びアプリケーション１０１〜１０３等）、プロセッサ１０の入出力データ等が記憶される。なお、プロセッサ１０は、プログラムを不揮発性メモリ１３から実行用メモリ１１にロードすることなく、これらのプログラムを不揮発性メモリ１３から直接実行してもよい。
【００２８】
具体的には、実行用メモリ１１は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリとすればよい。図１の実行用メモリ１１は、論理的な構成単位を示している。すなわち、実行用メモリ１１は、例えば、複数のＳＲＡＭデバイスの組み合わせ、複数のＤＲＡＭデバイスの組み合わせ、又はＳＲＡＭデバイスとＤＲＡＭデバイスの組み合わせでもよい。
【００２９】
Ｉ／Ｏポート１２は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置１がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。
【００３０】
不揮発性メモリ１３は、電力の供給を受けることなく、実行用メモリ１１に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ１３は、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１３は、ＯＳ１００及びアプリケーション１０１〜１０３を格納する。なお、不揮発性メモリ１３の少なくとも一部は安全制御装置１から取り外し可能に構成されてもよい。例えば、アプリケーション１０１〜１０３が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ１３の少なくとも一部は、安全制御装置１の外部に配置されてもよい。
【００３１】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及び実行用メモリ１１及び不揮発性メモリ１３等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
【００３２】
さらに、機能安全の確保に関連する安全監視アプリケーション１０１及び安全制御アプリケーション１０３の通常制御アプリケーション１０２からの独立性を高めるため、ＯＳ１００は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２を含む。
【００３３】
このうち、時間的な保護は、プロセッサ１０の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ１０の実行時間をパーティショニングし、各パーティション（タイムパーティションと呼ぶ）にタスク（プロセス又はスレッド）を割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、各タイムパーティション（以下、ＴＰと略称する場合がある。）に割り当てられたタスクに対して、プロセッサ１０の実行時間を含む資源の利用を保証する。
【００３４】
図２は、タイム・パーティショニングに関する概念図である。図２の例では、予め定められた１サイクル時間を３つのＴＰ１、ＴＰ２及びＴＰ３に分割する例を示している。例えば、１サイクル時間を１００Ｔｉｃｋとした場合、このうち前半の２０ＴｉｃｋがＴＰ１、中間の３０ＴｉｃｋがＴＰ２、後半の５０ＴｉｃｋがＴＰ３と規定される。
【００３５】
また、図２の例では、第１アプリケーション（ＡＰＬ１）〜第４アプリケーション（ＡＰＬ４）が、ＴＰ１〜ＴＰ３のいずれかに割り当てられている。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、時間の経過に応じて、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。そして、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００３６】
一方、空間的な保護は、実行用メモリ１１及びＩ／Ｏポート１２を含む固定的な資源をパーティショニングし、各パーティション（リソースパーティションと呼ぶ）にタスクを割り当てることにより行う。ＯＳ１００のスケジューリング機能（パーティションスケジューラ２１）は、予め割り当てられたリソースパーティション（以下、ＲＰと略称する場合がある。）を超えてタスクが他のリソースにアクセスすることを禁止する。
【００３７】
図３は、リソース・パーティショニングに関する概念図である。図３の例では、２つのＲＰ（ＲＰ１及びＲＰ２）を示している。ＲＰ１には、実行用メモリ１１及び不揮発性メモリ１３の一部（Ａ領域）と、Ｉ／Ｏポート１２の一部（ポートＡ）が割り当てられている。また、ＲＰ２には、実行用メモリ１１及び不揮発性メモリ１３の他の一部（Ｂ領域）と、Ｉ／Ｏポート１２の他の一部（ポートＢ）が割り当てられている。ＲＰ１からはＲＰ２に割り当てられたリソースへのアクセスが禁止され、ＲＰ２からはＲＰ１に割り当てられたリソースへのアクセスが禁止される。実行用メモリ１１におけるリソース・パーティショニングは、後述するＭＭＵのメモリ保護機能を利用して実現される。
【００３８】
なお、全てのリソースがいずれかのＲＰに排他的に割り当てられる必要はない。つまり、複数のＲＰによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション１０２及び安全制御アプリケーション１０３の双方からアクセスできる必要がある。よって、通常制御アプリケーション１０２が属するＲＰと安全制御アプリケーション１０３が属するＲＰによって、アクチュエータを制御するためのＩ／Ｏポートを共有するとよい。
【００３９】
図１に戻り説明を続ける。アプリケーション１０１〜１０３は、ＯＳ１００及びプロセッサ１０によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション１０１は、通常制御アプリケーション１０２の実行状況の監視と、安全制御アプリケーション１０３の実行状況の監視と、Ｉ／Ｏポート１２への入出力データの監視と、をプロセッサ１０に実行させるための命令コードを含む。さらに、安全監視アプリケーション１０１は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全監視アプリケーション１０１は、安全関連アプリケーションである。
【００４０】
また、通常制御アプリケーション１０２は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、通常制御アプリケーション１０２は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、通常制御アプリケーション１０２は、非安全関連アプリケーションである。
【００４１】
また、安全制御アプリケーション１０３は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ１０に実行させるための命令コードを含む。さらに、安全制御アプリケーション１０３は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。つまり、安全制御アプリケーション１０３は、安全関連アプリケーションである。
【００４２】
ＭＭＵ１４は、メモリ保護機能及び仮想記憶管理機能を有する。メモリ保護機能は、プロセッサ１０から実行用メモリ１１に対するアクセスを監視して、メモリ保護違反となるアクセスを検出する機能である。プロセッサ１０から実行用メモリ１１のあるアドレスに対するアクセスがあったときに、そのアクセスがそのアドレスに対するアクセス権限を有しているか否かを判定する。そして、そのアクセスがそのアドレスに対するアクセス権限を有していない場合には、そのアクセスをメモリ保護違反として検出するとともに、メモリ保護違反をプロセッサ１０に通知する。また、この場合、ＭＭＵ１４は、実行用メモリ１１に対するアクセスを抑止するようにしてもよい。
【００４３】
ＭＭＵ１４は、このメモリ保護機能によって、実行用メモリ１１におけるリソース・パーティショニングを実現する。具体的には、図３に例示する場合には、ＲＰ１に属するタスクには、ＲＰ１に割り当てられた実行用メモリ１１の領域のみにアクセス可能なアクセス権限が付与され、ＲＰ２に属するタスクには、ＲＰ２に割り当てられた実行用メモリ１１の領域のみにアクセス可能なアクセス権限が付与される。これによって、例えば、ＲＰ１に属するタスクが、ＲＰ２に割り当てられた実行用メモリ１１の領域に対してアクセスした場合に、ＭＭＵ１４は、そのアクセスをメモリ保護違反として検出する。アクセス権限は、実行用メモリ１１のページ単位に付与される。また、１ページのサイズとして、予め任意のサイズを定めることができる。
【００４４】
仮想記憶管理機能は、プロセッサ１０が実行用メモリ１１にアクセスするときに指定された仮想アドレスを、その仮想アドレスに対応する物理アドレスに変換する機能である。すなわち、ＭＭＵ１４は、仮想記憶管理機能によって、プロセッサ１０からの仮想アドレスを指定した実行用メモリ１１へのアクセスを、その仮想アドレスが示す実行用メモリ１１上のアドレスと同一のアドレスを示す物理アドレスを指定した実行用メモリ１１へのアクセスに変換して、実行用メモリ１１に発行する。
【００４５】
ここで、アクセス権限及び仮想アドレスに対応する物理アドレスは、プロセッサ１０によって、ＭＭＵ１４が有するＴＬＢ（Translation Look-aside Buffer）（図示せず）に設定される。ＴＬＢは、例えば、ＭＭＵ１４が有するレジスタ及びメモリ等の記憶装置(図示せず)に格納される。ＴＬＢは、複数のエントリを含んでいる。１エントリには、１つのページについての内容が設定される。１エントリには、ＡＳＩＤ（アドレス空間識別子:Address Space Identification）、仮想アドレス、その仮想アドレスに対応する物理アドレス、ページに対するアクセス権限等が設定される。
【００４６】
ＡＳＩＤは、ＲＰごとに一意に定められた値をとる。なお、本実施の形態では、１つのＴＰに１つのＲＰが対応することになるため、ＡＳＩＤは、ＴＰごとに一意に定められた値ともなる。ＴＬＢにおける仮想アドレスとして、仮想アドレスのうち、ページを特定可能な一定の範囲を示す仮想ページ番号が設定されることが一般的である。物理アドレスについても同様である。この場合は、仮想アドレスのうち、仮想ページ番号に該当する範囲を物理ページ番号とされているアドレスに置き換え、その他のオフセットアドレスを示す範囲をそのまま用いることで、仮想アドレスを物理アドレスに変換することができる。アクセス権限としては、データの読み出し権限、データの書き込み権限、及び、データ（命令）の実行権限の有無を設定することができる。すなわち、アクセス権限は、アクセス種別（読み出し、書き込み、又は実行）ごとに、その有無を設定することが可能である。
【００４７】
例えば、実行用メモリ１１上のあるページについて、あるＴＰに属するタスクからのデータの読み出し及び書き込みを許容する場合、エントリには、そのＴＰに対応するＡＳＩＤ、そのページの仮想アドレス、そのページの物理アドレス、及び、読み出し権限及び書き込み権限を有りとしたアクセス権限等が設定される。
【００４８】
プロセッサ１０は、実行用メモリ１１上のあるページ内のあるアドレスに対して、データの読み出し又は書き込みによるアクセスを行う場合、ＡＳＩＤ、仮想アドレス、及びアクセス種別（読み出し又は書き込み）を指定したアクセスをＭＭＵ１４に発行する。すなわち、ＡＳＩＤ、仮想アドレス、及びアクセス種別のそれぞれを示す信号がＭＭＵ１４に出力される。ＡＳＩＤには、そのアクセスの発行元となったタスクに応じた値が指定される。すなわち、指定されたＡＳＩＤを参照することで、どのＴＰに属するタスクの権限でのアクセスかを特定することができる。なお、本実施の形態では、同一のＴＰに属するタスクからアクセスには同一のＡＳＩＤが指定されることになる。また、アクセス種別が書き込みである場合は、さらに実行用メモリ１１に書き込むデータも指定される。
【００４９】
ＭＭＵ１４は、ＴＬＢを参照して、指定されたＡＳＩＤが設定されており、指定された仮想アドレスに対応する仮想アドレスが設定されており（仮想ページ番号が一致する）、かつ、指定されたアクセス種別の権限が有りに設定されているエントリを検出できた場合、そのアクセスを許容する。この場合、ＭＭＵ１４は、検出したエントリに基づいて、アクセスにおいて指定された仮想アドレスを物理アドレスに変換して、変換後の物理アドレスとアクセス種別を指定したアクセスを実行用メモリ１１に発行する。すなわち、物理アドレス及びアクセス種別のそれぞれを示す信号が実行用メモリ１１に出力される。また、アクセス種別が書き込みである場合は、さらに実行用メモリ１１に書き込むデータも指定される。
【００５０】
また、プロセッサ１０は、実行用メモリ１１上のあるページ内のあるアドレスに対して、データ（命令）の実行によるアクセスを行う場合、ＡＳＩＤ及び仮想アドレスを指定したアクセスをＭＭＵ１４に発行する。ＭＭＵ１４は、上述と同様に、アドレスの変換及びアクセス権限のチェックを行う。そして、ＭＭＵ１４は、そのアクセスを許容する場合、変換後の物理アドレスを指定したアクセスを実行用メモリ１１に発行する。
【００５１】
実行用メモリ１１は、ＭＭＵ１４からのアクセスに応じて、そのアクセスに応じたデータの処理を行う。具体的には、実行用メモリ１１は、読み出し又は書き込みによるアクセスであり、かつ、アクセス種別が読み出しである場合は、指定された物理アドレスのデータをプロセッサ１０に出力する。実行用メモリ１１は、読み出し又は書き込みによるアクセスであり、かつ、アクセス種別が書き込みである場合は、指定された物理アドレスに、指定されたデータを書き込む。実行用メモリ１１は、データ（命令）の実行によるアクセスである場合、指定された物理アドレスのデータをプロセッサ１０に出力する。
【００５２】
一方、ＭＭＵ１４は、ＴＬＢを参照して、アクセスで指定された仮想アドレスに対応する仮想アドレスが設定されている（仮想ページ番号が一致する）が、指定されたＡＳＩＤ及び指定されたアクセス種別の権限が設定されていない場合は、メモリ保護違反を検出する。なお、アクセスで指定された仮想アドレスに対応する仮想アドレスが設定されていない場合は、ページフォルトが検出されることになる。
【００５３】
また、ＭＭＵ１４は、その有効／無効をプロセッサ１０からの指示で切り替えることが可能である。すなわち、プロセッサ１０がＭＭＵ１４を有効にする旨の指示をＭＭＵ１４に出力したとき、ＭＭＵ１４はその指示に応じて、上述したメモリ管理機能及び仮想記憶管理機能を有効にする。これによって、上述したメモリ保護違反の検出及びアドレスの変換が行われるようになる。一方、プロセッサ１０がＭＭＵ１４を無効にする旨の指示をＭＭＵ１４に出力したとき、ＭＭＵ１４はその指示に応じて、上述したメモリ管理機能及び仮想管理機能を無効にする。これによって、上述したメモリ保護違反の検出及びアドレスの変換が行われないようになる。プロセッサ１０は、ＭＭＵ１４を無効にしている場合、直接、物理アドレスを指定したアクセスを発行することで、実行用メモリ１１に対してアクセスすることが可能である。この場合、ＭＭＵ１４は、アクセスで指定された物理アドレスをそのまま指定したアクセスを実行用メモリ１１に発行する。
【００５４】
なお、図１では、ＭＭＵ１４を、プロセッサ１０の外部に有する場合について例示したが、プロセッサ１０がＭＭＵ１４を有するようにしてもよい。
【００５５】
リセット回路１５は、ＯＳ１００からの信号に基づき、マイクロコントローラ２０のリセットを行う。パーティションスケジューラ２１からリセット回路１５に定期的に送信信号を送信するようにし、リセット回路１５は、パーティションスケジューラ２１からの送信信号が途絶えた場合に、マイクロコントローラ２０をリセットする。例えば、パーティションスケジューラ２１は、後述するように、１Ｔｉｃｋごとに動作するタイミングで送信信号を送信する。また、ＯＳ１００で異常を検知した場合、又は、アプリケーション１０１〜１０３のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ２１がリセット回路１５にリセット信号を送信するようにして、それに応じて、リセット回路１５がマイクロコントローラ２０をリセットするようにしてもよい。このようにすることで、マイクロコントローラ２０に不具合が発生した場合に、マイクロコントローラ２０をリセットして復旧することができる。
【００５６】
続いて以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図４を用いて説明する。図４は、ＯＳ１００によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ２１とタスク２４、２６、２８との関係を示す図である。
【００５７】
マイクロコントローラ２０は、プロセッサ１０、実行用メモリ１１、Ｉ／Ｏポート１２、不揮発性メモリ１３等を含む。なお、図４では、マイクロコントローラ２０の外部にリセット回路１５を備える構成を例示しているが、マイクロコントローラ２０の内部にリセット回路１５を含む構成としてもよい。
【００５８】
マイクロコントローラ２０には、外部のクロック源からのクロック信号が供給され、プロセッサ１０等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、１Ｔｉｃｋであるとして説明する。このため、プロセッサ１０によりＯＳ１００が実行されることで、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作すると共に、各ＴＰにおいて、タスクスケジューラ２３、２５、２７およびタスク（安全監視タスク２４、通常制御タスク２６、安全制御タスク２８）が１Ｔｉｃｋごとに動作する。
【００５９】
パーティションスケジューラ２１は、１Ｔｉｃｋごとに動作し、ＴＰの切り替え（パーティション・スケジューリング）を行う。パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１は、選択したＴＰに関するタスクスケジューラの動作を開始させる。
【００６０】
パーティションスケジューラ２１によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ２１は、スケジューリングテーブル２２を参照し、ＴＰの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
【００６１】
スケジューリングテーブル２２は、ＴＰの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル２２は、例えば、実行用メモリ１１に予め格納されている。なお、スケジューリングテーブル２２は、少なくとも２つの異なるスケジューリングパターンを保持している。１つは、安全監視タスク２４による異常検知が行われていない場合（つまり通常時）に適用されるスケジューリングパターンである。もう１つは、安全監視タスク２４によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
【００６２】
図５Ａは、通常制御スケジューリングパターンの具体例を示している。図５Ａでは、通常制御タスク２６が属するＴＰ２が１サイクル時間の前半（Ｔ１）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ２）に割り当てられている。図５Ａのスケジューリングパターンによれば、通常制御タスク２６と安全監視タスク２４が繰り返しスケジューリングされる。
【００６３】
図５Ｂは、安全制御スケジューリングパターンの具体例を示している。図５Ｂでは、安全制御タスク２８が属するＴＰ３が１サイクル時間の前半（Ｔ３）に割り当てられている。また、安全監視タスク２４が属するＴＰ１が１サイクル時間の後半（Ｔ４）に割り当てられている。図５Ｂのスケジューリングパターンによれば、安全制御タスク２８と安全監視タスク２４が繰り返しスケジューリングされる。
【００６４】
図４に戻り説明を続ける。タスクスケジューラ２３、２５、２７は、それぞれが属するＴＰ内でのタスクのスケジューリングを行う。各ＴＰ内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図４では、各ＴＰはそれぞれ１つのタスクのみを含むものとして図示しているが、１以上のタスクが含まれるようにしてもよい。例えば、通常制御用のＴＰ２内には、通常制御タスクＡ及び通常制御タスクＢの２つのタスクが含まれていてもよい。
【００６５】
安全監視タスク２４は、安全監視アプリケーション１０１の起動によって生成されるタスクである。図４の例では、安全監視タスク２４は、ＴＰ１及びＲＰ１に割り当てられている。安全監視タスク２４は、非安全関連アプリケーションである通常制御タスク２６の実行状況の監視と、安全関連アプリケーションである安全制御タスク２８の実行状況の監視と、Ｉ／Ｏポート１２の入出力データを監視する。安全監視タスク２４は、自身が属するＲＰ１に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク２４は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６６】
通常制御タスク２６は、通常制御アプリケーション１０２の起動によって生成されるタスクである。図４の例では、通常制御タスク２６は、ＴＰ２及びＲＰ２に割り当てられている。通常制御タスク２６は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク２６は、自身が属するＲＰ２に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク２６は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６７】
安全制御タスク２８は、安全制御アプリケーション１０３の起動によって生成されるタスクである。図４の例では、安全制御タスク２８は、ＴＰ３及びＲＰ３に割り当てられている。安全制御タスク２８は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク２８は、自身が属するＲＰ３に割り当てられた実行用メモリ１１のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク２８は、タスクの実行状況を、パーティションスケジューラ２１へ通知する。
【００６８】
なお、各タスクからパーティションスケジューラ２１へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがＯＳ１００のシステムコール（サービスコール）を呼び出し、ＯＳ１００を介して、パーティションスケジューラ２１に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ１１に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ２１がフラグの設定値に応じてタスクの実行状況を判断することもできる。
【００６９】
ＯＳ１００は、ＭＭＵ確認ルーチン２９を含んでいる。ＭＭＵ確認ルーチン２９は、ＭＭＵ１４が正常に動作できているか否かを確認するルーチンである。具体的には、ＭＭＵ確認ルーチン２９は、メモリの領域に対して、そのメモリの領域に対してアクセス権限が付与されていないタスクの権限で意図的にアクセスを行う。そして、そのアクセスによってＭＭＵ１４がメモリ保護違反を検出したか否かによって、ＭＭＵ１４が正常に動作しているか否かを判定する。すなわち、このようなアクセスによって、ＭＭＵ１４がメモリ保護違反を検出した場合には、正常にメモリ保護機能が動作していることになり、ＭＭＵ１４が正常に動作していることが確認される。なお、このときのアクセスは、検査対象のページに対して、検査対象とするタスクによる書き込み権限及び読み出し権限を無しに設定して行うことになる。
【００７０】
上述したように、パーティションスケジューラ２１が１Ｔｉｃｋごとに動作し、ＴＰ１〜ＴＰ３のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ２１が、選択したＴＰに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ２３、２５、２７が動作を開始することでタスクのスケジューリングが行われ、プロセッサ１０が、タスクスケジューラ２３、２５、２７によりスケジューリングされた順序に従って、ＴＰ内でのタスクを実行していく。これによって、アクティブなＴＰに割り当てられているアプリケーションが、プロセッサ１０で実行される。
【００７１】
続いて以下では、パーティションスケジューラ２１によるパーティション・スケジューリングについて、図６を用いて説明する。図６は、発明の実施の形態１にかかるパーティションスケジューラ２１の処理手順の具体例を示すフローチャートである。
【００７２】
なお、図６では、通常制御スケジューリングパターン（例えば図５Ａ）または安全制御スケジューリングパターン（例えば図５Ｂ）に従って、スケジューリングを実行する場合を例に説明する。すなわち、ＴＰ２またはＴＰ３に続く次のＴＰはＴＰ１であり、かつ、ＴＰ２での異常がＴＰ１で検知された場合に、ＴＰ１からの結果を受けて次に選択・決定されるＴＰはＴＰ３である場合を例に説明する。
【００７３】
ＯＳ１００は、１Ｔｉｃｋ経過するごとに（Ｓ１１）、パーティションスケジューラ２１を起動する（Ｓ１２）。パーティションスケジューラ２１は、スケジューリングパターンを参照して、ＴＰの切り替えタイミングか否かを判定する（Ｓ１３）。
【００７４】
ＴＰの切り替えタイミングでないと判定した場合（Ｓ１３でＮｏ）、パーティションスケジューラ２１は、同一のＴＰＸについての動作を継続させる。このため、ＴＰの切り替えタイミングとなるまでの間、Ｓ１１〜Ｓ１３、Ｓ１５、Ｓ１６の処理が繰り返される。ここで、変数ＸはＴＰの番号を示し、Ｘは１〜３のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のＴＰ３を除いた、ＴＰ２及びＴＰ１のいずれかを動作させる。
【００７５】
一方、ＴＰの切り替えタイミングであると判定した場合（Ｓ１３でＹｅｓ）、パーティションスケジューラ２１は、ＴＰの切り替えを実行する（Ｓ１４）。このように、パーティションスケジューラ２１は、次にアクティブにするＴＰを変更する（Ｓ１３でＹｅｓ）場合には、さらに、切り替え前のＴＰに属するタスクからの通知結果に応じて、切り替え前のＴＰが正常であったか否かを判断する。判断の結果、切り替え前のＴＰが異常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、安全制御スケジューリングパターンに従って、ＴＰ１及びＴＰ３のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ２１は、次の１Ｔｉｃｋの間にアクティブにするＴＰＸを、通常制御スケジューリングパターンに従って、ＴＰ１及びＴＰ２のいずれかを選択・決定する。
【００７６】
パーティションスケジューラ２１は、現在アクティブになっているＴＰＸのタスクスケジューラを動作させる（Ｓ１５）。Ｓ１５で動作を開始したＴＰＸのタスクスケジューラは、ＴＰＸ内のタスクを優先度に応じて実行する（Ｓ１６）。
【００７７】
そして、１Ｔｉｃｋが経過すると（Ｓ１１）、パーティションスケジューラ２１が、再びＴＰのスケジューリングを開始する（Ｓ１２）。すなわち、パーティションスケジューラ２１は、スケジューリングパターンに従って、次の１Ｔｉｃｋの間にいずれのＴＰをアクティブにするかを選択・決定する。
【００７８】
図６で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図５Ａに例示した通常制御スケジューリングパターンに従って、Ｓ１５においてＴＰ２がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ２として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ２のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ２の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ２からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２となる（つまり、ＴＰ２から開始する通常制御スケジューリングパターンが継続される。）。一方で、Ｓ１６で、ＴＰ２に関する実行状況（データ入出力等）が異常であると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンに切り替わる。）。
【００７９】
また、図５Ｂに例示した安全制御スケジューリングパターンに従って、Ｓ１５においてＴＰ３がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、Ｓ１５ではＴＰＸ＝ＴＰ３として開始し、続くＳ１６、Ｓ１１〜Ｓ１３にかけてもＴＰＸ＝ＴＰ３のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ３の状態が維持される。Ｓ１３でＹｅｓとなり、Ｓ１４でＴＰ３からＴＰ１へと変更された場合、続くＳ１５〜Ｓ１６、Ｓ１１〜Ｓ１３にかけてＴＰ１のままである。そして、Ｓ１３でＮｏが続く限り、ＴＰＸ＝ＴＰ１の状態が維持される。ＴＰ１がアクティブのときに、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）が正常であると判定されていた場合には、次のＳ１４では、ＴＰＸ＝ＴＰ２とする（つまり、ＴＰ２から開始する通常制御スケジューリングパターンに切り替わる。）。一方で、Ｓ１６で、ＴＰ３に関する実行状況（データ入出力等）に異常があると判定されていた場合には、次のＳ１４で、ＴＰＸ＝ＴＰ３となる（つまり、ＴＰ３から開始する安全制御スケジューリングパターンが継続される。）。
【００８０】
なお、上述の例では、スケジューリングパターンとして、３つのＴＰ（安全監視用のＴＰ１、通常制御用のＴＰ２、安全制御用のＴＰ３）のみを組み合わせた場合を例に説明したが、ＴＰ２のような通常制御用パーティションや、ＴＰ３のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、２つの通常制御用のＴＰ２及びＴＰ４と、安全監視用のＴＰ１と、２つの安全制御用のＴＰ３及びＴＰ５と、が存在し、これら５つのＴＰ（ＴＰ１〜ＴＰ５）を組み合わせてスケジューリングパターンを構成してもよい。この場合、Ｓ１４では、パーティションスケジューラ２１が、ＴＰＸに関する実行状況（データ入出力等）の異常状態の種類を判定し、その異常種類に応じて、安全制御用のＴＰ３またはＴＰ５のいずれかを選択すればよい。また、Ｓ１４では、通常制御用のＴＰ２またはＴＰ４のいずれかを選択すればよい。
【００８１】
上述したように、本実施の形態では、ＯＳ１００は、安全監視用のＴＰ１からの通知、または、各ＴＰからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ２１を備えている。パーティションスケジューラ２１は、各ＴＰにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
【００８２】
独立に動作するパーティションスケジューラ２１が、全てのＴＰから結果通知を受ける構成とすることで、パーティションスケジューラ２１は、全てのＴＰに関する状況を一元的に把握することができる。このため、例えば、安全監視用のＴＰ１からの結果通知に応じて、パーティションスケジューラ２１が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ２１は、各ＴＰの状況を考慮した上で、正常状態にあるＴＰのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
【００８３】
続いて、ＭＭＵ確認ルーチン２９によるＭＭＵ確認処理について、図７を用いて説明する。図７は、発明の実施の形態１にかかるＭＭＵ確認ルーチン２９の処理手順の具体例を示すフローチャートである。ＯＳ１００がＭＭＵ確認ルーチン２９を実行することによって、以下に説明する処理手順が実行されることになる。なお、厳密には、以下に説明する処理は、ＯＳ１００を実行するプロセッサ１０によって実行されることになる。
【００８４】
ＯＳ１００は、検査対象とするＴＢＬのエントリに格納されたデータのバックアップをとる（Ｓ２１）。ここで、バックアップしたデータは、実行用メモリ１１に格納するようにしてもよく、不揮発性メモリ１３に格納するようにしてもよい。
【００８５】
ＯＳ１００は、検査対象のエントリに、検査対象のページに関する内容を設定する。具体的には、検査対象のエントリに、検査対象のタスクのＡＳＩＤ、検査対象のページの仮想アドレス、検査対象のページの物理アドレス、並びに、読み出し権限、書き込み権限、及び実行権限を無しとしたアクセス権限等を設定する（Ｓ２２）。なお、設定するアクセス権限は、ここで例示したパターンに限られない。すなわち、検査対象とするアクセス種別のみを権限無しに設定すればよい。例えば、読み出し権限について、正常にアクセス保護違反が検出されるか否かを検査する場合は、少なくとも読み出し権限のみを無しに設定すればよい。
【００８６】
ＯＳ１００は、検査対象のページの境界にアクセス（読み出し、書き込み又は実行）する（Ｓ２３）。具体的には、ＯＳ１００は、先頭と末尾のそれぞれにアクセスする。ここで、ページの先頭と末尾には、例えば４ワード等の予め任意に定めた固定長の範囲でアクセスするものとする。
【００８７】
ＯＳ１００は、Ｓ１１において、バックアップしたデータを、検査対象のエントリに復元する（Ｓ２４）。そして、ＯＳ１００は、Ｓ１３におけるアクセスで、メモリ保護違反が検出されたか否かを判定する（Ｓ２５）。すなわち、ＯＳ１００は、ＭＭＵ１４からメモリ保護違反が通知されたか否かを判定する。
【００８８】
ＯＳ１００は、メモリ保護違反が検出された場合（Ｓ２５でＹｅｓ）、ＭＭＵ１４が正常に動作していると判定する（Ｓ２６）。この場合、ＯＳ１００は、通常の処理（パーティションスケジューラ２１、タスクスケジューラ２３、２５、２７、タスク２４、２６、２８の実行等）の実行を継続する（Ｓ２７）。一方、ＯＳ１００は、メモリ保護違反が検出されなかった場合（Ｓ２５でＮｏ）、ＭＭＵ１４が正常に動作していないと判定する（Ｓ２８）。この場合、ＯＳ１００は、緊急停止ルーチンを実行する。
【００８９】
ここで、緊急停止ルーチンは、制御対象の安全を確保するために、制御対象を緊急停止させる処理となる。例えば、図５Ａに示す通常制御スケジューリングパターンに従って動作している場合、スケジューリングパターンを、図５Ｂに示す安全制御スケジューリングパターンに切り替えるようにしてもよい。また、パーティションスケジューラ２１の次の動作タイミングで、ＴＰを強制的にＴＰ３に切り替えるようにしてもよい。そして、ＴＰ３へ切り替えた後は、例えば、安全制御タスク２８によって制御対象を停止させる。また、ＯＳ１００は、直接、制御対象を停止させるように制御するようにしてもよい。
【００９０】
以上に説明したＭＭＵ確認ルーチン２９の処理は、ＯＳ１００に制御が移ったときにおける任意のタイミングで実行するようにしてよい。例えば、図８に示すように、ＴＰにおいてそのＴＰに属する全てのタスクの実行が終了してＯＳ１００に制御が移ったときに、残りのＴＰの時間の間、処理を実行するようにしてもよい。このようにすることで、ＴＰにおいて余った時間を有効利用することができる。
【００９１】
なお、ＭＭＵ確認ルーチン２９で検査対象とするページ、タスク、及びエントリの組み合わせは、任意の組み合わせを、任意の順序で組み合わせていくようにしてよい。例えば、検査対象とするページは、実行用メモリ１１の全てのページを先頭からの順番に、検査対象とするタスクは、全てのタスク２４、２６、２８を対象として予め定めた順番に、検査対象とするエントリは、ＴＬＢの全てのエントリを先頭から順番に組み合わせて検査していくことで、全ての組み合わせに対するＭＭＵ１４の動作確認を行うようにしてもよい。また、図８に示すように、ＴＰ２の余った時間でＭＭＵ１４の動作確認を行う場合は、次にアクティブとなるＴＰ１に属するタスクを検査対象としてＭＭＵ１４の動作確認を行うようにしてもよい。
【００９２】
以上に説明したＭＭＵ確認ルーチン２９の処理手順では、ページの先頭と末尾に対して、アクセスするようにしているが、これに限られない。例えば、先頭と末尾のいずれか一方に対して、アクセスをするようにしてもよい。また、ページ全体に対して、アクセスをするようにしてもよい。また、ページの先頭と末尾以外の任意の位置に対して、アクセスをするようにしてもよい。しかしながら、好ましくは、上述したように、ページの先頭と末尾を対象とすることで、境界値分析を行うこととなるため、ＭＭＵ１４の異常を検出する精度が向上することが期待される。
【００９３】
以上に説明したように、本実施の形態１では、検査対象とするタスクの権限で、そのタスクに対してアクセス権限が付与されていない実行用メモリ１１の領域に意図的にアクセスするようにしている。そして、そのアクセスによってＭＭＵ１４がメモリ保護違反を検出したか否かを判定する。これによれば、メモリ保護違反が検出された場合に、ＭＭＵ１４によるメモリ保護が正常に行われていることを確認することができる。つまり、ＭＭＵ１４が正常に動作していることを確認することができる。
【００９４】
＜発明の実施の形態２＞
続いて、本発明の実施の形態２にかかる安全制御装置について説明する。本実施の形態２にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ３０と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図９を用いて説明する。図９は、本実施の形態２にかかるパーティションスケジューラ３０とタスク２４、２６、２８との関係を示す図である。以下、実施の形態１と同様の内容については、適宜、その説明を省略する。
【００９５】
図９に示すように、本実施の形態２は、実施の形態１と比較して、パーティションスケジューラ２１に代えてパーティションスケジューラ３０を有し、ＭＭＵ確認ルーチン２９がパーティションスケジューラ３０に含まれる点が異なる。すなわち、本実施の形態２にかかるパーティションスケジューラ３０は、実施の形態１にかかるパーティションスケジューラ２１と比較して、ＭＭＵ確認ルーチン２９を実行する点が異なる。
【００９６】
続いて、パーティションスケジューラ３０によるパーティション・スケジューリングについて、図１０を用いて説明する。図１０は、発明の実施の形態２にかかるパーティションスケジューラ３０の処理手順の具体例を示すフローチャートである。なお、図６を参照して説明した、実施の形態１にかかる処理手順と同様の処理手順については、同一の符号を付し、説明を省略する。本実施の形態２にかかる処理手順では、実施の形態１にかかる処理手順と比較して、Ｓ１３でＹｅｓとなったときにＳ１７を実行して、その次にＳ１４を実行する点が異なる。
【００９７】
ＴＰの切り替えタイミングであると判定した場合（Ｓ１３でＹｅｓ）、パーティションスケジューラ３０は、切り替え先のＴＰで利用するページに関して、ＭＭＵ確認ルーチン２９を実行する（Ｓ１７）。そして、パーティションスケジューラ３０は、ＭＭＵ確認ルーチン２９を実行した後に、ＴＰの切り替えを実行する（Ｓ１４）。
【００９８】
ＭＭＵ確認ルーチン２９における処理手順については、ＯＳ１００のパーティションスケジューラ３０が実行すること以外は、実施の形態１において図７を参照して説明した処理と同様となるため、その説明を省略する。ここで、本実施の形態２では、上述したように切り替え先のＴＰで利用するページに関して、ＭＭＵ確認ルーチン２９を実行する。すなわち、パーティションスケジューラ３０は、切り替え先のＴＰで利用するページに対するアクセスの影響を受ける可能性の高い、切り替え先のＴＰで利用するページに隣接するページについて検査を行う。その理由は、タスクが誤動作をしてメモリ保護違反となるアクセスをするケースで可能性が高いものとして、タスクが誤って隣接するページにまではみ出してアクセスしてしまうことが考えられるからである。よって、パーティションスケジューラ３０は、切り替え先のＴＰに属するタスクの権限（ＡＳＩＤ）で、切り替え先のＴＰに属するタスクで利用するページに隣接し、かつ、切り替え先のＴＰに属するタスクに対してアクセス権限が付与されていないページについてＭＭＵ確認ルーチン２９を実行する。
【００９９】
具体的には、パーティションスケジューラ３０は、ＭＭＵ１４のＴＬＢを参照して、切り替え先のＴＰに対応するＡＳＩＤが設定されているエントリを検索する。そして、この検索によって検出したエントリにおいて設定されているページが切り替え先のＴＰで利用するページとなる。さらに、パーティションスケジューラ３０は、検出したエントリにおいて設定されている仮想アドレス又は物理アドレスに基づいて、検出したエントリのページに隣接するページについて設定されており、かつＡＳＩＤが切り替え先のＴＰに対応するＡＳＩＤでないエントリを検索する。そして、パーティションスケジューラ３０は、この検索によって検出したエントリにおいて設定されているページを検査対象のページとして認識する。よって、検査対象のページは、ＴＬＢのエントリの設定を変更しなくても、切り替え先のＴＰに属するタスクの権限（ＡＳＩＤ）でのアクセス権限は有していない。そのため、パーティションスケジューラ３０は、Ｓ２１でのエントリのバックアップ、Ｓ２２でのエントリの設定、及びＳ２４でのエントリの復元は実行せずに、ＭＭＵ確認ルーチン２９を実施するようにしてもよい。なお、上述した理由から、ステップＳ２３では、検査対象のページの先頭と末尾のうち、切り替え先のＴＰに属するタスクで利用するページに隣接する側のみにアクセスするようにしてもよい。
【０１００】
以上に説明したように、本実施の形態２では、ＴＰを切り替えるときに、切り替え先のＴＰで実行されるタスクがアクセスする実行用メモリ１１のページに関して、ＭＭＵ１４の動作確認を行うようにしている。これによれば、直近で使用される実行用メモリ１１のページに関してＭＭＵ１４の動作が正常に行われていることを確認することができる。そのため、ＭＭＵ１４の異常をより早く検出することが可能となり、より信頼性を向上することが可能となる。
【０１０１】
＜発明の実施の形態３＞
続いて、本発明の実施の形態３にかかる安全制御装置２について説明する。図１１は、本実施の形態３にかかる安全制御装置２の構成例を示すブロック図である。以下、実施の形態１と同様の内容については、適宜、その説明を省略する。
【０１０２】
本実施の形態３にかかる安全制御装置２は、図１を参照して説明した実施の形態１にかかる安全制御装置１と比較して、ＯＳ１００に代えてＯＳ２００を有し、さらにＭＭＵ確認アプリケーション１０４を有する点が異なる。
【０１０３】
ＭＭＵ確認アプリケーション１０４は、ＭＭＵ確認ルーチン２９を実行することによって、ＭＭＵ１４が正常に動作しているか否かを確認する処理をプロセッサ１０に実行させるための命令コードを含む。ＭＭＵ確認アプリケーション１０４は、パーティションスケジューラ２１への結果通知をプロセッサ１０に実行させるための命令コードを含む。ＭＭＵ確認アプリケーション１０４は、安全関連アプリケーションである。なお、ＯＳ１００とＯＳ２００との違いについては、後述する。
【０１０４】
続いて、パーティションスケジューラ２１と、アプリケーション１０１〜１０４の起動により生成されるタスクと、の関係について、図１２を用いて説明する。図１２は、本実施の形態３にかかるパーティションスケジューラ２１とタスク２４、２６、２８、３２との関係を示す図である。
【０１０５】
図１２に示すように、本実施の形態３は、実施の形態１と比較して、ＯＳ１００に代えてＯＳ２００を有し、スケジューリングテーブル２２に代えてスケジューリングテーブル３３を有し、さらにタスクスケジューラ３１とＭＭＵ確認タスク３２とを有する点が異なる。また、本実施の形態３は、実施の形態１と比較して、さらにＴＰ４及びＲＰ４が定義されている。ＴＰ４及びＲＰ４には、タスクスケジューラ３１とＭＭＵ確認タスク３２とが属する。
【０１０６】
本実施の形態３にかかるＯＳ２００は、実施の形態１にかかるＯＳ１００と比較して、ＭＭＵ確認ルーチン２９を有しない点が異なる。すなわち、ＯＳ２００によって、直接、ＭＭＵ１４の動作確認は行わない。後述するように、本実施の形態３では、ＯＳ２００上で動作するＭＭＵ確認タスク３２がＭＭＵ確認ルーチン２９を実行する。
【０１０７】
タスクスケジューラ３１は、タスクスケジューラ２３、２５、２７と同様に、自身が属するＴＰ４内のタスクのスケジューリングを行う。なお、図１２では、ＴＰ４は１つのタスクのみを含むものとして図示しているが、１以上のタスクが含まれるようにしてもよい。
【０１０８】
ＭＭＵ確認タスク３２は、ＭＭＵ確認アプリケーション１０４の起動によって生成されるタスクである。図１２の例では、ＭＭＵ確認タスク３２は、ＴＰ４及びＲＰ４に割り当てられている。ＭＭＵ確認タスク３２は、ＭＭＵ確認ルーチン２９を実行することによって、ＭＭＵ１４が正常に動作しているか否かを確認する。
【０１０９】
スケジューリングテーブル３３は、図１３Ａ及び図１３Ｂに示すスケジューリングパターンを保持している。図１３Ａは、通常制御スケジューリングパターンの具体例を示している。図１３Ａでは、１サイクル時間において、通常制御タスク２６が属するＴＰ２の期間（Ｔ１）、安全監視タスク２４が属するＴＰ１の期間（Ｔ２）、及びＭＭＵ確認タスク３２が属するＴＰ４の期間（Ｔ５）が割り当てられている。図１３Ｂは、安全制御スケジューリングパターンの具体例を示している。図１３Ｂでは、１サイクル時間において、安全監視タスク２４が属するＴＰ１の期間（Ｔ１）、安全監視タスク２４が属するＴＰ１の期間（Ｔ２）、及びＭＭＵ確認タスク３２が属するＴＰ４の期間（Ｔ６）が割り当てられている。
【０１１０】
ＭＭＵ確認ルーチン２９における処理手順については、ＭＭＵ確認タスク３２が実行すること以外は、実施の形態１において図７を参照して説明した処理と同様となるため、その説明を省略する。ここで、ＭＭＵ確認タスク３２は、ＴＰ４のタスクの権限でＲＰ４に割り当てられたリソースしかアクセスすることができない。また、通常、ＯＳ２００は、ＯＳ２００上で動作するタスクからは、ＭＭＵ１４内のＴＬＢのエントリにアクセスすることができないようにしている。そこで、本実施の形態３にかかるＯＳ２００は、ＭＭＵ確認タスク３２に対して、エントリのデータのバックアップ、復元及び検索のためのアクセスを可能とするＡＰＩ関数、及び、検査対象となるタスクの権限（ＡＳＩＤ）で検査対象となるページに対するアクセスの発行を可能とするＡＰＩ関数等を提供する。そして、ＭＭＵ確認タスク３２は、それぞれのＡＰＩ関数を使用して、ＭＭＵ確認ルーチン２９を実行する。
【０１１１】
また、ＭＭＵ確認タスク３２は、ＭＭＵ１４の異常を検出した場合（Ｓ２５でＮｏ、Ｓ２８）には、緊急停止ルーチンとして、パーティションスケジューラ２１に異常を通知する。そして、パーティションスケジューラ２１は、その通知に応じて、スケジューリングパターンを、安全制御スケジューリングパターンに切り替えて、制御対象を緊急停止させる。
【０１１２】
以上に説明した本実施の形態３のように、ＭＭＵ１４の動作確認を行うための専用のＴＰを定義して、そのＴＰに属するタスクによって、ＭＭＵ１４の動作確認を行うようにすることもできる。
【０１１３】
＜発明の実施の形態４＞
続いて、本発明の実施の形態４にかかる安全制御装置について説明する。本実施の形態４にかかる安全制御装置の構成は、図１を参照して説明した実施の形態１にかかる安全制御装置の構成と同様であるため、その説明を省略する。以下では、パーティションスケジューラ２１と、アプリケーション１０１〜１０３の起動により生成されるタスクと、の関係について、図１４を用いて説明する。図１４は、本実施の形態４にかかるパーティションスケジューラ２１とタスク３４〜３６との関係を示す図である。以下、実施の形態１と同様の内容については、適宜、その説明を省略する。
【０１１４】
図１４に示すように、本実施の形態４は、実施の形態１と比較して、ＯＳ１００に代えてＯＳ２００を有し、安全監視タスク２４、通常制御タスク２６、及び安全制御タスク２８に代えて安全監視タスク３４、通常制御タスク３５、及び安全制御タスク３６を有する点が異なる。安全監視タスク３４、通常制御タスク３５、及び安全制御タスク３６のそれぞれは、安全監視タスク２４、通常制御タスク２６、及び安全制御タスク２８のそれぞれと比較して、ＭＭＵ確認ルーチン２９を有する点が異なる。
【０１１５】
本実施の形態４にかかるＯＳ２００は、実施の形態１にかかるＯＳ１００と比較して、実施の形態３にかかるＯＳ２００と同様にＭＭＵ確認ルーチン２９を有しない。すなわち、ＯＳ２００において、直接、ＭＭＵ１４の動作確認は行わない。
【０１１６】
本実施の形態４にかかる安全監視タスク３４は、実施の形態１にかかる安全監視タスク２４と比較して、さらに、ＭＭＵ確認ルーチン２９を実行することによって、ＭＭＵ１４が正常に動作しているか否かを確認する点が異なる。本実施の形態４にかかる通常制御タスク３５は、実施の形態１にかかる通常制御タスク２６と比較して、さらに、ＭＭＵ確認ルーチン２９を実行することによって、ＭＭＵ１４が正常に動作しているか否かを確認する点が異なる。本実施の形態４にかかる安全制御タスク３６は、実施の形態１にかかる安全制御タスク２８と比較して、さらに、ＭＭＵ確認ルーチン２９を実行することによって、ＭＭＵ１４が正常に動作しているか否かを確認する点が異なる。
【０１１７】
ＭＭＵ確認ルーチン２９における処理手順については、安全監視タスク３４、通常制御タスク３５、及び安全制御タスク３６のそれぞれが実行すること以外は、実施の形態１において図７を参照して説明した処理と同様となるため、その説明を省略する。ここで、安全監視タスク３４、通常制御タスク３５、及び安全制御タスク３６のそれぞれは、それぞれが属するＴＰで利用するページに関して、ＭＭＵ確認ルーチン２９を実行する。すなわち、それぞれのタスク３４〜３６は、それぞれが属するＴＰで利用するページに隣接するページについて検査を行う。それぞれのタスク３４〜３６の権限（ＡＳＩＤ）で、それぞれが利用するページについてＭＭＵ確認ルーチン２９を実行することになる。よって、それぞれのタスク３４〜３６は、それぞれのタスク３４〜３６の権限（ＡＳＩＤ）で、それぞれのタスク３４〜３６が利用するページに隣接し、かつ、それぞれのタスク３４〜３６に対してアクセス権限が付与されていないページについてＭＭＵ確認ルーチン２９を実行する。ここで、それぞれのタスク３４〜３６が検査対象のページを特定する方法については、実施の形態２において説明した方法と同様であるため、説明を省略する。また、実施の形態２と同様の理由で、ステップＳ２３では、検査対象のページの先頭と末尾のうち、それぞれのタスク３４〜３６が属するＴＰで利用するページに隣接する側のみにアクセスするようにしてもよい。
【０１１８】
また、検査対象のページは、ＴＬＢのエントリの設定を変更しなくても、それぞれのタスク３４〜３６の権限（ＡＳＩＤ）でのアクセス権限は有していない。そのため、それぞれのタスク３４〜３６は、Ｓ２１でのエントリのバックアップ、Ｓ２２でのエントリの設定、及びＳ２４でのエントリの復元は実行せずに、ＭＭＵ確認ルーチン２９を実施するようにしてもよい。
【０１１９】
ここで、通常、ＯＳ２００は、ＯＳ２００上で動作するタスクからは、ＭＭＵ１４のエントリにアクセスすることができないようにしている。そこで、本実施の形態４にかかるＯＳ２００は、実施の形態３にかかるＯＳ２００と同様に、各タスク３４〜３６に対して、エントリのデータのバックアップ、復元及び検索のためのアクセスを可能とするＡＰＩ関数を提供する。そして、各タスク３４〜３６は、それぞれのＡＰＩ関数を使用して、ＭＭＵ確認ルーチン２９を実行する。
【０１２０】
また、各タスク３４〜３６は、ＭＭＵ１４の異常を検出した場合（Ｓ２５でＮｏ、Ｓ２８）には、緊急停止ルーチンとして、パーティションスケジューラ２１に異常を通知する。そして、パーティションスケジューラ２１は、その通知に応じて、スケジューリングパターンを、安全制御スケジューリングパターンに切り替えて、制御対象を緊急停止させる。
【０１２１】
以上に説明したように、本実施の形態４では、ＴＰ１〜３のそれぞれにおいて、それぞれのＴＰに属するタスクによって、それぞれのＴＰに対応するＲＰに割り当てられた実行用メモリ１１のページについてＭＭＵ１４の動作確認を行うようにすることもできる。
【０１２２】
発明の他の実施の形態．
本実施の形態では、ＴＰのそれぞれに属するタスクが、それぞれ安全監視タスク２４、３４、通常制御タスク２６、３５及び安全制御タスク２８、３６である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク２４、通常制御タスク２６及び安全制御タスク２８に限られず、その他の任意の制御対象の制御に関する処理を実行するタスクを有するようにしてもよい。
【０１２３】
例えば、図２２に示すようなタスク３７〜３９を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク３７〜３９に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１２４】
監視制御タスク３７は、制御対象を制御する。具体的には、監視制御タスク３７は、通常制御タスク３８及び安全制御タスク３９からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク３８は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク３８は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク３８は、算出した指令値を監視制御タスク３７に出力する。安全制御タスク３９は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク３９は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク３９は、算出した指令値を監視制御タスク３７に出力する。監視制御タスク３７は、通常制御タスク３８又は安全制御タスク３９から出力された指令値に基づいてアクチュエータを制御する。
【０１２５】
さらに、監視制御タスク３７は、制御対象のセンサから、センサ値を取得する。監視制御タスク３７は、取得したセンサ値を通常制御タスク３８及び安全制御タスク３９に出力する。通常制御タスク３８及び安全制御タスク３９のそれぞれは、監視制御タスク３７から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。
【０１２６】
また、その他に、例えば、図２３に示すようなタスク４０〜４２を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション１０１〜１０３に代えて、タスク４０〜４２に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
【０１２７】
監視タスク４０は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク４０は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク４０は、取得したセンサ値をＨＭＩ（Human Machine Interface）タスク３９に出力する。
【０１２８】
ＨＭＩタスク４２は、監視タスク４０から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。ＨＭＩタスク４２は、算出した指令値を制御タスク４１に出力する。制御タスク４１は、ＨＭＩタスク４２から出力された指令値に基づいて、アクチュエータを制御する。
【０１２９】
これによれば、搭乗者の操作に応じて制御対象が制御されるというＨＭＩを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態１〜４及び図２２によって説明した例についても同様のことが言える。具体的には、安全監視タスク２４、３４又は監視制御タスク３７が取得したセンサ値に応じて、通常制御タスク２６、３５及び安全制御タスク２８、３６、もしくは、通常制御タスク３８及び安全制御タスク３９が同様の制御をすることで、ＨＭＩを実現することが可能である。また、本実施の形態によれば、より信頼性を向上した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
【０１３０】
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
【０１３１】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０１３２】
本実施の形態では、ＯＳが、ＴＰ１〜ＴＰ３を有する場合について例示したが、ＴＰの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
【０１３３】
本実施の形態では、タスクの数が３つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、ＴＰがＴＰ１〜ＴＰ３の３つである場合について例示したが、ＴＰの数を３つ以外の数とし、それぞれのＴＰが１つ以上の任意の数のタスクを有するようにしてもよい。
【０１３４】
本実施の形態では、ＴＰ（ＲＰ）ごとに異なるアクセス権限を付与する場合について例示した。すなわち、本実施の形態では、同一のＴＰに属するタスクに対して同一のアクセス権限を付与する場合について例示したが、これに限られない。例えば、タスクごとに異なるアクセス権限を付与するようにしてもよい。この場合は、タスクごとにＡＳＩＤが一意に定義されることになる。また、この場合は、実施の形態２おいて、切り替え先のＴＰに属するタスクのそれぞれで利用するページに関して、ＭＭＵ確認ルーチン２９を実行するようにすればよい。
【０１３５】
本実施の形態では、タイム・パーティショニングを採用したマルチタスクＯＳについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクＯＳに適用することもできる。この場合は、タスクごとにＡＳＩＤが一意に定義されることになる。
【０１３６】
本実施の形態では、ＭＭＵ１４の管理対象をＲＡＭである実行用メモリ１１とした場合について例示したが、これに限られない。例えば、ＭＭＵが管理対象とする記憶装置は、ＲＯＭであってもよい。また、ＭＭＵが管理対象とする記憶装置は、ＲＡＭ及びＲＯＭの組み合わせであってもよい。
【０１３７】
また、ＭＭＵ確認ルーチンを実施前に、プロセッサ１０に対するＭＭＵに関連しない割り込みを抑止して、ＭＭＵ確認ルーチンの実施後に、割り込み抑止を解除するようにしてもよい。このようにすることで、ＴＬＢのエントリに検査時のデータが格納されたまま、他の処理が行われることを防止することができる。
【０１３８】
本実施の形態では、ＭＭＵによってメモリ保護機能を実装する場合について例示したが、これに限られない。例えば、ＭＰＵによってメモリ保護機能を実装するようにしてもよい。
【符号の説明】
【０１３９】
１、２  安全制御装置
１０  プロセッサ
１１  実行用メモリ
１２  Ｉ／Ｏポート
１３  不揮発性メモリ
１４  ＭＭＵ
１５  リセット回路
２０  マイクロコントローラ
２１、３０  パーティションスケジューラ
２２、３３  スケジューリングテーブル
２３、２５、２７、３１  タスクスケジューラ
２４、３４  安全監視タスク
２６、３５、３８  通常制御タスク
２８、３６、３９  安全制御タスク
２９  ＭＭＵ確認ルーチン
３２  ＭＭＵ確認タスク
３７  監視制御タスク
４０  監視タスク
４１  制御タスク
４２  ＨＭＩタスク
１００、２００  オペレーティングシステム
１０１  安全監視アプリケーション
１０２  通常制御アプリケーション
１０３  安全制御アプリケーション
１０４  ＭＭＵ確認アプリケーション
【図１】
0005664530.tif 000002
【図２】
0005664530.tif 000003
【図３】
0005664530.tif 000004
【図４】
0005664530.tif 000005
【図５Ａ】
0005664530.tif 000006
【図５Ｂ】
0005664530.tif 000007
【図６】
0005664530.tif 000008
【図７】
0005664530.tif 000009
【図８】
0005664530.tif 000010
【図９】
0005664530.tif 000011
【図１０】
0005664530.tif 000012
【図１１】
0005664530.tif 000013
【図１２】
0005664530.tif 000014
【図１３Ａ】
0005664530.tif 000015
【図１３Ｂ】
0005664530.tif 000016
【図１４】
0005664530.tif 000017
【図１５】
0005664530.tif 000018
【図１６】
0005664530.tif 000019
【図１７】
0005664530.tif 000020
【図１８】
0005664530.tif 000021