JP2019049928A - 電子制御装置及び電子制御装置の制御方法 - Google Patents
電子制御装置及び電子制御装置の制御方法 Download PDFInfo
- Publication number
- JP2019049928A JP2019049928A JP2017174696A JP2017174696A JP2019049928A JP 2019049928 A JP2019049928 A JP 2019049928A JP 2017174696 A JP2017174696 A JP 2017174696A JP 2017174696 A JP2017174696 A JP 2017174696A JP 2019049928 A JP2019049928 A JP 2019049928A
- Authority
- JP
- Japan
- Prior art keywords
- register
- memory
- access
- setting
- memory protection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Memory System (AREA)
Abstract
【課題】MPUでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させる。【解決手段】アクセス権限情報を記憶するレジスタ410と、レジスタ410の設定に基づき、アクセスがメモリ保護違反であるかを判定するメモリ保護違反検出部430と、を有するメモリ保護ユニット400と、メモリ保護違反が、アクセス権限の未設定に起因するかを判定する未設定判定部1510と、レジスタ410にイネーブルを設定するレジスタ設定部1530とを有する。レジスタ410は、少なくともアクセス権限が設定されたチャネル0〜3と、未設定のチャネル4〜7とを有している。レジスタ設定部1530は、未設定判定部1510により、メモリ保護違反がレジスタ410へのアクセス権限の未設定に基づくものであると判定した場合、チャネル4〜7の何れかにアクセス権限を設定する。【選択図】図9
Description
本発明は、電子制御装置及び電子制御装置の制御方法に関する。
近年、産業分野では、産業機器の電子化が進展しており、組み込みソフトウェアで動作する電子機器や、それらを組み合わせたシステムの複雑化、大規模化が急速に進んでいる。
例えば、自動車分野の機能安全規格ISO26262は、車載組み込みシステムにおける高い安全性、信頼性とソフトウェア開発の効率化の両立を目標に規格化されたものであり、自動車安全度水準(Automotive Safety Integrity Level:ASIL)と呼ばれる指標を導入している。機能安全規格ISO26262は、ASIL導出のための3つのファクタ(暴露性・回避性・危害度)とそれらを用いたハザード分析、リスク評価手法を定めている。
例えば、自動車分野の機能安全規格ISO26262は、車載組み込みシステムにおける高い安全性、信頼性とソフトウェア開発の効率化の両立を目標に規格化されたものであり、自動車安全度水準(Automotive Safety Integrity Level:ASIL)と呼ばれる指標を導入している。機能安全規格ISO26262は、ASIL導出のための3つのファクタ(暴露性・回避性・危害度)とそれらを用いたハザード分析、リスク評価手法を定めている。
ASILでは、車載組み込みシステムで起こりうる障害(ハザード)を回避するために実現しなければならない安全性のレベルを、5段階の安全水準(Quality Management:QM、およびASIL−A/−B/−C/−D)で規定している。
機能安全規格ISO26262に準拠した車載組み込みシステムを開発する際、特に重視するのは、無干渉(Freedom From Interference:FFI)機能である。FFI機能とは、相互に異なるASILで動作する複数のソフトウェアが1つの電子制御装置(Electronic Control Unit:ECU)上で混在して実行される場合に、低い安全度水準のASILで動作するソフトウェアで発生した誤動作が、高い安全度水準のASILで動作するソフトウェアに伝搬することを防ぐものである。
ここで、安全に関わるコンポーネントが、他のコンポーネントによるアクセスから保護されること、すなわち、あるソフトウェアに割り当てられた特定のメモリ領域を、別のソフトウェアによる意図しない不正アクセスから保護する機能をメモリ保護機能と言う。
車載組み込みシステムに搭載されるマイクロコンピュータ(以下、車載マイコンと言う)では、ソフトウェアの実行に伴い発生する命令フェッチやオペランドアクセスごとに、メモリ保護違反の有無を実時間で監視する。また、この種の車載マイコンでは、メモリ保護機能そのものを保護するという必要性から、メモリ保護機能を実行するメモリ保護ユニット(Memory Protection Unit:MPU)と呼ばれるハードウェアモジュールを搭載するのが一般的である。
このMPUは、車載マイコンで使用される全てのアドレス空間のうち、開始アドレスと終了アドレス(又はサイズ)を指定して切り出したメモリ範囲ごとに、当該メモリ範囲へのアクセスの可否を規定するアクセス権属性を組み合わせて指定した「メモリ領域」を単位として保護を行う。
一方、車載マイコンでは、ハードウェア実装上及びコスト上の制約から、MPUに用意されたレジスタに対して同時に設定可能なメモリ領域、すなわちMPUの監視対象となるメモリ領域の数には上限がある。一般的に、MPUで監視可能なメモリ領域の数は16から24程度である。このメモリ領域の数の制約は、ハードウェアに起因する本質的なものであり、特に3つ以上の異なるASILで動作する複数のソフトウェアを単一のECU上で動作させる場合に、監視対象となる全てのメモリ領域を同時にMPUに設定できないことが課題となっている。
ここで、特許文献1には、命令フェッチ用の保護情報とオペランドアクセス用の保護情報を相互に独立して無効化する手段を設け、あらかじめ高い信頼性をもつことが判明しているソフトウェアからの命令フェッチ要求は無条件に許可することで、MPUのレジスタに同時に設定すべきメモリ領域の数を減らす技術が開示されている。
しかしながら、特許文献1に開示された技術では、MPUを用いてメモリ保護を行う場合、ハードウェアの制約から、レジスタ数を単純に増加させるのは容易ではない。また、近年、車載マイコンの性能向上や、車載組み込みシステムのコスト低減を図るため、複数のECUを1台に集約したいというニーズが高まっており、1台のECU上で同時に動作するソフトウェアの数、付与されたASILのタイプ数、監視対象となるメモリ領域の数の増大について、利用上の工夫のみで対処するのは困難である。そのため、ハードウェアに制約されない抜本的な解決策が望まれている。
ソフトウェア実行環境に関しては、対象製品のASILや利用する車載マイコンの性能により、自動車業界で採用されているAUTOSAR(AUTomotive Open System ARchitecture)準拠のOS(Operating System)を導入するケースと、機能を絞り込んだ独自OSを利用するケースが併存する。AUTOSAR準拠OS(以下、車載OSと言うこともある)においては、ソフトウェア動作中の例外発生はハードウェアの故障またはソフトウェアの不具合によるものとみなし、発生した例外事象に起因するシステムの非安全状態からの回復のためシステムをリセットするのが基本ポリシである。
ソフトウェア間の関数呼び出し機能については、車載OSが管理する標準API(Application Programming Interface)の態様で提供される。APIでは、当該機能の利用に際して、より特権レベルの高いCPU(Central Processing Unit)動作モード(特権モード)への遷移を伴うこと、またタスク切り替えや関数呼び出しの際、実際の切り替え動作に先立ち、切り替え後のメモリ保護違反例外の発生を防ぐため、必要なメモリ保護設定をすべてMPU内の所定のレジスタに格納しておくという前提で設計されている。
このため、ECUでは、MPUでのタスクの切り替えや関数の呼び出しに伴うオーバヘッドが大きく、かつ切り替え等の都度必ずオーバヘッドが発生してしまう。ECU上で動作するソフトウェアの数が多いほどタスクの切り替え頻度が多くなる結果、レジスタの入れ替え処理に要する時間が増大し、ソフトウェアの実行効率が低下してしまう。
したがって、本発明は、上記の課題に着目してなされたもので、MPUでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることを目的とする。
上記課題を解決するため、第1のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、レジスタに記憶されたアクセス権限情報に基づいて、メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置と、メモリ保護違反が、レジスタのアクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部と、レジスタにアクセス権限情報を設定するレジスタ設定部と、を有し、レジスタは、少なくとも、アクセス権限情報が設定された第1のレジスタ群と、アクセス権限情報が未設定の第2のレジスタ群とを有しており、レジスタ設定部は、レジスタ未設定判定部により、メモリ保護違反がレジスタへのアクセス権限情報の未設定に起因するものであると判定した場合、第2のレジスタ群にアクセス権限情報を設定する電子制御装置とした。
本発明によれば、MPUでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることできる。
初めに、以下で説明する実施の形態で使用する用語の意味を定義する。
以下の説明において、メモリは、プログラムやデータを記憶する1つ以上の記憶装置である。メモリは、不揮発性メモリ、揮発性メモリ、ROM、RAM、First−In−First−Out(FIFO)型バッファメモリ、リング型バッファメモリ、インタリーブ型バッファメモリ、命令キャッシュ、データキャッシュ、レジスタなどから構成される。メモリの一部又は全部は、車載マイコンと同一のシリコンチップ上に形成されていてもよいし、異なるシリコンチップ上に形成されていてもよい。メモリは、さらに、車載マイコンのメモリアドレス空間を経由してアクセス可能な不揮発性外部記憶デバイス(例えば、ハードディスクドライブ又はソリッドステートドライブ、メモリカードなどの記録媒体)を含んでいてもよい。
また、以下の説明において、車載マイコンは、1つのCPUを備えるシングルコアでもよいし、2以上のCPUを備えるマルチコアでもよい。それぞれのCPUの実装は、1つの命令実行ユニットを備える非スーパースカラ方式でもよいし、2以上の命令実行ユニットを備えるスーパースカラ方式でもよい。故障や誤動作を検出する目的で、各CPUは同一プログラムを同時に実行する物理的に複数のCPUからなるロックステップ構成を採用してもよい。車載マイコンは、CPUとは独立に、もしくはCPUからの指示に基づきメモリアクセスを実行するハードウェア回路(例えば、Direct Memory Access Controller、DMAC)を含んでいてもよい。メモリ保護回路は、1つ以上の前記命令実行ユニットに加え、前記ハードウェア回路が発生するメモリアクセスを並列又は時分割で監視するよう構成されていてもよい。
また、以下の説明において、「〇〇部」の表現にて機能を説明する場合があるが、機能は1以上のプログラムが命令実行ユニットで実行されることで実現されてもよいし、1以上のハードウェア回路(例えば、Field Programmable Gate Array:FPGA)やApplication Specific Integrated Circuit:ASIC)によって実現されてもよい。
機能が、命令実行ユニットによって実現される場合、定められた処理が適宜メモリ及び/又は通信用外部インタフェースを用いながら行われるため、機能は、命令実行ユニットの少なくとも一部とされてもよい。また、機能を主語として説明する処理は、命令実行ユニット又はその命令実行ユニットを有するCPUが行う処理としてもよい。また、命令実行ユニットは、処理の一部または全部を行うハードウェア回路を含んでいてもよい。プログラムは、プログラムソースからECUにインストールされてもよい。プログラムソースは、例えば、不揮発性メモリ上の特定領域、又は車載マイコンが読み取り可能な記録媒体(例えば、メモリカード)であってもよい。なお、各機能の説明は一例であり、複数の機能が1つの機能に纏められ、又は1つの機能が複数の機能に分割されていてもよい。
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号または参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用または参照符号に代えてその要素に割り振られたIDを使用することがある。
以下、本発明の実施の形態にかかる電子制御装置1を説明する。実施の形態では、電子制御装置1を車両の組み込みシステム(車載組み込みシステム)に適用した場合を例示して説明する。
図1は、電子制御装置1の全体構成を説明する図である。
図1は、電子制御装置1の全体構成を説明する図である。
図1に示すように、電子制御装置1は、車両の組み込みシステムに搭載された車載マイコン10を有している。
車載マイコン10は、CPU100と、システム管理モジュール30と、通信モジュール40と、不揮発性メモリ60と、入出力モジュール70とが内部インタコネクト20を介して接続されている。内部インタコネクト20は、内蔵された機能モジュール間の情報を伝達する信号線である。システム管理モジュール30と、通信モジュール40と、不揮発性メモリ60と、入出力モジュール70とは、それぞれ独立したアドレス領域を割り当てられた内蔵周辺モジュールである。
通信モジュール40には、通信用外部インタフェース50が接続されており、入出力モジュール70には、入出力用外部インタフェース80が接続されている。これらの通信用外部インタフェース50と入出力モジュール70とは、車載マイコン10の外部機器との接続に用いられる。
実施の形態では、説明を簡単にするため、内蔵周辺モジュールは、それぞれ1つずつ存在する場合を例示して説明するが、これらの内蔵周辺モジュールは、2つ以上であってもよい。また、図示は省略するが、タイマモジュールや割り込みコントローラなどの機能を備えた1つ以上の内蔵周辺モジュールを、内部インタコネクト20に接続してもよい。
システム管理モジュール30は、入力信号として少なくとも1つ以上の他の内蔵周辺モジュールからのリセット要求信号90を受け付け、車載マイコン10の内部状態と当該リセット要求信号90の受け付け(要求状態)を監視する。システム管理モジュール30は、内蔵周辺モジュールからのリセット要求信号90の受け付け、又は車載マイコン10の動作異常を示す所定の状態を検出すると、CPU100に対して車載マイコン10のリセットを要求する。
要求を受け付けたCPU100は、リセットベクタと呼ばれる専用のアドレスに配置されたスタートアッププログラムを実行することで、車載マイコン10の初期化処理を行う。なお、リセット要求信号90は、所定アドレスにあるレジスタへの書き込みなどの手段により、システム管理モジュール30の内部で生成されてもよい。
外部通信モジュール40は、車載マイコン10の外部に接続されたハードウェア回路(図示せず)との間で、通信用外部インタフェース50を介して所定のプロトコル(例えば、CAN(Controller Area Network)やFlexRay)に基づく通信を行う。なお、ハードウェア回路(図示せず)は、車載マイコン10が実装されたECU内部に搭載された、各種機能モジュールまたはハードウェアでもよいし、外部に存在する別のECUでもよい。
不揮発性メモリ60は、車載マイコン10上で動作するOS及び/又はソフトウェアの実行コードと、OS及び/又はソフトウェアの実行に必要な初期データが格納される。また、車載マイコン10の初期化処理を行うスタートアッププログラムが格納されていてもよい。
入出力モジュール70は、車載マイコン10の外部にあるセンサ(図示せず)や、アクチュエータ(図示せず)を駆動するドライブ回路(図示せず)との間で、入出力用外部インタフェース80を介して接続される。入出力モジュール70は、CPU100上で動作するソフトウェアの要求に基づき、車載マイコン10に接続されたアナログ及び/又はデジタル入力信号を取り込み、パルス幅変調及び/又はデジタル出力信号を出力する。実施の形態にかかる一例では、アナログ入力信号は、レベル変換およびアナログ−デジタル変換処理が行われ、デジタル値としてCPU100に読み込まれる。
CPU100は、命令実行ユニット200、メモリコントローラ300、メモリ保護ユニット400、命令キャッシュ500、データキャッシュ600、ローカルメモリ700を含む機能モジュールである。
命令実行ユニット200は、前述した不揮発性メモリ60、命令キャッシュ500、又はローカルメモリ700に格納されたプログラムを、メモリコントローラ300経由で読み出し、プログラムに含まれる命令列にしたがい所定の処理を実行する。命令実行に必要なデータ(オペランド)は、不揮発性メモリ60、データキャッシュ600、又はローカルメモリ700に格納され、プログラムに含まれるメモリアクセス命令の実行によりアクセスされる。
メモリコントローラ300は、メモリアクセスインタフェース310およびメモリアクセス属性情報320を経由して、命令実行ユニット200が発行するメモリアクセス要求(命令フェッチおよびオペランドアクセス)を受け付け、アドレスにより指定されたメモリへのアクセスを行い、アクセス結果(読み出しデータ、及び例外発生の有無)を命令実行ユニット200に対し返信する。
CPU100のキャッシュ動作が有効となるよう設定されている場合、メモリコントローラ300は、メモリアクセス要求の対象が命令キャッシュ500又はデータキャッシュ600内に含まれるかどうかを判定(キャッシュヒット判定)し、キャッシュヒット時にはキャッシュされた命令コードまたはデータへのアクセスを優先する。キャッシュミス及びデータ書き込み時には、メモリコントローラ300は、公知のアルゴリズムに基づき命令キャッシュ500、データキャッシュ600又はキャッシュ元メモリの内容を更新する。
メモリアクセスインタフェース310は、命令実行ユニット200からメモリコントローラ300及びメモリ保護ユニット400に対し、メモリアクセス要求の対象となるアドレスおよび書き込みデータ(書き込み要求時)を転送するとともに、メモリコントローラ300又はメモリ保護ユニット400から命令実行ユニット200に対し、読み出しデータ(読み出し要求時)を転送する。
メモリアクセス属性情報320は、メモリアクセスインタフェース310と同期し、命令実行ユニット200が発行するメモリアクセス要求のアクセス先(メモリコントローラ300又はメモリ保護ユニット400)、アクセス種別(データ読み出し、データ書き込み、又は命令フェッチ)、メモリアクセス要求時点でのCPU100の動作モード(特権モード又はユーザモード)を通知し、メモリアクセス要求による例外発生の有無を命令実行ユニット200に返信する。
メモリ保護ユニット400は、メモリアクセスインタフェース310及びメモリアクセス属性情報320に基づいて特定される命令実行ユニット200のメモリアクセス要求を監視し、内蔵するMPUレジスタ410(図3参照)に設定されたアクセス権限情報に基づき、メモリアクセスに対するメモリ保護違反の有無を判定する。
メモリ保護ユニット400は、メモリ保護違反を検出した場合、違反の検出を示すメモリ保護違反例外をメモリアクセス属性情報320経由で出力し、命令実行ユニット200に通知する。メモリ保護違反例外を受信した命令実行ユニット200の動作は、アーキテクチャに依存したプログラミング仕様として定義されるが、例えば、すべての例外要因に共通の、もしくはメモリ保護違反例外に固有の例外ベクタアドレスに配置された例外処理プログラム(ハンドラ)による例外処理を実行するのが、車載を含む組み込み車載マイコン10における一般的な実装である。
なお、メモリアクセスインタフェース310及びメモリアクセス属性情報320は、メモリ保護ユニット400内のレジスタに対するアクセスの際にも共用される。メモリ保護ユニット400は、MPUレジスタ410とは別に、例えば、メモリ保護違反例外検出に関するデフォルト動作を規定するなど、メモリ保護ユニット400の動作を制御するレジスタを備えていてもよい。
命令キャッシュ500は、命令キャッシュアクセスインタフェース510によりメモリコントローラ300と接続される。データキャッシュ600は、データキャッシュアクセスインタフェース610によりメモリコントローラ300と接続される。ローカルメモリ700は、ローカルメモリアクセスインタフェース710によりメモリコントローラ300と接続される。
[メモリ保護ユニットの構成]
次に、メモリ保護ユニット400を説明する。
図2は、実施の形態にかかるメモリ保護ユニット400の構成を示す図である。
次に、メモリ保護ユニット400を説明する。
図2は、実施の形態にかかるメモリ保護ユニット400の構成を示す図である。
メモリ保護ユニット400は、それぞれ特定のメモリ領域を定義し、そのアドレス範囲とアクセス権限情報を記憶する複数のMPUレジスタ410と、このMPUレジスタ410に対する読み書きを制御するレジスタアクセス制御部420と、MPUレジスタ410の設定内容に基づき、メモリアクセスインタフェース310およびメモリアクセス属性情報320にて特定されるメモリアクセスを監視し、アドレス範囲の一致/不一致、ならびにメモリ保護違反の発生の有無をMPUレジスタ410ごとに並列に判定する、複数のメモリ保護違反検出部430と、複数のメモリ保護違反検出部430が出力する判定結果を纏め、命令フェッチ及びオペランドアクセスにおけるメモリ保護違反例外の発生を、それぞれ命令実行ユニット200に通知する出力信号を生成する、命令系メモリ保護違反例外出力生成部440と、データ系メモリ保護違反例外出力生成部450とを有している。
MPUレジスタ410の各々は、例えば、以下の要素、すなわち当該レジスタの設定が有効であることを示すイネーブル(E)フィールド411と、当該レジスタが監視対象とするアドレス範囲を指定する最小アドレスと最大アドレスをそれぞれ格納する開始アドレス指定フィールド412および終了アドレス指定フィールド413と、開始アドレス指定フィールド412と終了アドレス指定フィールド413の間のアドレスを対象とする、特権モード下でのメモリアクセス可否について、読み出し、書き込み、実行の3種別に分けてそれぞれ指定する、特権モード時読み出し許可(SR)フィールド414と、特権モード時書き込み許可(SW)フィールド415と、特権モード時実行許可(SX)フィールド416と、ユーザモード下でのメモリアクセス可否について、読み出し、書き込み、実行の3種別に分けてそれぞれ指定する、ユーザモード時読み出し許可(UR)フィールド417と、ユーザモード時書き込み許可(UW)フィールド418と、ユーザモード時実行許可(UX)フィールド419とを含む。
また、MPUレジスタ410は、当該レジスタの設定を適用するプログラムを制約するため、適用先プログラムを特定するAddress Space Identifier(ASID)、もしくはProcess Identifier(PID)を指定するフィールドを含んでいてもよい。また、アドレス範囲を指定するため、終了アドレスに代えて領域サイズを利用してもよい。
[メモリ保護ユニットの動作]
次に、実施の形態にかかるメモリ保護ユニット400の動作の一例を説明する。
次に、実施の形態にかかるメモリ保護ユニット400の動作の一例を説明する。
複数のメモリ保護違反検出部430は、各々対応するMPUレジスタ410の設定内容に基づき並列かつ独立に動作し、メモリアクセスを常時監視する。
以下、メモリ保護違反検出部430と、MPUレジスタ410とを組み合わせた、メモリアクセスの監視単位をチャネルと呼ぶ。メモリ保護違反検出部430は、当該チャネルが有効(Eフィールド411=1)、かつメモリアクセスインタフェース310が指定するメモリアクセス対象アドレスが、開始アドレス以上かつ終了アドレス以下の範囲に含まれる場合には、アドレス範囲一致と判定し、それ以外の場合(Eフィールド411=0を含む)はアドレス範囲不一致と判定する。
メモリ保護違反検出部430が、アドレス範囲一致と判定した場合、さらに、メモリアクセス属性情報320にて指定される動作モード(特権モード又はユーザモード)とアクセス種別(データ読み出し、データ書き込み、命令フェッチ)の組み合わせで指定される6つのアクセスパターンから、6つの許可フィールド414〜419のうちメモリ保護違反の判定に利用する1つの許可フィールドを特定する。
そして、メモリ保護違反検出部430は、特定した1つの許可フィールドのアクセスが許可されている(フィールド値=1)場合にはメモリ保護違反の検出なし、許可されていない(フィールド値=0)場合にはメモリ保護違反の検出ありと判定する。
各チャネルが出力するアドレス一致/不一致情報、及びメモリ保護違反検出結果は、後続の命令系メモリ保護違反例外出力生成部440、及びデータ系メモリ保護違反例外出力生成部450にて例外タイプ(命令またはデータ)ごとにまとめられる。いずれかのチャネルでメモリ保護違反の検出ありと判定されるか、もしくは全チャネルでアドレス不一致かつMPUのデフォルト動作がアクセス禁止の場合に、メモリ保護違反例外が出力される。
次に、メモリ保護ユニット400の具体的な利用方法を説明する。電子制御装置1では、車載マイコン10上にソフトウェア実行環境が構築され、安全水準ASIL−Bをもつ第一のプログラム(プログラムAまたはASIL−Bプログラム)と、安全水準QMをもつ第二のプログラム(プログラムBまたはQMプログラム)が同時に実行され、さらにプログラムAはプログラムBから呼び出し可能な機能(QM向け機能)を関数形式で提供しているものとする。
メモリ保護ユニット400は、チャネル0〜15の計16個のチャネルを備えるが、チャネル8〜15はOS用に使用され、OS以外のすべてのプログラムはチャネル0〜7を共有するものとする。なお、メモリ保護ユニット400において、他プログラムに対して実行頻度が明らかに高い、割り込み等のイベントに対する応答時間の制約が厳しいなどの理由により、高い実行優先度をもつと判断される特定のプログラム(高優先度プログラム)が参照するメモリ領域を指定するため、一部のチャネルを当該プログラムに常時割り当てることで専有させてもよい。
その場合、例えばチャネル12〜15をOS用に割り当て、チャネル8〜11をプログラム間で重複することのないように1つ以上の高優先度プログラム(MPUレジスタ専有タイプのプログラムと呼ぶ)に割り当て、チャネル0〜7を高優先度プログラム以外のすべてのプログラム(MPUレジスタ共有タイプのプログラムと呼ぶ)に割り当てればよい。
図3に、実施の形態における第一のプログラム(プログラムA)が参照するメモリ領域の定義(a)と、MPUレジスタへのアクセス権限設定(b)の一例を示す。
プログラムAが参照するメモリ領域は、車載マイコン10のアドレス空間1000のうち、プログラムAのみが排他的に利用するコード用専有ROM領域1100、データ用専有RAM領域1110、専有周辺モジュール領域1120と、プログラムBに提供する機能の呼び出しに備え、プログラムAおよびBから利用可能なコード用共有ROM領域1300、データ用共有RAM領域1310の計5つであり、それぞれメモリ保護ユニット400のチャネル0、3、4、1、2内のMPUレジスタに設定されている。Eフィールドに0が設定されたチャネル5〜7はいずれも無効であり、Eフィールドを除くフィールドには任意の値が設定されている。
図4に、第二のプログラム(プログラムB)が参照するメモリ領域の定義(a)と、MPUレジスタ410へのアクセス権限設定(b)の一例を示す。
プログラムBが参照するメモリ領域は、車載マイコン10のアドレス空間1000のうち、プログラムBのみが排他的に利用するコード用専有ROM領域1200、データ用専有RAM領域1210と、プログラムAが提供する機能の呼び出しのため、プログラムAおよびBから利用可能なコード用共有ROM領域1300、データ用共有RAM領域1310の計4つであり、それぞれメモリ保護ユニット400のチャネル0、2、1、3内のMPUレジスタに設定されている。Eフィールドに0が設定されたチャネル4〜7はいずれも無効であり、Eフィールドを除くフィールドには任意の値が設定されている。
[従来方式にかかる処理]
次に、図5は、従来方式の一例として、車載OSに実装されたメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に説明する図である。
次に、図5は、従来方式の一例として、車載OSに実装されたメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に説明する図である。
複数のプログラムの同時実行を可能とするマルチタスクOSでは、各プログラムはその実行単位であるタスクに分割され、タスク単位で時分割に並列実行される。タスクディスパッチャ1550は、実行中タスクの終了や別タスクの呼び出し、タイマ割り込みなど所定のイベントが発生するごとに呼び出され、OSの定めるアルゴリズムに基づき次に実行するタスクを決定し、実行タスクを切り替える処理(ディスパッチ処理)を行う。
このタスクディスパッチャ1550は、ディスパッチ処理に先立ち、アクセス制御情報データベースアクセスインタフェース1541を介してアクセス制御情報データベース1540にアクセスし、次に実行するタスクが所属するプログラムに付随する、アクセス権限情報に対応するMPUレジスタへの設定値を取得する。
タスクディスパッチャ1550が取得した設定値は、所定の命令(メモリストア命令もしくは制御レジスタ専用の書き込み命令)を実行することで、メモリアクセスインタフェース310及びメモリアクセス属性情報320を経由し、順次MPUレジスタに書き込まれる。なお、設定すべきアクセス権限情報のないMPUレジスタは無効化する。
前述した処理により、プログラムAのタスクの実行中では、図3に示すアクセス権限情報がMPUレジスタに設定されると共に、プログラムBのタスクの実行中では、図4に示すアクセス権限情報が、MPUレジスタに設定され、タスク実行中にメモリ保護違反例外が発生しないことをOSが保証する。
従来のメモリ保護ユニット400では、このメモリ保護ユニット400がメモリ保護違反を検出し、メモリアクセス属性情報320を経由してメモリ保護違反例外の発生を命令実行ユニット200に通知すると、メモリ保護違反例外ハンドラ1500は、メモリ保護違反例外の発生がハードウェアの故障もしくはソフトウェアの不具合に起因すると判断し、システム管理モジュール30内にある特定のレジスタに対する書き込みなど、車載マイコン10が備えるリセット手段により、リセット要求信号90を送信する。
通常、前述した従来例では、MPUレジスタの管理に関して、タスクディスパッチャ1550とメモリ保護違反例外ハンドラ1500との間で処理の連携が行われない。
通常、前述した従来例では、MPUレジスタの管理に関して、タスクディスパッチャ1550とメモリ保護違反例外ハンドラ1500との間で処理の連携が行われない。
図6は、従来方式の一例として、車載OSに実装されたAPIを利用し、プログラムAからプログラムBに提供された機能(QM向け機能)をプログラムBから呼び出した場合の一連の動作の流れを示す。
まず初めに、初期状態において、MPUレジスタには、図4に示すプログラムB(S100)用のアクセス制御情報が設定され、プログラムB(S100)のQMタスクがユーザモードで実行中(S101)であるとする。
実行中のQMタスクがプログラムA(S110)のQM向け機能をAPI経由で呼び出すと、特権モードへの遷移とともに、車載OSの割り込みハンドラS130への処理の切り替えが行われる(T100)。
割り込みハンドラS130では、多重割り込みを抑止するため割り込みを禁止(S131)し、割り込み要因をチェック(S132)する。割り込みハンドラS130は、割り込み要因がQM向け機能呼び出しに基づくタスク切り替えであると判定した場合、切り替え処理をディスパッチャS120へ引き継ぐ(T101)。
ディスパッチャS120では、所定のアルゴリズムに基づき、次に実行すべきタスクを決定(S121)する。ディスパッチャS120が、次実行タスクとしてQM向け機能を選択した場合、MPUレジスタの設定を、図3に示す機能提供元であるプログラムA用の設定に入れ替える(S122)。
ディスパッチャS120は、入れ替えが完了すると割り込みを許可(S123)し、特権モードのままプログラムAのQM向け機能を呼び出す(T102)。
プログラムA(S110)において、QM向け機能の実行(S111)が完了すると、ディスパッチャS120での処理に復帰(T103)し、ディスパッチャS120は、実行タスクの決定処理(S124)を実行する。
ディスパッチャS120は、次の実行タスクとしてQMタスクを選択すると、MPUレジスタの設定を、図4に示すプログラムB用の設定に戻し(S125)、割り込み許可(S126)の後、ユーザモードへの遷移とともにプログラムB(S100)のQMタスクへ復帰(T104)する。復帰後は、プログラムB(S100)は、QM向け機能呼び出し以降のQMタスクの実行を継続する(S102)。
前述した従来方式では、タスク実行に先行するディスパッチャS120のMPUレジスタ更新処理(S122およびS124)により、QM向け機能の実行(S111)や後続のQMタスク実行(S102)の際にメモリ保護違反例外が発生しない。一方、QM向け機能の呼び出しと実行に伴い、ユーザモードと特権モードとの間のモード遷移や、MPUレジスタの入れ替えと書き戻しといった、タスク実行以外の本質的ではない処理に要するオーバヘッドが発生してしまう。
[本発明の実施の形態にかかる処理]
次に、本発明の実施の形態にかかるメモリ保護ユニット400の利用方法を説明する。
次に、本発明の実施の形態にかかるメモリ保護ユニット400の利用方法を説明する。
メモリ保護ユニット400内のチャネル割り当てポリシや、各プログラムが参照するメモリ領域の定義、想定するプログラム間呼び出し処理については、従来方式の場合と共通であるものとする。
図7は、プログラムAまたはBのいずれかが参照するメモリ領域(a)と、プログラムAが参照するメモリ領域の一部が未設定となった場合のMPUレジスタ410へのアクセス権限設定(b)の一例を示す。
ここで、プログラムBが利用するメモリ領域1200、1210、1300、1310は、全てMPUレジスタ410に設定されている。他方、プログラムAは、プログラムBと共有する一部のメモリ領域1300、1310のみ部分的に設定されており、それ以外のメモリ領域1100、1110、1120については「アクセス権限未設定」の状態にあると定義する。
プログラムBが専有するメモリ領域1200、1210及びプログラムA及びプログラムBが共有する一部のメモリ領域1300、1310では、プログラムB、及びプログラムAがプログラムBに提供する機能については、メモリ保護違反例外の発生なく実行可能である。他方、プログラムAが専有するメモリ領域1100、1110、1120のうち、いずれかに対するアクセスを実施した時点で、アクセス権限未設定に起因するメモリ保護違反例外が発生する。
つまり、メモリ領域1100、1110、1120に対するアクセスが実施されない限り、これらの領域をMPUレジスタに設定する必要はない。よって、これらの領域が設定されていない状態でも、想定外のメモリアクセスを抑止するというメモリ保護機能は実現できていることになる。
なお、図7に示す一例では、チャネル4〜7は無効(Eフィールド=0)としているが、プログラムA、B以外のプログラムが参照する有効なメモリ領域を設定することで、複数のプログラムに関する有効な設定が共存していてもよい。あるプログラムから見て、参照するすべての設定が完了しているか否かが重要である。
ここで、本発明の発明者は、従来のメモリ保護方式においてはメモリ保護違反の検出対象として取り扱われた「アクセス権限未設定」の状態を、オーバヘッド削減の目的で積極的に活用することで、MPUレジスタ入れ替え処理を最小化できることを見出した。
以下、その構成を詳細に説明する。
図8は、後述するMPUレジスタ更新処理を実行することにより、プログラムA用の未設定メモリ領域1100、1110、1120に関する設定が、無効チャネル(例えば、チャネル4、5、6)に動的に追加された後の状態を示す。この状態では、プログラムA、プログラムB、およびプログラムAがプログラムBに提供する機能のすべてについて、メモリ保護違反例外の発生なく実行可能である。追加すべきメモリ領域数に対し無効チャネル数が不足する場合は、プログラムの実行継続に影響しないメモリ領域の設定を削除するなど、所定のポリシにしたがい必要数を確保したのち、メモリ領域の設定を追加すればよい。
図9は、本発明の実施の形態にかかるメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に示す。
実施の形態では、通常のタスク実行中でも、アクセス権限未設定に起因するメモリ保護違反例外が発生しうる。
メモリ保護ユニット400がメモリ保護違反を検出し、メモリアクセス属性情報320を経由して、メモリ保護違反例外の発生を命令実行ユニット200に通知した場合(図1参照)、メモリ保護ユニット400からメモリ保護違反例外ハンドラ1500への分岐が発生する(図9参照)。
図9に示すように、メモリ保護違反例外ハンドラ1500は、レジスタ未設定状態チェック要求1511を出力し、例外発生の要因がアクセス権限未設定であるか否かを判定するよう、レジスタ未設定判定部1510に要求する。
要求を受けたレジスタ未設定判定部1510は、アクセス制御情報設定状態アクセスインタフェース1521を利用して、MPUレジスタ410へのアクセス制御情報設定状態を保存するアクセス制御情報設定状態1520を参照し、アクセス権限未設定であるか否かを判定する。
レジスタ未設定判定部1510は、例外発生元となったタスクの所属するプログラムが参照するメモリ領域が、部分的に設定された状態である場合には、メモリ保護違反例外はアクセス権限未設定に起因するものであると判定し、それ以外の場合には、真のメモリ保護違反例外であると判定する。判定結果は、レジスタ未設定状態チェック結果1512として、メモリ保護違反例外ハンドラ1500に戻される。
メモリ保護違反例外の要因がアクセス権限未設定であった場合、メモリ保護違反例外ハンドラ1500は、MPUレジスタ更新要求1531により、タスクの実行継続に必要な設定の追加をアクセス制御レジスタ設定部1530に要求する。
要求を受信したアクセス制御レジスタ設定部1530は、アクセス制御情報データベースアクセスインタフェース1541を介して、設定が不足しているアクセス権限情報に対応するMPUレジスタ410への設定値を、アクセス制御情報データベース1540から取得する。
アクセス制御レジスタ設定部1530は、所定の命令(メモリストア命令もしくは制御レジスタ専用の書き込み命令)を実行することで、メモリアクセスインタフェース310およびメモリアクセス属性情報320を経由し、取得した設定値を、順次MPUレジスタ410に書き込む。アクセス制御レジスタ設定部1530による取得した設定値の書き込みが完了すると、メモリ保護違反例外ハンドラ1500から例外発生元となったタスクに復帰する。
他方、アクセス制御レジスタ設定部1530が、メモリ保護違反例外の要因がアクセス権限未設定ではなく、真のメモリ保護違反例外であると判定した場合、アクセス制御レジスタ設定部1530は、従来方式と同様、ハードウェアの故障やソフトウェアの不具合に起因する判断する。そして、その判断結果を受けたメモリ保護違反例外ハンドラ1500は、システム管理モジュール30内にある特定のレジスタに対する書き込みなど、車載マイコン10が備えるリセット手段により、リセット要求信号90を送信する。
図示しないが、アクセス制御レジスタ設定部1530は、メモリ保護違反例外ハンドラ1500と連携して動作するだけでなく、例えば車載マイコン10の初期化処理の一部として、車載OSの動作に必要なMPUレジスタ410の設定を行ってもよい。またタスク切り替え時に、ディスパッチャからアクセス制御レジスタ設定部1530を利用してもよい。
図10は、本発明の実施の形態にかかるメモリ保護方式にしたがい、プログラムAからプログラムBに提供された機能(QM向け機能)を、APIを利用せずプログラムBから直接呼び出した場合の一連の動作の流れに関連し、メモリ保護違反例外が発生しない例を示す。
以下の説明において、プログラムの実行開始時点でMPUレジスタ410への設定対象とするアクセス制御情報の選択にはいくつかのオプションが存在するが、本発明の目的とする低オーバヘッドに適用するものとしては、以下の(A)、(B)の何れかが考えられる。
(A)当該プログラムが専有するメモリ領域と、参照の可能性が高いことが事前に想定される、別プログラムが当該プログラムに提供する機能の実行に必要な共有メモリ領域を設定する場合。
(B)当該プログラムが専有するメモリ領域のみ設定する場合。
(B)当該プログラムが専有するメモリ領域のみ設定する場合。
前述した(A)は、当該プログラムが呼び出す外部プログラムの数が、MPUレジスタ410に設定可能なアクセス制御情報と同程度のオーダ(O(1))であり、それらの外部プログラムを一定以上の頻度で利用する場合に有効である。前述した(B)は、共有ライブラリを構成する関数の一部を当該プログラムが参照するが、参照先となる関数をあらかじめ静的に特定することが困難なケースや、内蔵周辺モジュールの制御レジスタなど、極端に狭いアドレス範囲を単位としてアクセスを許可するケースに適している。
以下、前述した(A)の場合について説明する。
図10に示すように、初期状態において、MPUレジスタには、図7に示すプログラムB(S100)用のアクセス制御情報が設定され、プログラムB(S100)のQMタスクがユーザモードで実行中(S103)である。
実行中のQMタスクが、プログラムA(S110)の提供するQM向け機能をサブルーチンの態様で直接呼び出すと、ユーザモードを維持したままQM向け機能への処理切り替えが発生する(T110)。
QM向け機能の実行に必要なアクセス制御情報は、MPUレジスタ410へ設定済みのため、アクセス権限未設定に起因するメモリ保護違反例外は発生せず、呼び出したQM向け機能が実行される(S112)。
QM向け機能の実行が完了すると、サブルーチンからの復帰の態様でユーザモードのままQMタスクへ復帰(T111)する。復帰後は、QM向け機能呼び出し以降のQMタスク実行を継続する(S104)。
次に、図11は、本発明の実施の形態にかかるメモリ保護方式にしたがい、プログラムAからプログラムBに提供された機能(QM向け機能)を、APIを利用せずプログラムBから直接呼び出した場合の一連の動作の流れに関連し、メモリ保護違反例外が発生する例を示す。
図11に示すように、初期状態において、MPUレジスタには、図7に示すプログラムB(S100)用のアクセス制御情報が設定され、プログラムB(S100)に所属するQMタスクがユーザモードで実行中(S105)である。
実行中のQMタスクがプログラムA(S110)の提供するQM向け機能をサブルーチンの態様で直接呼び出すと、ユーザモードを維持したままQM向け機能への処理切り替えが発生する(T120)。
プログラムA(S110)では、QM向け機能を実行中に(S113)、例えばメモリ間コピーなどの所定の処理により、QM向け機能からプログラムB(S100)が専有するメモリ領域へのアクセスが発生すると、その時点でメモリ保護違反を検出し、特権モードへの遷移とともに例外ハンドラS140への処理切り替えが発生する(T121)。
例外ハンドラS140は、まず割り込みを禁止(S141)し、例外要因をチェック(S142)する。例外要因がメモリ保護違反例外であった場合には、保護違反例外ハンドラS150へ分岐(T122)して処理を引き継ぐ。
保護違反例外ハンドラS150では、メモリ保護違反例外の要因がアクセス権限未設定であるか否かを判定(S151)し、要因がアクセス権限未設定であった場合には、例外発生元となったタスクの実行が継続可能となるよう、所定のアルゴリズムに基づきMPUレジスタ410の設定を更新する(S152)。なお、実施の形態では、更新後のMPUレジスタ410は、図8に示す設定状態となる。
保護違反例外ハンドラS150は、MPUレジスタ410の更新が完了すると、割り込みを許可(S153)し、ユーザモードへの遷移とともに、例外発生元であるプログラムA(S110)のQM向け機能へと実行を戻す(T123)。復帰後は、プログラムA(S110)は、QM向け機能の実行を継続(S114)し、実行完了後には、呼び出し元であるプログラムB(S100)のQMタスクへ復帰(T124)し、プログラムB(S100)では、QM向け機能呼び出し以降のQMタスク実行を継続する(S106)。
前述したように、メモリ保護違反発生時の命令実行ユニット200の挙動は、車載マイコン10のアーキテクチャに依存する。実施の形態では、全ての例外要因に共通の例外ベクタアドレスに分岐し、そのアドレスに配置された例外ハンドラが例外要因をチェックするものとした。メモリ保護違反例外に固有の例外ベクタアドレスが定義されている場合には、そのアドレスに保護違反例外ハンドラを配置することで、共通の例外ハンドラを経由することなく、直接保護違反例外ハンドラを実行できることは言うまでもない。
前述したように、プログラムB(S100)によるQM向け機能の呼び出しにかかる処理の流れが、図10又は図11の何れかとなるかは、QM向け機能の内部実装、より具体的には、呼び出し元タスクの所属するプログラム(例えば、プログラムB(S100))の実行開始時点において、アクセスの有無を静的に判断できないメモリ領域(アクセス不明領域)へのアクセス実施により、メモリ保護違反例外が発生するかどうかに依存する。
本発明の発明者は、制御ソフトウェア設計や搭載製品に関する調査により、メモリ保護違反が発生しない、すなわち切り替えオーバヘッドが削減されたケース(図10)が多数であることを発見した。
メモリ保護機能の実現という観点では、まず図10の場合、従来方式と同様の実装であり、MPUを活用したメモリ保護が確実に実現されている。他方、図11の場合、保護すべきメモリ領域をアクセス権限が未設定である「アクセス不明領域」のままとし、当該領域に対するメモリアクセスを契機として発生するメモリ保護違反例外について、保護違反例外ハンドラS150内で適切なアクセス権限チェックとMPUレジスタ更新を実施することで、切り替え時間の増加やばらつきをともなうものの、図10と同等のメモリ保護機能が確実に実現される。
[MPUレジスタ更新処理]
続いて、本発明におけるMPUレジスタ更新処理(図11のS152)フローに関して、一実装例の詳細を説明する。このMPUレジスタ更新処理(図11のS152)は、前述した保護違反例外ハンドラS150(図11参照)で実行される処理である。
続いて、本発明におけるMPUレジスタ更新処理(図11のS152)フローに関して、一実装例の詳細を説明する。このMPUレジスタ更新処理(図11のS152)は、前述した保護違反例外ハンドラS150(図11参照)で実行される処理である。
図12は、MPUレジスタ更新処理のフローチャートである。
実用性を重視した前提として、本発明の実施の形態では、複数のMPUレジスタ410(アクセス制御情報設定レジスタ)について、以下の(C)、(D)、(E)のいずれかに分類する。これらの分類は、車載OSのコンフィギュレーション時、または起動時に予め選択され、起動後は変化しない。
実施の形態では、少なくとも未使用のMPUレジスタ410については、MPUレジスタ更新処理以外の処理において分類を動的に変化させてもよい。
(C)車載OS用レジスタ:車載OSのみが専有するレジスタであり、車載OSから参照するメモリ領域の設定は、車載OSの起動処理が完了した時点ですべてMPUレジスタ410に格納されていることを保証する。
(D)MPUレジスタ専有タイプタスク用レジスタ:同時に動作する複数のプログラムのうち、実行頻度や応答時間などの制約により、高い優先度をもつと判断される1つ以上のプログラム(高優先度プログラム)が、プログラム間で重複なく専有するMPUレジスタ410である。ある高優先度プログラムが排他的に参照する専有メモリ領域の設定は、遅くとも当該プログラムの初回実行時点でMPUレジスタ410に設定し、以降必ずMPUレジスタ410に格納されていることを保証する。
(E)MPUレジスタ共有タイプタスク用レジスタ:同時に動作する複数のプログラムのうち、高優先度プログラムではない1つ以上のプログラム(低優先度プログラム)が空間的、時間的に共有するMPUレジスタ410であり、設定内容はプログラムの実行シーケンスにしたがい動的に変化する。ある低優先度プログラムが排他的に参照する専有メモリ領域の設定は、少なくとも当該プログラムに属するタスクの実行中にはMPUレジスタ410に格納されていることを保証する。
(D)MPUレジスタ専有タイプタスク用レジスタ:同時に動作する複数のプログラムのうち、実行頻度や応答時間などの制約により、高い優先度をもつと判断される1つ以上のプログラム(高優先度プログラム)が、プログラム間で重複なく専有するMPUレジスタ410である。ある高優先度プログラムが排他的に参照する専有メモリ領域の設定は、遅くとも当該プログラムの初回実行時点でMPUレジスタ410に設定し、以降必ずMPUレジスタ410に格納されていることを保証する。
(E)MPUレジスタ共有タイプタスク用レジスタ:同時に動作する複数のプログラムのうち、高優先度プログラムではない1つ以上のプログラム(低優先度プログラム)が空間的、時間的に共有するMPUレジスタ410であり、設定内容はプログラムの実行シーケンスにしたがい動的に変化する。ある低優先度プログラムが排他的に参照する専有メモリ領域の設定は、少なくとも当該プログラムに属するタスクの実行中にはMPUレジスタ410に格納されていることを保証する。
前述した(C)〜(E)のレジスタ分類情報に加え、MPUレジスタ410の設定状態を管理するアクセス制御情報設定状態1520(図9参照)として、MPUレジスタ410ごとの使用又は未使用状態と、当該MPUレジスタ410を使用しているプログラム(タスク)を識別するタスク番号が保持されているものとする。また、アクセス制御情報データベース1540(図9参照)には、各プログラム(タスク)のレジスタ専有又は共有タイプの分類と、参照するメモリ領域を定義する情報(MPUレジスタ410への設定値)が格納されているものとする。
図12において、入力パラメータは、現在実行中のタスク(現タスク)と、切り替え後に実行するタスク(次タスク)をそれぞれ識別するタスク番号である。なお、車載OSを指定するタスク番号や、実行すべきタスクが存在しないことを意味する、特殊なタスク番号を導入してもよい。実行中のタスクがない、かつ/または、次に実行するタスクがないという状態に対応するパラメータ指定も許容される。
図12に示すように、初めに、保護違反例外ハンドラS150は、入力パラメータからタスク切り替えの要否を判定する(S200)。保護違反例外ハンドラS150は、タスク切り替えが不要であると判定した場合(S200:Yes)、正常終了を意味する戻り値を設定し(S201)、処理を終了する。実施の形態では、保護違反例外ハンドラS150は、戻り値として0(ゼロ)を設定する。
保護違反例外ハンドラS150は、タスク切り替えが必要であると判定した場合(S200:No)、次のタスク用のMPUレジスタ410への設定がすでに完了しているかどうかを判定し(S210)、設定済みと判定した場合(S210:Yes)、処理を正常終了する(S201)。
保護違反例外ハンドラS150は、MPUレジスタ410が未設定であると判定した場合(S210:No)、次のタスクのタイプの判定を行う(S220)。
保護違反例外ハンドラS150は、次のタスクのタイプを、レジスタ専有タイプであると判定した場合(S220:Yes)、指定された次のタスクについて、MPUレジスタ410への追加処理を行い(S221)、追加処理の結果を反映した戻り値を設定し(S222)、処理を終了する。実施の形態では、保護違反例外ハンドラS150は、追加処理の結果を反映した戻り値として、追加処理が正常終了した場合には0を、異常終了した場合には−2を設定する。
なお、MPUレジスタ追加処理(S221)の詳細は、図15で説明する。
なお、MPUレジスタ追加処理(S221)の詳細は、図15で説明する。
保護違反例外ハンドラS150は、次のタスクがレジスタ共有タイプであると判定した場合(S220:No)、レジスタ共有タイプのタスクに関するMPUレジスタ更新処理(S230)を実行して処理を終了する。
なお、MPUレジスタ更新処理(S230)の詳細は、図13で説明する。
なお、MPUレジスタ更新処理(S230)の詳細は、図13で説明する。
[レジスタ共有タイプのタスクに関するMPUレジスタ更新処理]
次に、前述したMPUレジスタ更新処理(S230)を説明する。
次に、前述したMPUレジスタ更新処理(S230)を説明する。
図13は、MPUレジスタ更新処理(S230)のうち、レジスタ共有タイプのタスクに関するMPUレジスタ更新処理のフローチャートである。
本処理の開始時点では、少なくとも現在のタスクの専有するMPUレジスタ設定は有効であり、現在のタスクの設定削除済みフラグはクリアされているものとする。
図13に示すように、保護違反例外ハンドラS150は、まず次タスク用として必要なMPUレジスタ数を算出(S300)した後、レジスタ共有タイプのタスク用に割り当てられた現時点での空きMPUレジスタ数を確認する(S310)。
保護違反例外ハンドラS150は、MPUレジスタ追加処理の実行可能条件(空きレジスタ数が十分もしくは現在のタスクの設定削除済みフラグセット)の判定を行う(S320)。
保護違反例外ハンドラS150は、MPUレジスタ追加処理が実行可能であると判定した場合(S320:Yes)、指定された次のタスクについて図15に示すMPUレジスタ追加処理を行い(S370)、追加処理の結果と現在のタスク設定削除済みフラグの状態を反映した戻り値を設定し(S371)、処理を終了する。
ここで、保護違反例外ハンドラS150は、戻り値について、以下のように設定する。
MPUレジスタ410の設定が完了し、現在のタスク用のレジスタの設定も有効である場合、保護違反例外ハンドラS150は、戻り値を「0」に設定する。
MPUレジスタ410の設定が完了し、現在のタスク用のレジスタの設定が無効である場合、保護違反例外ハンドラS150は、戻り値を「−3」に設定する。
MPUレジスタ410の設定が完了せず(設定不可)、現在のタスク用レジスタの設定が有効である場合、保護違反例外ハンドラS150は、戻り値を「−4」に設定する。
MPUレジスタ410の設定が完了せず(設定不可)、現在のタスク用レジスタの設定が無効である場合、保護違反例外ハンドラS150は、戻り値を「−5」に設定する。
MPUレジスタ410の設定が完了し、現在のタスク用のレジスタの設定も有効である場合、保護違反例外ハンドラS150は、戻り値を「0」に設定する。
MPUレジスタ410の設定が完了し、現在のタスク用のレジスタの設定が無効である場合、保護違反例外ハンドラS150は、戻り値を「−3」に設定する。
MPUレジスタ410の設定が完了せず(設定不可)、現在のタスク用レジスタの設定が有効である場合、保護違反例外ハンドラS150は、戻り値を「−4」に設定する。
MPUレジスタ410の設定が完了せず(設定不可)、現在のタスク用レジスタの設定が無効である場合、保護違反例外ハンドラS150は、戻り値を「−5」に設定する。
また、保護違反例外ハンドラS150は、実行可能条件が満たされないと判定した場合(S320:No)、アクセス制御情報設定状態1520を参照し、MPUレジスタ410にメモリ領域情報を削除しても実行に影響のないタスク(すなわち現在のタスクでも次のタスクでもないタスク)が参照するアクセス権限情報が設定されているか否かを判定する(S321)。
保護違反例外ハンドラS150は、MPUレジスタ410に、実行に影響のないタスクが参照するアクセス権限情報が設定されていると判定した場合(S330:Yes)、当該タスクを指定してMPUレジスタ削除処理を実行(S331)することでMPUレジスタ410の空き数の増加を試み、実行後は空き数の確認に戻る(S310)。
なお、MPUレジスタ削除処理(S331)は、図14で詳細に説明する。
なお、MPUレジスタ削除処理(S331)は、図14で詳細に説明する。
保護違反例外ハンドラS150は、実行に影響のないタスクが参照するアクセス権限情報が設定されていないと判定した場合(S330:No)、全てのMPUレジスタをチェックしたか否かを判定する(ステップS340)。
保護違反例外ハンドラS150は、未チェックのMPUレジスタがあると判定した場合(S340:No)、未チェックのMPUレジスタ410についてチェック処理を行う(S321)。
保護違反例外ハンドラS150は、全てのMPUレジスタ410をチェックしてもメモリ権限情報を削除可能なタスクが発見できなかった場合(S340:Yes)、現在のタスクのタイプを判定し(S350)、現在のタスクが専有タイプであると判定した場合(S350:Yes)、さらなるMPUレジスタ設定削除を断念し、所定の戻り値を設定したのち(S360)処理を終了する。
ここで、実施の形態では、保護違反例外ハンドラS150は、所定の戻り値として、−4(MPUレジスタの設定が完了せず、現在のタスク用のレジスタは有効)を設定する。
ここで、実施の形態では、保護違反例外ハンドラS150は、所定の戻り値として、−4(MPUレジスタの設定が完了せず、現在のタスク用のレジスタは有効)を設定する。
保護違反例外ハンドラS150は、現在のタスクが共有タイプであると判定した場合(S350:No)、現在のタスクを指定してMPUレジスタ削除処理を実行し(S351)、削除対象となりうるタスクがこれ以上存在せず、MPUレジスタ追加処理の試行を要求することを意味する、現タスクの設定削除済みフラグをセット(S352)したのち、MPUレジスタの空き数の確認(S310)に戻る。
[MPUレジスタ削除処理]
次に、前述したMPUレジスタ削除処理(S331)及び(S351)の流れを説明する。
次に、前述したMPUレジスタ削除処理(S331)及び(S351)の流れを説明する。
図14は、MPUレジスタ削除処理(S331)及び(S351)のフローチャートである。
なお、本処理の開始時点では、削除済みMPUレジスタ数をカウントするカウンタ値が0に初期化されているものとする。
初めに、保護違反例外ハンドラS150は、MPUレジスタを削除可能な状態であるか否かを判定し(S400)、削除不可能であると判定した場合(S400:No)、不正な削除要求であることを示す戻り値を設定し(S401)、処理を終了する。
ここで、実施の形態では、保護違反例外ハンドラS150は、不正な削除要求であることを示す戻り値として、「−1」を設定する。
ここで、実施の形態では、保護違反例外ハンドラS150は、不正な削除要求であることを示す戻り値として、「−1」を設定する。
保護違反例外ハンドラS150は、MPUレジスタ410が削除可能であると判定した場合(S400:Yes)、MPUレジスタ410を使用中のタスクが指定したタスクと一致するかどうかをチェックする(S410)。
保護違反例外ハンドラS150は、MPUレジスタ410と前述したタスクとが一致したと判定した場合(S420:Yes)、当該MPUレジスタ410の内容をクリアするとともに、削除したMPUレジスタ数のカウンタをインクリメントし、さらにアクセス制御情報設定状態1520を更新する(S421)。
保護違反例外ハンドラS150は、MPUレジスタ410と前述したタスクとが一致しなかったと判定した場合(S420:No)、前述したS421の処理をスキップする。
保護違反例外ハンドラS150は、全てのMPUレジスタ410のチェックが完了したか否かを判定し(S430)、未チェックのMPUレジスタ410があると判定した場合(S430:No)、チェック処理に戻る。
保護違反例外ハンドラS150は、全てのMPUレジスタのチェックが完了したと判定した場合(S430:Yes)、実際に削除したレジスタ数と、削除すべきレジスタ数との比較結果を反映した戻り値を設定し(S431)、処理を終了する。
ここで、保護違反例外ハンドラS150は、指定タスクのレジスタの設定を削除し、かつ削除数がマッチの場合、戻り値「0」を設定し、指定タスクのレジスタの設定が1つもない場合、戻り値「−2」を設定し、指定タスクのレジスタの削除数がミスマッチの場合、戻り値「−3」を設定する。
ここで、保護違反例外ハンドラS150は、指定タスクのレジスタの設定を削除し、かつ削除数がマッチの場合、戻り値「0」を設定し、指定タスクのレジスタの設定が1つもない場合、戻り値「−2」を設定し、指定タスクのレジスタの削除数がミスマッチの場合、戻り値「−3」を設定する。
[MPUレジスタ追加処理]
次に、MPUレジスタ追加処理(S221)及び(S370)の流れを説明する。
次に、MPUレジスタ追加処理(S221)及び(S370)の流れを説明する。
図15は、MPUレジスタ追加処理(S221)及び(S370)のフローチャートである。
本処理の開始時点で、必要なMPUレジスタの空きは原則として確保されているものとする(前記現タスクの設定削除済みフラグがセットされている場合のみ、十分な空きがあるかどうかは不明である)。
初めに、保護違反例外ハンドラS150は、追加対象とする車載OS又はタスクのタイプに割り当てられた、利用可能なMPUレジスタを特定する制御パラメータを設定する。
保護違反例外ハンドラS150は、追加対象が車載OSか否かを判定し(S500)、車載OSであると判定した場合(S500:Yes)、車載OS用の制御パラメータを設定する(S501)。
保護違反例外ハンドラS150は、追加対象が車載OSでないと判定した場合(S500:No)、追加対象がMPUレジスタ専有タイプタスク用か否かを判定する(S510)。
保護違反例外ハンドラS150は、追加対象がMPUレジスタ専有タイプタスク用であると判定した場合(S510:Yes)、MPUレジスタ専有タイプタスク用の制御パラメータを設定する(S511)。
保護違反例外ハンドラS150は、追加対象がMPUレジスタ専有タイプタスク用でないと判定した場合(S510:No)、MPUレジスタ共有タイプタスク用か否かを判定する(S520)。
保護違反例外ハンドラS150は、追加対象がMPUレジスタ共有タイプタスク用であると判定した場合(S520:Yes)、MPUレジスタ共有タイプタスク用の制御パラメータを設定する(S521)。
保護違反例外ハンドラS150は、適切な制御パラメータを設定した後、共通処理である、MPUレジスタ追加メイン処理を実行したのち(S502)、処理を終了する。追加対象が車載OS、レジスタ専有タイプタスク、レジスタ共有タイプタスクのいずれでもなかった場合(S520:No)、不正な追加要求であることを示す戻り値(実施の形態では、「−1」)を設定し(S530)、処理を終了する。
[MPUレジスタ追加メイン処理]
次に、前述したMPUレジスタ追加メイン処理(S502)を説明する。
次に、前述したMPUレジスタ追加メイン処理(S502)を説明する。
図16は、MPUレジスタ追加メイン処理のフローチャートである。
本処理の開始時点では、書き込み済みレジスタ数をカウントするカウント値が0に初期化されているものとする。
保護違反例外ハンドラS150は、事前処理における制御パラメータとして取得した、指定された車載OSまたはタスクのタイプに割り当てられたMPUレジスタ410の情報をもとに、利用可能な空きMPUレジスタ410であるかをチェックする(S600)。
保護違反例外ハンドラS150は、利用可能な空きMPUレジスタ410であると判定した場合(S610:Yes)、当該MPUレジスタ410に1メモリ領域分の設定値を書き込むと共に、書き込みレジスタ数カウンタをインクリメントし、アクセス制御情報設定状態1520を更新する(S611)。
保護違反例外ハンドラS150は、利用可能な空きMPUレジスタ410ではないと判定した場合(S610:No)、上記のS611の処理をスキップする。
保護違反例外ハンドラS150は、指定された車載OSまたはタスク用の全てのメモリ領域分の書き込みが完了したか否かを判定し(S620)、完了したと判定した場合(S620:Yes)、正常終了を示す戻り値(実施の形態では、「0(ゼロ)」)を設定し(S621)、処理を終了する。
保護違反例外ハンドラS150は、未書き込みのメモリ領域が存在していると判定し(S620:No)、かつ未チェックのMPUレジスタ410があると判定した場合(S630:No)、次のMPUレジスタについてチェックする(S600)。
保護違反例外ハンドラS150は、全てのMPUレジスタ410のチェックが完了したにもかかわらず、未書き込みのメモリ領域が存在すると判定した場合(S630:Yes)、一部のメモリ領域のみ書き込まれた不完全な状態を解消するため、指定された車載OSまたはタスクに関するMPUレジスタ削除処理を強制的に実行する(S631)。その後、保護違反例外ハンドラS150は、空きレジスタ不足を示す戻り値(実施の形態では、「−2」)を設定し(S632)、処理を終了する。
以上説明した実施の形態のハードウェア構成およびハードウェアとソフトウェアの連携によるメモリ保護方式、詳細なメモリ保護違反例外処理およびMPUレジスタ更新処理フローによれば、MPUハードウェアに制約されない、切り替えオーバヘッドの小さいメモリ保護機能が実現可能となる。
以上説明した通り、実施の形態では、
(1)プログラムB(第2のソフトウェア)が参照するコード用専有ROM領域1200及びデータ用専有RAM領域1210等(所定のメモリ領域)に対するアクセス権限を規定するアクセス権限情報を記憶する複数のMPUレジスタ410と、
各々のMPUレジスタ410に記憶されたアクセス権限情報に基づいて、メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反検出部430(メモリ保護違反判定部)と、を有するメモリ保護ユニット400(メモリ保護装置)と、
メモリ保護違反が、MPUレジスタ410のアクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部1510と、
MPUレジスタ410にアクセス権限情報を設定するアクセス制御レジスタ設定部1530と、を有し、
MPUレジスタ410は、
少なくとも、有効なアクセス権限情報が設定された(Eフィールド=1)図7に示すチャネル0〜3のレジスタ群(第1のレジスタ群)と、有効なアクセス権限情報が未設定(Eフィールド=0)の図7に示すチャネル4〜7のレジスタ群(第2のレジスタ群)とを有しており、
アクセス制御レジスタ設定部1530は、
レジスタ未設定判定部1510により、メモリ保護違反がMPUレジスタ410へのアクセス権限情報の未設定(Eフィールド=0、又は、Eフィールド=1かつアドレス範囲不一致)に基づくものであると判定した場合、図7に示すチャネル4〜7のレジスタ群の何れかに必要なアクセス権限情報を設定する(Eフィールド=1かつアドレス範囲一致)構成とした。
(1)プログラムB(第2のソフトウェア)が参照するコード用専有ROM領域1200及びデータ用専有RAM領域1210等(所定のメモリ領域)に対するアクセス権限を規定するアクセス権限情報を記憶する複数のMPUレジスタ410と、
各々のMPUレジスタ410に記憶されたアクセス権限情報に基づいて、メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反検出部430(メモリ保護違反判定部)と、を有するメモリ保護ユニット400(メモリ保護装置)と、
メモリ保護違反が、MPUレジスタ410のアクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部1510と、
MPUレジスタ410にアクセス権限情報を設定するアクセス制御レジスタ設定部1530と、を有し、
MPUレジスタ410は、
少なくとも、有効なアクセス権限情報が設定された(Eフィールド=1)図7に示すチャネル0〜3のレジスタ群(第1のレジスタ群)と、有効なアクセス権限情報が未設定(Eフィールド=0)の図7に示すチャネル4〜7のレジスタ群(第2のレジスタ群)とを有しており、
アクセス制御レジスタ設定部1530は、
レジスタ未設定判定部1510により、メモリ保護違反がMPUレジスタ410へのアクセス権限情報の未設定(Eフィールド=0、又は、Eフィールド=1かつアドレス範囲不一致)に基づくものであると判定した場合、図7に示すチャネル4〜7のレジスタ群の何れかに必要なアクセス権限情報を設定する(Eフィールド=1かつアドレス範囲一致)構成とした。
このように構成すると、アクセス制御レジスタ設定部1530は、メモリ保護違反例外が、MPUレジスタ410へのアクセス権限情報の未設定に基づくものであると判定した場合、未設定のMPUレジスタ410に必要なアクセス権限情報を設定する。この結果、アクセス権限情報の未設定に基づくメモリ保護違反例外の場合でも、MPUレジスタ410の内容をリセットするのではなく、未設定のチャネル(実施の形態では、チャネル4〜7)に、必要なアクセス権限情報を設定することで、メモリ保護ユニット400(MPU)でのタスク切り替えや関数呼び出しの際のMPUレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることできる。
(2)また、アクセス権限情報が設定された図7に示すチャネル0〜3のレジスタ群(第1のレジスタ群)と、アクセス権限情報が未設定の図7に示すチャネル4〜7のレジスタ群(第2のレジスタ群)は、メモリ領域へのアクセスの禁止または許可を規定する属性を有する構成とした。
このように構成すると、レジスタ未設定判定部1510は、チャネル0〜3又はチャネル4〜7が有するメモリ領域へのアクセスの禁止または許可を規定する属性に基づいて、メモリ保護違反例外の判定を行うための情報を容易に出力することができる。
(3)また、チャネル0〜3又はチャネル4〜7の一部または全部には、プログラムB(第2のソフトウェア)とは異なるプログラムA(第1のソフトウェア)の参照するメモリ領域の一部または全部が設定されている構成とした。
このように構成すると、チャネル0〜3又はチャネル4〜7の何れにも、少なくとも一部又は全部に、プログラムA及びプログラムBの参照できるメモリ領域が設定されている。この結果、特に一方のプログラム(例えば、プログラムB)から他方のプログラム(例えば、プログラムA)の関数を呼び出し、続いて呼び出し元プログラム(例えば、プログラムB)へ復帰する際のMPUレジスタ入れ替え処理を最小化できる。
(4)また、チャネル0〜3又はチャネル4〜7が有する属性は、電子制御装置1の動作開始時に静的に設定される構成とした。
このように構成すると、電子制御装置1の動作開始時に予め静的に設定された属性に基づいて、タスクの切り換えや、一方のプログラム(例えば、プログラムB)から他方のプログラム(例えば、プログラムA)の関数呼び出しの際のMPUレジスタ入れ替え処理を最小化できる。
(5)また、チャネル0〜3又はチャネル4〜7が有する属性は、電子制御装置1の動作中に動的に設定される構成とした。
このように構成すると、所定のプログラム(例えば、プログラムB)において、共有ライブラリを構成する関数の一部を参照するが、参照先となる関数をあらかじめ静的に特定することが困難な場合や、内蔵周辺モジュールの制御レジスタなど、極端に狭いアドレス範囲を単位としてアクセスを許可する場合でも、未設定のままであるチャネルを動的に再配分することにより、タスクの切り換えや、一方のプログラム(例えば、プログラムB)から他方のプログラム(例えば、プログラムA)の関数呼び出しの際のレジスタの利用効率を向上させることができる。
(6)また、メモリ保護ユニット400は、MPUレジスタ410に設定されていないアドレスへのアクセスの有無を判定するメモリ保護違反例外ハンドラ1500(アクセス権限未設定判定部)を、さらに有する構成とした。
このように構成すると、メモリ保護違反例外ハンドラ1500は、アクセス権限情報が未設定であることに起因するメモリ保護違反例外と、それ以外の真のメモリ保護違反例外の判定を適切に行うことができる。
なお、本発明の電子制御装置1は、メモリ保護ユニット(MPU)を有しない単機能のECU(Electronic Control Unit)の機能を、MPUを有する高機能のECUに追加する場合にも有効である。
図17は、車載マイコンの変形例を説明する図である。
図17に示すように、変形例にかかる車載マイコン10Aは、前述したようにメモリ保護ユニット400を有するECU3と、メモリ保護違反例外ハンドラ1500を有するメモリ4とを有している。本変形例では、このECU3に対して、MPUを有しない、すなわちメモリ保護機能の存在を前提としないECU5の機能を追加(移植)する。
例えば、車両のパワーウィンドウの開閉制御を行うためのECUは、メモリ保護ユニット400を有していない場合が一般的であり、このECUのパワーウィンドウ開閉制御の機能を、メモリ保護ユニット400を有するエンジン制御を行うECUに追加する場合が考えられる。
このように構成すると、メモリ保護ユニットを有しないECU5の機能を実現するプログラムが、ECU3のメモリ保護ユニット400の、「アクセス権限未設定」のメモリ領域にアクセスした場合、メモリ保護違反例が発生する。
その場合、メモリ保護違反例外ハンドラ1500は、MPUレジスタ410を前述した処理(S152:図12〜16)に基づいて更新する。これにより、ECU3は、ECU5の機能(例えば、パワーウインドウの開閉機能)を適切に実現でき、メモリ保護機能をもたないソフトウェア実行環境向けに作成されたプログラムに対し、プログラムの修正なしに、相当機能を追加することができる。
前述したように、メモリ保護機能を有しない複数のECU(単機能ECU)の機能を、メモリ保護機能を有するECU(高機能ECU)に追加して集約する場合、メモリ保護違反例外ハンドラが、メモリ保護違反例外に基づいて、複数の単機能ECUの機能ごとにメモリ保護ユニットのレジスタを適切に更新するので、プログラムの修正等を行わずに、当該機能の追加を簡単に行える。
よって、例えば、数多くの単機能ECUを有する車両の場合、これらの単機能ECUの機能を、メモリ保護機能を有する高機能ECUに追加することで、これらに単機能ECUが不要となり、コストを削減することができ、また単機能ECUの設置スペースを省くことができる。
[第2の実施の形態]
次に、本発明の第2の実施の形態にかかるメモリ保護ユニット400Aを説明する。
次に、本発明の第2の実施の形態にかかるメモリ保護ユニット400Aを説明する。
前述した実施の形態では、メモリ保護ユニット400のデフォルト動作がアクセス禁止であることを要件とし、メモリ保護違反例外の発生要因がアクセス権限未設定であるか否かを、ソフトウェアレベルで判定するものとしていた。これに対して、第2の実施の形態では、車載マイコン10のアーキテクチャにおいて、アクセス権限未設定によるメモリ保護違反例外(以下、アクセス権限未設定例外と呼ぶ)をメモリ保護違反例外とは独立した例外として定義し、アクセス権限未設定例外を識別するための手段(例えば、専用の例外要因識別コードや、例外発生時の分岐先となるベクタアドレス)を導入している。このとき、要因判定処理をメモリ保護ユニット400Aのハードウェアにオフロードし、アクセス権限未設定状態を、アクセス権限未設定例外に直接紐づけて処理することで、例外要因の判定処理にともなうソフトウェア処理の負荷を軽減できる。
図18は、第2の実施の形態にかかるメモリ保護ユニット400Aの構成を説明する図である。
なお、以下の説明では、前述した実施の形態と同一の構成及び機能については、同一の符号を付し、必要に応じて説明する。
なお、以下の説明では、前述した実施の形態と同一の構成及び機能については、同一の符号を付し、必要に応じて説明する。
メモリ保護ユニット400Aでは、それぞれ命令フェッチおよびオペランドアクセスにおけるメモリ保護違反例外発生を通知する出力信号を生成する、命令系メモリ保護違反例外出力生成部440およびデータ系メモリ保護違反例外出力生成部450に加え、それぞれ命令フェッチおよびオペランドアクセスにおいてアクセス権限未設定であることを通知する、命令系アクセス権限未設定例外出力生成部460とデータ系アクセス権限未設定例外出力生成部470とを備える。
メモリ保護ユニット400Aでは、複数のメモリ保護違反検出部430から出力されるアドレス一致/不一致情報が、すべてアドレス不一致(MPUレジスタ410のEフィールド411=0を含む)であった場合には、MPUのデフォルト動作指定によらず、例外タイプ(命令またはデータ)に応じたアクセス権限未設定例外が出力される。メモリ保護違反例外出力については、従来方式との互換性を重視し、アクセス権限未設定時のMPUのデフォルト動作がメモリ保護違反の場合に、メモリ保護違反例外も出力するよう実装してもよいし、アクセス権限未設定例外出力時にはメモリ保護違反例外出力を抑止するよう実装してもよい。参照する車載マイコン10のアーキテクチャ定義と矛盾しなければよい。
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
また、前述した実施の形態では、電子制御装置1を車載組み込みシステムに適用した場合を例示して説明したが、これに限定されるものではなく、産業機械、鉄道システム、船舶、航空機など様々な分野の組み込みシステムに適用することができる。
また、本発明は、前述した実施の形態を全て組み合わせてもよく、何れか2つ以上の実施の形態を任意に組み合わせても好適である。
また、本発明は、前述した実施の形態の全ての構成を備えているものに限定されるものではなく、前述した実施の形態の構成の一部を、他の実施の形態の構成に置き換えてもよく、また、前述した実施の形態の構成を、他の実施の形態の構成に置き換えてもよい。
また、前述した実施の形態の一部の構成について、他の実施の形態の構成に追加、削除、置換をしてもよい。
1:電子制御装置、10:車載マイコン、20:内部インタコネクト、30:システム管理モジュール、40:通信モジュール、50:通信用外部インタフェース、60:不揮発性メモリ、70:入出力モジュール、80:入出力用外部インタフェース、90:リセット要求信号、100:CPU、200:命令実行ユニット、300:メモリコントローラ、310:メモリアクセスインタフェース、320:メモリアクセス属性情報、400:メモリ保護ユニット、410:MPUレジスタ、420:レジスタアクセス制御部、430:メモリ保護違反検出部、440:命令系メモリ保護違反例外出力生成部、450:データ系メモリ保護違反例外出力生成部、500:命令キャッシュ、510:命令キャッシュアクセスインタフェース、600:データキャッシュ、610:データキャッシュアクセスインターフェース、700:ローカルメモリ、710:ローカルメモリアクセスインタフェース、1500:メモリ保護違反例外ハンドラ、1510:レジスタ未設定判定部、1520:アクセス制御情報設定状態、1521:アクセス制御情報設定状態アクセスインタフェース、1530:アクセス制御レジスタ設定部、1540:アクセス制御情報データベース、1541:アクセス制御情報データベースアクセスインタフェース
Claims (11)
- 第1のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、
前記レジスタに記憶された前記アクセス権限情報に基づいて、前記メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置と、
前記メモリ保護違反が、前記レジスタの前記アクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部と、
前記レジスタに前記アクセス権限情報を設定するレジスタ設定部と、を有し、
前記レジスタは、
少なくとも、前記アクセス権限情報が設定された第1のレジスタ群と、前記アクセス権限情報が未設定の第2のレジスタ群とを有しており、
前記レジスタ設定部は、
前記レジスタ未設定判定部により、前記メモリ保護違反が前記レジスタへの前記アクセス権限情報の未設定に起因するものであると判定した場合、前記第2のレジスタ群に前記アクセス権限情報を設定する電子制御装置。 - 前記第1のレジスタ群は、前記メモリ領域へのアクセスの禁止または許可を規定する属性を有する請求項1に記載の電子制御装置。
- 前記第2のレジスタ群は、前記メモリ領域へのアクセスの禁止または許可を規定する属性を有する請求項1に記載の電子制御装置。
- 前記第1のレジスタ群の一部または全部には、前記第1のソフトウェアとは異なる第2のソフトウェアの参照するメモリ領域の一部または全部が設定されている請求項2に記載の電子制御装置。
- 前記第2のレジスタ群の一部または全部には、前記第1のソフトウェアの参照するメモリ領域の一部または全部が設定されている請求項3に記載の電子制御装置。
- 前記第1のレジスタ群が有する前記属性は、前記電子制御装置の動作開始時に静的に設定される請求項2に記載の電子制御装置。
- 前記第2のレジスタ群が有する前記属性は、前記電子制御装置の動作開始時に静的に設定される請求項3に記載の電子制御装置。
- 前記第1のレジスタ群が有する前記属性は、前記電子制御装置の動作中に動的に設定される請求項2に記載の電子制御装置。
- 前記第2のレジスタ群が有する前記属性は、前記電子制御装置の動作中に動的に設定される請求項3に記載の電子制御装置。
- 前記メモリ保護装置は、前記レジスタに設定されていないアドレスへのアクセスの有無を判定するアクセス権限未設定判定部を、さらに有する請求項1に記載の電子制御装置。
- 第1のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、
前記レジスタに記憶された前記アクセス権限情報に基づいて、前記メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置を有し、
前記メモリ保護違反が、前記レジスタの前記アクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定ステップと、
前記レジスタに前記アクセス権限情報を設定するレジスタ設定ステップと、を有し、
前記レジスタは、
少なくとも、前記アクセス権限情報が設定された第1のレジスタ群と、前記アクセス権限情報が未設定の第2のレジスタ群とを有しており、
前記レジスタ設定ステップは、
前記レジスタ未設定判定ステップにより、前記メモリ保護違反が前記レジスタへの前記アクセス権限情報の未設定に起因するものであると判定した場合、前記第2のレジスタ群に前記アクセス権限情報を設定する電子制御装置の制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017174696A JP2019049928A (ja) | 2017-09-12 | 2017-09-12 | 電子制御装置及び電子制御装置の制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017174696A JP2019049928A (ja) | 2017-09-12 | 2017-09-12 | 電子制御装置及び電子制御装置の制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019049928A true JP2019049928A (ja) | 2019-03-28 |
Family
ID=65905596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017174696A Pending JP2019049928A (ja) | 2017-09-12 | 2017-09-12 | 電子制御装置及び電子制御装置の制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2019049928A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021043580A (ja) * | 2019-09-09 | 2021-03-18 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
WO2021192098A1 (ja) * | 2020-03-25 | 2021-09-30 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
CN117688017A (zh) * | 2023-11-15 | 2024-03-12 | 北京西能电子科技发展有限公司 | 一种适配autosar标准的保护区地址自动更新方法及装置 |
-
2017
- 2017-09-12 JP JP2017174696A patent/JP2019049928A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021043580A (ja) * | 2019-09-09 | 2021-03-18 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
JP7321851B2 (ja) | 2019-09-09 | 2023-08-07 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
WO2021192098A1 (ja) * | 2020-03-25 | 2021-09-30 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
JPWO2021192098A1 (ja) * | 2020-03-25 | 2021-09-30 | ||
JP7062142B2 (ja) | 2020-03-25 | 2022-05-02 | 三菱電機株式会社 | 情報処理装置、情報処理方法及び情報処理プログラム |
CN117688017A (zh) * | 2023-11-15 | 2024-03-12 | 北京西能电子科技发展有限公司 | 一种适配autosar标准的保护区地址自动更新方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7827326B2 (en) | Method and apparatus for delegation of secure operating mode access privilege from processor to peripheral | |
US8234476B2 (en) | Information processing apparatus and method of updating stack pointer | |
US20240231945A9 (en) | Method and device for operating a computing unit | |
CN108351840B (zh) | 车辆控制装置 | |
EP4155949A1 (en) | Method and apparatus for isolating kernel from task | |
JP2009251967A (ja) | マルチコアシステム | |
JP2019049928A (ja) | 電子制御装置及び電子制御装置の制御方法 | |
JP6838223B2 (ja) | 車両制御装置 | |
US20230021594A1 (en) | Method and device for operating a computing device | |
WO2015045507A1 (ja) | 車両用制御装置 | |
KR20160030440A (ko) | 데이터 처리장치의 디버깅 | |
US7831816B2 (en) | Non-destructive sideband reading of processor state information | |
JP5975923B2 (ja) | 車両用制御装置 | |
CA2551045C (en) | Input-output control apparatus, input-output control method, process control apparatus and process control method | |
US8782367B2 (en) | Memory area protection circuit | |
CN112464182A (zh) | 一种移动设备管理的安全管控方法、装置、介质和设备 | |
JP2010009454A (ja) | 情報処理装置 | |
US20180260563A1 (en) | Computer system for executing analysis program, and method of monitoring execution of analysis program | |
JP6349444B2 (ja) | 車両用制御装置 | |
WO2006047762A1 (en) | Mechanism to generate restricted and unrestricted execution environments | |
JP4937200B2 (ja) | イメージ検査装置、os装置及びイメージ検査方法 | |
WO2020179344A1 (ja) | 車両制御装置 | |
JP2014137734A (ja) | 情報処理装置、プログラム | |
US20230259302A1 (en) | Control device, control method, recording medium in which control program is recorded, and vehicle | |
CN117272412B (zh) | 中断控制寄存器保护方法、装置、计算机设备及存储介质 |