(57)【要約】      （修正有）【課題】ＭＰＵでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させる。【解決手段】アクセス権限情報を記憶するレジスタ４１０と、レジスタ４１０の設定に基づき、アクセスがメモリ保護違反であるかを判定するメモリ保護違反検出部４３０と、を有するメモリ保護ユニット４００と、メモリ保護違反が、アクセス権限の未設定に起因するかを判定する未設定判定部１５１０と、レジスタ４１０にイネーブルを設定するレジスタ設定部１５３０とを有する。レジスタ４１０は、少なくともアクセス権限が設定されたチャネル０〜３と、未設定のチャネル４〜７とを有している。レジスタ設定部１５３０は、未設定判定部１５１０により、メモリ保護違反がレジスタ４１０へのアクセス権限の未設定に基づくものであると判定した場合、チャネル４〜７の何れかにアクセス権限を設定する。【選択図】図９
2019049928.tif 000002
【特許請求の範囲】
【請求項１】
第１のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、
前記レジスタに記憶された前記アクセス権限情報に基づいて、前記メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置と、
前記メモリ保護違反が、前記レジスタの前記アクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部と、
前記レジスタに前記アクセス権限情報を設定するレジスタ設定部と、を有し、
前記レジスタは、
少なくとも、前記アクセス権限情報が設定された第１のレジスタ群と、前記アクセス権限情報が未設定の第２のレジスタ群とを有しており、
前記レジスタ設定部は、
前記レジスタ未設定判定部により、前記メモリ保護違反が前記レジスタへの前記アクセス権限情報の未設定に起因するものであると判定した場合、前記第２のレジスタ群に前記アクセス権限情報を設定する電子制御装置。
【請求項２】
前記第１のレジスタ群は、前記メモリ領域へのアクセスの禁止または許可を規定する属性を有する請求項１に記載の電子制御装置。
【請求項３】
前記第２のレジスタ群は、前記メモリ領域へのアクセスの禁止または許可を規定する属性を有する請求項１に記載の電子制御装置。
【請求項４】
前記第１のレジスタ群の一部または全部には、前記第１のソフトウェアとは異なる第２のソフトウェアの参照するメモリ領域の一部または全部が設定されている請求項２に記載の電子制御装置。
【請求項５】
前記第２のレジスタ群の一部または全部には、前記第１のソフトウェアの参照するメモリ領域の一部または全部が設定されている請求項３に記載の電子制御装置。
【請求項６】
前記第１のレジスタ群が有する前記属性は、前記電子制御装置の動作開始時に静的に設定される請求項２に記載の電子制御装置。
【請求項７】
前記第２のレジスタ群が有する前記属性は、前記電子制御装置の動作開始時に静的に設定される請求項３に記載の電子制御装置。
【請求項８】
前記第１のレジスタ群が有する前記属性は、前記電子制御装置の動作中に動的に設定される請求項２に記載の電子制御装置。
【請求項９】
前記第２のレジスタ群が有する前記属性は、前記電子制御装置の動作中に動的に設定される請求項３に記載の電子制御装置。
【請求項１０】
前記メモリ保護装置は、前記レジスタに設定されていないアドレスへのアクセスの有無を判定するアクセス権限未設定判定部を、さらに有する請求項１に記載の電子制御装置。
【請求項１１】
第１のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、
前記レジスタに記憶された前記アクセス権限情報に基づいて、前記メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置を有し、
前記メモリ保護違反が、前記レジスタの前記アクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定ステップと、
前記レジスタに前記アクセス権限情報を設定するレジスタ設定ステップと、を有し、
前記レジスタは、
少なくとも、前記アクセス権限情報が設定された第１のレジスタ群と、前記アクセス権限情報が未設定の第２のレジスタ群とを有しており、
前記レジスタ設定ステップは、
前記レジスタ未設定判定ステップにより、前記メモリ保護違反が前記レジスタへの前記アクセス権限情報の未設定に起因するものであると判定した場合、前記第２のレジスタ群に前記アクセス権限情報を設定する電子制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子制御装置及び電子制御装置の制御方法に関する。
【背景技術】
【０００２】
近年、産業分野では、産業機器の電子化が進展しており、組み込みソフトウェアで動作する電子機器や、それらを組み合わせたシステムの複雑化、大規模化が急速に進んでいる。
例えば、自動車分野の機能安全規格ＩＳＯ２６２６２は、車載組み込みシステムにおける高い安全性、信頼性とソフトウェア開発の効率化の両立を目標に規格化されたものであり、自動車安全度水準（Ａｕｔｏｍｏｔｉｖｅ  Ｓａｆｅｔｙ  Ｉｎｔｅｇｒｉｔｙ  Ｌｅｖｅｌ：ＡＳＩＬ）と呼ばれる指標を導入している。機能安全規格ＩＳＯ２６２６２は、ＡＳＩＬ導出のための３つのファクタ（暴露性・回避性・危害度）とそれらを用いたハザード分析、リスク評価手法を定めている。
【０００３】
ＡＳＩＬでは、車載組み込みシステムで起こりうる障害（ハザード）を回避するために実現しなければならない安全性のレベルを、５段階の安全水準（Ｑｕａｌｉｔｙ  Ｍａｎａｇｅｍｅｎｔ：ＱＭ、およびＡＳＩＬ−Ａ／−Ｂ／−Ｃ／−Ｄ）で規定している。
【０００４】
機能安全規格ＩＳＯ２６２６２に準拠した車載組み込みシステムを開発する際、特に重視するのは、無干渉（Ｆｒｅｅｄｏｍ  Ｆｒｏｍ  Ｉｎｔｅｒｆｅｒｅｎｃｅ：ＦＦＩ）機能である。ＦＦＩ機能とは、相互に異なるＡＳＩＬで動作する複数のソフトウェアが１つの電子制御装置（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：ＥＣＵ）上で混在して実行される場合に、低い安全度水準のＡＳＩＬで動作するソフトウェアで発生した誤動作が、高い安全度水準のＡＳＩＬで動作するソフトウェアに伝搬することを防ぐものである。
【０００５】
ここで、安全に関わるコンポーネントが、他のコンポーネントによるアクセスから保護されること、すなわち、あるソフトウェアに割り当てられた特定のメモリ領域を、別のソフトウェアによる意図しない不正アクセスから保護する機能をメモリ保護機能と言う。
【０００６】
車載組み込みシステムに搭載されるマイクロコンピュータ（以下、車載マイコンと言う）では、ソフトウェアの実行に伴い発生する命令フェッチやオペランドアクセスごとに、メモリ保護違反の有無を実時間で監視する。また、この種の車載マイコンでは、メモリ保護機能そのものを保護するという必要性から、メモリ保護機能を実行するメモリ保護ユニット（Ｍｅｍｏｒｙ  Ｐｒｏｔｅｃｔｉｏｎ  Ｕｎｉｔ：ＭＰＵ）と呼ばれるハードウェアモジュールを搭載するのが一般的である。
【０００７】
このＭＰＵは、車載マイコンで使用される全てのアドレス空間のうち、開始アドレスと終了アドレス（又はサイズ）を指定して切り出したメモリ範囲ごとに、当該メモリ範囲へのアクセスの可否を規定するアクセス権属性を組み合わせて指定した「メモリ領域」を単位として保護を行う。
【０００８】
一方、車載マイコンでは、ハードウェア実装上及びコスト上の制約から、ＭＰＵに用意されたレジスタに対して同時に設定可能なメモリ領域、すなわちＭＰＵの監視対象となるメモリ領域の数には上限がある。一般的に、ＭＰＵで監視可能なメモリ領域の数は１６から２４程度である。このメモリ領域の数の制約は、ハードウェアに起因する本質的なものであり、特に３つ以上の異なるＡＳＩＬで動作する複数のソフトウェアを単一のＥＣＵ上で動作させる場合に、監視対象となる全てのメモリ領域を同時にＭＰＵに設定できないことが課題となっている。
【０００９】
ここで、特許文献１には、命令フェッチ用の保護情報とオペランドアクセス用の保護情報を相互に独立して無効化する手段を設け、あらかじめ高い信頼性をもつことが判明しているソフトウェアからの命令フェッチ要求は無条件に許可することで、ＭＰＵのレジスタに同時に設定すべきメモリ領域の数を減らす技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−１４０２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１に開示された技術では、ＭＰＵを用いてメモリ保護を行う場合、ハードウェアの制約から、レジスタ数を単純に増加させるのは容易ではない。また、近年、車載マイコンの性能向上や、車載組み込みシステムのコスト低減を図るため、複数のＥＣＵを１台に集約したいというニーズが高まっており、１台のＥＣＵ上で同時に動作するソフトウェアの数、付与されたＡＳＩＬのタイプ数、監視対象となるメモリ領域の数の増大について、利用上の工夫のみで対処するのは困難である。そのため、ハードウェアに制約されない抜本的な解決策が望まれている。
【００１２】
ソフトウェア実行環境に関しては、対象製品のＡＳＩＬや利用する車載マイコンの性能により、自動車業界で採用されているＡＵＴＯＳＡＲ（ＡＵＴｏｍｏｔｉｖｅ  Ｏｐｅｎ  Ｓｙｓｔｅｍ  ＡＲｃｈｉｔｅｃｔｕｒｅ）準拠のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を導入するケースと、機能を絞り込んだ独自ＯＳを利用するケースが併存する。ＡＵＴＯＳＡＲ準拠ＯＳ（以下、車載ＯＳと言うこともある）においては、ソフトウェア動作中の例外発生はハードウェアの故障またはソフトウェアの不具合によるものとみなし、発生した例外事象に起因するシステムの非安全状態からの回復のためシステムをリセットするのが基本ポリシである。
【００１３】
ソフトウェア間の関数呼び出し機能については、車載ＯＳが管理する標準ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）の態様で提供される。ＡＰＩでは、当該機能の利用に際して、より特権レベルの高いＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）動作モード（特権モード）への遷移を伴うこと、またタスク切り替えや関数呼び出しの際、実際の切り替え動作に先立ち、切り替え後のメモリ保護違反例外の発生を防ぐため、必要なメモリ保護設定をすべてＭＰＵ内の所定のレジスタに格納しておくという前提で設計されている。
【００１４】
このため、ＥＣＵでは、ＭＰＵでのタスクの切り替えや関数の呼び出しに伴うオーバヘッドが大きく、かつ切り替え等の都度必ずオーバヘッドが発生してしまう。ＥＣＵ上で動作するソフトウェアの数が多いほどタスクの切り替え頻度が多くなる結果、レジスタの入れ替え処理に要する時間が増大し、ソフトウェアの実行効率が低下してしまう。
【００１５】
したがって、本発明は、上記の課題に着目してなされたもので、ＭＰＵでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることを目的とする。
【課題を解決するための手段】
【００１６】
上記課題を解決するため、第１のソフトウェアが参照する所定のメモリ領域に対するアクセス権限を規定するアクセス権限情報を記憶するレジスタと、レジスタに記憶されたアクセス権限情報に基づいて、メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反判定部と、を有するメモリ保護装置と、メモリ保護違反が、レジスタのアクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部と、レジスタにアクセス権限情報を設定するレジスタ設定部と、を有し、レジスタは、少なくとも、アクセス権限情報が設定された第１のレジスタ群と、アクセス権限情報が未設定の第２のレジスタ群とを有しており、レジスタ設定部は、レジスタ未設定判定部により、メモリ保護違反がレジスタへのアクセス権限情報の未設定に起因するものであると判定した場合、第２のレジスタ群にアクセス権限情報を設定する電子制御装置とした。
【発明の効果】
【００１７】
本発明によれば、ＭＰＵでのタスク切り替えや関数呼び出しの際のレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることできる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態にかかる電子制御装置の全体構成を説明する図である。
【図２】実施の形態にかかるメモリ保護ユニットの構成を示す図である。
【図３】プログラムＡが参照するメモリ領域の定義と、レジスタへのアクセス権限設定の一例を説明する図である。
【図４】プログラムＢが参照するメモリ領域の定義と、レジスタへのアクセス権限設定の一例を説明する図である。
【図５】従来方式の一例として、車載ＯＳに実装されたメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に説明する図である。
【図６】従来方式の一例として、車載ＯＳに実装されたＡＰＩを利用し、プログラムＢからプログラムＡの一部の機能（ＱＭ向け機能）を呼び出す場合の動作の流れを説明する図である。
【図７】実施の形態にかかるプログラムＢが参照するメモリ領域と、プログラムＢが参照するメモリ領域の一部が未設定である場合のレジスタへのアクセス権限設定の一例を説明する図である。
【図８】実施の形態にかかるプログラムＡが参照するメモリ領域と、プログラムＡが参照するメモリ領域の一部が未設定となった場合のレジスタへのアクセス権限設定の一例を説明する図である。
【図９】メモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に説明する図である。
【図１０】実施の形態にかかるメモリ保護機能により、プログラムＡからプログラムＢに提供された機能（ＱＭ向け機能）を、ＡＰＩを利用せずプログラムＢから直接呼び出す場合の流れを説明する図である。
【図１１】プログラムＡからプログラムＢに提供された機能（ＱＭ向け機能）を、ＡＰＩを利用せずプログラムＢから直接呼び出す場合の流れを説明する図である。
【図１２】レジスタ更新処理のフローチャートである。
【図１３】レジスタ更新処理のフローチャートである。
【図１４】レジスタ削除処理のフローチャートである。
【図１５】レジスタ追加処理のフローチャートである。
【図１６】レジスタ追加メイン処理のフローチャートである。
【図１７】車載マイコンの変形例を説明する図である。
【図１８】第２の実施の形態にかかるメモリ保護ユニットの構成を説明する図である。
【発明を実施するための形態】
【００１９】
初めに、以下で説明する実施の形態で使用する用語の意味を定義する。
【００２０】
以下の説明において、メモリは、プログラムやデータを記憶する１つ以上の記憶装置である。メモリは、不揮発性メモリ、揮発性メモリ、ＲＯＭ、ＲＡＭ、Ｆｉｒｓｔ−Ｉｎ−Ｆｉｒｓｔ−Ｏｕｔ（ＦＩＦＯ）型バッファメモリ、リング型バッファメモリ、インタリーブ型バッファメモリ、命令キャッシュ、データキャッシュ、レジスタなどから構成される。メモリの一部又は全部は、車載マイコンと同一のシリコンチップ上に形成されていてもよいし、異なるシリコンチップ上に形成されていてもよい。メモリは、さらに、車載マイコンのメモリアドレス空間を経由してアクセス可能な不揮発性外部記憶デバイス（例えば、ハードディスクドライブ又はソリッドステートドライブ、メモリカードなどの記録媒体）を含んでいてもよい。
【００２１】
また、以下の説明において、車載マイコンは、１つのＣＰＵを備えるシングルコアでもよいし、２以上のＣＰＵを備えるマルチコアでもよい。それぞれのＣＰＵの実装は、１つの命令実行ユニットを備える非スーパースカラ方式でもよいし、２以上の命令実行ユニットを備えるスーパースカラ方式でもよい。故障や誤動作を検出する目的で、各ＣＰＵは同一プログラムを同時に実行する物理的に複数のＣＰＵからなるロックステップ構成を採用してもよい。車載マイコンは、ＣＰＵとは独立に、もしくはＣＰＵからの指示に基づきメモリアクセスを実行するハードウェア回路（例えば、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ、ＤＭＡＣ）を含んでいてもよい。メモリ保護回路は、１つ以上の前記命令実行ユニットに加え、前記ハードウェア回路が発生するメモリアクセスを並列又は時分割で監視するよう構成されていてもよい。
【００２２】
また、以下の説明において、「〇〇部」の表現にて機能を説明する場合があるが、機能は１以上のプログラムが命令実行ユニットで実行されることで実現されてもよいし、１以上のハードウェア回路（例えば、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ：ＦＰＧＡ）やＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）によって実現されてもよい。
【００２３】
機能が、命令実行ユニットによって実現される場合、定められた処理が適宜メモリ及び／又は通信用外部インタフェースを用いながら行われるため、機能は、命令実行ユニットの少なくとも一部とされてもよい。また、機能を主語として説明する処理は、命令実行ユニット又はその命令実行ユニットを有するＣＰＵが行う処理としてもよい。また、命令実行ユニットは、処理の一部または全部を行うハードウェア回路を含んでいてもよい。プログラムは、プログラムソースからＥＣＵにインストールされてもよい。プログラムソースは、例えば、不揮発性メモリ上の特定領域、又は車載マイコンが読み取り可能な記録媒体（例えば、メモリカード）であってもよい。なお、各機能の説明は一例であり、複数の機能が１つの機能に纏められ、又は１つの機能が複数の機能に分割されていてもよい。
【００２４】
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号または参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用または参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００２５】
以下、本発明の実施の形態にかかる電子制御装置１を説明する。実施の形態では、電子制御装置１を車両の組み込みシステム（車載組み込みシステム）に適用した場合を例示して説明する。
図１は、電子制御装置１の全体構成を説明する図である。
【００２６】
図１に示すように、電子制御装置１は、車両の組み込みシステムに搭載された車載マイコン１０を有している。
【００２７】
車載マイコン１０は、ＣＰＵ１００と、システム管理モジュール３０と、通信モジュール４０と、不揮発性メモリ６０と、入出力モジュール７０とが内部インタコネクト２０を介して接続されている。内部インタコネクト２０は、内蔵された機能モジュール間の情報を伝達する信号線である。システム管理モジュール３０と、通信モジュール４０と、不揮発性メモリ６０と、入出力モジュール７０とは、それぞれ独立したアドレス領域を割り当てられた内蔵周辺モジュールである。
【００２８】
通信モジュール４０には、通信用外部インタフェース５０が接続されており、入出力モジュール７０には、入出力用外部インタフェース８０が接続されている。これらの通信用外部インタフェース５０と入出力モジュール７０とは、車載マイコン１０の外部機器との接続に用いられる。
【００２９】
実施の形態では、説明を簡単にするため、内蔵周辺モジュールは、それぞれ１つずつ存在する場合を例示して説明するが、これらの内蔵周辺モジュールは、２つ以上であってもよい。また、図示は省略するが、タイマモジュールや割り込みコントローラなどの機能を備えた１つ以上の内蔵周辺モジュールを、内部インタコネクト２０に接続してもよい。
【００３０】
システム管理モジュール３０は、入力信号として少なくとも１つ以上の他の内蔵周辺モジュールからのリセット要求信号９０を受け付け、車載マイコン１０の内部状態と当該リセット要求信号９０の受け付け（要求状態）を監視する。システム管理モジュール３０は、内蔵周辺モジュールからのリセット要求信号９０の受け付け、又は車載マイコン１０の動作異常を示す所定の状態を検出すると、ＣＰＵ１００に対して車載マイコン１０のリセットを要求する。
【００３１】
要求を受け付けたＣＰＵ１００は、リセットベクタと呼ばれる専用のアドレスに配置されたスタートアッププログラムを実行することで、車載マイコン１０の初期化処理を行う。なお、リセット要求信号９０は、所定アドレスにあるレジスタへの書き込みなどの手段により、システム管理モジュール３０の内部で生成されてもよい。
【００３２】
外部通信モジュール４０は、車載マイコン１０の外部に接続されたハードウェア回路（図示せず）との間で、通信用外部インタフェース５０を介して所定のプロトコル（例えば、ＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）やＦｌｅｘＲａｙ）に基づく通信を行う。なお、ハードウェア回路（図示せず）は、車載マイコン１０が実装されたＥＣＵ内部に搭載された、各種機能モジュールまたはハードウェアでもよいし、外部に存在する別のＥＣＵでもよい。
【００３３】
不揮発性メモリ６０は、車載マイコン１０上で動作するＯＳ及び／又はソフトウェアの実行コードと、ＯＳ及び／又はソフトウェアの実行に必要な初期データが格納される。また、車載マイコン１０の初期化処理を行うスタートアッププログラムが格納されていてもよい。
【００３４】
入出力モジュール７０は、車載マイコン１０の外部にあるセンサ（図示せず）や、アクチュエータ（図示せず）を駆動するドライブ回路（図示せず）との間で、入出力用外部インタフェース８０を介して接続される。入出力モジュール７０は、ＣＰＵ１００上で動作するソフトウェアの要求に基づき、車載マイコン１０に接続されたアナログ及び／又はデジタル入力信号を取り込み、パルス幅変調及び／又はデジタル出力信号を出力する。実施の形態にかかる一例では、アナログ入力信号は、レベル変換およびアナログ−デジタル変換処理が行われ、デジタル値としてＣＰＵ１００に読み込まれる。
【００３５】
ＣＰＵ１００は、命令実行ユニット２００、メモリコントローラ３００、メモリ保護ユニット４００、命令キャッシュ５００、データキャッシュ６００、ローカルメモリ７００を含む機能モジュールである。
【００３６】
命令実行ユニット２００は、前述した不揮発性メモリ６０、命令キャッシュ５００、又はローカルメモリ７００に格納されたプログラムを、メモリコントローラ３００経由で読み出し、プログラムに含まれる命令列にしたがい所定の処理を実行する。命令実行に必要なデータ（オペランド）は、不揮発性メモリ６０、データキャッシュ６００、又はローカルメモリ７００に格納され、プログラムに含まれるメモリアクセス命令の実行によりアクセスされる。
【００３７】
メモリコントローラ３００は、メモリアクセスインタフェース３１０およびメモリアクセス属性情報３２０を経由して、命令実行ユニット２００が発行するメモリアクセス要求（命令フェッチおよびオペランドアクセス）を受け付け、アドレスにより指定されたメモリへのアクセスを行い、アクセス結果（読み出しデータ、及び例外発生の有無）を命令実行ユニット２００に対し返信する。
【００３８】
ＣＰＵ１００のキャッシュ動作が有効となるよう設定されている場合、メモリコントローラ３００は、メモリアクセス要求の対象が命令キャッシュ５００又はデータキャッシュ６００内に含まれるかどうかを判定（キャッシュヒット判定）し、キャッシュヒット時にはキャッシュされた命令コードまたはデータへのアクセスを優先する。キャッシュミス及びデータ書き込み時には、メモリコントローラ３００は、公知のアルゴリズムに基づき命令キャッシュ５００、データキャッシュ６００又はキャッシュ元メモリの内容を更新する。
【００３９】
メモリアクセスインタフェース３１０は、命令実行ユニット２００からメモリコントローラ３００及びメモリ保護ユニット４００に対し、メモリアクセス要求の対象となるアドレスおよび書き込みデータ（書き込み要求時）を転送するとともに、メモリコントローラ３００又はメモリ保護ユニット４００から命令実行ユニット２００に対し、読み出しデータ（読み出し要求時）を転送する。
【００４０】
メモリアクセス属性情報３２０は、メモリアクセスインタフェース３１０と同期し、命令実行ユニット２００が発行するメモリアクセス要求のアクセス先（メモリコントローラ３００又はメモリ保護ユニット４００）、アクセス種別（データ読み出し、データ書き込み、又は命令フェッチ）、メモリアクセス要求時点でのＣＰＵ１００の動作モード（特権モード又はユーザモード）を通知し、メモリアクセス要求による例外発生の有無を命令実行ユニット２００に返信する。
【００４１】
メモリ保護ユニット４００は、メモリアクセスインタフェース３１０及びメモリアクセス属性情報３２０に基づいて特定される命令実行ユニット２００のメモリアクセス要求を監視し、内蔵するＭＰＵレジスタ４１０（図３参照）に設定されたアクセス権限情報に基づき、メモリアクセスに対するメモリ保護違反の有無を判定する。
【００４２】
メモリ保護ユニット４００は、メモリ保護違反を検出した場合、違反の検出を示すメモリ保護違反例外をメモリアクセス属性情報３２０経由で出力し、命令実行ユニット２００に通知する。メモリ保護違反例外を受信した命令実行ユニット２００の動作は、アーキテクチャに依存したプログラミング仕様として定義されるが、例えば、すべての例外要因に共通の、もしくはメモリ保護違反例外に固有の例外ベクタアドレスに配置された例外処理プログラム（ハンドラ）による例外処理を実行するのが、車載を含む組み込み車載マイコン１０における一般的な実装である。
【００４３】
なお、メモリアクセスインタフェース３１０及びメモリアクセス属性情報３２０は、メモリ保護ユニット４００内のレジスタに対するアクセスの際にも共用される。メモリ保護ユニット４００は、ＭＰＵレジスタ４１０とは別に、例えば、メモリ保護違反例外検出に関するデフォルト動作を規定するなど、メモリ保護ユニット４００の動作を制御するレジスタを備えていてもよい。
【００４４】
命令キャッシュ５００は、命令キャッシュアクセスインタフェース５１０によりメモリコントローラ３００と接続される。データキャッシュ６００は、データキャッシュアクセスインタフェース６１０によりメモリコントローラ３００と接続される。ローカルメモリ７００は、ローカルメモリアクセスインタフェース７１０によりメモリコントローラ３００と接続される。
【００４５】
［メモリ保護ユニットの構成］
次に、メモリ保護ユニット４００を説明する。
図２は、実施の形態にかかるメモリ保護ユニット４００の構成を示す図である。
【００４６】
メモリ保護ユニット４００は、それぞれ特定のメモリ領域を定義し、そのアドレス範囲とアクセス権限情報を記憶する複数のＭＰＵレジスタ４１０と、このＭＰＵレジスタ４１０に対する読み書きを制御するレジスタアクセス制御部４２０と、ＭＰＵレジスタ４１０の設定内容に基づき、メモリアクセスインタフェース３１０およびメモリアクセス属性情報３２０にて特定されるメモリアクセスを監視し、アドレス範囲の一致／不一致、ならびにメモリ保護違反の発生の有無をＭＰＵレジスタ４１０ごとに並列に判定する、複数のメモリ保護違反検出部４３０と、複数のメモリ保護違反検出部４３０が出力する判定結果を纏め、命令フェッチ及びオペランドアクセスにおけるメモリ保護違反例外の発生を、それぞれ命令実行ユニット２００に通知する出力信号を生成する、命令系メモリ保護違反例外出力生成部４４０と、データ系メモリ保護違反例外出力生成部４５０とを有している。
【００４７】
ＭＰＵレジスタ４１０の各々は、例えば、以下の要素、すなわち当該レジスタの設定が有効であることを示すイネーブル（Ｅ）フィールド４１１と、当該レジスタが監視対象とするアドレス範囲を指定する最小アドレスと最大アドレスをそれぞれ格納する開始アドレス指定フィールド４１２および終了アドレス指定フィールド４１３と、開始アドレス指定フィールド４１２と終了アドレス指定フィールド４１３の間のアドレスを対象とする、特権モード下でのメモリアクセス可否について、読み出し、書き込み、実行の３種別に分けてそれぞれ指定する、特権モード時読み出し許可（ＳＲ）フィールド４１４と、特権モード時書き込み許可（ＳＷ）フィールド４１５と、特権モード時実行許可（ＳＸ）フィールド４１６と、ユーザモード下でのメモリアクセス可否について、読み出し、書き込み、実行の３種別に分けてそれぞれ指定する、ユーザモード時読み出し許可（ＵＲ）フィールド４１７と、ユーザモード時書き込み許可（ＵＷ）フィールド４１８と、ユーザモード時実行許可（ＵＸ）フィールド４１９とを含む。
【００４８】
また、ＭＰＵレジスタ４１０は、当該レジスタの設定を適用するプログラムを制約するため、適用先プログラムを特定するＡｄｄｒｅｓｓ  Ｓｐａｃｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＡＳＩＤ）、もしくはＰｒｏｃｅｓｓ  Ｉｄｅｎｔｉｆｉｅｒ（ＰＩＤ）を指定するフィールドを含んでいてもよい。また、アドレス範囲を指定するため、終了アドレスに代えて領域サイズを利用してもよい。
【００４９】
［メモリ保護ユニットの動作］
次に、実施の形態にかかるメモリ保護ユニット４００の動作の一例を説明する。
【００５０】
複数のメモリ保護違反検出部４３０は、各々対応するＭＰＵレジスタ４１０の設定内容に基づき並列かつ独立に動作し、メモリアクセスを常時監視する。
【００５１】
以下、メモリ保護違反検出部４３０と、ＭＰＵレジスタ４１０とを組み合わせた、メモリアクセスの監視単位をチャネルと呼ぶ。メモリ保護違反検出部４３０は、当該チャネルが有効（Ｅフィールド４１１＝１）、かつメモリアクセスインタフェース３１０が指定するメモリアクセス対象アドレスが、開始アドレス以上かつ終了アドレス以下の範囲に含まれる場合には、アドレス範囲一致と判定し、それ以外の場合（Ｅフィールド４１１＝０を含む）はアドレス範囲不一致と判定する。
【００５２】
メモリ保護違反検出部４３０が、アドレス範囲一致と判定した場合、さらに、メモリアクセス属性情報３２０にて指定される動作モード（特権モード又はユーザモード）とアクセス種別（データ読み出し、データ書き込み、命令フェッチ）の組み合わせで指定される６つのアクセスパターンから、６つの許可フィールド４１４〜４１９のうちメモリ保護違反の判定に利用する１つの許可フィールドを特定する。
【００５３】
そして、メモリ保護違反検出部４３０は、特定した１つの許可フィールドのアクセスが許可されている（フィールド値＝１）場合にはメモリ保護違反の検出なし、許可されていない（フィールド値＝０）場合にはメモリ保護違反の検出ありと判定する。
【００５４】
各チャネルが出力するアドレス一致／不一致情報、及びメモリ保護違反検出結果は、後続の命令系メモリ保護違反例外出力生成部４４０、及びデータ系メモリ保護違反例外出力生成部４５０にて例外タイプ（命令またはデータ）ごとにまとめられる。いずれかのチャネルでメモリ保護違反の検出ありと判定されるか、もしくは全チャネルでアドレス不一致かつＭＰＵのデフォルト動作がアクセス禁止の場合に、メモリ保護違反例外が出力される。
【００５５】
次に、メモリ保護ユニット４００の具体的な利用方法を説明する。電子制御装置１では、車載マイコン１０上にソフトウェア実行環境が構築され、安全水準ＡＳＩＬ−Ｂをもつ第一のプログラム（プログラムＡまたはＡＳＩＬ−Ｂプログラム）と、安全水準ＱＭをもつ第二のプログラム（プログラムＢまたはＱＭプログラム）が同時に実行され、さらにプログラムＡはプログラムＢから呼び出し可能な機能（ＱＭ向け機能）を関数形式で提供しているものとする。
【００５６】
メモリ保護ユニット４００は、チャネル０〜１５の計１６個のチャネルを備えるが、チャネル８〜１５はＯＳ用に使用され、ＯＳ以外のすべてのプログラムはチャネル０〜７を共有するものとする。なお、メモリ保護ユニット４００において、他プログラムに対して実行頻度が明らかに高い、割り込み等のイベントに対する応答時間の制約が厳しいなどの理由により、高い実行優先度をもつと判断される特定のプログラム（高優先度プログラム）が参照するメモリ領域を指定するため、一部のチャネルを当該プログラムに常時割り当てることで専有させてもよい。
【００５７】
その場合、例えばチャネル１２〜１５をＯＳ用に割り当て、チャネル８〜１１をプログラム間で重複することのないように１つ以上の高優先度プログラム（ＭＰＵレジスタ専有タイプのプログラムと呼ぶ）に割り当て、チャネル０〜７を高優先度プログラム以外のすべてのプログラム（ＭＰＵレジスタ共有タイプのプログラムと呼ぶ）に割り当てればよい。
【００５８】
図３に、実施の形態における第一のプログラム（プログラムＡ）が参照するメモリ領域の定義（ａ）と、ＭＰＵレジスタへのアクセス権限設定（ｂ）の一例を示す。
【００５９】
プログラムＡが参照するメモリ領域は、車載マイコン１０のアドレス空間１０００のうち、プログラムＡのみが排他的に利用するコード用専有ＲＯＭ領域１１００、データ用専有ＲＡＭ領域１１１０、専有周辺モジュール領域１１２０と、プログラムＢに提供する機能の呼び出しに備え、プログラムＡおよびＢから利用可能なコード用共有ＲＯＭ領域１３００、データ用共有ＲＡＭ領域１３１０の計５つであり、それぞれメモリ保護ユニット４００のチャネル０、３、４、１、２内のＭＰＵレジスタに設定されている。Ｅフィールドに０が設定されたチャネル５〜７はいずれも無効であり、Ｅフィールドを除くフィールドには任意の値が設定されている。
【００６０】
図４に、第二のプログラム（プログラムＢ）が参照するメモリ領域の定義（ａ）と、ＭＰＵレジスタ４１０へのアクセス権限設定（ｂ）の一例を示す。
【００６１】
プログラムＢが参照するメモリ領域は、車載マイコン１０のアドレス空間１０００のうち、プログラムＢのみが排他的に利用するコード用専有ＲＯＭ領域１２００、データ用専有ＲＡＭ領域１２１０と、プログラムＡが提供する機能の呼び出しのため、プログラムＡおよびＢから利用可能なコード用共有ＲＯＭ領域１３００、データ用共有ＲＡＭ領域１３１０の計４つであり、それぞれメモリ保護ユニット４００のチャネル０、２、１、３内のＭＰＵレジスタに設定されている。Ｅフィールドに０が設定されたチャネル４〜７はいずれも無効であり、Ｅフィールドを除くフィールドには任意の値が設定されている。
【００６２】
［従来方式にかかる処理］
次に、図５は、従来方式の一例として、車載ＯＳに実装されたメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に説明する図である。
【００６３】
複数のプログラムの同時実行を可能とするマルチタスクＯＳでは、各プログラムはその実行単位であるタスクに分割され、タスク単位で時分割に並列実行される。タスクディスパッチャ１５５０は、実行中タスクの終了や別タスクの呼び出し、タイマ割り込みなど所定のイベントが発生するごとに呼び出され、ＯＳの定めるアルゴリズムに基づき次に実行するタスクを決定し、実行タスクを切り替える処理（ディスパッチ処理）を行う。
【００６４】
このタスクディスパッチャ１５５０は、ディスパッチ処理に先立ち、アクセス制御情報データベースアクセスインタフェース１５４１を介してアクセス制御情報データベース１５４０にアクセスし、次に実行するタスクが所属するプログラムに付随する、アクセス権限情報に対応するＭＰＵレジスタへの設定値を取得する。
【００６５】
タスクディスパッチャ１５５０が取得した設定値は、所定の命令（メモリストア命令もしくは制御レジスタ専用の書き込み命令）を実行することで、メモリアクセスインタフェース３１０及びメモリアクセス属性情報３２０を経由し、順次ＭＰＵレジスタに書き込まれる。なお、設定すべきアクセス権限情報のないＭＰＵレジスタは無効化する。
【００６６】
前述した処理により、プログラムＡのタスクの実行中では、図３に示すアクセス権限情報がＭＰＵレジスタに設定されると共に、プログラムＢのタスクの実行中では、図４に示すアクセス権限情報が、ＭＰＵレジスタに設定され、タスク実行中にメモリ保護違反例外が発生しないことをＯＳが保証する。
【００６７】
従来のメモリ保護ユニット４００では、このメモリ保護ユニット４００がメモリ保護違反を検出し、メモリアクセス属性情報３２０を経由してメモリ保護違反例外の発生を命令実行ユニット２００に通知すると、メモリ保護違反例外ハンドラ１５００は、メモリ保護違反例外の発生がハードウェアの故障もしくはソフトウェアの不具合に起因すると判断し、システム管理モジュール３０内にある特定のレジスタに対する書き込みなど、車載マイコン１０が備えるリセット手段により、リセット要求信号９０を送信する。
通常、前述した従来例では、ＭＰＵレジスタの管理に関して、タスクディスパッチャ１５５０とメモリ保護違反例外ハンドラ１５００との間で処理の連携が行われない。
【００６８】
図６は、従来方式の一例として、車載ＯＳに実装されたＡＰＩを利用し、プログラムＡからプログラムＢに提供された機能（ＱＭ向け機能）をプログラムＢから呼び出した場合の一連の動作の流れを示す。
【００６９】
まず初めに、初期状態において、ＭＰＵレジスタには、図４に示すプログラムＢ（Ｓ１００）用のアクセス制御情報が設定され、プログラムＢ（Ｓ１００）のＱＭタスクがユーザモードで実行中（Ｓ１０１）であるとする。
【００７０】
実行中のＱＭタスクがプログラムＡ（Ｓ１１０）のＱＭ向け機能をＡＰＩ経由で呼び出すと、特権モードへの遷移とともに、車載ＯＳの割り込みハンドラＳ１３０への処理の切り替えが行われる（Ｔ１００）。
【００７１】
割り込みハンドラＳ１３０では、多重割り込みを抑止するため割り込みを禁止（Ｓ１３１）し、割り込み要因をチェック（Ｓ１３２）する。割り込みハンドラＳ１３０は、割り込み要因がＱＭ向け機能呼び出しに基づくタスク切り替えであると判定した場合、切り替え処理をディスパッチャＳ１２０へ引き継ぐ（Ｔ１０１）。
【００７２】
ディスパッチャＳ１２０では、所定のアルゴリズムに基づき、次に実行すべきタスクを決定（Ｓ１２１）する。ディスパッチャＳ１２０が、次実行タスクとしてＱＭ向け機能を選択した場合、ＭＰＵレジスタの設定を、図３に示す機能提供元であるプログラムＡ用の設定に入れ替える（Ｓ１２２）。
【００７３】
ディスパッチャＳ１２０は、入れ替えが完了すると割り込みを許可（Ｓ１２３）し、特権モードのままプログラムＡのＱＭ向け機能を呼び出す（Ｔ１０２）。
【００７４】
プログラムＡ（Ｓ１１０）において、ＱＭ向け機能の実行（Ｓ１１１）が完了すると、ディスパッチャＳ１２０での処理に復帰（Ｔ１０３）し、ディスパッチャＳ１２０は、実行タスクの決定処理（Ｓ１２４）を実行する。
【００７５】
ディスパッチャＳ１２０は、次の実行タスクとしてＱＭタスクを選択すると、ＭＰＵレジスタの設定を、図４に示すプログラムＢ用の設定に戻し（Ｓ１２５）、割り込み許可（Ｓ１２６）の後、ユーザモードへの遷移とともにプログラムＢ（Ｓ１００）のＱＭタスクへ復帰（Ｔ１０４）する。復帰後は、プログラムＢ（Ｓ１００）は、ＱＭ向け機能呼び出し以降のＱＭタスクの実行を継続する（Ｓ１０２）。
【００７６】
前述した従来方式では、タスク実行に先行するディスパッチャＳ１２０のＭＰＵレジスタ更新処理（Ｓ１２２およびＳ１２４）により、ＱＭ向け機能の実行（Ｓ１１１）や後続のＱＭタスク実行（Ｓ１０２）の際にメモリ保護違反例外が発生しない。一方、ＱＭ向け機能の呼び出しと実行に伴い、ユーザモードと特権モードとの間のモード遷移や、ＭＰＵレジスタの入れ替えと書き戻しといった、タスク実行以外の本質的ではない処理に要するオーバヘッドが発生してしまう。
【００７７】
［本発明の実施の形態にかかる処理］
次に、本発明の実施の形態にかかるメモリ保護ユニット４００の利用方法を説明する。
【００７８】
メモリ保護ユニット４００内のチャネル割り当てポリシや、各プログラムが参照するメモリ領域の定義、想定するプログラム間呼び出し処理については、従来方式の場合と共通であるものとする。
【００７９】
図７は、プログラムＡまたはＢのいずれかが参照するメモリ領域（ａ）と、プログラムＡが参照するメモリ領域の一部が未設定となった場合のＭＰＵレジスタ４１０へのアクセス権限設定（ｂ）の一例を示す。
【００８０】
ここで、プログラムＢが利用するメモリ領域１２００、１２１０、１３００、１３１０は、全てＭＰＵレジスタ４１０に設定されている。他方、プログラムＡは、プログラムＢと共有する一部のメモリ領域１３００、１３１０のみ部分的に設定されており、それ以外のメモリ領域１１００、１１１０、１１２０については「アクセス権限未設定」の状態にあると定義する。
【００８１】
プログラムＢが専有するメモリ領域１２００、１２１０及びプログラムＡ及びプログラムＢが共有する一部のメモリ領域１３００、１３１０では、プログラムＢ、及びプログラムＡがプログラムＢに提供する機能については、メモリ保護違反例外の発生なく実行可能である。他方、プログラムＡが専有するメモリ領域１１００、１１１０、１１２０のうち、いずれかに対するアクセスを実施した時点で、アクセス権限未設定に起因するメモリ保護違反例外が発生する。
【００８２】
つまり、メモリ領域１１００、１１１０、１１２０に対するアクセスが実施されない限り、これらの領域をＭＰＵレジスタに設定する必要はない。よって、これらの領域が設定されていない状態でも、想定外のメモリアクセスを抑止するというメモリ保護機能は実現できていることになる。
【００８３】
なお、図７に示す一例では、チャネル４〜７は無効（Ｅフィールド＝０）としているが、プログラムＡ、Ｂ以外のプログラムが参照する有効なメモリ領域を設定することで、複数のプログラムに関する有効な設定が共存していてもよい。あるプログラムから見て、参照するすべての設定が完了しているか否かが重要である。
【００８４】
ここで、本発明の発明者は、従来のメモリ保護方式においてはメモリ保護違反の検出対象として取り扱われた「アクセス権限未設定」の状態を、オーバヘッド削減の目的で積極的に活用することで、ＭＰＵレジスタ入れ替え処理を最小化できることを見出した。
【００８５】
以下、その構成を詳細に説明する。
【００８６】
図８は、後述するＭＰＵレジスタ更新処理を実行することにより、プログラムＡ用の未設定メモリ領域１１００、１１１０、１１２０に関する設定が、無効チャネル（例えば、チャネル４、５、６）に動的に追加された後の状態を示す。この状態では、プログラムＡ、プログラムＢ、およびプログラムＡがプログラムＢに提供する機能のすべてについて、メモリ保護違反例外の発生なく実行可能である。追加すべきメモリ領域数に対し無効チャネル数が不足する場合は、プログラムの実行継続に影響しないメモリ領域の設定を削除するなど、所定のポリシにしたがい必要数を確保したのち、メモリ領域の設定を追加すればよい。
【００８７】
図９は、本発明の実施の形態にかかるメモリ保護機能における、ハードウェアとソフトウェア間の連携を概念的に示す。
【００８８】
実施の形態では、通常のタスク実行中でも、アクセス権限未設定に起因するメモリ保護違反例外が発生しうる。
【００８９】
メモリ保護ユニット４００がメモリ保護違反を検出し、メモリアクセス属性情報３２０を経由して、メモリ保護違反例外の発生を命令実行ユニット２００に通知した場合（図１参照）、メモリ保護ユニット４００からメモリ保護違反例外ハンドラ１５００への分岐が発生する（図９参照）。
【００９０】
図９に示すように、メモリ保護違反例外ハンドラ１５００は、レジスタ未設定状態チェック要求１５１１を出力し、例外発生の要因がアクセス権限未設定であるか否かを判定するよう、レジスタ未設定判定部１５１０に要求する。
【００９１】
要求を受けたレジスタ未設定判定部１５１０は、アクセス制御情報設定状態アクセスインタフェース１５２１を利用して、ＭＰＵレジスタ４１０へのアクセス制御情報設定状態を保存するアクセス制御情報設定状態１５２０を参照し、アクセス権限未設定であるか否かを判定する。
【００９２】
レジスタ未設定判定部１５１０は、例外発生元となったタスクの所属するプログラムが参照するメモリ領域が、部分的に設定された状態である場合には、メモリ保護違反例外はアクセス権限未設定に起因するものであると判定し、それ以外の場合には、真のメモリ保護違反例外であると判定する。判定結果は、レジスタ未設定状態チェック結果１５１２として、メモリ保護違反例外ハンドラ１５００に戻される。
【００９３】
メモリ保護違反例外の要因がアクセス権限未設定であった場合、メモリ保護違反例外ハンドラ１５００は、ＭＰＵレジスタ更新要求１５３１により、タスクの実行継続に必要な設定の追加をアクセス制御レジスタ設定部１５３０に要求する。
【００９４】
要求を受信したアクセス制御レジスタ設定部１５３０は、アクセス制御情報データベースアクセスインタフェース１５４１を介して、設定が不足しているアクセス権限情報に対応するＭＰＵレジスタ４１０への設定値を、アクセス制御情報データベース１５４０から取得する。
【００９５】
アクセス制御レジスタ設定部１５３０は、所定の命令（メモリストア命令もしくは制御レジスタ専用の書き込み命令）を実行することで、メモリアクセスインタフェース３１０およびメモリアクセス属性情報３２０を経由し、取得した設定値を、順次ＭＰＵレジスタ４１０に書き込む。アクセス制御レジスタ設定部１５３０による取得した設定値の書き込みが完了すると、メモリ保護違反例外ハンドラ１５００から例外発生元となったタスクに復帰する。
【００９６】
他方、アクセス制御レジスタ設定部１５３０が、メモリ保護違反例外の要因がアクセス権限未設定ではなく、真のメモリ保護違反例外であると判定した場合、アクセス制御レジスタ設定部１５３０は、従来方式と同様、ハードウェアの故障やソフトウェアの不具合に起因する判断する。そして、その判断結果を受けたメモリ保護違反例外ハンドラ１５００は、システム管理モジュール３０内にある特定のレジスタに対する書き込みなど、車載マイコン１０が備えるリセット手段により、リセット要求信号９０を送信する。
【００９７】
図示しないが、アクセス制御レジスタ設定部１５３０は、メモリ保護違反例外ハンドラ１５００と連携して動作するだけでなく、例えば車載マイコン１０の初期化処理の一部として、車載ＯＳの動作に必要なＭＰＵレジスタ４１０の設定を行ってもよい。またタスク切り替え時に、ディスパッチャからアクセス制御レジスタ設定部１５３０を利用してもよい。
【００９８】
図１０は、本発明の実施の形態にかかるメモリ保護方式にしたがい、プログラムＡからプログラムＢに提供された機能（ＱＭ向け機能）を、ＡＰＩを利用せずプログラムＢから直接呼び出した場合の一連の動作の流れに関連し、メモリ保護違反例外が発生しない例を示す。
【００９９】
以下の説明において、プログラムの実行開始時点でＭＰＵレジスタ４１０への設定対象とするアクセス制御情報の選択にはいくつかのオプションが存在するが、本発明の目的とする低オーバヘッドに適用するものとしては、以下の（Ａ）、（Ｂ）の何れかが考えられる。
【０１００】
（Ａ）当該プログラムが専有するメモリ領域と、参照の可能性が高いことが事前に想定される、別プログラムが当該プログラムに提供する機能の実行に必要な共有メモリ領域を設定する場合。
（Ｂ）当該プログラムが専有するメモリ領域のみ設定する場合。
【０１０１】
前述した（Ａ）は、当該プログラムが呼び出す外部プログラムの数が、ＭＰＵレジスタ４１０に設定可能なアクセス制御情報と同程度のオーダ（Ｏ（１））であり、それらの外部プログラムを一定以上の頻度で利用する場合に有効である。前述した（Ｂ）は、共有ライブラリを構成する関数の一部を当該プログラムが参照するが、参照先となる関数をあらかじめ静的に特定することが困難なケースや、内蔵周辺モジュールの制御レジスタなど、極端に狭いアドレス範囲を単位としてアクセスを許可するケースに適している。
【０１０２】
以下、前述した（Ａ）の場合について説明する。
【０１０３】
図１０に示すように、初期状態において、ＭＰＵレジスタには、図７に示すプログラムＢ（Ｓ１００）用のアクセス制御情報が設定され、プログラムＢ（Ｓ１００）のＱＭタスクがユーザモードで実行中（Ｓ１０３）である。
【０１０４】
実行中のＱＭタスクが、プログラムＡ（Ｓ１１０）の提供するＱＭ向け機能をサブルーチンの態様で直接呼び出すと、ユーザモードを維持したままＱＭ向け機能への処理切り替えが発生する（Ｔ１１０）。
【０１０５】
ＱＭ向け機能の実行に必要なアクセス制御情報は、ＭＰＵレジスタ４１０へ設定済みのため、アクセス権限未設定に起因するメモリ保護違反例外は発生せず、呼び出したＱＭ向け機能が実行される（Ｓ１１２）。
【０１０６】
ＱＭ向け機能の実行が完了すると、サブルーチンからの復帰の態様でユーザモードのままＱＭタスクへ復帰（Ｔ１１１）する。復帰後は、ＱＭ向け機能呼び出し以降のＱＭタスク実行を継続する（Ｓ１０４）。
【０１０７】
次に、図１１は、本発明の実施の形態にかかるメモリ保護方式にしたがい、プログラムＡからプログラムＢに提供された機能（ＱＭ向け機能）を、ＡＰＩを利用せずプログラムＢから直接呼び出した場合の一連の動作の流れに関連し、メモリ保護違反例外が発生する例を示す。
【０１０８】
図１１に示すように、初期状態において、ＭＰＵレジスタには、図７に示すプログラムＢ（Ｓ１００）用のアクセス制御情報が設定され、プログラムＢ（Ｓ１００）に所属するＱＭタスクがユーザモードで実行中（Ｓ１０５）である。
【０１０９】
実行中のＱＭタスクがプログラムＡ（Ｓ１１０）の提供するＱＭ向け機能をサブルーチンの態様で直接呼び出すと、ユーザモードを維持したままＱＭ向け機能への処理切り替えが発生する（Ｔ１２０）。
【０１１０】
プログラムＡ（Ｓ１１０）では、ＱＭ向け機能を実行中に（Ｓ１１３）、例えばメモリ間コピーなどの所定の処理により、ＱＭ向け機能からプログラムＢ（Ｓ１００）が専有するメモリ領域へのアクセスが発生すると、その時点でメモリ保護違反を検出し、特権モードへの遷移とともに例外ハンドラＳ１４０への処理切り替えが発生する（Ｔ１２１）。
【０１１１】
例外ハンドラＳ１４０は、まず割り込みを禁止（Ｓ１４１）し、例外要因をチェック（Ｓ１４２）する。例外要因がメモリ保護違反例外であった場合には、保護違反例外ハンドラＳ１５０へ分岐（Ｔ１２２）して処理を引き継ぐ。
【０１１２】
保護違反例外ハンドラＳ１５０では、メモリ保護違反例外の要因がアクセス権限未設定であるか否かを判定（Ｓ１５１）し、要因がアクセス権限未設定であった場合には、例外発生元となったタスクの実行が継続可能となるよう、所定のアルゴリズムに基づきＭＰＵレジスタ４１０の設定を更新する（Ｓ１５２）。なお、実施の形態では、更新後のＭＰＵレジスタ４１０は、図８に示す設定状態となる。
【０１１３】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０の更新が完了すると、割り込みを許可（Ｓ１５３）し、ユーザモードへの遷移とともに、例外発生元であるプログラムＡ（Ｓ１１０）のＱＭ向け機能へと実行を戻す（Ｔ１２３）。復帰後は、プログラムＡ（Ｓ１１０）は、ＱＭ向け機能の実行を継続（Ｓ１１４）し、実行完了後には、呼び出し元であるプログラムＢ（Ｓ１００）のＱＭタスクへ復帰（Ｔ１２４）し、プログラムＢ（Ｓ１００）では、ＱＭ向け機能呼び出し以降のＱＭタスク実行を継続する（Ｓ１０６）。
【０１１４】
前述したように、メモリ保護違反発生時の命令実行ユニット２００の挙動は、車載マイコン１０のアーキテクチャに依存する。実施の形態では、全ての例外要因に共通の例外ベクタアドレスに分岐し、そのアドレスに配置された例外ハンドラが例外要因をチェックするものとした。メモリ保護違反例外に固有の例外ベクタアドレスが定義されている場合には、そのアドレスに保護違反例外ハンドラを配置することで、共通の例外ハンドラを経由することなく、直接保護違反例外ハンドラを実行できることは言うまでもない。
【０１１５】
前述したように、プログラムＢ（Ｓ１００）によるＱＭ向け機能の呼び出しにかかる処理の流れが、図１０又は図１１の何れかとなるかは、ＱＭ向け機能の内部実装、より具体的には、呼び出し元タスクの所属するプログラム（例えば、プログラムＢ（Ｓ１００））の実行開始時点において、アクセスの有無を静的に判断できないメモリ領域（アクセス不明領域）へのアクセス実施により、メモリ保護違反例外が発生するかどうかに依存する。
【０１１６】
本発明の発明者は、制御ソフトウェア設計や搭載製品に関する調査により、メモリ保護違反が発生しない、すなわち切り替えオーバヘッドが削減されたケース（図１０）が多数であることを発見した。
【０１１７】
メモリ保護機能の実現という観点では、まず図１０の場合、従来方式と同様の実装であり、ＭＰＵを活用したメモリ保護が確実に実現されている。他方、図１１の場合、保護すべきメモリ領域をアクセス権限が未設定である「アクセス不明領域」のままとし、当該領域に対するメモリアクセスを契機として発生するメモリ保護違反例外について、保護違反例外ハンドラＳ１５０内で適切なアクセス権限チェックとＭＰＵレジスタ更新を実施することで、切り替え時間の増加やばらつきをともなうものの、図１０と同等のメモリ保護機能が確実に実現される。
【０１１８】
［ＭＰＵレジスタ更新処理］
続いて、本発明におけるＭＰＵレジスタ更新処理（図１１のＳ１５２）フローに関して、一実装例の詳細を説明する。このＭＰＵレジスタ更新処理（図１１のＳ１５２）は、前述した保護違反例外ハンドラＳ１５０（図１１参照）で実行される処理である。
【０１１９】
図１２は、ＭＰＵレジスタ更新処理のフローチャートである。
【０１２０】
実用性を重視した前提として、本発明の実施の形態では、複数のＭＰＵレジスタ４１０（アクセス制御情報設定レジスタ）について、以下の（Ｃ）、（Ｄ）、（Ｅ）のいずれかに分類する。これらの分類は、車載ＯＳのコンフィギュレーション時、または起動時に予め選択され、起動後は変化しない。
【０１２１】
実施の形態では、少なくとも未使用のＭＰＵレジスタ４１０については、ＭＰＵレジスタ更新処理以外の処理において分類を動的に変化させてもよい。
【０１２２】
（Ｃ）車載ＯＳ用レジスタ：車載ＯＳのみが専有するレジスタであり、車載ＯＳから参照するメモリ領域の設定は、車載ＯＳの起動処理が完了した時点ですべてＭＰＵレジスタ４１０に格納されていることを保証する。
（Ｄ）ＭＰＵレジスタ専有タイプタスク用レジスタ：同時に動作する複数のプログラムのうち、実行頻度や応答時間などの制約により、高い優先度をもつと判断される１つ以上のプログラム（高優先度プログラム）が、プログラム間で重複なく専有するＭＰＵレジスタ４１０である。ある高優先度プログラムが排他的に参照する専有メモリ領域の設定は、遅くとも当該プログラムの初回実行時点でＭＰＵレジスタ４１０に設定し、以降必ずＭＰＵレジスタ４１０に格納されていることを保証する。
（Ｅ）ＭＰＵレジスタ共有タイプタスク用レジスタ：同時に動作する複数のプログラムのうち、高優先度プログラムではない１つ以上のプログラム（低優先度プログラム）が空間的、時間的に共有するＭＰＵレジスタ４１０であり、設定内容はプログラムの実行シーケンスにしたがい動的に変化する。ある低優先度プログラムが排他的に参照する専有メモリ領域の設定は、少なくとも当該プログラムに属するタスクの実行中にはＭＰＵレジスタ４１０に格納されていることを保証する。
【０１２３】
前述した（Ｃ）〜（Ｅ）のレジスタ分類情報に加え、ＭＰＵレジスタ４１０の設定状態を管理するアクセス制御情報設定状態１５２０（図９参照）として、ＭＰＵレジスタ４１０ごとの使用又は未使用状態と、当該ＭＰＵレジスタ４１０を使用しているプログラム（タスク）を識別するタスク番号が保持されているものとする。また、アクセス制御情報データベース１５４０（図９参照）には、各プログラム（タスク）のレジスタ専有又は共有タイプの分類と、参照するメモリ領域を定義する情報（ＭＰＵレジスタ４１０への設定値）が格納されているものとする。
【０１２４】
図１２において、入力パラメータは、現在実行中のタスク（現タスク）と、切り替え後に実行するタスク（次タスク）をそれぞれ識別するタスク番号である。なお、車載ＯＳを指定するタスク番号や、実行すべきタスクが存在しないことを意味する、特殊なタスク番号を導入してもよい。実行中のタスクがない、かつ／または、次に実行するタスクがないという状態に対応するパラメータ指定も許容される。
【０１２５】
図１２に示すように、初めに、保護違反例外ハンドラＳ１５０は、入力パラメータからタスク切り替えの要否を判定する（Ｓ２００）。保護違反例外ハンドラＳ１５０は、タスク切り替えが不要であると判定した場合（Ｓ２００：Ｙｅｓ）、正常終了を意味する戻り値を設定し（Ｓ２０１）、処理を終了する。実施の形態では、保護違反例外ハンドラＳ１５０は、戻り値として０（ゼロ）を設定する。
【０１２６】
保護違反例外ハンドラＳ１５０は、タスク切り替えが必要であると判定した場合（Ｓ２００：Ｎｏ）、次のタスク用のＭＰＵレジスタ４１０への設定がすでに完了しているかどうかを判定し（Ｓ２１０）、設定済みと判定した場合（Ｓ２１０：Ｙｅｓ）、処理を正常終了する（Ｓ２０１）。
【０１２７】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０が未設定であると判定した場合（Ｓ２１０：Ｎｏ）、次のタスクのタイプの判定を行う（Ｓ２２０）。
【０１２８】
保護違反例外ハンドラＳ１５０は、次のタスクのタイプを、レジスタ専有タイプであると判定した場合（Ｓ２２０：Ｙｅｓ）、指定された次のタスクについて、ＭＰＵレジスタ４１０への追加処理を行い（Ｓ２２１）、追加処理の結果を反映した戻り値を設定し（Ｓ２２２）、処理を終了する。実施の形態では、保護違反例外ハンドラＳ１５０は、追加処理の結果を反映した戻り値として、追加処理が正常終了した場合には０を、異常終了した場合には−２を設定する。
なお、ＭＰＵレジスタ追加処理（Ｓ２２１）の詳細は、図１５で説明する。
【０１２９】
保護違反例外ハンドラＳ１５０は、次のタスクがレジスタ共有タイプであると判定した場合（Ｓ２２０：Ｎｏ）、レジスタ共有タイプのタスクに関するＭＰＵレジスタ更新処理（Ｓ２３０）を実行して処理を終了する。
なお、ＭＰＵレジスタ更新処理（Ｓ２３０）の詳細は、図１３で説明する。
【０１３０】
［レジスタ共有タイプのタスクに関するＭＰＵレジスタ更新処理］
次に、前述したＭＰＵレジスタ更新処理（Ｓ２３０）を説明する。
【０１３１】
図１３は、ＭＰＵレジスタ更新処理（Ｓ２３０）のうち、レジスタ共有タイプのタスクに関するＭＰＵレジスタ更新処理のフローチャートである。
【０１３２】
本処理の開始時点では、少なくとも現在のタスクの専有するＭＰＵレジスタ設定は有効であり、現在のタスクの設定削除済みフラグはクリアされているものとする。
【０１３３】
図１３に示すように、保護違反例外ハンドラＳ１５０は、まず次タスク用として必要なＭＰＵレジスタ数を算出（Ｓ３００）した後、レジスタ共有タイプのタスク用に割り当てられた現時点での空きＭＰＵレジスタ数を確認する（Ｓ３１０）。
【０１３４】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ追加処理の実行可能条件（空きレジスタ数が十分もしくは現在のタスクの設定削除済みフラグセット）の判定を行う（Ｓ３２０）。
【０１３５】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ追加処理が実行可能であると判定した場合（Ｓ３２０：Ｙｅｓ）、指定された次のタスクについて図１５に示すＭＰＵレジスタ追加処理を行い（Ｓ３７０）、追加処理の結果と現在のタスク設定削除済みフラグの状態を反映した戻り値を設定し（Ｓ３７１）、処理を終了する。
【０１３６】
ここで、保護違反例外ハンドラＳ１５０は、戻り値について、以下のように設定する。
ＭＰＵレジスタ４１０の設定が完了し、現在のタスク用のレジスタの設定も有効である場合、保護違反例外ハンドラＳ１５０は、戻り値を「０」に設定する。
ＭＰＵレジスタ４１０の設定が完了し、現在のタスク用のレジスタの設定が無効である場合、保護違反例外ハンドラＳ１５０は、戻り値を「−３」に設定する。
ＭＰＵレジスタ４１０の設定が完了せず（設定不可）、現在のタスク用レジスタの設定が有効である場合、保護違反例外ハンドラＳ１５０は、戻り値を「−４」に設定する。
ＭＰＵレジスタ４１０の設定が完了せず（設定不可）、現在のタスク用レジスタの設定が無効である場合、保護違反例外ハンドラＳ１５０は、戻り値を「−５」に設定する。
【０１３７】
また、保護違反例外ハンドラＳ１５０は、実行可能条件が満たされないと判定した場合（Ｓ３２０：Ｎｏ）、アクセス制御情報設定状態１５２０を参照し、ＭＰＵレジスタ４１０にメモリ領域情報を削除しても実行に影響のないタスク（すなわち現在のタスクでも次のタスクでもないタスク）が参照するアクセス権限情報が設定されているか否かを判定する（Ｓ３２１）。
【０１３８】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０に、実行に影響のないタスクが参照するアクセス権限情報が設定されていると判定した場合（Ｓ３３０：Ｙｅｓ）、当該タスクを指定してＭＰＵレジスタ削除処理を実行（Ｓ３３１）することでＭＰＵレジスタ４１０の空き数の増加を試み、実行後は空き数の確認に戻る（Ｓ３１０）。
なお、ＭＰＵレジスタ削除処理（Ｓ３３１）は、図１４で詳細に説明する。
【０１３９】
保護違反例外ハンドラＳ１５０は、実行に影響のないタスクが参照するアクセス権限情報が設定されていないと判定した場合（Ｓ３３０：Ｎｏ）、全てのＭＰＵレジスタをチェックしたか否かを判定する（ステップＳ３４０）。
【０１４０】
保護違反例外ハンドラＳ１５０は、未チェックのＭＰＵレジスタがあると判定した場合（Ｓ３４０：Ｎｏ）、未チェックのＭＰＵレジスタ４１０についてチェック処理を行う（Ｓ３２１）。
【０１４１】
保護違反例外ハンドラＳ１５０は、全てのＭＰＵレジスタ４１０をチェックしてもメモリ権限情報を削除可能なタスクが発見できなかった場合（Ｓ３４０：Ｙｅｓ）、現在のタスクのタイプを判定し（Ｓ３５０）、現在のタスクが専有タイプであると判定した場合（Ｓ３５０：Ｙｅｓ）、さらなるＭＰＵレジスタ設定削除を断念し、所定の戻り値を設定したのち（Ｓ３６０）処理を終了する。
ここで、実施の形態では、保護違反例外ハンドラＳ１５０は、所定の戻り値として、−４（ＭＰＵレジスタの設定が完了せず、現在のタスク用のレジスタは有効）を設定する。
【０１４２】
保護違反例外ハンドラＳ１５０は、現在のタスクが共有タイプであると判定した場合（Ｓ３５０：Ｎｏ）、現在のタスクを指定してＭＰＵレジスタ削除処理を実行し（Ｓ３５１）、削除対象となりうるタスクがこれ以上存在せず、ＭＰＵレジスタ追加処理の試行を要求することを意味する、現タスクの設定削除済みフラグをセット（Ｓ３５２）したのち、ＭＰＵレジスタの空き数の確認（Ｓ３１０）に戻る。
【０１４３】
［ＭＰＵレジスタ削除処理］
次に、前述したＭＰＵレジスタ削除処理（Ｓ３３１）及び（Ｓ３５１）の流れを説明する。
【０１４４】
図１４は、ＭＰＵレジスタ削除処理（Ｓ３３１）及び（Ｓ３５１）のフローチャートである。
【０１４５】
なお、本処理の開始時点では、削除済みＭＰＵレジスタ数をカウントするカウンタ値が０に初期化されているものとする。
【０１４６】
初めに、保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタを削除可能な状態であるか否かを判定し（Ｓ４００）、削除不可能であると判定した場合（Ｓ４００：Ｎｏ）、不正な削除要求であることを示す戻り値を設定し（Ｓ４０１）、処理を終了する。
ここで、実施の形態では、保護違反例外ハンドラＳ１５０は、不正な削除要求であることを示す戻り値として、「−１」を設定する。
【０１４７】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０が削除可能であると判定した場合（Ｓ４００：Ｙｅｓ）、ＭＰＵレジスタ４１０を使用中のタスクが指定したタスクと一致するかどうかをチェックする（Ｓ４１０）。
【０１４８】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０と前述したタスクとが一致したと判定した場合（Ｓ４２０：Ｙｅｓ）、当該ＭＰＵレジスタ４１０の内容をクリアするとともに、削除したＭＰＵレジスタ数のカウンタをインクリメントし、さらにアクセス制御情報設定状態１５２０を更新する（Ｓ４２１）。
【０１４９】
保護違反例外ハンドラＳ１５０は、ＭＰＵレジスタ４１０と前述したタスクとが一致しなかったと判定した場合（Ｓ４２０：Ｎｏ）、前述したＳ４２１の処理をスキップする。
【０１５０】
保護違反例外ハンドラＳ１５０は、全てのＭＰＵレジスタ４１０のチェックが完了したか否かを判定し（Ｓ４３０）、未チェックのＭＰＵレジスタ４１０があると判定した場合（Ｓ４３０：Ｎｏ）、チェック処理に戻る。
【０１５１】
保護違反例外ハンドラＳ１５０は、全てのＭＰＵレジスタのチェックが完了したと判定した場合（Ｓ４３０：Ｙｅｓ）、実際に削除したレジスタ数と、削除すべきレジスタ数との比較結果を反映した戻り値を設定し（Ｓ４３１）、処理を終了する。
ここで、保護違反例外ハンドラＳ１５０は、指定タスクのレジスタの設定を削除し、かつ削除数がマッチの場合、戻り値「０」を設定し、指定タスクのレジスタの設定が１つもない場合、戻り値「−２」を設定し、指定タスクのレジスタの削除数がミスマッチの場合、戻り値「−３」を設定する。
【０１５２】
［ＭＰＵレジスタ追加処理］
次に、ＭＰＵレジスタ追加処理（Ｓ２２１）及び（Ｓ３７０）の流れを説明する。
【０１５３】
図１５は、ＭＰＵレジスタ追加処理（Ｓ２２１）及び（Ｓ３７０）のフローチャートである。
【０１５４】
本処理の開始時点で、必要なＭＰＵレジスタの空きは原則として確保されているものとする（前記現タスクの設定削除済みフラグがセットされている場合のみ、十分な空きがあるかどうかは不明である）。
【０１５５】
初めに、保護違反例外ハンドラＳ１５０は、追加対象とする車載ＯＳ又はタスクのタイプに割り当てられた、利用可能なＭＰＵレジスタを特定する制御パラメータを設定する。
【０１５６】
保護違反例外ハンドラＳ１５０は、追加対象が車載ＯＳか否かを判定し（Ｓ５００）、車載ＯＳであると判定した場合（Ｓ５００：Ｙｅｓ）、車載ＯＳ用の制御パラメータを設定する（Ｓ５０１）。
【０１５７】
保護違反例外ハンドラＳ１５０は、追加対象が車載ＯＳでないと判定した場合（Ｓ５００：Ｎｏ）、追加対象がＭＰＵレジスタ専有タイプタスク用か否かを判定する（Ｓ５１０）。
【０１５８】
保護違反例外ハンドラＳ１５０は、追加対象がＭＰＵレジスタ専有タイプタスク用であると判定した場合（Ｓ５１０：Ｙｅｓ）、ＭＰＵレジスタ専有タイプタスク用の制御パラメータを設定する（Ｓ５１１）。
【０１５９】
保護違反例外ハンドラＳ１５０は、追加対象がＭＰＵレジスタ専有タイプタスク用でないと判定した場合（Ｓ５１０：Ｎｏ）、ＭＰＵレジスタ共有タイプタスク用か否かを判定する（Ｓ５２０）。
【０１６０】
保護違反例外ハンドラＳ１５０は、追加対象がＭＰＵレジスタ共有タイプタスク用であると判定した場合（Ｓ５２０：Ｙｅｓ）、ＭＰＵレジスタ共有タイプタスク用の制御パラメータを設定する（Ｓ５２１）。
【０１６１】
保護違反例外ハンドラＳ１５０は、適切な制御パラメータを設定した後、共通処理である、ＭＰＵレジスタ追加メイン処理を実行したのち（Ｓ５０２）、処理を終了する。追加対象が車載ＯＳ、レジスタ専有タイプタスク、レジスタ共有タイプタスクのいずれでもなかった場合（Ｓ５２０：Ｎｏ）、不正な追加要求であることを示す戻り値（実施の形態では、「−１」）を設定し（Ｓ５３０）、処理を終了する。
【０１６２】
［ＭＰＵレジスタ追加メイン処理］
次に、前述したＭＰＵレジスタ追加メイン処理（Ｓ５０２）を説明する。
【０１６３】
図１６は、ＭＰＵレジスタ追加メイン処理のフローチャートである。
【０１６４】
本処理の開始時点では、書き込み済みレジスタ数をカウントするカウント値が０に初期化されているものとする。
【０１６５】
保護違反例外ハンドラＳ１５０は、事前処理における制御パラメータとして取得した、指定された車載ＯＳまたはタスクのタイプに割り当てられたＭＰＵレジスタ４１０の情報をもとに、利用可能な空きＭＰＵレジスタ４１０であるかをチェックする（Ｓ６００）。
【０１６６】
保護違反例外ハンドラＳ１５０は、利用可能な空きＭＰＵレジスタ４１０であると判定した場合（Ｓ６１０：Ｙｅｓ）、当該ＭＰＵレジスタ４１０に１メモリ領域分の設定値を書き込むと共に、書き込みレジスタ数カウンタをインクリメントし、アクセス制御情報設定状態１５２０を更新する（Ｓ６１１）。
【０１６７】
保護違反例外ハンドラＳ１５０は、利用可能な空きＭＰＵレジスタ４１０ではないと判定した場合（Ｓ６１０：Ｎｏ）、上記のＳ６１１の処理をスキップする。
【０１６８】
保護違反例外ハンドラＳ１５０は、指定された車載ＯＳまたはタスク用の全てのメモリ領域分の書き込みが完了したか否かを判定し（Ｓ６２０）、完了したと判定した場合（Ｓ６２０：Ｙｅｓ）、正常終了を示す戻り値（実施の形態では、「０（ゼロ）」）を設定し（Ｓ６２１）、処理を終了する。
【０１６９】
保護違反例外ハンドラＳ１５０は、未書き込みのメモリ領域が存在していると判定し（Ｓ６２０：Ｎｏ）、かつ未チェックのＭＰＵレジスタ４１０があると判定した場合（Ｓ６３０：Ｎｏ）、次のＭＰＵレジスタについてチェックする（Ｓ６００）。
【０１７０】
保護違反例外ハンドラＳ１５０は、全てのＭＰＵレジスタ４１０のチェックが完了したにもかかわらず、未書き込みのメモリ領域が存在すると判定した場合（Ｓ６３０：Ｙｅｓ）、一部のメモリ領域のみ書き込まれた不完全な状態を解消するため、指定された車載ＯＳまたはタスクに関するＭＰＵレジスタ削除処理を強制的に実行する（Ｓ６３１）。その後、保護違反例外ハンドラＳ１５０は、空きレジスタ不足を示す戻り値（実施の形態では、「−２」）を設定し（Ｓ６３２）、処理を終了する。
【０１７１】
以上説明した実施の形態のハードウェア構成およびハードウェアとソフトウェアの連携によるメモリ保護方式、詳細なメモリ保護違反例外処理およびＭＰＵレジスタ更新処理フローによれば、ＭＰＵハードウェアに制約されない、切り替えオーバヘッドの小さいメモリ保護機能が実現可能となる。
【０１７２】
以上説明した通り、実施の形態では、
（１）プログラムＢ（第２のソフトウェア）が参照するコード用専有ＲＯＭ領域１２００及びデータ用専有ＲＡＭ領域１２１０等（所定のメモリ領域）に対するアクセス権限を規定するアクセス権限情報を記憶する複数のＭＰＵレジスタ４１０と、
各々のＭＰＵレジスタ４１０に記憶されたアクセス権限情報に基づいて、メモリ領域へのアクセスがメモリ保護違反であるか否かを判定するメモリ保護違反検出部４３０（メモリ保護違反判定部）と、を有するメモリ保護ユニット４００（メモリ保護装置）と、
メモリ保護違反が、ＭＰＵレジスタ４１０のアクセス権限情報の未設定に起因するものか否かを判定するレジスタ未設定判定部１５１０と、
ＭＰＵレジスタ４１０にアクセス権限情報を設定するアクセス制御レジスタ設定部１５３０と、を有し、
ＭＰＵレジスタ４１０は、
少なくとも、有効なアクセス権限情報が設定された（Ｅフィールド＝１）図７に示すチャネル０〜３のレジスタ群（第１のレジスタ群）と、有効なアクセス権限情報が未設定（Ｅフィールド＝０）の図７に示すチャネル４〜７のレジスタ群（第２のレジスタ群）とを有しており、
アクセス制御レジスタ設定部１５３０は、
レジスタ未設定判定部１５１０により、メモリ保護違反がＭＰＵレジスタ４１０へのアクセス権限情報の未設定（Ｅフィールド＝０、又は、Ｅフィールド＝１かつアドレス範囲不一致）に基づくものであると判定した場合、図７に示すチャネル４〜７のレジスタ群の何れかに必要なアクセス権限情報を設定する（Ｅフィールド＝１かつアドレス範囲一致）構成とした。
【０１７３】
このように構成すると、アクセス制御レジスタ設定部１５３０は、メモリ保護違反例外が、ＭＰＵレジスタ４１０へのアクセス権限情報の未設定に基づくものであると判定した場合、未設定のＭＰＵレジスタ４１０に必要なアクセス権限情報を設定する。この結果、アクセス権限情報の未設定に基づくメモリ保護違反例外の場合でも、ＭＰＵレジスタ４１０の内容をリセットするのではなく、未設定のチャネル（実施の形態では、チャネル４〜７）に、必要なアクセス権限情報を設定することで、メモリ保護ユニット４００（ＭＰＵ）でのタスク切り替えや関数呼び出しの際のＭＰＵレジスタ入れ替え処理を最小化し、ソフトウェア実行効率を向上させることできる。
【０１７４】
（２）また、アクセス権限情報が設定された図７に示すチャネル０〜３のレジスタ群（第１のレジスタ群）と、アクセス権限情報が未設定の図７に示すチャネル４〜７のレジスタ群（第２のレジスタ群）は、メモリ領域へのアクセスの禁止または許可を規定する属性を有する構成とした。
【０１７５】
このように構成すると、レジスタ未設定判定部１５１０は、チャネル０〜３又はチャネル４〜７が有するメモリ領域へのアクセスの禁止または許可を規定する属性に基づいて、メモリ保護違反例外の判定を行うための情報を容易に出力することができる。
【０１７６】
（３）また、チャネル０〜３又はチャネル４〜７の一部または全部には、プログラムＢ（第２のソフトウェア）とは異なるプログラムＡ（第１のソフトウェア）の参照するメモリ領域の一部または全部が設定されている構成とした。
【０１７７】
このように構成すると、チャネル０〜３又はチャネル４〜７の何れにも、少なくとも一部又は全部に、プログラムＡ及びプログラムＢの参照できるメモリ領域が設定されている。この結果、特に一方のプログラム（例えば、プログラムＢ）から他方のプログラム（例えば、プログラムＡ）の関数を呼び出し、続いて呼び出し元プログラム（例えば、プログラムＢ）へ復帰する際のＭＰＵレジスタ入れ替え処理を最小化できる。
【０１７８】
（４）また、チャネル０〜３又はチャネル４〜７が有する属性は、電子制御装置１の動作開始時に静的に設定される構成とした。
【０１７９】
このように構成すると、電子制御装置１の動作開始時に予め静的に設定された属性に基づいて、タスクの切り換えや、一方のプログラム（例えば、プログラムＢ）から他方のプログラム（例えば、プログラムＡ）の関数呼び出しの際のＭＰＵレジスタ入れ替え処理を最小化できる。
【０１８０】
（５）また、チャネル０〜３又はチャネル４〜７が有する属性は、電子制御装置１の動作中に動的に設定される構成とした。
【０１８１】
このように構成すると、所定のプログラム（例えば、プログラムＢ）において、共有ライブラリを構成する関数の一部を参照するが、参照先となる関数をあらかじめ静的に特定することが困難な場合や、内蔵周辺モジュールの制御レジスタなど、極端に狭いアドレス範囲を単位としてアクセスを許可する場合でも、未設定のままであるチャネルを動的に再配分することにより、タスクの切り換えや、一方のプログラム（例えば、プログラムＢ）から他方のプログラム（例えば、プログラムＡ）の関数呼び出しの際のレジスタの利用効率を向上させることができる。
【０１８２】
（６）また、メモリ保護ユニット４００は、ＭＰＵレジスタ４１０に設定されていないアドレスへのアクセスの有無を判定するメモリ保護違反例外ハンドラ１５００（アクセス権限未設定判定部）を、さらに有する構成とした。
【０１８３】
このように構成すると、メモリ保護違反例外ハンドラ１５００は、アクセス権限情報が未設定であることに起因するメモリ保護違反例外と、それ以外の真のメモリ保護違反例外の判定を適切に行うことができる。
【０１８４】
なお、本発明の電子制御装置１は、メモリ保護ユニット（ＭＰＵ）を有しない単機能のＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）の機能を、ＭＰＵを有する高機能のＥＣＵに追加する場合にも有効である。
【０１８５】
図１７は、車載マイコンの変形例を説明する図である。
【０１８６】
図１７に示すように、変形例にかかる車載マイコン１０Ａは、前述したようにメモリ保護ユニット４００を有するＥＣＵ３と、メモリ保護違反例外ハンドラ１５００を有するメモリ４とを有している。本変形例では、このＥＣＵ３に対して、ＭＰＵを有しない、すなわちメモリ保護機能の存在を前提としないＥＣＵ５の機能を追加（移植）する。
【０１８７】
例えば、車両のパワーウィンドウの開閉制御を行うためのＥＣＵは、メモリ保護ユニット４００を有していない場合が一般的であり、このＥＣＵのパワーウィンドウ開閉制御の機能を、メモリ保護ユニット４００を有するエンジン制御を行うＥＣＵに追加する場合が考えられる。
【０１８８】
このように構成すると、メモリ保護ユニットを有しないＥＣＵ５の機能を実現するプログラムが、ＥＣＵ３のメモリ保護ユニット４００の、「アクセス権限未設定」のメモリ領域にアクセスした場合、メモリ保護違反例が発生する。
【０１８９】
その場合、メモリ保護違反例外ハンドラ１５００は、ＭＰＵレジスタ４１０を前述した処理（Ｓ１５２：図１２〜１６）に基づいて更新する。これにより、ＥＣＵ３は、ＥＣＵ５の機能（例えば、パワーウインドウの開閉機能）を適切に実現でき、メモリ保護機能をもたないソフトウェア実行環境向けに作成されたプログラムに対し、プログラムの修正なしに、相当機能を追加することができる。
【０１９０】
前述したように、メモリ保護機能を有しない複数のＥＣＵ（単機能ＥＣＵ）の機能を、メモリ保護機能を有するＥＣＵ（高機能ＥＣＵ）に追加して集約する場合、メモリ保護違反例外ハンドラが、メモリ保護違反例外に基づいて、複数の単機能ＥＣＵの機能ごとにメモリ保護ユニットのレジスタを適切に更新するので、プログラムの修正等を行わずに、当該機能の追加を簡単に行える。
【０１９１】
よって、例えば、数多くの単機能ＥＣＵを有する車両の場合、これらの単機能ＥＣＵの機能を、メモリ保護機能を有する高機能ＥＣＵに追加することで、これらに単機能ＥＣＵが不要となり、コストを削減することができ、また単機能ＥＣＵの設置スペースを省くことができる。
【０１９２】
［第２の実施の形態］
次に、本発明の第２の実施の形態にかかるメモリ保護ユニット４００Ａを説明する。
【０１９３】
前述した実施の形態では、メモリ保護ユニット４００のデフォルト動作がアクセス禁止であることを要件とし、メモリ保護違反例外の発生要因がアクセス権限未設定であるか否かを、ソフトウェアレベルで判定するものとしていた。これに対して、第２の実施の形態では、車載マイコン１０のアーキテクチャにおいて、アクセス権限未設定によるメモリ保護違反例外（以下、アクセス権限未設定例外と呼ぶ）をメモリ保護違反例外とは独立した例外として定義し、アクセス権限未設定例外を識別するための手段（例えば、専用の例外要因識別コードや、例外発生時の分岐先となるベクタアドレス）を導入している。このとき、要因判定処理をメモリ保護ユニット４００Ａのハードウェアにオフロードし、アクセス権限未設定状態を、アクセス権限未設定例外に直接紐づけて処理することで、例外要因の判定処理にともなうソフトウェア処理の負荷を軽減できる。
【０１９４】
図１８は、第２の実施の形態にかかるメモリ保護ユニット４００Ａの構成を説明する図である。
なお、以下の説明では、前述した実施の形態と同一の構成及び機能については、同一の符号を付し、必要に応じて説明する。
【０１９５】
メモリ保護ユニット４００Ａでは、それぞれ命令フェッチおよびオペランドアクセスにおけるメモリ保護違反例外発生を通知する出力信号を生成する、命令系メモリ保護違反例外出力生成部４４０およびデータ系メモリ保護違反例外出力生成部４５０に加え、それぞれ命令フェッチおよびオペランドアクセスにおいてアクセス権限未設定であることを通知する、命令系アクセス権限未設定例外出力生成部４６０とデータ系アクセス権限未設定例外出力生成部４７０とを備える。
【０１９６】
メモリ保護ユニット４００Ａでは、複数のメモリ保護違反検出部４３０から出力されるアドレス一致／不一致情報が、すべてアドレス不一致（ＭＰＵレジスタ４１０のＥフィールド４１１＝０を含む）であった場合には、ＭＰＵのデフォルト動作指定によらず、例外タイプ（命令またはデータ）に応じたアクセス権限未設定例外が出力される。メモリ保護違反例外出力については、従来方式との互換性を重視し、アクセス権限未設定時のＭＰＵのデフォルト動作がメモリ保護違反の場合に、メモリ保護違反例外も出力するよう実装してもよいし、アクセス権限未設定例外出力時にはメモリ保護違反例外出力を抑止するよう実装してもよい。参照する車載マイコン１０のアーキテクチャ定義と矛盾しなければよい。
【０１９７】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１９８】
また、前述した実施の形態では、電子制御装置１を車載組み込みシステムに適用した場合を例示して説明したが、これに限定されるものではなく、産業機械、鉄道システム、船舶、航空機など様々な分野の組み込みシステムに適用することができる。
【０１９９】
また、本発明は、前述した実施の形態を全て組み合わせてもよく、何れか２つ以上の実施の形態を任意に組み合わせても好適である。
【０２００】
また、本発明は、前述した実施の形態の全ての構成を備えているものに限定されるものではなく、前述した実施の形態の構成の一部を、他の実施の形態の構成に置き換えてもよく、また、前述した実施の形態の構成を、他の実施の形態の構成に置き換えてもよい。
【０２０１】
また、前述した実施の形態の一部の構成について、他の実施の形態の構成に追加、削除、置換をしてもよい。
【符号の説明】
【０２０２】
１：電子制御装置、１０：車載マイコン、２０：内部インタコネクト、３０：システム管理モジュール、４０：通信モジュール、５０：通信用外部インタフェース、６０：不揮発性メモリ、７０：入出力モジュール、８０：入出力用外部インタフェース、９０：リセット要求信号、１００：ＣＰＵ、２００：命令実行ユニット、３００：メモリコントローラ、３１０：メモリアクセスインタフェース、３２０：メモリアクセス属性情報、４００：メモリ保護ユニット、４１０：ＭＰＵレジスタ、４２０：レジスタアクセス制御部、４３０：メモリ保護違反検出部、４４０：命令系メモリ保護違反例外出力生成部、４５０：データ系メモリ保護違反例外出力生成部、５００：命令キャッシュ、５１０：命令キャッシュアクセスインタフェース、６００：データキャッシュ、６１０：データキャッシュアクセスインターフェース、７００：ローカルメモリ、７１０：ローカルメモリアクセスインタフェース、１５００：メモリ保護違反例外ハンドラ、１５１０：レジスタ未設定判定部、１５２０：アクセス制御情報設定状態、１５２１：アクセス制御情報設定状態アクセスインタフェース、１５３０：アクセス制御レジスタ設定部、１５４０：アクセス制御情報データベース、１５４１：アクセス制御情報データベースアクセスインタフェース
【図１】
2019049928.tif 000003
【図２】
2019049928.tif 000004
【図３】
2019049928.tif 000005
【図４】
2019049928.tif 000006
【図５】
2019049928.tif 000007
【図６】
2019049928.tif 000008
【図７】
2019049928.tif 000009
【図８】
2019049928.tif 000010
【図９】
2019049928.tif 000011
【図１０】
2019049928.tif 000012
【図１１】
2019049928.tif 000013
【図１２】
2019049928.tif 000014
【図１３】
2019049928.tif 000015
【図１４】
2019049928.tif 000016
【図１５】
2019049928.tif 000017
【図１６】
2019049928.tif 000018
【図１７】
2019049928.tif 000019
【図１８】
2019049928.tif 000020