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