(57)【要約】【課題】アクセス違反が生じてもプログラムの実行を継続可能な情報処理装置を提供すること。【解決手段】メモリに記憶された複数のアプリを実行するＣＰＵ１１と、各アプリ毎にメモリへのアクセスを許可又は禁止するかの許否情報３１がアドレスに対応づけて登録されているアクセス監視手段２２と、を有する情報処理装置１００であって、禁止されたアクセスを前記アクセス監視手段が検出した場合、該アクセスのアドレスに記憶されたデータを、退避領域に退避するデータ退避手段３３と、アドレスへのアクセスが許可されるように許否情報を変更する許否情報変更手段３２と、ＣＰＵがアドレスにアクセスした後、アクセス先のデータをバックアップ領域にバックアップする手段３４と、バックアップ領域のデータを、データに対応づけられているメモリのアドレスに復帰することを特徴とする。【選択図】図２
2014137734.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶された複数のアプリのそれぞれを繰り返し実行するＣＰＵと、
メモリへのアクセスを許可又は禁止するかを規定する許否情報が、各アプリのデータが記憶されているアドレスに対応づけて登録されているメモリアクセス監視手段と、を有する情報処理装置であって、
アプリを実行するＣＰＵによる禁止されたメモリアクセスを前記メモリアクセス監視手段が検出した場合、ＣＰＵがメモリアクセスしたアドレスに記憶されたデータを、前記アドレスと対応づけてメモリから退避領域に退避するデータ退避手段と、
前記アドレスへのメモリアクセスが許可されるように前記許否情報を変更する許否情報変更手段と、
禁止されたメモリアクセスを行ったアプリを実行するＣＰＵが前記アドレスにメモリアクセスした後、メモリアクセスした前記アドレスのデータを前記アドレスに対応づけてメモリからバックアップ領域にバックアップするバックアップ手段と、を有し、
前記バックアップ手段は、ＣＰＵが禁止されたメモリアクセスを行ったアプリを次に実行する前に、前記バックアップ領域のデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰する、ことを特徴とする情報処理装置。
【請求項２】
ＣＰＵが実行するアプリを切り替える毎に、前記退避領域にデータが退避されているか否かが判断され、
データが退避されている場合、前記バックアップ手段は、ＣＰＵが禁止されたメモリアクセスを行った前記アドレスのデータをメモリから前記バックアップ領域にバックアップし、
前記アドレスに対応づけて前記退避領域に退避されているデータを、メモリの前記アドレスに復帰するデータ復帰手段を有する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記バックアップ領域はアプリ毎に設けられており、
ＣＰＵが実行するアプリを切り替える毎に、次に実行するアプリを過去にＣＰＵが実行した際にデータが前記バックアップ領域にバックアップされたか否かが判断され、
データがバックアップされている場合、前記データ退避手段が、前記バックアップ領域に登録されている前記アドレスのデータをメモリから前記退避領域に退避した後、
前記バックアップ手段は、次に実行するアプリの前記バックアップ領域にバックアップされているデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰する、
ことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記バックアップ領域はアプリ毎に設けられており、
前記メモリアクセス監視手段が、アプリを実行するＣＰＵによる禁止されたメモリアクセスを検出した場合、禁止されたメモリアクセスを行った時にＣＰＵが実行していたアプリのデータが前記バックアップ領域にバックアップされているか否かが判断され、
データがバックアップされている場合、前記データ退避手段が、前記バックアップ領域に登録されている前記アドレスのデータをメモリから前記退避領域に退避した後、
前記バックアップ手段は、現在、実行されているアプリの前記バックアップ領域にバックアップされているデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰し、
前記許否情報変更手段は、前記アドレスへのメモリアクセスが許可されるように前記許否情報を変更する、
ことを特徴とする請求項１又は２記載の情報処理装置。
【請求項５】
アプリによる前記メモリアクセスは、メモリへのデータライトである、
ことを特徴とする請求項１〜３いずれか１項記載の情報処理装置。
【請求項６】
メモリに記憶された複数のアプリのそれぞれを繰り返し実行するＣＰＵと、
メモリへのアクセスを許可又は禁止するかを規定する許否情報が、各アプリのデータが記憶されているアドレスに対応づけて登録されているメモリアクセス監視手段と、を有する車両の電子制御装置であって、
アプリを実行するＣＰＵによる禁止されたメモリアクセスを前記メモリアクセス監視手段が検出した場合、ＣＰＵがメモリアクセスしたアドレスに記憶されたデータを、前記アドレスと対応づけてメモリから退避領域に退避するデータ退避手段と、
前記アドレスへのメモリアクセスが許可されるように前記許否情報を変更する許否情報変更手段と、
禁止されたメモリアクセスを行ったアプリを実行するＣＰＵが前記アドレスにメモリアクセスした後、メモリアクセスした前記アドレスのデータを前記アドレスに対応づけてメモリからバックアップ領域にバックアップするバックアップ手段と、を有し、
前記バックアップ手段は、ＣＰＵが禁止されたメモリアクセスを行ったアプリを次に実行する前に、前記バックアップ領域のデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰する、ことを特徴とする電子制御装置。
【請求項７】
メモリに記憶された複数のアプリのそれぞれを繰り返し実行するＣＰＵと、
メモリへのアクセスを許可又は禁止するかを規定する許否情報が、各アプリのデータが記憶されているアドレスに対応づけて登録されているメモリアクセス監視手段と、を有する情報処理装置に、
アプリを実行するＣＰＵによる禁止されたメモリアクセスを前記メモリアクセス監視手段が検出した場合、ＣＰＵがメモリアクセスしたアドレスに記憶されたデータを、前記アドレスと対応づけてメモリから退避領域に退避するデータ退避ステップと、
前記アドレスへのメモリアクセスが許可されるように前記許否情報を変更する許否情報変更ステップと、
禁止されたメモリアクセスを行ったアプリを実行するＣＰＵが前記アドレスにメモリアクセスした後、メモリアクセスした前記アドレスのデータを前記アドレスに対応づけてメモリからバックアップ領域にバックアップするバックアップステップと、
ＣＰＵが禁止されたメモリアクセスを行ったアプリを次に実行する前に、前記バックアップ領域のデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰するステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ保護装置を備えた情報処理装置に関する。
【背景技術】
【０００２】
異なるプログラムが１つのマイコンに搭載された場合、各プログラムが同じメモリを共有する場合がある。各プログラムが他のプログラムが記憶されているメモリの領域にアクセスすることを防止するため、メモリ保護装置が設けられることがある。メモリ保護装置には、各プログラムがアクセス可能なアドレス範囲が登録されており、ＣＰＵがアクセスするアドレスはメモリ保護装置により検査され、各プログラムが別のプログラムの領域の命令を読み出したりデータを書き込むことを防止している。
【０００３】
図１は、メモリ保護装置を模式的に説明する図の一例である。メモリの各領域にプログラムＡの命令、データ、プログラムＢの命令、データが格納されている。ＣＰＵがプログラムＡを実行する際、メモリ保護装置にはプログラムＡのデータ領域と命令領域へのアクセスだけを許可する保護情報が設定されている。したがって、プログラムＡがプログラムＢの命令やデータを破壊したり読み出すことを防止できる。
【０００４】
このようなメモリ保護装置において、プログラムＡがプログラムＢ領域へのアクセスを許容する技術が考えられている（例えば、特許文献１参照。）。特許文献１には、十分にデバッグされたプログラムの命令フェッチアクセスにおいて命令メモリ空間の保護を選択的に無効化するデータ処理装置が開示されている。特許文献１は、保護を無効化することで保護情報の書き換えに要する処理量を削減することを図っている。
【０００５】
しかしながら、特許文献１のようにアクセスを許可してしまうだけでは、別のプログラムの命令やデータを読み出す可能性があることを否定できない。また、書き込み命令であれば、命令やデータを破壊するおそれさえある。このため、メモリ保護装置は有効な状態を維持することが好ましい。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2009-140256号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、メモリ保護装置は、許可されていない領域へのアクセスを検出した場合、一般保護例外を発生させ、ＣＰＵはこの後、例外処理を実行するためアクセス違反を生じさせた命令は破棄されてしまう。つまり、メモリ保護装置により意図しないデータや命令の破壊は避けられるが、アクセス違反したプログラムの実行も制限されるという問題がある。したがって、メモリ保護装置は有効なまま、アクセス違反を生じさせてもプログラムの実行は許容する技術があればプログラムの実行の柔軟性が向上すると考えられる。
【０００８】
本発明は、上記課題に鑑み、アクセス違反が生じてもプログラムの実行を継続可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、メモリに記憶された複数のアプリのそれぞれを繰り返し実行するＣＰＵと、各アプリ毎にメモリへのアクセスを許可又は禁止するかの許否情報がアドレスに対応づけて登録されているメモリアクセス監視手段と、を有する情報処理装置であって、アプリを実行するＣＰＵによる禁止されたメモリアクセスを前記メモリアクセス監視手段が検出した場合、ＣＰＵがメモリアクセスしたアドレスに記憶されたデータを、前記アドレスと対応づけてメモリから退避領域に退避するデータ退避手段と、前記アドレスへのメモリアクセスが許可されるように前記許否情報を変更する許否情報変更手段と、禁止されたメモリアクセスを行ったアプリを実行するＣＰＵが前記アドレスにメモリアクセスした後、メモリアクセスした前記アドレスのデータを前記アドレスに対応づけてメモリからバックアップ領域にバックアップするバックアップ手段と、を有し、前記バックアップ手段は、ＣＰＵが禁止されたメモリアクセスを行ったアプリを次に実行する前に、前記バックアップ領域のデータを、前記バックアップ領域のデータに対応づけられているアドレスに復帰する、ことを特徴とする。
【発明の効果】
【００１０】
アクセス違反が生じてもプログラムの実行を継続可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】メモリ保護装置を模式的に説明する図の一例である。
【図２】本実施例のマイコンの概略的な動作を説明する図の一例である。
【図３】マイコンの概略構成図の一例である。
【図４】保護情報を模式的に説明する図の一例である。
【図５】マイコンが実行するプログラムを時系列に示す図の一例である。
【図６】ＯＳの機能ブロック図の一例である。
【図７】退避処理を模式的に説明する図の一例である。
【図８】バックアップ処理を模式的に説明する図の一例である。
【図９】データ復帰処理を模式的に説明する図の一例である。
【図１０】データの退避・バックアップ・復帰の一連の処理の手順を示すフローチャート図の一例である。
【図１１】データ復帰処理の動作を模式的に示す図の一例である（実施例２）。
【図１２】データの退避・バックアップ・復帰の一連の処理の手順を示すフローチャート図の一例である（実施例２）。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら説明する。しかしながら、本発明の技術的範囲が、本実施の形態に限定されるものではない。
【実施例１】
【００１３】
図２は、本実施例のマイコンの概略的な動作を説明する図の一例である。図２（ａ）に示すように、マイコンはアプリケーションＡ，Ｂ、Ｃ（以下、単にアプリという）をＡＢＣの順に実行することを繰り返している。図２（ａ）のＩ〜IIIは、図２（ｂ）〜（ｄ）の処理Ｉ〜IIIに対応している。
【００１４】
Ｉ．退避処理
(i)ＣＰＵがアプリＡを実行中に、データ領域へのアクセス違反（書き込み）が発生した。ＣＰＵは割り込みによりメモリアクセス違反を検出し、例えばＩＳＲ（Interrupt Service Routine：割り込みサービスルーチン）を実行する。
(ii)ＩＳＲはＣＰＵがアクセス違反を生じたアドレスをレジスタ（プログラムカウンタ）などから読み出し、アドレスに記憶されているデータを退避用データ領域２４に退避する。また、アプリＡのアプリＢ領域へのアクセスが許可される。
(iii)退避するとＩＳＲからアプリＡに処理が戻り、ＣＰＵはアクセス違反（書き込み）が発生した命令から実行を再開する。図の例では、アプリＡはアプリＢ領域にデータを書き込む。したがって、アクセス違反が生じてもアプリＡが処理を継続できる。
【００１５】
II．バックアップ処理
(i)アプリＡの実行が完了すると、ＯＳ（Operating System）の処理に移り、ＯＳはアプリＢ領域のデータをデータバックアップ領域２３にバックアップする。
(ii)また、ＯＳは退避用データ領域２４に退避したアプリＢのデータをアプリＢ領域に復帰する（書き戻す）。これで、アプリＢはアプリＡがアクセス違反を生じさせても影響を受けることなく実行される。
【００１６】
III．復帰処理
(i)  次の周期でＣＰＵがアプリＡを実行する前に、ＯＳの処理に移る。ＯＳはアプリＢ領域に記憶されているデータを退避用データ領域２４に退避する。
(ii)ＯＳはアプリＡのためにバックアップしたデータバックアップ領域２３のデータをアプリＢ領域に復帰する（書き戻す）。これにより、アプリＢ領域にアプリＡのデータが記憶された状態になり、アプリＡがこのデータを利用することが可能になる。
【００１７】
このように、本実施例のマイコンは、メモリ保護装置によりアクセス違反が発生しても、他のプログラムの実行に与える影響を抑制しながら、アクセス違反を発生させたプログラムの処理を継続することができる。
【００１８】
〔構成例〕
図３（ａ）は、マイコンの概略構成図の一例を示す。マイコン１００はシステムバスＢ１に接続された、ＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、ＩＮＴＣ１４、ＷＤＴ１５、及び、ＤＭＡＣ１６を有している。この他、マイコン１００はタイマ、ＵＡＲＴなどの各種のＩ／Ｏ、電源回路、他のマイコンと通信するためのＣＡＮ（Controller Area  Network）コントローラなどの通信装置など、マイコンに一般的な構成を有している。
【００１９】
マイコン１００は、ＥＣＵ（Electronic  Control  Unit：電子制御装置）に搭載されることが想定されているがその用途は車両に限定されない。車載されるＥＣＵには、その主要な機能により、エンジンＥＣＵ、ブレーキＥＣＵ、ハイブリッドＥＣＵ、パワーマネージメントＥＣＵ、ボディＥＣＵ、ナビゲーションＥＣＵ（ＡＶ・情報処理ＥＣＵ）、ゲートウェイＥＣＵ等の種類がある。本実施例のマイコン１００はＥＣＵの機能の違いに影響されず搭載されることが可能である。また、複数の機能が１つに統合されたＥＣＵにマイコン１００を搭載してもよい。また、１つのＥＣＵが複数のマイコンを搭載していてもよい。
【００２０】
ＣＰＵ１１は、ＲＯＭ１３に記憶されたプログラムを実行することでマイコン全体を制御する。ＲＡＭ１２にはプログラムやデータが展開され、ＲＡＭ１２はＣＰＵ１１がアクセスする作業メモリになる。また、ＲＯＭ１３にはプログラムの他、プラットホームが記憶されている。プラットホームは、例えばＯＳやデバイスドライバなどである。ＯＳとしては、ＯＳＥＫ（Open system together with interfaces for automotive electronics）、ＡＵＴＯＳＡＲ（AUTomotive Open System Architecture） ＯＳなどのリアルタイムＯＳがあるが、これらに限定されるものではない。
【００２１】
ＩＮＴＣ１４は割込みマスク・マスクの解除などの設定が可能なレジスタと割込み要求が設定されるレジスタなどを有し、レジスタを監視して、周辺機器からの割り込み要求を割込みの優先順位に基づき調停してＣＰＵ１１に通知する。これによりＣＰＵ１１は、例えばＩＳＲを実行して、割込みした周辺機器に応じて定められている処理を行う。本実施例では例外発生も割り込みの一態様として説明する。
【００２２】
ＷＤＴ１５は、動作クロックをカウントして計測した時間が予め定められたリセット時間に達すると（オーバーフローすると）、異常を検出する回路である。ＷＤＴ１５がオーバーフローすると、例えばマイコン１００がリセットされるなどのフェールセーフが行われる。ＤＭＡＣ１６は、ＲＡＭ１２と周辺回路の間やＲＡＭ１２内で、ＣＰＵ１１を介することなくデータを転送する。
【００２３】
図３（ｂ）はＣＰＵ１１とメモリ２００を模式的に説明する図の一例である。組み込み系のソフトウェアでは、一般に開発者などはプログラムを開発する際に、ＯＳ、アプリをどのアドレスに割り当てるかを設計している。マイコン１００が起動するとブートローダがＲＯＭからロードモジュールを読み出して予め定められたＲＡＭのアドレスに記憶する。図はアドレス空間全体を示しているので、ＲＡＭの他、ＲＯＭ、Ｉ／Ｏ空間も含まれている。このアドレス空間をメモリ２００と称することにする。システム領域にはＯＳなどのプラットホームが配置され、アプリＡ〜Ｃ領域にはアプリＡ〜Ｃの命令とデータが記憶される。
【００２４】
ＣＰＵ１１はＰＣ（プログラムカウンタ）２１とメモリ保護装置２２を有している。ＰＣ２１はＣＰＵ１１が命令フェッチでアクセスするアドレスが格納されている。メモリ保護装置２２には保護情報３１が設定されており、アプリＡからシステム領域・アプリＢ領域・アプリＣ領域にアクセスすることが原則的に禁止されている。アプリＢ，Ｃについても同様である。
【００２５】
マイコン１００が実行するアプリは様々であり、どのようなアプリが１つのマイコン１００で実行されるかはＥＣＵや車種によって異なるし、車両の開発世代と共に変化しうる。一例としては、例えば、パーキング制御、接近警報制御、照合アプリ、エンジンやモータ（原動力）の起動制御、ゲートウェイ制御などがある。パーキング制御はパーキング切替機構のアンロック状態とロック状態を切り替えるアプリである。接近警報制御はモータ走行時などに車の発進から約２５〔km/h〕に至るまでの速度域において、自動で警報音を出力するアプリである。照合アプリは電子キーのＩＤを照合して一致した場合にドアのアンロックや原動力の始動を許可するアプリである。起動制御は所定の手順でリレーをＯＮするなどして電源状態を管理したり原動力を起動させるアプリである。ゲートウェイ制御は異なるネットワーク間でパケットの転送を行うアプリである。
【００２６】
〔保護情報〕
図４は保護情報３１を模式的に説明する図の一例である。保護情報３１は、いくつかの領域毎にアクセス権が設定できるようになっている。図では５つの領域があるが、それぞれシステム領域、未使用領域、アプリＡ領域、アプリＢ領域、アプリＣ領域、に対応している。領域毎に、「先頭アドレス」、「サイズ」、モード毎の「命令フェッチ」、「データリード」、「データライト」の各項目を有する。なお、メモリ保護装置２２にこのようなラベルが付与されているわけではなく、メモリ保護装置２２のレジスタにこれらの値を設定できるようになっている。
【００２７】
「領域番号」は、アドレス空間をいくつかの領域に区分した場合に領域を識別するための識別情報である。メモリ保護装置２２（保護情報３１）では、アプリが割り当てられる領域に対し、ＯＳ等が予め指示されているパラメータに従ってアクセスの許否を設定する。また、この設定はマイコンの起動中に変更可能である。
「先頭アドレス」は領域が始まるアドレスを示し、「サイズ」は領域の容量を示す。「命令フェッチ」はその領域からの命令フェッチが許可されているか否かを示し、「データリード」はその領域からのデータの読み出しが許可されているか否かを示し、「データライト」はその領域へのデータの書き込みが許可されているか否かを示す。「モード」の特権モードとユーザモードはＣＰＵ１１の動作モードであり、特権モードは、ＣＰＵ１１がシステムを実行する動作モードであり、ユーザモードは、アプリケーションを実行する動作モードである。一般に、ＯＳのシステム領域にアクセスできるのはＯＳだけである。
【００２８】
図４（ａ）はアプリＡの実行時を想定したものである。例えば、領域１はシステム領域なので、領域１は特権モードでのみ命令フェッチ、リード及びライトが許可されている。ＣＰＵ１１がアプリＡを実行する場合、ＯＳは領域３のユーザモードの命令フェッチ、データリード及びデータライトを許可し、領域４、５のユーザモードの命令フェッチ及びデータライトを禁止する。これにより、アプリＡがアプリＢ領域、Ｃ領域から命令フェッチしたり、アプリＢ領域、Ｃ領域にデータライトすることを禁止できる。
【００２９】
本実施例では、メモリ保護装置２２が、アプリＡが領域４（領域５でもよい）にデータライトすることを検出し、ＯＳが例外処理でデータライトするアドレスのデータを退避し、後にＯＳがメモリに復帰させる。このため、少なくともデータライトが禁止される。データリードについては、アプリＡが、データが復帰された領域４からデータを読み取る必要があるので、禁止しなくてよい。しかし、実施例２にて説明するように、禁止しておいて、例外処理の中でＯＳが読み取るための処理を行ってもよい。命令フェッチについてはアプリＡがアプリＢの命令をフェッチすることは禁止すべきなので、許可されない。
【００３０】
同様に、アプリＢが実行される場合は図４（ｂ）のようになり、アプリＣが実行される場合は図４（ｃ）のようになる。なお、図４（ａ）（ｂ）では領域１，２は省略した。
【００３１】
また、設定は一例であり、アプリ毎に設定を変えてもよい。例えば、ＡＳＩＬ（機能安全の指標であり高い安全対策が施されたアプリが高い値を有する）が低いものが実行される際は、データリードを含む全てのアクセスを禁止する。また、車両メーカ以外の第三者が開発したアプリについてはデータリードを含む全てのアクセスを禁止する。こうすることで信頼性に応じてメモリ保護することが可能になる。
【００３２】
〔データの退避・バックアップ・復帰〕
図５はマイコン１００が実行するプログラムを時系列に示す図の一例である。マイコン１００はタイマなどの割り込みを利用して定期的にアプリＡ，Ｂ，Ｃを連続に実行し、次回のタイマ割込みでアプリＡ，Ｂ，Ｃを連続に実行することを繰り返している。アプリＣの実行が完了してからアプリＡの実行が開始されるまでの間はアイドル時間（ＣＰＵ１１が何も命令を実行しないか、ＮＯＰ（Ｎｏ Ｏｐｅａｒａｔｉｏｎ）という処理を伴わない命令を実行している）である。
【００３３】
ＯＳ２５は、例えば設定されているスケジュールに従ってアプリＡ〜Ｃを順番に実行する。または、周期的にタイマが割り込むとアプリＡ〜Ｃが実行待ちになり、優先度（アプリＡ＞Ｂ＞Ｃ）に応じてアプリＡ〜Ｃをリソースに割り当てるなどして順番に実行してもよい。このように、ＯＳは現在実行中のアプリや次に実行するアプリをスケジュールやアドレスで管理している。
【００３４】
図５（ａ）はメモリへのアクセス違反がない場合に実行されるアプリの動作順を示す。アプリがメモリにアクセス違反しなければ、ＯＳに制御が移ることがあっても本実施形態の処理は行われない。
【００３５】
アプリがメモリにアクセス違反した場合、アプリＡ〜Ｃの実行中にＣＰＵ１１がデータの退避・バックアップ・復帰を行うプログラムを実行する。このプログラムは本実施例ではＯＳに含まれるとして説明する。図５（ｂ）はアプリＡの実行中にメモリへのアクセス違反が発生した場合に実行されるプログラムを示す。図の黒い部分が、ＣＰＵがＯＳを実行する時間帯である。アプリＢ，アプリＣでメモリへのアクセス違反が発生すればアプリＢ，アプリＣの実行中にＯＳが実行される。また、アプリＡ〜Ｃのいずれでメモリへのアクセス違反が生じるかに関係なく、アプリＡ〜Ｃの切り替え時にＯＳが実行される。
【００３６】
図６は、ＯＳの機能ブロック図の一例を示す。ＯＳ２５は、保護情報変更部３２、データ退避部３３、データバックアップ部３４、データ復帰部３５、判断部３６及びＩＳＲ３７を有している。上記のように、これらはＯＳ２５の機能である必要はなく、マイコン１００が有していればよい。保護情報変更部３２は、ＣＰＵ１１がシステム、及び、アプリＡ〜Ｃを実行する毎に図４にて説明した保護情報３１を変更する。また、アクセス違反が生じた場合、例外的に、禁止されている領域へのデータの書き込みを許可するよう保護情報３１を変更する。
【００３７】
ＩＳＲ３７はメモリ保護装置２２がアクセス違反を検出した場合にＣＰＵ１１が実行するプログラムである。ＩＳＲ３７はＰＣ２１を含むＣＰＵ１１のレジスタなどをスタックに保存しておく。なお、通常処理と例外処理で別のレジスタが用意されているＣＰＵ１１ではこのような保存は不要になる。
【００３８】
データ退避部３３はアプリＡ領域、アプリＢ領域、アプリＣ領域、のいずれかからデータを読み出して退避用データ領域２４に退避する。データのアドレスはＰＣ２１に記憶されているか又はＩＳＲ３７が退避している。退避用データ領域２４にはこのアドレスに対応づけてデータが記憶される。また、アドレスとデータの組ごとにフラグＦが登録される。フラグＦは退避用データ領域２４にデータが退避されている場合にＯＮとなり、復帰されるとＯＦＦになる。なお、退避用データ領域２４はＲＡＭに確保されている領域でありアプリＡ〜Ｃから離れているためアクセス違反のおそれがない。
【００３９】
データバックアップ部３４は、アプリＡ領域、アプリＢ領域、アプリＣ領域、のいずれかからデータを読み出し、データバックアップ領域２３にバックアップする。データバックアップ領域２３はアプリ毎に設けられている。例えば、アプリＡがアプリＢ領域に書き込んだデータを、アプリＡのデータバックアップ領域２３にバックアップする。また、データバックアップ部３４は、データがバックアップされたアプリが実行される前にバックアップしたデータを対応づけられているアドレスに復帰する。
【００４０】
データ復帰部３５は退避用データ領域２４のデータを、データに対応づけられているメモリのアドレスに復帰する。
【００４１】
判断部３６は、退避用データ領域とデータバックアップ領域のフラグＦを参照して、データのバックアップ及び復帰が必要か否かを判断して、データバックアップ部３４，データ復帰部３５に通知する。
【００４２】
〔処理例〕
図７〜９はデータの退避・バックアップ・復帰の一連の処理を模式的に説明する図の一例である。
Ｉ．退避処理（図７）
(i)ＣＰＵ１１がアプリＡを実行中に、アプリＢのデータ領域へ書き込みし、メモリ保護装置２２が例外を発生させる。ＣＰＵ１１は割り込みによりＩＳＲ３７を実行する。
(ii)データ退避部３３はＣＰＵ１１がアクセス違反を生じたアドレスをＰＣ２１から読み出し、該アドレスのデータをメモリ２００から読み出す。そして、アドレスとデータを対応づけて退避用データ領域２４に退避する。フラグＦはＯＮになる。
【００４３】
また、保護情報変更部３２は、アプリＡがアプリＢ領域にデータを書き込めるように保護情報３１を変更する。すなわち、領域４のデータライトを許可する。
(iii) データを退避するとＯＳ２５からアプリＡに処理が戻り、ＣＰＵ１１はアプリＡのアクセス違反（書き込み）が発生した命令から実行を再開する。図の例では、アプリＡはアプリＢのデータ領域にデータを書き込む。したがって、アクセス違反が生じてもアプリＡが処理を継続できる。
【００４４】
また、アプリＡがアクセス違反した場合に、直接、退避用のメモリにデータを書き込む技術も検討されるが、この場合、アプリＡの書き込み先のアドレス（ＰＣ２１に記憶されている）を変更しなければならない。しかし、一般のマイコン１００では、ＰＣ２１の値を任意に変えることは容易でない。また、退避用のメモリに書き込んだ後は、アプリＡがデータリードする毎に退避したデータが書き込まれたアドレスと一致するか否かを判定する必要があり、オーバーヘッドが大きくなる。
【００４５】
II．バックアップ処理（図８）
(i)アプリＡの実行が完了すると、アプリＡは例えばシステムコールなどの手法でＯＳ２５を呼び出す。これにより、判断部３６がデータのバックアップが必要か否かを判断する。退避用データ領域２４のフラグＦがＯＮであることは、アプリの領域を超えてデータが書き込まれたことを意味するので、判断部３６はフラグＦを参照して、バックアップが必要か否かを判断する。バックアップが必要な場合、データバックアップ部３４は退避用データ領域２４のアドレスを読み出し、該アドレスのデータをメモリから読み出して、アドレスに対応づけてアプリＡのデータバックアップ領域２３にバックアップする。退避用データ領域２４に複数のデータがある場合は、対応するアドレスの全てのデータをバックアップする。
【００４６】
データバックアップ領域２３はＲＡＭに確保されている領域でありアプリＡ〜Ｃから離れているためアクセス違反のおそれがない。なお、データバックアップ領域２３と退避用データ領域２４を連続した領域に設けてもよい。
(ii)  次に、データ復帰部３５は、退避用データ領域２４に退避したアプリＢのデータを、対応づけられているアドレスに（アプリＢ領域）に復帰する。また、データ復帰部３５はフラグＦをＯＦＦに設定する。このように、アプリＡがアプリＢ領域にデータを書き込んでも、アプリＢはアプリＢ領域のデータを使用できる。
【００４７】
保護情報変更部３２は、変更した保護情報３１を元に戻す。すなわち、領域４のデータライトを禁止する。なお、保護情報変更部３２は、アプリＢの実行用に保護情報３１を変更する。すなわち、領域３の命令フェッチ、データライトを禁止し、領域４の命令フェッチ、データライトを許可する（データリードは許可のまま）。
【００４８】
III．データ復帰処理（図９）
(i)  次の周期でＣＰＵ１１がアプリＡを実行する場合、判断部３６はアプリＡのデータバックアップ領域２３のフラグを参照して、過去の周期でバックアップしたデータの復帰が必要か否（フラグＦがＯＮか否か）を判断する。復帰が必要な場合、データ退避部３３はデータバックアップ領域２３に登録されたメモリのアドレスからデータを読み出し、退避用データ領域２４に退避する。また、フラグＦをＯＮに設定する。
(ii)  データバックアップ部３４はデータバックアップ領域２３のデータを、データに対応づけられているメモリのアドレスに記憶する。保護情報３１は、アプリＡの実行用になるのでアプリＡが領域４のデータリードすることは許可される。よって、アプリＡは自身が書き込んだデータを読み出すことができる。
【００４９】
なお、図５（ｂ）によれば、アプリＢの後、アプリＣが実行されるが、アプリＢでアクセス違反が生じなければ、退避用データ領域２４のフラグＦはＯＦＦなので退避用データ領域２４からメモリ２００へのデータの復帰は行われない。また、データバックアップ領域２３のフラグＦは、アプリＡのフラグがＯＮでもアプリＣ（次に実行される）のフラグＦはＯＮでないので、データバックアップ領域２３からメモリ２００へのデータの復帰は行われない。
【００５０】
〔動作手順〕
図１０（ａ）（ｂ）は上記の手順を説明するフローチャート図の一例である。図１０（ａ）は書き込みによる例外の発生時に実行され、図１０（ｂ）は、例えば処理がアプリからＯＳ２５に切り替わる毎に実行される。
【００５１】
図１０（ａ）に示すように、書き込み命令の実行による例外が発生すると（Ｓ１０）、ＩＳＲ３７は例外が発生したアドレスのデータを退避用データ領域２４に退避する（Ｓ２０）。
【００５２】
次に、保護情報変更部３２が実行中のアプリがデータライトできるように保護情報３１を変更する（Ｓ３０）。この後、処理はアプリに戻り、アプリは例外が発生したアドレスにデータを書き込む。
【００５３】
図１０（ｂ）では、ＯＳ２５はまずアプリを切り替える処理を行うか否かを判定する（Ｓ１１０）。アプリを切り替えるタイミングでない場合、処理は終了する。
【００５４】
アプリを切り替えるタイミングの場合（Ｓ１１０のＹｅｓ）、まず、判断部３６は退避用データ領域２４にデータが退避されているか否かを判定する（Ｓ１２０）。
【００５５】
データが退避されている場合（Ｓ１２０のＹｅｓ）、データバックアップ部３４は退避用データ領域２４のアドレスが指示するデータをデータバックアップ領域２３にバックアップする（Ｓ１３０）。
【００５６】
次に、データ復帰部３５は退避用データ領域２４のデータを、データに対応づけられているアドレスに復帰する（Ｓ１４０）。
【００５７】
この場合、直前のアプリが例外を発生させたため保護情報３１が変更されているので、保護情報変更部３２は保護情報３１のデータライトを禁止する（Ｓ１５０）。この後、処理はＳ１６０に移行する。
【００５８】
ステップＳ１２０で、データが退避されていない場合（Ｓ１２０のＮｏ）、判断部３６はデータバックアップ領域２３にこれから実行するアプリのデータがバックアップされているか否かを判定する（Ｓ１６０）。
【００５９】
データがバックアップされている場合（Ｓ１６０のＹｅｓ）、データ退避部３３はデータに対応づけられているアドレスのデータを退避用データ領域２４に退避する（Ｓ１７０）。
【００６０】
そして、データバックアップ部３４はデータバックアップ領域２３のデータを、データに対応づけられているアドレスに復帰する（Ｓ１８０）。
【００６１】
以上説明したように、本実施例のマイコン１００は、メモリ保護装置２２によりデータライトのアクセス違反を検出しても、アクセス違反を発生させたプログラムの処理を継続することができる。
【実施例２】
【００６２】
実施例１では、保護情報３１によりデータリードが許可されていたが、本実施例ではデータリードが禁止されている場合のマイコン１００について説明する。
【００６３】
図１１は、アプリＡが領域４（アプリＢ領域）をデータリードすることも禁止されている場合の「IIIデータ復帰処理」の動作を模式的に示す図の一例である。「Ｉ．退避処理」「II．バックアップ処理」は実施例１と同様でよい。
(i)  ＣＰＵ１１がアプリＡを実行中に、アプリＢのデータ領域から読み出し命令を実行し、メモリ保護装置２２が例外を発生させる。ＣＰＵ１１は割り込みによりＩＳＲ３７を実行する。
(ii)  判断部３６は、ＣＰＵ１１がアクセス違反を生じたアドレスをＰＣ２１から読み出し、データバックアップ領域２３に該アドレスのデータがバックアップされているか否かを判断する。バックアップされていない場合は、ＩＳＲ３７がアプリの実行を停止するなどの処理を行う。
【００６４】
バックアップされている場合は、アプリＡが実行を継続可能なので、データ退避部３３はデータバックアップ領域２３に登録されたアドレスのメモリ２００からデータを読み出し、退避用データ領域２４に退避する。また、フラグＦをＯＮに設定する。
(iii)  データバックアップ部３４はデータバックアップ領域２３のデータを、データに対応づけられているメモリのアドレスに復帰する。また、保護情報変更部３２は、アプリＡがアプリＢ領域にアクセスできるように、保護情報３１を書き換える。具体的には領域４のデータリードを許可する。このように、メモリ保護装置がアクセス違反を検出することで、アプリＡが読み出すデータがメモリ２００に復帰するので、ＯＳ２５は、アプリＡがバックアップされたデータへアクセスしたか否かを監視する必要がない。
【００６５】
本実施例のように例外処理の中で退避と復帰を行えば、アプリが切り替わる毎に、データバック領域からメモリにデータの復帰が必要か否を判断する必要がない。また、判断した際に復帰が必要でも（次に実行するアプリのフラグＦがＯＮでも）、データリードされなければ復帰しなくてよいので、処理負荷を低減できる。
【００６６】
図１２（ａ）〜（ｃ）は上記の手順を説明するフローチャート図の一例である。図１２（ａ）は図１０（ａ）と同様であり、図１２（ｂ）の同じ番号のステップは図１０（ｂ）のステップと同じである。図１２（ｃ）は、読み出し命令による例外が発生した場合に実行される。
【００６７】
図１２（ｃ）に示すように、読み出し命令の実行による例外が発生すると（Ｓ１１）、判断部３６はデータバックアップ領域２３に現在、実行しているアプリのデータがバックアップされているか否かを判定する（Ｓ１６０）。また、この判定で、ＣＰＵ１１がアクセス違反を生じたアドレスのデータが、データバックアップ領域２３にバックアップされているか否かを判断する。
【００６８】
データがバックアップされている場合（Ｓ１６０のＹｅｓ）、データ退避部３３はデータに対応づけられているアドレスのデータを退避用データ領域２４に退避する（Ｓ１７０）。
【００６９】
そして、データバックアップ部３４はデータバックアップ領域２３のデータを、データに対応づけられているアドレスに復帰する（Ｓ１８０）。
【００７０】
次に、保護情報変更部３２が実行中のアプリがデータリードできるように保護情報３１を変更する（Ｓ１９０）。この後、処理はアプリに戻り、アプリが、例外が発生したアドレスからデータを読み出す。
【００７１】
本実施例のマイコン１００は、各アプリのデータリードが禁止されている場合も、実施例1と同様に、データの退避・バックアップ・復帰を行うことが可能になる。
【符号の説明】
【００７２】
１１    ＣＰＵ
１２    ＲＡＭ
２２    メモリ保護装置
２３    データバックアップ領域
２４    退避用データ領域
２５    ＯＳ
１００  マイコン
２００  メモリ
【図１】
2014137734.tif 000003
【図２】
2014137734.tif 000004
【図３】
2014137734.tif 000005
【図４】
2014137734.tif 000006
【図５】
2014137734.tif 000007
【図６】
2014137734.tif 000008
【図７】
2014137734.tif 000009
【図８】
2014137734.tif 000010
【図９】
2014137734.tif 000011
【図１０】
2014137734.tif 000012
【図１１】
2014137734.tif 000013
【図１２】
2014137734.tif 000014