(57)【要約】【課題】プロセッサの変更を抑制して保護機能を実現することができる情報処理装置を提供すること。【解決手段】第一のアプリがアクセスする第一の周辺回路と、第二のアプリがアクセスする第二の周辺回路と、前記第一の周辺回路の割込み要求をプロセッサのマスク禁止割込み端子（ＮＭＩ）に出力し、前記第二の周辺回路の割込み要求をプロセッサのマスク可能割込み端子（ＩＲＱ）に出力する割り込み管理手段１２と、前記第一の周辺回路及び前記第二の周辺回路とバスを介して接続され、前記割り込み管理手段がマスク禁止割込み端子に割込み要求した場合、前記第一のアプリを実行するプロセッサ１４と、前記第一の周辺回路が割込み要求したことを記憶する割込み状態記憶手段２２と、前記割込み状態記憶手段が前記第一の周辺回路が割込み要求したことを記憶していない場合、前記プロセッサが前記第一の周辺回路にアクセスすることを禁止するアクセス制御手段２１と、を有することを特徴とする情報処理装置１００を提供する。【選択図】図４
2014074995.tif 000002
【特許請求の範囲】
【請求項１】
第一のアプリがアクセスする第一の周辺回路と
第二のアプリがアクセスする第二の周辺回路と、
前記第一の周辺回路の割込み要求をプロセッサのマスク禁止割込み端子に出力し、前記第二の周辺回路の割込み要求をプロセッサのマスク可能割込み端子に出力する割り込み管理手段と、
前記第一の周辺回路及び前記第二の周辺回路とバスを介して接続され、前記割り込み管理手段がマスク禁止割込み端子に割込み要求した場合、前記第一のアプリを実行するプロセッサと、
前記第一の周辺回路が割込み要求したことを記憶する割込み状態記憶手段と、
前記割込み状態記憶手段が前記第一の周辺回路が割込み要求したことを記憶していない場合、前記プロセッサが前記第一の周辺回路にアクセスすることを禁止するアクセス制御手段と、
を有する情報処理装置。
【請求項２】
前記プロセッサが実行するアプリを前記第一のアプリから前記第二のアプリに、又は、前記第二のアプリから前記第一のアプリに切り替えるアプリ切り換えソフトを記憶しており、
前記アプリ切り換えソフトは、前記第一のアプリから呼び出された場合、前記プロセッサが実行するアプリを前記第二のアプリに切り換え、
前記割り込み管理手段が前記プロセッサのマスク禁止割込み端子に割込み要求したことで前記アプリ切り換えソフトが実行された場合、前記プロセッサが実行するアプリを前記第一のアプリに切り換える、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第一のアプリは、マスク可能割込み端子をマスクして処理を実行し、
前記プロセッサが前記第一のアプリを実行中に、前記割り込み管理手段がマスクされているマスク可能割込み端子に割込み要求した場合、前記プロセッサは前記第一のアプリを継続して実行し、
前記プロセッサが前記第一のアプリを実行中に、前記割り込み管理手段がマスク禁止割込み端子に割込み要求した場合、前記プロセッサは割込みの種類に応じた処理を実行後、前記第一のアプリの実行を再開し、
前記第一のアプリは処理が終了した場合に前記アプリ切り換えソフトを呼び出す、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記プロセッサが前記第二のアプリを実行中に、前記割り込み管理手段がマスクされていないマスク可能割込み端子に割込み要求した場合、前記プロセッサは割込みの種類に応じた処理を実行後、前記第二のアプリの実行を再開し、
前記割り込み管理手段がマスク禁止割込み端子に割込み要求した場合、前記プロセッサは前記アプリ切り換えソフトを呼び出す、
ことを特徴とする請求項２記載の情報処理装置。
【請求項５】
前記アプリ切り換えソフトは、前記プロセッサに前記第二のアプリを実行させる前に、前記割込み状態記憶手段が前記第一の周辺回路が割込み要求したという記憶を消去する、
ことを特徴とする請求項３記載の情報処理装置。
【請求項６】
複数の回路のそれぞれと前記プロセッサの間に個別用アクセス制御手段を有する第三の周辺回路を有し、
前記個別用アクセス制御手段は、前記割込み状態記憶手段が前記第一の周辺回路が割込み要求したことを記憶していない場合、前記プロセッサがアクセス要求した前記回路にアクセスすることを禁止する、
ことを特徴とする請求項１〜５いずれか１項記載の情報処理装置。
【請求項７】
前記個別用アクセス制御手段のそれぞれは、前記回路へのアクセス制御を行うか否かを動的に設定可能である、ことを特徴とする請求項６記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のアプリケーションが動作した場合にアプリケーションの機能を保護する情報処理装置に関する。
【背景技術】
【０００２】
プロセッサによっては、保護機能が搭載されることがある。保護機能とは、アプリケーションがその機能を提供できるようにデータや処理の実行を確保するための機能であり、具体的にはメモリ保護機能や時間保護機能が知られている。メモリ保護を実現する装置としてＭＰＵ（Memory  Protection  Unit）又はＭＭＵ（Memory  Management  Unit）がある。ＭＰＵ又はＭＭＵは、メモリ保護として、複数のプロセスが動作する場合にあるプロセスが他のプロセスのメモリ領域にアクセスすることを禁止する。メモリ保護を実現するため、ＭＰＵ又はＭＭＵを操作できるプロセスを制限する必要があり、多くのプロセッサでは特権モードとユーザモードという動作モードを有している。特権モードはＯＳ等のシステムソフトウェアが動作する動作モードであり、ユーザモードはアプリケーションが動作する動作モードである。システムソフトウェアがプロセッサを管理しやすいように、特権モードではメモリ保護機能は無効にされ、ユーザモードでのみメモリ保護機能が有効になる。
【０００３】
時間保護機能は、重要な機能を提供するプロセスが許容可能な最長期限（デッドライン）までに実行されることを保証する機能である。このため、システムソフトウェアは、プロセッサ内部のカウンタや外付けのタイマを用いて、特定のプロセスがＣＰＵを専有することを防止したり、各プロセスへのＣＰＵの割り当て時間を制限する。
【０００４】
しかしながら、低コストに調達可能なマイコンでは保護機能を有していないものが多く、保護機能を追加する技術が考えられている（例えば、特許文献１参照。）。特許文献１には、アプリケーションのメモリアクセスを制限するアクセス監視装置が開示されている。アクセス監視装置は、アクセス許可テーブルを内蔵しており、ＣＰＵからメモリに出力される信号を取得し、アクセス許可テーブルと比較することで、ＣＰＵからの信号のアクセス違反を検出する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−３２５１５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１のアクセス監視装置は、アクセス許可テーブルによりアクセス制限しているが、アプリケーションがアクセス許可テーブルを書き換える可能性について考慮されていない。アクセス許可テーブルの書き換えを禁止するには、アプリケーションはユーザモードでのみ動作可能とすることが考えられるが、特権モードとユーザモードをサポートするためにはプロセッサの変更が必要になるという問題がある。
【０００７】
本発明は、上記課題に鑑み、プロセッサの変更を抑制して保護機能を実現することができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、第一のアプリがアクセスする第一の周辺回路と、第二のアプリがアクセスする第二の周辺回路と、前記第一の周辺回路の割込み要求をプロセッサのマスク禁止割込み端子に出力し、前記第二の周辺回路の割込み要求をプロセッサのマスク可能割込み端子に出力する割り込み管理手段と、前記第一の周辺回路及び前記第二の周辺回路とバスを介して接続され、前記割り込み管理手段がマスク禁止割込み端子に割込み要求した場合、前記第一のアプリを実行するプロセッサと、前記第一の周辺回路が割込み要求したことを記憶する割込み状態記憶手段と、前記割込み状態記憶手段が前記第一の周辺回路が割込み要求したことを記憶していない場合、前記プロセッサが前記第一の周辺回路にアクセスすることを禁止するアクセス制御手段と、を有することを特徴とする。
【発明の効果】
【０００９】
プロセッサの変更を抑制して保護機能を実現することができる情報処理装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】マイコンの概略的な特徴を説明する図の一例である。
【図２】従来技術の課題を説明するための図の一例である。
【図３】実行時間の増大について説明する図の一例である。
【図４】マイコンのハードウェア構成図の一例である。
【図５】ソフトウェアブロック図の一例である。
【図６】安全系アプリと非安全系アプリの周辺回路へのアクセス許否をまとめたテーブルの一例を示す図である。
【図７】プロセッサが安全系アプリを実行中のメモリ保護について説明する図の一例である。
【図８】プロセッサが非安全系アプリを実行中のメモリ保護について説明する図の一例である。
【図９】安全系アプリが動作中の時間保護について説明する図の一例である。
【図１０】非安全系アプリが動作中の時間保護について説明する図の一例である。
【図１１】保護ブリッジが２つ存在する場合のマイコンの一例を示す図である。
【図１２】安全系アプリがアクセスする周辺回路が複数、設けられたマイコンの構成図の一例である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について説明する。しかしながら、本発明の技術的範囲が、本実施の形態に限定されるものではない。
【００１２】
図１は、本実施形態のマイコンの概略的な特徴を説明する図の一例である。
本実施形態では、プロセッサが主に安全系アプリと非安全系アプリを実行し、安全系アプリは周辺回路Ａを、非安全系アプリは周辺回路Ｂを使用する。メモリ保護を実現するには、少なくとも非安全系アプリが周辺回路Ａにアクセスすることを防止する必要がある。そこで、プロセッサと周辺回路Ａの間に保護ブリッジを設ける。保護ブリッジは、REG_WORLDレジスタの値に応じてプロセッサによる周辺回路Ａへのアクセスを制御する。
【００１３】
REG_WORLDレジスタの値は、安全系アプリが実行する契機となるＮＭＩ（Non Maskable Interrupt）端子への割込みにより"１"となる。非安全系アプリが実行する場合はREG_WORLDレジスタの値は"０"のままである。
【００１４】
図１（ａ）ではプロセッサが非安全系アプリを実行している。この場合、REG_WORLDレジスタの値は"０"である。保護ブリッジはREG_WORLDレジスタの値が"０"なので周辺回路Ａへのアクセスを禁止する。
【００１５】
図１（ｂ）ではプロセッサが安全系アプリを実行している。この場合、ＮＭＩ端子に割込みが生じたためREG_WORLDレジスタの値は"１"である。保護ブリッジはREG_WORLDレジスタの値が"１"なので周辺回路Ａへのアクセスを許可する。
【００１６】
このように、非安全系アプリが実行される場合はREG_WORLDレジスタの値は"０"のままなので、非安全系アプリが周辺回路Ａにアクセスを試みても禁止できる。よって、アプリ間のメモリ保護が可能になる。
【００１７】
また、ＮＭＩ端子への割込みは周辺回路Ａによってのみ生じる。この割込みはマスクされないので、プロセッサは周辺回路Ａから割込みが発生したことを契機に安全系アプリを実行できる。これに対し、周辺回路Ｂの割込みはＩＲＱ端子に入力される。安全系アプリはＩＲＱをマスクできるので、周辺回路Ｂから割込みが発生しても、プロセッサは安全系アプリを優先して実行できる。したがって、安全系アプリの実行を優先するという時間保護が可能になる。
【００１８】
〔従来技術の課題〕
図２は、従来技術の課題を説明するための図の一例である。はじめに従来技術の下記の５つの課題について説明する。
【００１９】
１．プロセッサの変更
メモリ保護や時間保護のような保護機能を実現するためには、一般にプロセッサで特権モードとユーザモードをサポートする必要があるとされている。しかし、保護機能を有さないプロセッサに特権モードとユーザモードを導入するにはプロセッサの設計変更が必要になる（例えば、モード変更の命令のデコード、デコード結果に応じた信号の処理・制御など）。
【００２０】
また、メモリ保護を行うＭＰＵ又はＭＭＵはプロセッサと密接に関連しているため、ＭＰＵ又はＭＭＵを搭載するためにプロセッサの変更が必要になる。本実施形態ではＭＰＵ又はＭＭＵは使用しないがこれらについて簡単に説明する。ＭＰＵは、メモリ保護機能を有するハードウェアである。アプリケーションの起動時に、ＲＴＯＳ（Real Time Operating System）などのシステムソフトウェア（以下、単にＲＴＯＳという）はアプリケーション毎にアクセス可能なアドレス範囲とそのアクセス属性（Ｒｅａｄ  Ｗｒｉｔｅ  実行）の対応テーブルをＭＰＵに登録する。アプリケーションがメモリにアクセスする際、ＭＰＵは、そのアドレスがアプリケーションのアクセス可能なアドレス範囲としてＭＰＵに登録されているか否かを比較する。アクセスが許可されたアドレス範囲であり、かつ、アクセス属性が許可されている場合にだけ、ＭＰＵはメモリにアクセス先のアドレスを出力する。
【００２１】
ＭＭＵはアドレス変換機能とメモリ保護機能を有している。アドレス変換とは、プロセッサがプログラムの実行時に指定する論理アドレスから、実際のＲＡＭの物理アドレスに変換することをいう。ＲＴＯＳはページ単位に物理アドレス空間と論理アドレス空間を区切り、アプリケーションからの要求に応じて、ページを割り当てる。論理アドレスと物理アドレスとを紐づけるテーブルをページテーブルという。ページテーブルをアプリケーション毎に用意することで、ＲＴＯＳはアプリケーション毎に異なる論理アドレス空間を生成する。プロセッサが実行するアプリケーションに応じてＲＴＯＳはページテーブルを切り替えるので、アプリケーションが別のアプリケーションの物理アドレスにアクセスすることを防止でき、メモリ保護が可能になる。
【００２２】
しかしながら、このようなページテーブルの内容はＲＴＯＳによりレジスタに設定されるため、プロセッサにレジスタを新たに設けることが必要である。また、対応テーブルや
レジスタの内容をアプリケーションが書き換えないようにユーザモードを用意するなどプロセッサの変更が必要になってしまう。
【００２３】
２．ハードウェア規模の増大
メモリ保護機能を実現するＭＰＵ又はＭＭＵはハードウェアなので、プロセッサに外付けするとしても内部に搭載するにしても、その分の搭載スペースが必要になる。図２ではプロセッサの内部にＭＰＵ又はＭＭＵが搭載されているが、その分ハードウェア規模が増大している。
【００２４】
また、時間保護を可能とするには、タイマやカウンタが必要になるので、図２では時間保護機能としてタイマも追加されているが、その分、ハードウェア規模が増大してしまう。
【００２５】
３．ソフトウェアの変更
ＭＰＵがメモリ保護するためのアドレス範囲が登録された対応テーブルやＭＭＵがアドレス変換するためのページテーブルはＲＴＯＳが管理するため、ＭＭＵ又はＭＰＵに対応したＲＴＯＳを搭載するか、又は、ＲＴＯＳを変更する必要がある。このようなＲＴＯＳを図２では、保護対応ＲＴＯＳと記載している。このため、既存のＲＴＯＳを変更する必要がある。
【００２６】
４．ソフトウェア規模の増大
ソフトウェア（ＲＴＯＳ）の変更により、ＲＴＯＳはＭＭＵ又はＭＰＵを制御するための機能を搭載する必要があるため、ソフトウェア規模も該機能がない場合と比べて大きくなる。ソフトウェア規模が大きくなるとそれを記憶するためのメモリ容量も大きくなる。図２では、保護機能がないＲＴＯＳよりも保護対応ＲＴＯＳの面積が大きくなっている。
【００２７】
５．実行時間の増大
図３は、実行時間の増大について説明する図の一例である。保護機能がない場合、アプリケーションはＲＴＯＳと同じアドレス範囲にアクセス可能であるため、この意味ではプロセッサは常に特権モードで動作する。よって、保護機能がない場合、アプリケーションは次のようにＲＴＯＳを呼び出す。
(i)アプリケーションからＲＴＯＳの機能を呼び出すためにＲＴＯＳのＡＰＩ（Application Interface）として関数を呼び出す（図では「タスク起動ＡＰＩ呼び出し」となっているが、これはＲＴＯＳではタスク単位に処理を実行するためで、ここでは１つの関数が１つのタスクという状況を想定している。処理としては関数呼び出しと同じである。）。
(ii)関数を呼び出すと、プログラムカウンタの値がスタックに退避され、プログラムカウンタに関数の命令が記憶されたアドレスがセットされＲＴＯＳが実行される。このように、保護機能がない場合、特権モードのままジャンプ命令と同程度の時間でプロセッサはＲＴＯＳの関数を実行できる。
【００２８】
これに対し保護機能がある場合、アプリケーションはユーザモードでしか動作しない。また、ＲＴＯＳは特権モードでしか動作しない。アプリケーションが自由に動作モードを切り替えることは禁止すべきであるので、アプリケーションがＲＴＯＳの関数を呼び出す場合は、以下のようにしてＲＴＯＳに処理が切り替わる。
(i)アプリケーションがＲＴＯＳの機能を呼び出す際、例外（例えばＴＲＡＰ命令、ＩＮＴ命令等）を発生させる。これらの命令の引数には、呼び出す関数に対応した値が記述されている。例外命令の実行により、プロセッサは特権モードに移行して、図の例外出入口処理を実行する。
(ii)例外出入口処理において、例えば割込みコントローラは例外又は割込みを発生させた命令の引数である割り込みベクタを取り出し、該割り込みベクタが指示する割込みハンドラや割り込み処理ルーチン（以下、単に割込みハンドラというが、便宜上の記載であり例外出入口処理を行うソフトウェアの名称は問わない）を実行する。割り込みハンドラはまずレジスタの内容などプロセッサのコンテキストを退避する。ＭＰＵを搭載している場合は対応テーブルを変更し、ＭＭＵを搭載している場合はページテーブルを変更する。
(iii)そして、割込みハンドラは自身が呼び出す関数として予め定められている、関数を呼び出す。
(iv)プログラムカウンタにＲＴＯＳの呼び出された関数のアドレスが設定されるので、プロセッサはアプリケーションが呼び出した関数を実行する。
(v)関数の実行の完了時には、関数はプログラムカウンタに割込みハンドラのアドレスを設定する。
(vi)割込みハンドラは、例外出入り口処理を行う。すなわち、退避したコンテキストを復帰させ、対応テーブル、ページテーブルを元に戻す。
(vii)割込みハンドラは、ＲＴＯＳに依頼して動作モードをユーザモードに変更する。特権モードからユーザモードへの変更はモード切り替え命令により行うことができる。
(viii)アプリケーションはプロセスを再開する。
【００２９】
なお、ユーザモードと特権モードの切り換えタイミングなどは一例であり、プロセッサの仕様によって変わるものである。しかし、図示するように、保護機能がある場合、例外出入り口処理や動作モードの変更のため、実行時間が増大してしまう。
【００３０】
〔構成例〕
本実施形態では、既存のプロセッサに追加するハードウェアとハードウェアを制御するソフトウェアにより上記の課題１〜５を解決する。既存のプロセッサには、ＭＰＵやＭＭＵのメモリ保護機能はなく、動作モードは特権モードのみであるとする。
【００３１】
本実施形態ではメモリ保護を、「重要なアプリケーションが使用するメモリが重要性が低いアプリケーションからアクセスされないこと」と定義する。これは、あるアプリＡのメモリは他のアプリＢから保護されるという意味では、従来のメモリ保護と同様である。アプリＢのメモリはアプリＡから保護されなくてもよいし、保護されてもよい。
【００３２】
また、本実施形態では時間保護を「重要なアプリケーションが、重要性が低いアプリケーションよりも優先的に実行されること」と定義する。時間保護機能についてはＲＴＯＳが提供する場合がある。ＲＴＯＳの定義は明確でないが、一般に、タスク毎に予め定められた最長期限をこえないことを監視することで、各タスクの実行時間を保証する機能を有するもの、とされる。本実施形態ではタイマを用いずに（マイコンに搭載されているとしても）時間保護を行うため、いわゆるＲＴＯＳとしての時間保護機能は組み込まれていない。しかし、「重要なアプリケーションが、重要性が低いアプリケーションよりも優先的に実行されること」で、擬似的に、重要なアプリケーションは最長期限を超えないように処理されることができる。
【００３３】
図４（ａ）は、本実施形態のマイコン１００のハードウェア構成図の一例を示し、図４（ｂ）は、比較のために示した従来のマイコンのハードウェア構成図の一例である。マイコン１００は、車両の例えばＥＣＵ（Electronic Control Unit）に搭載される。ＥＣＵにはエンジンＥＣＵのような高性能なものから、モータを制御して開閉部材のロック／アンロック、開閉等を行う比較的、簡易なものまであるが、用途は限定されない。
【００３４】
図４（ａ）と図４（ｂ）を比較すると、マイコン１００は、新たに保護状態コントローラ１１、保護割込みコントローラ１２、及び、保護ブリッジ２１を有している。
【００３５】
まず、バス３１には割込みコントローラ１３、プロセッサ１４、及び、保護対応周辺回路が接続されている。また、２つの外部バス３２，３３にそれぞれ周辺回路Ａ，Ｂが接続されている。周辺回路Ａ，Ｂが有するＭＥＭ１５，１８はＲＡＭなどのランダムアクセスメモリであり、アプリケーションやＲＴＯＳ等が配置される。ＭＥＭ１５，１８の他にプログラムが記憶されたフラッシュＲＯＭを有しているが図では省略されている。ＵＡＲＴ１６、１９はシリアル通信の回路の一例であり、Ｉ２Ｃなどの通信プロトコルの回路を搭載してもよい。ＴＩＭＥＲ１７，２０はプロセッサ１４により設定された時間を、クロックをカウントして計測し該時間が経過するとプロセッサ１４に割り込みする。このＴＩＭＥＲはＲＴＯＳが時間保護に使用するものではなく、アプリケーションが処理のタイミング制御などに使用するための回路である。なお、これらの周辺回路は一例であり、種々の周辺回路を有していてよい。
【００３６】
バス３１に接続されたＤＺＭＣ２７とＭＥＭ２４、ＤＺＵＺＲＴ２５、及び、ＤＺＴＩＭＥＲ２６は保護対応周辺回路である。これらについては後述する。
【００３７】
周辺回路Ａは安全系アプリにより使用され、周辺回路Ｂは非安全系アプリにより使用される。安全系アプリとは車両の安全性が影響するアプリケーションであり、非安全系アプリとはそれ以外のアプリケーションである。安全系アプリと非安全系アプリについては後述する。
【００３８】
周辺回路Ａと周辺回路Ｂの物理アドレス空間は連続しており、安全系アプリは周辺回路Ａ及び周辺回路Ｂの物理アドレスを指定してアクセスし、非安全系アプリは周辺回路Ｂのみの物理アドレスを指定してアクセスする。安全系アプリが動作する周辺回路Ａに非安全系アプリがアクセスすると車両の安全性が阻害されるおそれがあるためである。
【００３９】
しかし、非安全系アプリも周辺回路Ａにアクセスしないように設計されているが、なんらかのアプリケーションが周辺回路ＢのＭＥＭに侵入して、プロセッサ１４が実行することで周辺回路Ａにアクセスしないとも限らない。
【００４０】
そこで、周辺回路Ａとプロセッサ（バス３１と外部バス３２）１４は保護ブリッジ２１を介して接続されている。保護ブリッジ２１は、保護状態コントローラ１１のREG_WORLDレジスタ２２の値に応じて、プロセッサ１４が周辺回路Ａにアクセスすることを禁止又は許可する。REG_WORLDレジスタ２２は１bitあればよい。
【００４１】
保護状態コントローラ１１はREG_WORLDレジスタ２２を有している。REG_WORLDレジスタ２２はプロセッサ１４で動作しているアプリケーションの種類を示す。
安全系アプリ  ：REG_WORLDレジスタ＝１
非安全系アプリ：REG_WORLDレジスタ＝０
保護状態コントローラ１１は、保護割込みコントローラ１２がプロセッサ１４のＮＭＩ端子に出力するREQ_NMI信号を監視し、REG_WORLDレジスタ２２を操作する。なお、ＮＭＩ端子はＲＴＯＳ及びアプリケーションがマスクできない割込み端子である。
REQ_NMI信号の立ち上がり（又は立ち下がり）→  REG_WORLDレジスタ＝１
REG_WORLDレジスタ２２を"０"に戻すのはプロセッサ（後述する保護制御モニタ）１４であるため、保護状態コントローラ１１はREG_WORLDレジスタ２２を"０"に戻す処理を行わない。安全系アプリは処理の終了時に保護制御モニタを呼び出すため、安全系アプリが処理を終了するとREG_WORLDレジスタ２２は"０"になる。
【００４２】
保護割込みコントローラ１２は、周辺回路Ａ及び周辺回路Ｂの割込み要求線が接続される割込みコントローラである。保護割込みコントローラ１２は、プロセッサ１４及び割込みコントローラ１３に接続されている。保護割込みコントローラ１２は周辺回路Ａからの割込み要求（REQ_NMI）をプロセッサ１４のＮＭＩ端子に出力し、周辺回路Ｂからの割込み要求を保護割込みコントローラ１２に出力する。割込みコントローラ１３はプロセッサ１４のＩＲＱ端子に割込み要求する。ＩＲＱ端子はマスク可能な割込み端子である。
【００４３】
したがって、周辺回路Ａからの割込み要求は必ずプロセッサ１４に伝達される。これにより、周辺回路Ａからの割込みがあればプロセッサ１４は安全系アプリを非安全系アプリよりも優先して実行することができる。一方、周辺回路Ｂからの割込み要求は、従来どおり、マスクされていなければプロセッサ１４に伝達される。なお、周辺回路Ｂの割込みは、保護割込みコントローラ１２でなく従来の割込みコントローラ１３に入力されていてもよい。
【００４４】
保護ブリッジ２１はREG_WORLDレジスタ２２の値を監視し、プロセッサ１４が非安全系アプリを実行中に周辺回路Ａにアクセスすることを禁止する。すなわち、「REG_WORLDレジスタ＝０」の場合、保護ブリッジ２１はプロセッサ１４によるアクセスを無視するか又は例外を発生させる。なお、保護ブリッジ２１は、保護対応周辺回路を搭載する場合は不要とすることができる。
【００４５】
保護対応周辺回路は、周辺回路Ａ，Ｂと同等の機能を有する周辺回路であるが、保護状態コントローラ１１のREG_WORLDレジスタ２２の値を参照可能になっている。したがって、保護ブリッジ２１と同等の制御をＭＥＭ２４、ＤＺＵＡＲＴ２５又はＤＺＴＩＭＥＲ２６毎に実現できる。プロセッサ１４がＭＥＭ２４、ＤＺＵＡＲＴ２５、又は、ＤＺＴＩＭＥＲ２７にアクセスした場合、保護対応周辺回路の各回路はREG_WORLDレジスタ２２の値が"１"であればアクセスを受け付け、"０"であればアクセスを受け付けない。したがって、安全系アプリだけが保護対応周辺回路にアクセスできる。
【００４６】
また、保護対応周辺回路は、非安全系アプリも使用できるように、ＲＴＯＳなどが設定することもできる。すなわち、保護対応周辺回路の回路毎に、REG_WORLDレジスタ２２の値を参照しないように予め設定しておけばよい。これにより、プロセッサ１４はREG_WORLDレジスタ２２の値に関係なく保護対応周辺回路にアクセスできる。
【００４７】
また、例えばＲＴＯＳは保護対応周辺回路を、安全系アプリのみがアクセス可能か、安全系アプリと非安全系アプリの両方がアクセス可能かを時分割して制御することもできる。すなわち、ＲＴＯＳは保護対応周辺回路に例えばフラグを配置し、安全系アプリのみがアクセス可能か、安全系アプリと非安全系アプリの両方がアクセス可能かを動的に切り替える。これにより、例えば、安全系アプリの処理負荷が大きくなった場合にだけ、保護対応周辺回路を安全系アプリに優先的に使用させることができる。
【００４８】
〔ソフトウェアブロック〕
図５は、ソフトウェアブロック図の一例を示す。プロセッサ上で１つの保護制御モニタ４０が動作し、その上で２つの保護機能なしＲＴＯＳ４１が動作し、各保護機能なしＲＴＯＳ上で安全系アプリ４２と非安全系アプリ４３とが動作している。非安全系アプリと安全系アプリはそれぞれ１つ以上の割込みハンドラとタスクを有している。なお、図では同時に安全系アプリと非安全系アプリが動作するように図示されているが、安全系アプリと非安全系アプリは同時に実行されない。安全系アプリと非安全系アプリの処理内容には、従来の保護機能がないマイコンに搭載された時点と比較して、変更の必要がないか、変更があってもわずかである。
【００４９】
本実施形態では安全系アプリをＡＳＩＬ（Automotive Safety Integrity Level）が所定値以上のアプリであると定義する。ＡＳＩＬはＩＳＯ２６２６２に規定される自動車の安全要求と安全対策を指定する指標である。ＡＳＩＬでは５段階の安全性レベルが定められており、安全性の基準が高い順にＤ，Ｃ，Ｂ，Ａ、ＱＭとなっている。ＡＳＩＬは、ハザード（障害）によって生じる被害の大きさ、ハザードの生じる頻度、及び、ハザードが生じた場合の制御難易度を検討し、車両メーカ等が決定する。車両メーカは、ＩＳＯ２６２６２の認証機関に対し、ＡＳＩＬのランクに応じた措置が施されていることの資料を提出するなどして、認証機関から認証を受ける。これにより、車両メーカ等は、決定したＡＳＩＬのランクに応じた措置が施していることを保証することができる。
【００５０】
高いランクのＡＳＩＬで開発すべきアプリケーションとは、車両の基本性能（走る、曲がる、止まる）に関する制御を行うアプリケーションである。これ以外の例えば外部のネットワークのサーバと通信するアプリケーション（例えば、制御に関係ないエンターテイメント系のアプリケーション）や、ＡＶ系のアプリケーションは低いＡＳＩＬのランクで開発される。例えば、安全系アプリは、ＡＳＩＬ−Ｄ，ＡＳＩＬ−Ｃ，ＡＳＩＬ−Ｂ又はＡＳＩＬ−Ａとし、非安全系アプリをＡＳＩＬ−ＱＭと区別することができるが、安全系アプリ・非安全系アプリとＡＳＩＬの対応は任意である。
【００５１】
後述する時間保護にて説明するが、プロセッサ１４は安全系アプリを優先して実行する。安全系アプリのタスクがなくなると、非安全系アプリが実行される。非安全系アプリの実行中に周辺回路Ａから割込みが発生すると、プロセッサ１４は安全系アプリの割込み内容に応じた処理を開始する。したがって、安全系アプリが優先して実行される。
【００５２】
保護制御モニタ４０は安全系アプリが優先されるようにプロセッサ１４が実行するアプリケーションを、安全系アプリから非安全系アプリへ、又は、非安全系アプリから安全系アプリに切り替える。安全系アプリの動作中、保護制御モニタ４０が呼び出されるのは安全系アプリのタスクがなくなった場合であるので、安全系アプリは、安全系アプリから非安全系アプリへ切り替える処理を行う保護制御モニタ４０のアドレスをプログラムカウンタに設定する。
【００５３】
非安全系アプリの動作中、保護制御モニタ４０が呼び出されるのは、ＮＭＩへ割込みが生じた場合なので、プロセッサ１４はＮＭＩへの割込みに対し、非安全系アプリから安全系アプリへ切り替える処理を行う保護制御モニタ４０のアドレスをプログラムカウンタに設定する。
【００５４】
または、保護制御モニタ４０が呼び出される直前のREG_WORLDレジスタ２２の値を判別して、安全系アプリと非安全系アプリのどちらへ切り替えるかを判断してもよい。
【００５５】
〔メモリ保護について〕
図６は、安全系アプリと非安全系アプリの周辺回路へのアクセス許否をまとめたテーブルの一例を示す図である。REG_WORLDレジスタ２２が"１"の場合、安全系アプリは周辺回路Ａ，Ｂにアクセスでき、REG_WORLDレジスタ２２が"０"の場合、非安全系アプリは周辺回路Ｂにだけアクセスできる。また、REG_WORLDレジスタ２２が"１"の場合に非安全系アプリが動作することはなく、REG_WORLDレジスタ２２が"０"の場合に安全系アプリが動作することはない。
【００５６】
図７は、プロセッサ１４が安全系アプリを実行中のメモリ保護について説明する図の一例である。安全系アプリが周辺回路Ａにアクセスするためには、REG_WORLDレジスタ２２が"１"である必要がある。マイコン１００の起動時、ＲＴＯＳが起動してから安全系アプリが実行されるが、この時のREG_WORLDレジスタ２２が"１"であることが好ましい。このため、マイコン１００の起動時、REG_WORLDレジスタ２２は"１"に初期化される（リセット値"１"である）。
【００５７】
保護ブリッジ２１は、プロセッサ１４からアクセス要求があると、REG_WORLDレジスタ２２が"１"の場合にだけアクセスを許可する。したがって、図示するように安全系アプリが動作中に保護ブリッジ２１にアクセス要求があると、保護ブリッジ２１はアクセスを許可する。なお、バス３１と外部バス３３には保護ブリッジ２１がないので、安全系アプリが周辺回路Ｂにアクセスすることは可能である。
【００５８】
また、安全系アプリが処理の終了時に保護制御モニタ４０を呼び出し、REG_WORLDレジスタ２２が"０"になり、非安全系アプリが実行される。この後、周辺回路Ａが割り込みすればREG_WORLDレジスタ２２が"１"になり安全系アプリが再度、実行される。
【００５９】
図８は、プロセッサ１４が非安全系アプリを実行中のメモリ保護について説明する図の一例である。非安全系アプリが動作している場合、REG_WORLDレジスタ２２は"０"である。したがって、保護ブリッジ２１は、非安全系アプリが動作中にアクセス要求があると、REG_WORLDレジスタ２２が"０"なので、アクセスを禁止すると共に例外を発生させる。
【００６０】
例外の発生により、例えばプロセッサ１４がリセットされる。または、ＲＴＯＳが例外に対応した処理を開始して、非安全系アプリの実行を禁止するなどのフェールセーフ処理を行う。
【００６１】
なお、REG_WORLDレジスタ２２の値に関係なく、非安全系アプリは周辺回路Ｂにアクセスすることができる。
【００６２】
〔時間保護について〕
周辺回路Ａの割込みはマスクされないので、安全系アプリが非安全系アプリよりも優先的に実行される。また、安全系アプリは動作中にＩＲＱをマスクする。これらにより、時間保護が実現される。
【００６３】
図９は、安全系アプリが動作中の時間保護について説明する図の一例である。
t0：安全系アプリが動作するため、REG_WORLDレジスタ２２が"１"となる。安全系アプリは動作の開始後、割込みを禁止する命令（例えばＤＩ命令）を実行してＩＲＱをマスクする。
t1：周辺回路Ｂから割込みが発生する。ＩＲＱがマスクされているので、安全系アプリは処理を継続する。
t2：周辺回路Ａから割込みが発生する。保護割込みコントローラ１２はＮＭＩ端子に割込みするので、割込みが受け付けられる。安全系アプリはプログラムカウンタの値をスタックに退避して、割込みハンドラを呼び出す。割込みハンドラは割込み内容に応じた処理などを行う。
t3：割込みハンドラは処理を終了すると、スタックに退避している値をプログラムカウンタにセットするので、処理が安全系アプリに戻る。安全系アプリは処理を再開する。
t4：安全系アプリは処理が終了すると、割込みを許可する命令（例えばＥＩ命令）を実行してＩＲＱのマスクを解除する。そして、保護制御モニタ４０を呼び出す。この場合はジャンプ命令のように、保護制御モニタ４０の所定のアドレスをプログラムカウンタにセットすればよい。
t4〜t5：保護制御モニタ４０は、REG_WORLDレジスタ２２を"１"から"０"に設定する。
t5：保護制御モニタ４０は安全系アプリから呼び出されたので、非安全系アプリに切り替えるためプロセッサ１４に非安全系アプリの割込みハンドラを実行させる。
t6：非安全系アプリの割込みハンドラは非安全系アプリの実行を開始する。
【００６４】
このように、安全系アプリの実行中は、周辺回路Ａからの割込みだけが受け付けられるので、安全系アプリを非安全系アプリよりも優先して実行できる。
【００６５】
図１０は、非安全系アプリが動作中の時間保護について説明する図の一例である。
t0：非安全系アプリが動作するため、REG_WORLDレジスタ２２が"０"となっている。
t1：周辺回路Ｂから割込みが発生する。保護割込みコントローラ１２はＩＲＱ端子に割込みするので、マスクされていなければ割込みが受け付けられる。非安全系アプリはプログラムカウンタの値をスタックに退避して、割込みハンドラを呼び出す。割込みハンドラは割込み内容に応じた処理などを行う。
t2：割込みハンドラは処理を終了すると、スタックに退避している値をプログラムカウンタにセットするので、処理が非安全系アプリに戻る。非安全系アプリは処理を再開する。
t3：非安全系アプリは動作の必要上、割込みを禁止する命令（例えばＤＩ命令）を実行してＩＲＱをマスクする。
t4：周辺回路Ａから割込みが発生する。保護割込みコントローラ１２はＮＭＩ端子に割込みするので、ＩＲＱがマスクされていても割込みが受け付けられる。
【００６６】
また、保護割込みコントローラ１２がＮＭＩ端子に割込みするので、REG_WORLDレジスタ２２は"１"になる。保護割込みコントローラ１２がＮＭＩ端子に割込みすることで、プロセッサ１４は保護制御モニタ４０を実行する。
t5：割込みにより実行される保護制御モニタ４０は、安全系アプリを起動するので、プロセッサ１４に安全系アプリの割込みハンドラを実行させる。
t6：安全系アプリの割込みハンドラは安全系アプリの実行を開始する。
【００６７】
このように、非安全系アプリの実行中は、周辺回路Ａからの割込みにより安全系アプリに切り替えられるので、安全系アプリを非安全系アプリよりも優先して実行できる。
【００６８】
〔課題が解決されていること〕
以上説明したように、本実施形態のマイコン１００は上記１〜５の課題を解決することができる。
１．保護状態コントローラ１１、保護割込みコンコントローラ及び保護ブリッジ２１を追加するが、これらの追加はプロセッサ１４の変更が不要なので、メモリ保護や時間保護を実現するためにプロセッサ１４を変更する必要がない。
２．保護状態コントローラ１１、保護割込みコンコントローラ及び保護ブリッジ２１というハードウェアを追加する必要があっても、ＭＰＵやＭＭＵと比べると単純なハードウェアでよいため、ハードウェアの増加は少なくて済む。
３．アプリケーションやＲＴＯＳにはほとんど変更がなく、保護制御モニタ４０を追加しても、全体的なソフトウェアの変更が少なくて済む。
４．アプリケーションやＲＴＯＳにはほとんど変更がなく、保護状態コントローラ１１、保護割込みコンコントローラ及び保護ブリッジ２１は簡易な構成であるため、保護制御モニタ４０を追加してもソフトウェアは小規模で実現できる。
５．ユーザモードがないので、アプリケーションからＲＴＯＳの関数を呼び出す際、例外出入り口処理が不要であり実行時間の増大を抑制できる。
【００６９】
〔変形例〕
図１１に示すように保護ブリッジ３４を更に１つ追加して、周辺回路Ｂを保護することも可能である。保護ブリッジ２１の動作は上述したとおりである。これに対し、保護ブリッジ３４は次のように動作する。
REG_WORLDレジスタ＝１
→  プロセッサ１４が周辺回路Ｂにアクセスすることを禁止する。
REG_WORLDレジスタ＝０
→  プロセッサ１４が周辺回路Ｂにアクセスすることを許可する。
【００７０】
すなわち、REG_WORLDレジスタ２２が"０"の場合、プロセッサ１４は非安全系アプリを実行しているので、非安全系アプリが周辺回路Ｂにアクセスする。しかし、REG_WORLDレジスタ２２が"１"であり、プロセッサ１４が安全系アプリを実行している場合は、周辺回路Ｂへのアクセスを禁止できるので、アプリ間のメモリ保護が可能になる。
【００７１】
また、REG_WORLDレジスタ２２のbit数を複数bitにしてもよい。例えば２bitとした場合、REG_WORLDレジスタ２２は「00、01、10、11」の4つの状態を保持する。この場合、保護割込みコントローラ１２は、周辺回路Ａのうち割込み要求した回路に応じてREG_WORLDレジスタ２２の状態を変える（例えば、ＭＥＭの場合は01、ＵＡＲＴの場合は10、ＴＩＭＥＲの場合は11）。
【００７２】
保護ブリッジ２１は、例えば以下のようにアクセスを制御する。
00：周辺回路Ａへのアクセスを禁止する
01：ＭＥＭへのアクセスのみ許可する
10：ＵＡＲＴへのアクセスのみ許可する
11：ＴＩＭＥＲへのアクセスのみ許可する
こうすれば、割込み要求した回路にのみアクセス許可できるので、厳密な保護が可能になる。
【００７３】
また、REG_WORLDレジスタ２２が複数bit有することは、図１２のようにマイコン１００が安全系アプリがアクセスする周辺回路を複数、設けた場合に有効である。例えば、安全系アプリに安全系アプリ１，安全系アプリ２の２種類があり、安全系アプリ１は周辺回路Ａに、安全系アプリ２は周辺回路Ｃにアクセスするものとする。
【００７４】
この場合、保護割込みコントローラ１２は、周辺回路Ａが割り込みした場合はREG_WORLDレジスタ２２を01、周辺回路Ｃが割り込みした場合はREG_WORLDレジスタ２２を10、に設定する。
【００７５】
保護ブリッジ３５は、例えば以下のようにアクセスを制御する。
00：周辺回路Ａ、Ｃへのアクセスを禁止する
01：周辺回路Ａへのアクセスを許可する
10：周辺回路Ｃへのアクセスを許可する
こうすれば、安全系アプリが複数種類あっても、プロセッサ１４が実行する安全系アプリに応じて周辺回路へのアクセスを制御できる。
【符号の説明】
【００７６】
１１    保護状態コントローラ
１２    保護割込みコントローラ
１３    割込みコントローラ
１４    プロセッサ
２１    保護ブリッジ
２２    REG_WORLDレジスタ
１００  マイコン
【図１】
2014074995.tif 000003
【図２】
2014074995.tif 000004
【図３】
2014074995.tif 000005
【図４】
2014074995.tif 000006
【図５】
2014074995.tif 000007
【図６】
2014074995.tif 000008
【図７】
2014074995.tif 000009
【図８】
2014074995.tif 000010
【図９】
2014074995.tif 000011
【図１０】
2014074995.tif 000012
【図１１】
2014074995.tif 000013
【図１２】
2014074995.tif 000014