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