以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
<発明の実施の形態>
本実施の形態にかかる安全制御装置1は、サービスロボットや運輸機器等に搭載されて機能安全確保のための安全制御を実行する。安全制御装置1は、安全関連アプリケーションと非安全関連アプリケーションを同一のコンピュータシステムで実行するよう構成される。図1は、本実施の形態にかかる安全制御装置1の構成例を示すブロック図である。
プロセッサ10は、プログラム(命令ストリーム)の取得、命令のデコード、命令のデコード結果に応じた演算処理を行う。なお、図1では、1つのプロセッサ10のみを示しているが、安全制御装置1は、複数のプロセッサ10を有するマルチプロセッサ構成であってもよい。また、プロセッサ10は、マルチコアプロセッサでもよい。プロセッサ10は、システムプログラムとしてのオペレーティングシステム(OS)100を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。本実施の形態のプロセッサ10が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
実行用メモリ11は、プロセッサ10によるプログラム実行のために使用されるメモリである。実行用メモリ11には、不揮発性メモリ13からロードされたプログラム(OS100及びアプリケーション101〜103等)、プロセッサ10の入出力データ等が記憶される。なお、プロセッサ10は、プログラムを不揮発性メモリ13から実行用メモリ11にロードすることなく、これらのプログラムを不揮発性メモリ13から直接実行してもよい。
具体的には、実行用メモリ11は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)等のランダムアクセス可能な揮発性メモリとすればよい。図1の実行用メモリ11は、論理的な構成単位を示している。すなわち、実行用メモリ11は、例えば、複数のSRAMデバイスの組み合わせ、複数のDRAMデバイスの組み合わせ、又はSRAMデバイスとDRAMデバイスの組み合わせでもよい。
I/Oポート12は、外部デバイスとの間のデータ送受信に使用される。例えば、安全制御装置1がサービスロボットに搭載される場合であれば、外部デバイスは、各種センサ及びサービスロボットを動作させるアクチュエータ等である。この場合、各種センサは、例えば、サービスロボット周囲の障害物を計測可能な視覚センサ、サービスロボットの姿勢を検知するための姿勢センサ、及びサービスロボットのアクチュエータの状態を検知するための回転センタ等のサービスロボットの内外の状態を検出するセンサを含む。
不揮発性メモリ13は、電力の供給を受けることなく、実行用メモリ11に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ13は、ROM(Read Only Memory)、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ13は、OS100及びアプリケーション101〜103を格納する。なお、不揮発性メモリ13の少なくとも一部は安全制御装置1から取り外し可能に構成されてもよい。例えば、アプリケーション101〜103が格納されたメモリを取り外し可能としてもよい。また、不揮発性メモリ13の少なくとも一部は、安全制御装置1の外部に配置されてもよい。
OS100は、プロセッサ10によって実行されることにより、プロセッサ10及び実行用メモリ11及び不揮発性メモリ13等のハードウェア資源を利用して、タスクスケジューリングを含むタスク管理、割り込み管理、時間管理、資源管理、タスク間同期およびタスク間通信機構の提供等を行う。
さらに、機能安全の確保に関連する安全監視アプリケーション101及び安全制御アプリケーション103の通常制御アプリケーション102からの独立性を高めるため、OS100は、ハードウェア資源を、時間的および空間的に保護する機能を有する。ここで、ハードウェア資源とは、プロセッサ10、実行用メモリ11、I/Oポート12を含む。
このうち、時間的な保護は、プロセッサ10の実行時間という時間的な資源をパーティショニングすることにより行う。具体的に述べると、時間的な保護は、プロセッサ10の実行時間をパーティショニングし、各パーティション(タイムパーティションと呼ぶ)にタスク(プロセス又はスレッド)を割り当てることにより行う。OS100のスケジューリング機能(パーティションスケジューラ21)は、各タイムパーティション(以下、TPと略称する場合がある。)に割り当てられたタスクに対して、プロセッサ10の実行時間を含む資源の利用を保証する。
図2は、タイム・パーティショニングに関する概念図である。図2の例では、予め定められた1サイクル時間を3つのTP1、TP2及びTP3に分割する例を示している。例えば、1サイクル時間を100Tickとした場合、このうち前半の20TickがTP1、中間の30TickがTP2、後半の50TickがTP3と規定される。
また、図2の例では、第1アプリケーション(APL1)〜第4アプリケーション(APL4)が、TP1〜TP3のいずれかに割り当てられている。OS100のスケジューリング機能(パーティションスケジューラ21)は、時間の経過に応じて、TP1〜TP3のいずれをアクティブにするかを選択・決定する。そして、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
一方、空間的な保護は、実行用メモリ11及びI/Oポート12を含む固定的な資源をパーティショニングし、各パーティション(リソースパーティションと呼ぶ)にタスクを割り当てることにより行う。OS100のスケジューリング機能(パーティションスケジューラ21)は、予め割り当てられたリソースパーティション(以下、RPと略称する場合がある。)を超えてタスクが他のリソースにアクセスすることを禁止する。
図3は、リソース・パーティショニングに関する概念図である。図3の例では、2つのRP(RP1及びRP2)を示している。RP1には、実行用メモリ11及び不揮発性メモリ13の一部(A領域)と、I/Oポート12の一部(ポートA)が割り当てられている。また、RP2には、実行用メモリ11及び不揮発性メモリ13の他の一部(B領域)と、I/Oポート12の他の一部(ポートB)が割り当てられている。RP1からはRP2に割り当てられたリソースへのアクセスが禁止され、RP2からはRP1に割り当てられたリソースへのアクセスが禁止される。実行用メモリ11におけるリソース・パーティショニングは、後述するMMUのメモリ保護機能を利用して実現される。
なお、全てのリソースがいずれかのRPに排他的に割り当てられる必要はない。つまり、複数のRPによって共有されるリソースがあってもよい。例えば、サービスロボットの安全制御を行う場合、アクチュエータには、通常制御アプリケーション102及び安全制御アプリケーション103の双方からアクセスできる必要がある。よって、通常制御アプリケーション102が属するRPと安全制御アプリケーション103が属するRPによって、アクチュエータを制御するためのI/Oポートを共有するとよい。
図1に戻り説明を続ける。アプリケーション101〜103は、OS100及びプロセッサ10によって提供されるマルチプログラミング環境で実行される。このうち、安全監視アプリケーション101は、通常制御アプリケーション102の実行状況の監視と、安全制御アプリケーション103の実行状況の監視と、I/Oポート12への入出力データの監視と、をプロセッサ10に実行させるための命令コードを含む。さらに、安全監視アプリケーション101は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全監視アプリケーション101は、安全関連アプリケーションである。
また、通常制御アプリケーション102は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、通常制御アプリケーション102は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、通常制御アプリケーション102は、非安全関連アプリケーションである。
また、安全制御アプリケーション103は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御手順をプロセッサ10に実行させるための命令コードを含む。さらに、安全制御アプリケーション103は、パーティションスケジューラ21への結果通知をプロセッサ10に実行させるための命令コードを含む。つまり、安全制御アプリケーション103は、安全関連アプリケーションである。
MMU14は、メモリ保護機能及び仮想記憶管理機能を有する。メモリ保護機能は、プロセッサ10から実行用メモリ11に対するアクセスを監視して、メモリ保護違反となるアクセスを検出する機能である。プロセッサ10から実行用メモリ11のあるアドレスに対するアクセスがあったときに、そのアクセスがそのアドレスに対するアクセス権限を有しているか否かを判定する。そして、そのアクセスがそのアドレスに対するアクセス権限を有していない場合には、そのアクセスをTLB保護違反(メモリ保護違反)として検出するとともに、TLB保護違反をプロセッサ10に通知する。また、この場合、MMU14は、実行用メモリ11に対するアクセスを抑止するようにしてもよい。
MMU14は、このメモリ保護機能によって、実行用メモリ11におけるリソース・パーティショニングを実現する。具体的には、図3に例示する場合には、RP1に属するタスクには、RP1に割り当てられた実行用メモリ11の領域のみにアクセス可能なアクセス権限が付与され、RP2に属するタスクには、RP2に割り当てられた実行用メモリ11の領域のみにアクセス可能なアクセス権限が付与される。これによって、例えば、RP1に属するタスクが、RP2に割り当てられた実行用メモリ11の領域に対してアクセスした場合に、MMU14は、そのアクセスをTLB保護違反として検出する。アクセス権限は、実行用メモリ11のページ単位に付与される。また、1ページのサイズとして、予め任意のサイズを定めることができる。
仮想記憶管理機能は、プロセッサ10が実行用メモリ11にアクセスするときに指定された仮想アドレスを、その仮想アドレスに対応する物理アドレスに変換する機能である。すなわち、MMU14は、仮想記憶管理機能によって、プロセッサ10からの仮想アドレスを指定した実行用メモリ11へのアクセスを、その仮想アドレスが示す実行用メモリ11上のアドレスと同一のアドレスを示す物理アドレスを指定した実行用メモリ11へのアクセスに変換して、実行用メモリ11に発行する。
図4は、MMU14の構成例を示すブロック図である。MMU14は、制御部141及びTLB142を有する。ここで、アクセス権限及び仮想アドレスに対応する物理アドレスは、プロセッサ10によって、MMU14が有するTLB142に設定される。TLB142は、例えば、MMU14が有するレジスタ及びメモリ等の記憶装置である。TLB142は、複数のエントリを含んでいる。なお、図4では、TLB142のエントリ数が64の場合について例示しているが、TLB142のエントリ数は、これに限られない。1エントリには、1つのページについての内容が設定される。1エントリには、ASID(アドレス空間識別子:Address Space Identification)、仮想アドレス、その仮想アドレスに対応する物理アドレス、そのASIDのタスクによるその物理アドレスのページに対するアクセス権限等が設定される。
ASIDは、RPごとに一意に定められた値をとる。なお、本実施の形態では、1つのTPに1つのRPが対応することになるため、ASIDは、TPごとに一意に定められた値ともなる。TLB142における仮想アドレスとして、仮想アドレスのうち、ページを特定可能な一定の範囲を示す仮想ページ番号が設定されることが一般的である。物理アドレスについても同様である。この場合は、仮想アドレスのうち、仮想ページ番号に該当する範囲を物理ページ番号とされているアドレスに置き換え、その他のオフセットアドレスを示す範囲をそのまま用いることで、仮想アドレスを物理アドレスに変換することができる。アクセス権限としては、データの読み出し権限、データの書き込み権限、及び、データ(命令)の実行権限の有無を設定することができる。すなわち、アクセス権限は、アクセス種別(読み出し、書き込み、又は実行)ごとに、その有無を設定することが可能である。
例えば、実行用メモリ11上のあるページについて、あるTPに属するタスクからのデータの読み出し及び書き込みを許容する場合、エントリには、そのTPに対応するASID、そのページの仮想アドレス、そのページの物理アドレス、及び、読み出し権限及び書き込み権限を有りとしたアクセス権限等が設定される。
プロセッサ10は、実行用メモリ11上のあるページ内のあるアドレスに対して、データの読み出し又は書き込みによるアクセスを行う場合、ASID、仮想アドレス、及びアクセス種別(読み出し又は書き込み)を指定したアクセスをMMU14に発行する。すなわち、ASID、仮想アドレス、及びアクセス種別のそれぞれを示す信号がMMU14に出力される。ASIDには、そのアクセスの発行元となったタスクに応じた値が指定される。すなわち、指定されたASIDを参照することで、どのTPに属するタスクの権限でのアクセスかを特定することができる。なお、本実施の形態では、同一のTPに属するタスクからアクセスには同一のASIDが指定されることになる。また、アクセス種別が書き込みである場合は、さらに実行用メモリ11に書き込むデータも指定される。
MMU14の制御部141は、TLB142を参照して、指定されたASIDが設定されており、指定された仮想アドレスが設定されており(又は仮想ページ番号が一致する)、かつ、指定されたアクセス種別の権限が有りに設定されているエントリを検出できた場合、そのアクセスを許容する。この場合、制御部141は、検出したエントリに基づいて、アクセスにおいて指定された仮想アドレスを物理アドレスに変換して、変換後の物理アドレスとアクセス種別を指定したアクセスを実行用メモリ11に発行する。すなわち、物理アドレス及びアクセス種別のそれぞれを示す信号が実行用メモリ11に出力される。また、アクセス種別が書き込みである場合は、さらに実行用メモリ11に書き込むデータも指定される。
また、プロセッサ10は、実行用メモリ11上のあるページ内のあるアドレスに対して、データ(命令)の実行によるアクセスを行う場合、ASID及び仮想アドレスを指定したアクセスをMMU14に発行する。制御部141は、上述と同様に、アドレスの変換及びアクセス権限のチェックを行う。すなわち、ここでのチェックでは、データ(命令)の実行権限の有無が判定される。そして、制御部141は、そのアクセスを許容する場合、変換後の物理アドレスを指定したアクセスを実行用メモリ11に発行する。
実行用メモリ11は、MMU14からのアクセスに応じて、そのアクセスに応じたデータの処理を行う。具体的には、実行用メモリ11は、読み出し又は書き込みによるアクセスであり、かつ、アクセス種別が読み出しである場合は、指定された物理アドレスのデータをプロセッサ10に出力する。実行用メモリ11は、読み出し又は書き込みによるアクセスであり、かつ、アクセス種別が書き込みである場合は、指定された物理アドレスに、指定されたデータを書き込む。実行用メモリ11は、データ(命令)の実行によるアクセスである場合、指定された物理アドレスのデータをプロセッサ10に出力する。
一方、制御部141は、TLB142を参照して、アクセスで指定された仮想アドレスが設定されており(又は仮想ページ番号が一致する)、かつ、指定されたASIDが設定されているエントリを検出したが、そのエントリにおいて、指定されたアクセス種別の権限が有りに設定されていない場合は、TLB保護違反を検出する。なお、アクセスで指定された仮想アドレス及び指定されたASIDが設定されているエントリを検出できなかった場合は、TLBミスヒットが検出されることになる。
制御部141は、TLBミスヒットを検出した場合、TLBミスヒットをプロセッサ10に通知する。また、制御部141は、TLBのエントリの中から、更新対象となるエントリを選択する。プロセッサ10は、制御部141からのTLBミスヒットの通知に応じて、TLBミスヒットとなったアクセスで指定していたASID及び仮想アドレスに基づいて、TLB142のエントリの情報(以下、「エントリ情報」とも呼ぶ)を作成する。この情報は、TLBミスヒットとなったアクセスで指定していたASID及び仮想アドレス、その仮想アドレスに対応する物理アドレス、そのASIDによるその物理アドレスで示されるページに対するアクセス権限を示す情報となる。プロセッサ10は、作成した情報をMMU14に出力する。制御部141は、プロセッサ10から出力された情報で、更新対象として選択したエントリを更新する。そして、プロセッサ10は、TLBミスヒットとなったアクセスと同一のアクセスを、再度、MMU14に発行する。これによって、TLBミスヒットが発生することなく、アクセス権限の判定が行われるようになる。
ここで、本実施の形態では、遅延無く実行することが好ましいタスクに関するエントリには、図5に示すように、ASIDとして、そのようなタスクであることを示す値を設定する。以下、この値を「Wild」と呼ぶ。なお、遅延無く実行することが好ましいタスクとして、安全関連アプリケーションを実行することによって生成されるタスクが該当する。すなわち、安全関連アプリケーションから生成された安全関連のタスクのASIDは、Wildに変換されてTLBのエントリに格納される。制御部141は、更新対象となるエントリを選択する場合、ASIDとしてWildが設定されていないエントリを優先的に選択する。これによれば、遅延無く実行することが好ましい安全関連のタスクに関するエントリがTLB142に存在する確率を高めることができる。すなわち、エントリの更新のために安全関連のタスクによるメモリアクセスが遅延する確率を低減することができる。また、安全関連のタスクによるメモリアクセスが待たされて、安全関連のタスクにおける処理が遅延する確率を低減することができる。
ここで、図5では、TLB142のエントリにおいて、仮想アドレスと物理アドレスに同一のアドレスが設定されている場合について例示しているが、異なるアドレスを設定するようにしてもよい。また、このように、仮想アドレスから物理アドレスへの変換が不要である場合は、MMU14の仮想記憶管理機能を無効にして、MMU14を利用するようにしてもよい。この場合、プロセッサ10は、物理アドレスを指定してメモリアクセスを発行することになる。また、この場合、制御部141は、プロセッサ10からのアクセスで指定された物理アドレスをそのまま指定したアクセスを実行用メモリ11に発行する。この場合は、TLB142には、例えば、図5に示すように、仮想アドレスに物理アドレスと同一のアドレスを設定しておけばよい。または、MMU14がTLB142の物理アドレスを参照して、上述したエントリの検出を行うようにしてもよい。
ここで、図6を参照して、ASIDからのWildの生成方法について説明する。Wildは、ASIDの値のうち、予め定められた位置のビット値をオン"1"に変化させた値として生成される。例えば、ASIDの下位から17ビット目を変化させる場合、図6に示すように、ASIDが"0x0001"である場合は、Wildとして"0x0101"が生成され、ASIDが"0x0002"である場合は、Wildとして"0x0102"が生成される。これは、例えば、下位から17ビット目の値を反転させることによって生成するようにしてもよく、下位から17ビット目がオンとなっている値"0x0100"との論理和として生成するようにしてもよい。プロセッサ10は、安全関連のタスクに関するエントリの情報を生成する場合には、このようにASIDをWildに変換してエントリの情報を生成する。
制御部141は、プロセッサ10からのメモリアクセスで指定されたASIDを検出する場合には、Wildであることを示すビット"1"を"0"にマスクしてから、指定されたASIDと比較する。例えば、図6に示す例では、下位から17ビット目の値を反転させることによってマスクするようにしてもよく、下位から17ビット目がオンとなっている値"0x0100"との論理和としてマスクするようにしてもよい。
なお、Wildの生成方法は、通常のASIDの値との違いを識別することができれば、上述した生成方法に限られない。例えば、図6の例では、1ビットのみの値を変化させた場合について例示したが、複数のビット値をオン"1"に変化させるようにしてもよい。また、ASIDの特定のビット位置のビット値を参照することで、Wildの値と、それ以外の値とを区別することができれば、これらにも限定されない。例えば、Wildである場合には、特定のビット値がオフ"0"となっており、Wildでない場合には、そのビット値がオン"1"となっているようにしてもよい。
なお、図1では、MMU14を、プロセッサ10の外部に有する場合について例示したが、プロセッサ10がMMU14を有するようにしてもよい。すなわち、プロセッサ10が、制御部141及びTLB142を有するようにしてもよい。
リセット回路15は、OS100からの信号に基づき、マイクロコントローラ20のリセットを行う。パーティションスケジューラ21からリセット回路15に定期的に送信信号を送信するようにし、リセット回路15は、パーティションスケジューラ21からの送信信号が途絶えた場合に、マイクロコントローラ20をリセットする。例えば、パーティションスケジューラ21は、後述するように、1Tickごとに動作するタイミングで送信信号を送信する。また、OS100で異常を検知した場合、又は、アプリケーション101〜103のいずれかから異常を示す結果通知を受けた場合に、パーティションスケジューラ21がリセット回路15にリセット信号を送信するようにして、それに応じて、リセット回路15がマイクロコントローラ20をリセットするようにしてもよい。このようにすることで、マイクロコントローラ20に不具合が発生した場合に、マイクロコントローラ20をリセットして復旧することができる。
続いて以下では、パーティションスケジューラ21と、アプリケーション101〜103の起動により生成されるタスクと、の関係について、図7を用いて説明する。図7は、OS100によって提供されるマルチプログラミング環境で起動される、パーティションスケジューラ21とタスク24、26、28との関係を示す図である。
マイクロコントローラ20は、プロセッサ10、実行用メモリ11、I/Oポート12、不揮発性メモリ13、MMU14等を含む。なお、図7では、マイクロコントローラ20の外部にリセット回路15を備える構成を例示しているが、マイクロコントローラ20の内部にリセット回路15を含む構成としてもよい。
マイクロコントローラ20には、外部のクロック源からのクロック信号が供給され、プロセッサ10等は、このクロック信号に基づく所定のタイマー周期で動作する。本実施の形態では、所定のタイマー周期を、1Tickであるとして説明する。このため、プロセッサ10によりOS100が実行されることで、パーティションスケジューラ21が1Tickごとに動作すると共に、各TPにおいて、タスクスケジューラ23、25、27およびタスク(安全監視タスク24、通常制御タスク26、安全制御タスク28)が1Tickごとに動作する。
パーティションスケジューラ21は、1Tickごとに動作し、TPの切り替え(パーティション・スケジューリング)を行う。パーティションスケジューラ21は、次の1Tickの間にTP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21は、選択したTPに関するタスクスケジューラの動作を開始させる。
パーティションスケジューラ21によるパーティション・スケジューリングについて具体的に述べると、パーティションスケジューラ21は、スケジューリングテーブル22を参照し、TPの設定を定めたスケジューリングパターンに従って、パーティション・スケジューリングを行う。
スケジューリングテーブル22は、TPの切り替え順序およびタイミングを規定したスケジューリングパターンを保持している。スケジューリングテーブル22は、例えば、実行用メモリ11に予め格納されている。なお、スケジューリングテーブル22は、少なくとも2つの異なるスケジューリングパターンを保持している。1つは、安全監視タスク24による異常検知が行われていない場合(つまり通常時)に適用されるスケジューリングパターンである。もう1つは、安全監視タスク24によって異常が検知された場合に適用されるスケジューリングパターンである。以下では、通常時に適用されるスケジューリングパターンを"通常制御スケジューリングパターン"と呼ぶ。また、異常検知時に適用されるスケジューリングパターンを"安全制御スケジューリングパターン"と呼ぶ。
図8Aは、通常制御スケジューリングパターンの具体例を示している。図8Aでは、通常制御タスク26が属するTP2が1サイクル時間の前半(T1)に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半(T2)に割り当てられている。図8Aのスケジューリングパターンによれば、通常制御タスク26と安全監視タスク24が繰り返しスケジューリングされる。
図8Bは、安全制御スケジューリングパターンの具体例を示している。図8Bでは、安全制御タスク28が属するTP3が1サイクル時間の前半(T3)に割り当てられている。また、安全監視タスク24が属するTP1が1サイクル時間の後半(T4)に割り当てられている。図8Bのスケジューリングパターンによれば、安全制御タスク28と安全監視タスク24が繰り返しスケジューリングされる。
図7に戻り説明を続ける。タスクスケジューラ23、25、27は、それぞれが属するTP内でのタスクのスケジューリングを行う。各TP内でのタスクのスケジューリングには、一般的な優先度ベースのスケジューリングを適用すればよい。なお、図7では、各TPはそれぞれ1つのタスクのみを含むものとして図示しているが、1以上のタスクが含まれるようにしてもよい。例えば、通常制御用のTP2内には、通常制御タスクA及び通常制御タスクBの2つのタスクが含まれていてもよい。
安全監視タスク24は、安全監視アプリケーション101の起動によって生成されるタスクである。図7の例では、安全監視タスク24は、TP1及びRP1に割り当てられている。安全監視タスク24は、非安全関連アプリケーションである通常制御タスク26の実行状況の監視と、安全関連アプリケーションである安全制御タスク28の実行状況の監視と、I/Oポート12の入出力データを監視する。安全監視タスク24は、自身が属するRP1に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全監視タスク24は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
通常制御タスク26は、通常制御アプリケーション102の起動によって生成されるタスクである。図7の例では、通常制御タスク26は、TP2及びRP2に割り当てられている。通常制御タスク26は、サービスロボット等の制御対象に通常の機能・動作を行わせるための制御を行う。通常制御タスク26は、自身が属するRP2に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、通常制御タスク26は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
安全制御タスク28は、安全制御アプリケーション103の起動によって生成されるタスクである。図7の例では、安全制御タスク28は、TP3及びRP3に割り当てられている。安全制御タスク28は、何らかの異常が検出された場合に対応して、機能安全を確保するために定められた制御を行う。安全制御タスク28は、自身が属するRP3に割り当てられた実行用メモリ11のリソースを使用しながら、自身の処理を実行するために必要な演算等を行う。さらに、安全制御タスク28は、タスクの実行状況を、パーティションスケジューラ21へ通知する。
なお、各タスクからパーティションスケジューラ21へと結果を通知する具体的な構成としては、様々な手法を採用することができる。例えば、タスクがOS100のシステムコール(サービスコール)を呼び出し、OS100を介して、パーティションスケジューラ21に結果を通知することができる。具体的には、例えば、タスク間通信を行うシステムコールを呼び出す。また、例えば、タスクの実行状況に関するフラグを実行用メモリ11に格納するものとして、タスクがその実行状況に応じてフラグの値を設定し、パーティションスケジューラ21がフラグの設定値に応じてタスクの実行状況を判断することもできる。
以上より、安全監視タスク24及び安全制御タスク28は、タスクの実行状況及び制御対象等の監視や、機能安全を確保するために定められた制御等のように、制御対象の機能安全の確保に関する処理を実行するタスクとなる。それに対して、通常制御タスク26は、その他の制御対象の制御に関する処理を実行するタスクとなる。そのため、安全監視タスク24及び安全制御タスク28は、遅延無く実行することが好ましい安全関連のタスクとなり、通常制御タスク26は、安全監視タスク24及び安全制御タスク28と比較して、実行の遅延が許容される非安全関連のタスクとなる。
OS100は、TLB管理ルーチン29を含んでいる。TLB管理ルーチン29は、OS100の起動時、又は、MMU14からのTLBミスヒットの通知時などに、TLB142のエントリ情報を作成するルーチンである。具体的には、TLB管理ルーチン29は、MMU14からTLBミスヒットが通知されたときに、上述したように、そのTLBミスヒットを引き起こしたアクセスにおいて指定していたASID及び仮想アドレスに基づいて、TLB142のエントリ情報を作成する。そして、TLB管理ルーチン29は、作成したエントリ情報をMMU14に出力する。その結果、上述したように、制御部141によって、TLB142のいずれかのエントリがTLB管理ルーチン29から出力されたエントリ情報によって更新される。
上述したように、パーティションスケジューラ21が1Tickごとに動作し、TP1〜TP3のいずれをアクティブにするかを選択・決定する。さらに、パーティションスケジューラ21が、選択したTPに関するタスクスケジューラの動作を開始させる。そして、タスクスケジューラ23、25、27が動作を開始することでタスクのスケジューリングが行われ、プロセッサ10が、タスクスケジューラ23、25、27によりスケジューリングされた順序に従って、TP内でのタスクを実行していく。これによって、アクティブなTPに割り当てられているアプリケーションが、プロセッサ10で実行される。
続いて以下では、パーティションスケジューラ21によるパーティション・スケジューリングについて、図9を用いて説明する。図9は、発明の実施の形態1にかかるパーティションスケジューラ21の処理手順の具体例を示すフローチャートである。
なお、図9では、通常制御スケジューリングパターン(例えば図8A)または安全制御スケジューリングパターン(例えば図8B)に従って、スケジューリングを実行する場合を例に説明する。すなわち、TP2またはTP3に続く次のTPはTP1であり、かつ、TP2での異常がTP1で検知された場合に、TP1からの結果を受けて次に選択・決定されるTPはTP3である場合を例に説明する。
OS100は、1Tick経過するごとに(S11)、パーティションスケジューラ21を起動する(S12)。パーティションスケジューラ21は、スケジューリングパターンを参照して、TPの切り替えタイミングか否かを判定する(S13)。
TPの切り替えタイミングでないと判定した場合(S13でNo)、パーティションスケジューラ21は、同一のTPXについての動作を継続させる。このため、TPの切り替えタイミングとなるまでの間、S11〜S13、S15、S16の処理が繰り返される。ここで、変数XはTPの番号を示し、Xは1〜3のうちのいずれかの値となる。すなわち、通常制御スケジューリングパターンに従ってパーティション・スケジューリングを実施している場合は、安全制御用のTP3を除いた、TP2及びTP1のいずれかを動作させる。
一方、TPの切り替えタイミングであると判定した場合(S13でYes)、パーティションスケジューラ21は、TPの切り替えを実行する(S14)。このように、パーティションスケジューラ21は、次にアクティブにするTPを変更する(S13でYes)場合には、さらに、切り替え前のTPに属するタスクからの通知結果に応じて、切り替え前のTPが正常であったか否かを判断する。判断の結果、切り替え前のTPが異常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、安全制御スケジューリングパターンに従って、TP1及びTP3のいずれかから選択・決定する。判断の結果、正常であった場合、パーティションスケジューラ21は、次の1Tickの間にアクティブにするTPXを、通常制御スケジューリングパターンに従って、TP1及びTP2のいずれかを選択・決定する。
パーティションスケジューラ21は、現在アクティブになっているTPXのタスクスケジューラを動作させる(S15)。S15で動作を開始したTPXのタスクスケジューラは、TPX内のタスクを優先度に応じて実行する(S16)。
そして、1Tickが経過すると(S11)、パーティションスケジューラ21が、再びTPのスケジューリングを開始する(S12)。すなわち、パーティションスケジューラ21は、スケジューリングパターンに従って、次の1Tickの間にいずれのTPをアクティブにするかを選択・決定する。
図9で示した処理に関して、パーティション・スケジューリングの具体例を説明する。まず、図8Aに例示した通常制御スケジューリングパターンに従って、S15においてTP2がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S15ではTPX=TP2として開始し、続くS16、S11〜S13にかけてもTPX=TP2のままである。そして、S13でNoが続く限り、TPX=TP2の状態が維持される。S13でYesとなり、S14でTP2からTP1へと変更された場合、続くS15〜S16、S11〜S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S16で、TP2に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2となる(つまり、TP2から開始する通常制御スケジューリングパターンが継続される。)。一方で、S16で、TP2に関する実行状況(データ入出力等)が異常であると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンに切り替わる。)。
また、図8Bに例示した安全制御スケジューリングパターンに従って、S15においてTP3がアクティブの状態からスケジューリングを開始した場合を説明する。この場合、S15ではTPX=TP3として開始し、続くS16、S11〜S13にかけてもTPX=TP3のままである。そして、S13でNoが続く限り、TPX=TP3の状態が維持される。S13でYesとなり、S14でTP3からTP1へと変更された場合、続くS15〜S16、S11〜S13にかけてTP1のままである。そして、S13でNoが続く限り、TPX=TP1の状態が維持される。TP1がアクティブのときに、S16で、TP3に関する実行状況(データ入出力等)が正常であると判定されていた場合には、次のS14では、TPX=TP2とする(つまり、TP2から開始する通常制御スケジューリングパターンに切り替わる。)。一方で、S16で、TP3に関する実行状況(データ入出力等)に異常があると判定されていた場合には、次のS14で、TPX=TP3となる(つまり、TP3から開始する安全制御スケジューリングパターンが継続される。)。
なお、上述の例では、スケジューリングパターンとして、3つのTP(安全監視用のTP1、通常制御用のTP2、安全制御用のTP3)のみを組み合わせた場合を例に説明したが、TP2のような通常制御用パーティションや、TP3のような安全制御用パーティションについては、それぞれ複数個存在するものとしてもよい。例えば、2つの通常制御用のTP2及びTP4と、安全監視用のTP1と、2つの安全制御用のTP3及びTP5と、が存在し、これら5つのTP(TP1〜TP5)を組み合わせてスケジューリングパターンを構成してもよい。この場合、S14では、パーティションスケジューラ21が、TPXに関する実行状況(データ入出力等)の異常状態の種類を判定し、その異常種類に応じて、安全制御用のTP3またはTP5のいずれかを選択すればよい。また、S14では、通常制御用のTP2またはTP4のいずれかを選択すればよい。
上述したように、本実施の形態では、OS100は、安全監視用のTP1からの通知、または、各TPからの通知に応じて、次にアクティブとするパーティションを選択・決定するパーティションスケジューラ21を備えている。パーティションスケジューラ21は、各TPにおいて実行されるタスクとは独立して、所定のタイマー周期で動作する。
独立に動作するパーティションスケジューラ21が、全てのTPから結果通知を受ける構成とすることで、パーティションスケジューラ21は、全てのTPに関する状況を一元的に把握することができる。このため、例えば、安全監視用のTP1からの結果通知に応じて、パーティションスケジューラ21が次のパーティションを決定・選択しようとする場合には、パーティションスケジューラ21は、各TPの状況を考慮した上で、正常状態にあるTPのみから次のパーティションを決定・選択することもできる。これによれば、より正確なパーティション・スケジューリングを実現することができるという効果を奏する。
続いて、図10を参照して、本発明の実施の形態にかかるエントリ情報登録処理の処理手順について説明する。図10は、本発明の実施の形態にかかるエントリ情報登録処理の処理手順の具体例を示すフローチャートである。
OS100は、その起動時に、TLB管理ルーチン29を実行することによって、TLB142のエントリ情報の作成及び登録のための処理を開始する(S21)。なお、以降の処理は、OS100の起動時以外にも、TLBミスヒットが発生した場合にも実行される。まず、OS100は、TLB142のエントリ情報を作成する(S22)。このとき、OS100は、安全関連のTP(TP1、TP3)に属するタスクに関するエントリ情報(以下、「安全関連のTPのエントリ情報」も呼ぶ)を作成する場合には、上述したように、ASIDをWildに変換したエントリ情報を作成する。OS100は、作成したエントリ情報をMMU14に出力する。
MMU14の制御部141は、OS100によってプロセッサ10から出力されたエントリ情報が、安全関連のTPに関するエントリ情報であるか否かを判定する(S23)。安全関連のTPに関するエントリ情報であるか否かは、例えば、エントリ情報のASIDがWildか否かによって判定する。
エントリ情報が安全関連のTPに関するエントリ情報でない場合(S23でNo)、制御部141は、TLB142のエントリに空きがあるか否かを判定する(S24)。TLB142のエントリに空きがある場合(S24でYes)、制御部141は、空いているエントリのいずれかに、プロセッサ10から出力されたエントリ情報を格納する(S25)。これによって、ASIDがWildでない通常(非安全関連)のTP(TP2)に属するタスクに関するエントリ情報(以下、「通常のTPに関するエントリ情報」と呼ぶ)がTLB142に登録される。TLB142のエントリに空きがない場合(S24でNo)、制御部141は、通常のTPに関するエントリ情報のいずれかを排除して、そのエントリにプロセッサ10から出力されたエントリ情報を格納する(S26)。すなわち、制御部141は、通常のTPに関するエントリ情報が格納されたエントリのいずれかを更新対象のエントリとして選択し、選択したエントリを、プロセッサ10から出力されたエントリ情報で上書きする。これによって、ASIDがWildでない通常のTPのエントリ情報がTLB142に登録される。
エントリ情報が安全関連のTPに関するエントリ情報である場合(S23でYes)、制御部141は、TLB142に、安全関連のTPのエントリ情報が登録されていないエントリが2つ以上あるか否かを判定する(S27)。すなわち、通常のTPが格納されているエントリ及び空いているエントリが合計で2つ以上あるか否かを判定する。
安全関連のTPのエントリ情報が登録されていないエントリが2つ以上ない場合(S27でNo)、制御部141は、安全関連のTPに関するエントリ情報のうち、実行回数が少ないアクセスに関するエントリ情報を排除して、そのエントリにプロセッサ10から出力されたエントリ情報を格納する(S28)。すなわち、制御部141は、安全関連のTPに関するエントリ情報のうち、実行回数が少ないアクセスに関するエントリ情報が格納されたエントリを更新対象のエントリとして選択し、選択したエントリを、プロセッサ10から出力されたエントリ情報で上書きする。これによって、ASIDがWildである安全関連のTPのエントリ情報がTLB142に登録される。
ここで、アクセスの実行回数は、実測値を用いてもよく、推定値を用いてもよい。例えば、実測値を用いる場合は、プロセッサ10から実行用メモリ11に対するアクセスがあったときに、そのアクセスで指定されたASID及び仮想アドレスから検出したエントリのエントリ情報に関するアクセスの実行回数をカウントアップすることで計測する。計測した実行回数は、エントリ情報と関連付けて、MMU14が有する記憶装置に格納しておき、S28での判定時に制御部141が参照可能としておけばよい。MMU14が有する記憶装置としては、レジスタ又はメモリ等の任意の記憶装置を用いてよい。
また、例えば、推定値を用いる場合は、スケジューリングテーブル22に基づいて、スケジューリングパターンの1サイクルのうちで、TPがアクティブになる回数が多いTPに属するタスクは、アクセスの実行回数が多いと推定する。この場合、OS100が、さらに推定した実行回数も、その実行回数に対応するタスクのASIDを含むエントリ情報に設定するようにして、制御部141がそれを参照して判定するようにすればよい。なお、これらの実測値及び推定値は、一例であり、その他の方法で計測した実測値又は推定した推定値を利用するようにしてもよい。
安全関連のTPのエントリ情報が登録されていないエントリが2つ以上ある場合(S27でYes)、制御部141は、TLB142のエントリに空きがあるか否かを判定する(S29)。TLB142のエントリに空きがある場合(S29でYes)、制御部141は、空いているエントリのいずれかに、プロセッサ10から出力されたエントリ情報を格納する(S30)。これによって、ASIDがWildである安全関連のTPのエントリ情報がTLB142に登録される。TLB142のエントリに空きがない場合(S29でNo)、制御部141は、通常のTPに関するエントリ情報のいずれかを排除して、そのエントリにプロセッサ10から出力されたエントリ情報を格納する(S31)。すなわち、制御部141は、通常のTPに関するエントリ情報が格納されたエントリのいずれかを更新対象のエントリとして選択し、選択したエントリを、プロセッサ10から出力されたエントリ情報で上書きする。これによって、ASIDがWildである安全関連のTPのエントリ情報がTLB142に登録される。
一方、OS100は、全てのエントリ情報の登録(作成)が終わったか否かを判定する(S32)。全てのエントリの登録が終わっていない場合(S32でNo)、OS100は、次に登録するエントリ情報を作成する(S22)。以降、上述と同様の処理が繰り返される。全てのエントリの登録が終わった場合(S32でYes)、OS100は、TLB142のエントリ情報の作成を終了する(S33)。ここで、TLBミスヒットに応じて、以上に説明した処理が実行された場合は、1つのエントリ情報を登録したら、処理を終了することになる(S32でYes、S33)。
以上に説明した処理手順によれば、S31のように、通常のTPに関するエントリ情報を優先的に排除して、安全関連のTPに関するエントリ情報を優先的に登録するようにしている。これによれば、遅延無く実行することが好ましい安全関連のタスクに関するエントリがTLB142に存在する確率を高めることができる。すなわち、エントリの更新のために安全関連のタスクによるメモリアクセスが遅延する確率を低減することができる。また、安全関連のタスクによるメモリアクセスが待たされて、安全関連のタスクにおける処理が遅延する確率を低減することができる。
ここで、上述した処理手順では、S27において、安全関連のTPに関するエントリ情報が登録されていないエントリが2つ以上ある場合に、それらのエントリのいずれかに安全関連のTPに関するエントリ情報を登録し、そうでない場合には、安全関連のTPに関するエントリ情報が登録されているエントリのいずれかにエントリ情報を登録するようにしている。これによって、全てのエントリに対して安全関連のTPに関するエントリ情報が優先的に登録され、通常のTPに関するエントリ情報が登録されなくならないようにしている。
例えば、図4に例示するようにTLB142のエントリ数が64である場合、63個のエントリまでは、通常のTPに関するエントリ情報を優先的に排除して安全関連のTPに関するエントリ情報を登録するが、安全関連のTPに関するエントリ情報が登録されていないエントリが残り1個となった場合には、そのエントリは通常のTPに関するエントリ情報を登録するために残されることになる。すなわち、この例では、安全関連のTPに関するエントリ情報を登録することができるエントリの上限数が63となる。
ここで、S27で判定するエントリ数は、2つ以上か否かには限られない。例えば、上述した例では、安全関連のTPに関するエントリ情報が上限数まで格納された場合、通常のTPに関するエントリ情報は、1つだけしかTLB142に格納されないことになる。例えば、このようにすると、通常のTPに関するエントリ情報の更新が頻発してしまい、悪影響がでてしまうような場合は、安全関連のTPに関するエントリ情報の上限数を下げるようにしてもよい。例えば、S27で判定するエントリ数を、4つ以上か否かとしてもよい。すなわち、安全関連のTPに関するエントリ情報の上限数として、任意の数を予め定めることができる。
また、以上に説明したようにして、安全関連のTPに関するエントリ情報の上限数を超える登録を抑止するようにしているが、その方法は、上述した方法には限られない。例えば、安全関連のTPに関するエントリ情報の登録が上限数に達するまでは、通常のTPに関するエントリ情報を優先的に排除して安全関連のTPに関するエントリ情報を登録するようにし、安全関連のTPに関するエントリ情報の登録が上限数に達しているときには、単純に、更新対象のエントリをランダムに選択する、実行回数が少ないエントリを選択する、又は、FIFO(First In First Out)で選択する等して更新対象のエントリを選択するようにしてもよい。
続いて、図11を参照して、本発明の実施の形態にかかるメモリアクセス処理の処理手順について説明する。図11は、本発明の実施の形態にかかるメモリアクセス処理の処理手順の具体例を示すフローチャートである。
アクティブになっているTPにおいて実行されているタスクが実行用メモリ11のあるページに対してアクセスする場合、OS100は、そのTPに対応するASID、そのページのアドレスを指定したアクセスをMMU14に発行する。MMU14の制御部141は、OS100によってプロセッサ10から発行されたアクセスにおいて指定されているASID及びアドレスと、同一のASID及びアドレスを示すエントリ情報が格納されているエントリを検索する(S41)。
該当するエントリを検出できた場合(S42でNo)、制御部141は、検出したエントリの情報によって、発行されたアクセスのアクセス権限をチェックする(S43)。発行されたアクセスがアクセス権限を有していると判定した場合(S45でNo)、制御部141は、メモリアクセスを実行する(S46)。すなわち、制御部141は、指定されたアドレスを仮想アドレスから物理アドレスに変換してから、実行用メモリ11に対するアクセスを発行する。
発行されたアクセスがアクセス権限を有していないと判定した場合(S45でYes)、制御部141は、TLB保護違反例外の通知をプロセッサ11に出力する(S47)。OS100は、MMU14からのTLB保護違反例外の通知に応じて、異常処置を行う。異常処置としては、任意の処理を実装するようにしてもよい。例えば、パーティションスケジューラ21が、スケジューリングパターンを安全制御スケジューリングパターンに切り替えて、安全制御タスク28によって制御対象を緊急停止させるように制御するようにしてもよい。
一方、該当するエントリを検出できなかった場合(S42でYes)、制御部141は、TLBミスヒット例外の通知をプロセッサ11に出力する(S44)。OS100は、MMU14からのTLBミスヒットの通知に応じて、TLB管理ルーチン29を実行する。これによって、以下に説明する処理を実行する。
OS100は、TLBミスヒット例外が発生したアクセスのアクセス権限をチェックする(S48)。ここで、一般的に、TLB142のエントリ情報を作成するのはOS100であるため、OS100は、各タスクのASID、各タスクがアクセスするページ(仮想アドレス及び物理アドレス)、及び各タスクの各ページに対するアクセス権限の情報を有している、又は、参照可能である。そのため、その情報に基づいて、アクセス権限を判定すればよい。
アクセス権限を有していないと判定した場合(S49でYes)、OS100は、TLB保護違反例外ハンドラへジャンプする(S51)。例えば、TLB保護違反例外ハンドラとして、上述したように異常処置を行う。
アクセス権限を有していると判定した場合(S49でNo)、OS100は、TLBミスヒット例外を発生させたアクセスにおいて指定していたASID及びアドレスと、そのASIDによるそのアドレスに対するアクセス権限とを示すエントリ情報を作成する(S50)。OS100は、作成したエントリ情報をMMU14に出力する(S51)。これによって、MMU14の制御部141は、TLB142からエントリ情報の格納先のエントリを選択して、選択したエントリのエントリ情報を、OS100によってプロセッサ10から出力されたエントリ情報に差し替える。すなわち、エントリ情報を上書きする。このときに、図10を参照して説明したエントリ情報登録処理が実行されることになる。
なお、MMU14は、更新対象のエントリをプロセッサ10からのエントリ情報の出力に応じて選択するようにしてもよく、TLBミスヒットを検出したときに、前もって選択しておくようにしてもよい。
プロセッサ10は、TLBミスヒット例外を起こした命令(アドレス)に帰還する(S52)。すなわち、プロセッサ10は、TLBミスヒット例外を起こしたメモリアクセスを、再度、MMU14に発行する。これによって、TLBミスヒットが発生することなく(S42でNo)、アクセス権限の判定(S45)が行われるようになる。
<発明の他の実施の形態>
本実施の形態では、TPのそれぞれに属するタスクが、それぞれ安全監視タスク24、通常制御タスク26、及び安全制御タスク28である場合について例示したが、タスクの種類は、これに限られない。安全監視タスク24、通常制御タスク26及び安全制御タスク28に限られず、その他の制御対象の制御に関する任意の処理を実行するタスクを有するようにしてもよい。
例えば、図12に示すようなタスク30〜32を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク30〜32に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視制御タスク30は、制御対象を制御する。具体的には、監視制御タスク30は、通常制御タスク31及び安全制御タスク32からの指令値に基づいて、制御対象のアクチュエータを制御する。通常制御タスク31は、制御対象に通常の機能・動作を行わせるための制御計算を行う。具体的には、通常制御タスク31は、通常制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。通常制御タスク31は、算出した指令値を監視制御タスク30に出力する。安全制御タスク32は、機能安全を確保するために定められた制御計算を行う。具体的には、安全制御タスク32は、安全制御におけるアクチュエータの制御計算をして、アクチュエータの指令値を算出する。安全制御タスク32は、算出した指令値を監視制御タスク30に出力する。監視制御タスク30は、通常制御タスク31又は安全制御タスク32から出力された指令値に基づいてアクチュエータを制御する。
さらに、監視制御タスク30は、制御対象のセンサから、センサ値を取得する。監視制御タスク30は、取得したセンサ値を通常制御タスク31及び安全制御タスク32に出力する。通常制御タスク31及び安全制御タスク32のそれぞれは、監視制御タスク30から出力されたセンサ値に基づいて、アクチュエータの制御計算を行うようにしてもよい。
図12の例では、監視制御タスク30及び安全制御タスク32は、制御対象の監視や、機能安全を確保するために定められた制御計算等のように、制御対象の機能安全の確保に関する処理を実行するタスクとなる。それに対して、通常制御タスク31は、その他の制御対象の制御に関する処理を実行するタスクとなる。そのため、監視制御タスク30及び安全制御タスク32は、遅延無く実行することが好ましい安全関連のタスクとなり、通常制御タスク31は、監視制御タスク30及び安全制御タスク32と比較して、実行の遅延が許容される非安全関連のタスクとなる。すなわち、図12に示す場合は、図10に示すエントリ情報登録処理において、監視制御タスク30及び安全制御タスク32は、安全関連のTPに属するタスクとして処理され、通常制御タスク31は、通常(非安全関連)のTPに属するタスクとして処理される。
また、その他に、例えば、図13に示すようなタスク33〜35を有するようにしてもよい。なお、この場合、安全制御装置は、アプリケーション101〜103に代えて、タスク33〜35に対応するアプリケーションを有する必要があるが、その点は自明であるため図示及び説明を省略する。
監視タスク33は、制御対象のセンサから、センサ値を取得する。このセンサには、上述したように制御対象の姿勢を検知するための姿勢センサを含む。ここで説明する例では、制御対象として、人が搭乗することができる走行装置に適用した場合について説明する。この場合、監視タスク33は、搭乗者による重心移動を姿勢センサにより検知することができる。監視タスク33は、取得したセンサ値をHMI(Human Machine Interface)タスク35に出力する。
HMIタスク35は、監視タスク33から出力されたセンサ値に基づいて、制御対象のアクチュエータの制御計算をして、アクチュエータの指令値を算出する。HMIタスク35は、算出した指令値を制御タスク34に出力する。制御タスク34は、HMIタスク35から出力された指令値に基づいて、アクチュエータを制御する。
図13の例では、監視タスク33、HMIタスク35及び制御タスク34によって、制御対象の監視、それに応じた制御計算、制御計算結果に基づいた制御対象の制御を行うことで、状況によっては制御対象の機能安全の確保に関する処理を実行する。そのため、監視タスク33、HMIタスク35及び制御タスク34は、遅延無く実行することが好ましい安全関連のタスクとなる。この場合には、TP1〜TP3以外のTP(図示せず)に属する、その他の制御対象の制御に関する処理を実行するタスクが、監視タスク33、HMIタスク35及び制御タスク34と比較して、実行の遅延が許容される非安全関連のタスクとなる。すなわち、図13に示す場合は、図10に示すエントリ情報登録処理において、監視タスク33、HMIタスク35及び制御タスク34は、安全関連のTPに属するタスクとして処理される。
ここで、図13において説明した構成によれば、搭乗者の操作に応じて制御対象が制御されるというHMIを実現することができる。例えば、搭乗者が重心を前後に移動させることで制御対象が前後後退を行い、搭乗者が重心を左右に移動させることで制御対象が左右旋回を行うといった制御が可能となる。これについては、実施の形態及び図12によって説明した例についても同様のことが言える。具体的には、安全監視タスク24又は監視制御タスク34が取得したセンサ値に応じて、通常制御タスク26及び安全制御タスク28、もしくは、通常制御タスク31及び安全制御タスク32が同様の制御をすることで、HMIを実現することが可能である。また、本実施の形態によれば、安全関連のタスクの実行遅延確率を低減して、より信頼性を向上した制御対象の制御を行うことが可能となる。そのため、以上に説明したように、人が搭乗することができる走行装置を制御対象として適用することで、より安全性を向上した制御対象の制御を行うことが可能となる。
なお、走行装置として、例えば、立ち乗り方の同軸二輪車とすることもできる。その場合は、アクチュエータを制御することで、車輪が回転動作をすることになる。また、安全制御装置自体も制御対象に搭載される構成としてもよい。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
本実施の形態では、OSが、TP1〜TP3を有する場合について例示したが、TPの種類及び数は、これに限られない。スケジューリングパターンについても、本実施の形態に例示したものに限られない。
本実施の形態では、タスクの数が3つである場合について例示したが、タスクの数は、これに限られない。例えば、本実施の形態では、TPがTP1〜TP3の3つである場合について例示したが、TPの数を3つ以外の数とし、それぞれのTPが1つ以上の任意の数のタスクを有するようにしてもよい。
本実施の形態では、TP(RP)ごとに異なるアクセス権限を付与する場合について例示した。すなわち、本実施の形態では、同一のTPに属するタスクに対して同一のアクセス権限を付与する場合について例示したが、これに限られない。例えば、タスクごとに異なるアクセス権限を付与するようにしてもよい。この場合は、タスクごとにASIDが一意に定義されることになる。
本実施の形態では、タイム・パーティショニングを採用したマルチタスクOSについて例示したが、これに限られない。タイム・パーティショニングを採用していないマルチタスクOSに適用することもできる。この場合は、タスクごとにASIDが一意に定義されることになる。
本実施の形態では、MMU14の管理対象をRAMである実行用メモリ11とした場合について例示したが、これに限られない。例えば、MMUが管理対象とする記憶装置は、ROMであってもよい。また、MMUが管理対象とする記憶装置は、RAM及びROMの組み合わせであってもよい。
本実施の形態では、MMUによってメモリ保護機能を実装する場合について例示したが、これに限られない。例えば、MPUによってメモリ保護機能を実装するようにしてもよい。MPUによって実装する場合、仮想記憶管理機能を有していないため、MPUが有するテーブルのエントリには、ASID、アドレス、そのASIDのタスクによるそのアドレスのページに対するアクセス権限等が設定されることになる。
本実施の形態では、安全関連のタスクのASIDを、Wildに変換するようにしているが、Wildへの変換を行わないようにしてもよい。この場合、MMU14が安全関連のタスクのASIDを認識しておくようにすることで、優先的に排除してもよいエントリ情報を判定することを可能とする。例えば、MMU14が、安全関連のタスクのASIDの一覧を記憶する記憶装置を有するようにし、それらのASIDと照合することで安全関連のタスクのASIDが設定されたエントリを判定するようにすればよい。なお、この場合、安全関連のタスクのASIDの一覧は、MMU14が、OS100から取得して記憶装置に格納するようにすればよい。また、MMU14が、安全関連以外のタスクのASIDの一覧を記憶する記憶装置を有するようにし、それらのASIDと照合することで安全関連のASIDが設定されたエントリを判定するようにしてもよい。ただし、好ましくは、本実施の形態のように、安全関連のタスクのASIDを、予め定められた位置のビット値を変化させた値とすることで、そのビット値のみを確認するだけで、優先的に排除してもよいエントリ情報が判定可能となる。これによれば、安全関連のタスクに関するエントリ情報を判定する処理を簡易にすることができる。
本実施の形態では、MMU14が更新対象のエントリを選択するようにしているが、これに限られない。例えば、OS100(TLB管理ルーチン29)で、更新対象のエントリを選択して、選択したエントリにエントリ情報を格納するようにMMU14に指示するようにしてもよい。
本実施の形態では、制御対象の機能安全の確保に関する処理を実行する安全関連のタスクと、その他の制御対象の制御に関する処理を実行する非安全関連のタスクとで、TLB142にエントリ情報を優先的に残すタスクとそうでないタスクとを区分するようにしているが、この区分はこれに限られない。これ以外でも、遅延無く実行することが好ましいタスクと、そのタスクよりも実行の遅延が許容されるタスクとが存在するシステムであれば、同様にして適用することができる。