(57)【要約】【課題】メモリ干渉を検出する手段としてＭＰＵ等の専用のハードウェアを持たないマイコンで、ソフトウェアによるメモリ干渉を検出しようとする場合では、ソフトウェアの処理負荷、メモリ容量、検出速度が課題となる。【解決手段】データを保持するデータ補償手段を備えたメモリ制御装置において、前記データ補償手段を有効にした第一のメモリ領域にアクセスする第一のプログラム群と前記データ補償手段を無効にして第二のメモリ領域にアクセスする第二のプログラム群を有し，前記第二のプログラム群が前記第一のメモリ領域に書き込みを行った場合に発生する例外処理にて前記第二のプログラム群による前記第一のメモリ領域に対する侵害を検出する。【選択図】図１
2016177717.tif 000002
【特許請求の範囲】
【請求項１】
データを保持するデータ補償手段を備えたメモリ制御装置において、
前記データ補償手段を有効にした第一のメモリ領域にアクセスする第一のプログラム群と前記データ補償手段を無効にして第二のメモリ領域にアクセスする第二のプログラム群を有し，前記第二のプログラム群が前記第一のメモリ領域に書き込みを行った場合に発生する例外処理にて前記第二のプログラム群による前記第一のメモリ領域に対する侵害を検出することを特徴とするメモリ制御装置。
【請求項２】
前記第一のプログラム群と前記第二のプログラム群および前記第一のメモリ領域と前記第二のメモリ領域に分けて利用することを特徴とした請求項１に記載のメモリ制御装置。
【請求項３】
実行するプログラムが前記第一のプログラム群から前記第二のプログラム群へ移行した場合またはその逆に移行した場合において，前記データ補償手段の有効と無効を切り替えることを特徴とした請求項１に記載のメモリ制御装置。
【請求項４】
前記データ補償手段は、メモリのデータのエラーを訂正するＥＣＣ（Error Check and Correction）を行うことを特徴とする請求項１〜３の何れかに記載のメモリ制御装置。
【請求項５】
実行するプログラムがデータ補償手段を有効とした第一のプログラム群が使用するメモリ領域に対し、ＥＣＣを無効とした第二のプログラム群のメモリ領域に対するアクセスを例外処理を発生させることで検知するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアモジュール間におけるメモリアクセスの干渉検出に関するものである。
【背景技術】
【０００２】
本発明の従来技術として、特許文献１（特開２０１３−１７１４６７号公報）に記載のものがある。この特許文献１では、メモリに書き込みＮｏとして乱数とＣＲＣを持たせる事で、データを更新したアプリケーションを検出しデータの保証を行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１７１４６７
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のソフトウェアモジュールが存在するソフトウェアでは、機能安全等による要求により、ソフトウェアモジュール間で干渉がない事を求められることがある。ソフトウェアモジュール間でのメモリ干渉を検出する手段としてＭＰＵ（Ｍｅｍｏｒｙ  Ｐｒｏｔｅｃｔｉｏｎ  Ｕｎｉｔ）などのマイコンハードウェアによる方法や、ソフトウェアによるチェックサムやＣＲＣ演算、変数の冗長化などがある。ハードウェアによる検出では専用のハードウェアが必要となる事や、ソフトトウェアで検出する場合は処理負荷の増大、プログラムメモリ容量の増大、検出の応答遅れなどが課題となる。
【０００５】
ソフトウェアモジュール間でのメモリ干渉を検出する手段を、専用のハードウェアを持たないマイコンで実現しようとした場合、以下の課題がある。
【０００６】
上記特許文献１のデータ保証方法によると、ＣＲＣを使った検出を行っており、同値頻出が起こるため乱数を使った複雑な処理が必要となる。
【０００７】
ソフトウェアによるメモリ干渉の検出では、侵害された事を検出すべきソフトウェアモジュールが保護すべきメモリ領域を持つ場合、処理を開始する前に使用領域全体のチェックサムやＣＲＣの整合を確認する事で保護すべきソフトウェアのメモリ領域に対する意図しない書き換えの有無を判断できるが、メモリアクセス回数の増大や算出したＣＲＣ等の正否判定により、ソフトウェアの処理負荷を増加させることになる。
【０００８】
同様に、変数の冗長化により保護すべきメモリ領域を持つソフトウェアモジュールが、他のソフトウェアモジュールによるメモリ領域への侵害を検出する際も、メモリアクセス回数の増大やソフトウェアの処理負荷増大、メモリ使用量の増加を招く。
【０００９】
以上の事から、メモリ干渉を検出する手段としてＭＰＵ等の専用のハードウェアを持たないマイコンで、ソフトウェアによるメモリ干渉を検出しようとする場合では、ソフトウェアの処理負荷、メモリ容量、検出速度が課題となる。
【課題を解決するための手段】
【００１０】
上記課題を解決するために本発明は、データを保持するデータ補償手段を備えたメモリ制御装置において、前記データ補償手段を有効にした第一のメモリ領域にアクセスする第一のプログラム群と前記データ補償手段を無効にして第二のメモリ領域にアクセスする第二のプログラム群を有し，前記第二のプログラム群が前記第一のメモリ領域に書き込みを行った場合に発生する例外処理にて前記第二のプログラム群による前記第一のメモリ領域に対する侵害を検出することを特徴とする。
【００１１】
また前記第一のプログラム群と前記第二のプログラム群および前記第一のメモリ領域と前記第二のメモリ領域に分けて利用することが望ましい。
【００１２】
また、実行するプログラムが前記第一のプログラム群から前記第二のプログラム群へ移行した場合またはその逆に移行した場合において，前記データ補償手段の有効と無効を切り替えることが望ましい。
【００１３】
また、前記データ補償手段は、メモリのデータのエラーを訂正するＥＣＣ（Error Check and Correction）を行うことが望ましい。
【００１４】
なお、本発明のその他の解決手段は、実行するプログラムがデータ補償手段を有効とした第一のプログラム群が使用するメモリ領域に対し、ＥＣＣを無効とした第二のプログラム群のメモリ領域に対するアクセスを例外処理を発生させることで検知するメモリ制御方法である。
【発明の効果】
【００１５】
本発明の上記解決手段によれば、メモリアクセス時におけるソフトウェアモジュール間のメモリ干渉を、専用のハードウェアであるＭＰＵを実装しないマイコンにおいても、ハードウェアによる検出が可能となり、ソフトウェアで検出する方法に比べソフトウェアの処理負荷を低減できる。また、ソフトウェアで行うチェックサムやＣＲＣによる干渉検出では、効率よく検出を行う為に、保護する領域をまとまった領域で確保する必要があるが、メモリ読み出し毎にＥＣＣ機能により整合確認を行う為、まとまった領域を確保する必要がない。また、チェックサムやＣＲＣといったソフトウェアによる検知に対して、メモリを読み出したタイミングが侵害検知のタイミングとなるため、検出した際に影響範囲の特定が容易になり、侵害内容に合わせたフェールセーフ処理が容易にできる。
【図面の簡単な説明】
【００１６】
【図１】ソフトモジュールとメモリの関係
【図２】マイコン構成
【図３】侵害検出方法
【図４】侵害検出方法（例外処理）
【図５】メモリ領域の状態（正常）
【図６】メモリ領域の状態（異常）
【発明を実施するための形態】
【００１７】
以下、本発明の実施例について図面を用いて説明する。
【実施例１】
【００１８】
本実施例のメモリ制御装置は、データを保持するデータ補償手段を備えたメモリ制御装置において、前記データ補償手段を有効にした第一のメモリ領域にアクセスする第一のプログラム群と前記データ補償手段を無効にして第二のメモリ領域にアクセスする第二のプログラム群を有し，前記第二のプログラム群が前記第一のメモリ領域に書き込みを行った場合に発生する例外処理にて前記第二のプログラム群による前記第一のメモリ領域に対する侵害を検出することを特徴とするものである。
【００１９】
また前記第一のプログラム群と前記第二のプログラム群および前記第一のメモリ領域と前記第二のメモリ領域に分けて利用することが望ましい。また、実行するプログラムが前記第一のプログラム群から前記第二のプログラム群へ移行した場合またはその逆に移行した場合において，前記データ補償手段の有効と無効を切り替えることが望ましい。
また、前記データ補償手段は、メモリのデータのエラーを訂正するＥＣＣ（Error Check and Correction）を行うことが望ましい。
【００２０】
なお、本発明のその他の解決手段は、実行するプログラムがデータ補償手段を有効とした第一のプログラム群が使用するメモリ領域に対し、ＥＣＣを無効とした第二のプログラム群のメモリ領域に対するアクセスを例外処理を発生させることで検知するメモリ制御方法である。
これらの解決手段によれば、メモリアクセス時におけるソフトウェアモジュール間のメモリ干渉を、専用のハードウェアであるＭＰＵを実装しないマイコンにおいても、ハードウェアによる検出が可能となり、ソフトウェアで検出する方法に比べソフトウェアの処理負荷を低減できる。また、ソフトウェアで行うチェックサムやＣＲＣによる干渉検出では、効率よく検出を行う為に、保護する領域をまとまった領域で確保する必要があるが、メモリ読み出し毎にＥＣＣ機能により整合確認を行う為、まとまった領域を確保する必要がない。また、チェックサムやＣＲＣといったソフトウェアによる検知に対して、メモリを読み出したタイミングが侵害検知のタイミングとなるため、検出した際に影響範囲の特定が容易になり、侵害内容に合わせたフェールセーフ処理が容易にできる。
【００２１】
このように本実施例ではメモリの持つＥＣＣ機能の持つ誤り訂正符号による異常検出機能を使い、ソフトウェアモジュール毎にＥＣＣ機能の有効と無効とを切り替える事で、保護すべきメモリ領域に対するアクセス権を持たないソフトウェアモジュールからの意図しないアクセスを検出する。メモリ干渉の検出には、誤り訂正符号が書き込まれていないメモリに対するＥＣＣ機能による例外処理の発生を使い、保護すべきメモリ領域を持ち侵害された事を検出すべきソフトウェアモジュールに対しそれ以外のソフトウェアによるメモリ干渉を検出する事で、ソフトウェアで侵害検出を行うチェックサムやＣＲＣを用いた方法に対して低いソフトウェアの処理負荷で実現する。
【００２２】
これにより、メモリアクセス時におけるソフトウェアモジュール間のメモリ干渉を、専用のハードウェアであるＭＰＵを実装しないマイコンにおいても、ハードウェアによる検出が可能となり、ソフトウェアで検出する方法に比べソフトウェアの処理負荷を低減できる。
【００２３】
また、ソフトウェアで行うチェックサムやＣＲＣによる干渉検出では、効率よく検出を行う為に、保護する領域をまとまった領域で確保する必要があるが、メモリ読み出し毎にＥＣＣ機能により整合確認を行う為、まとまった領域を確保する必要がない。
チェックサムやＣＲＣといったソフトウェアによる検知に対して、メモリを読み出したタイミングが侵害検知のタイミングとなるため、検出した際に影響範囲の特定が容易になり、侵害内容に合わせたフェールセーフ処理が容易にできる。
【００２４】
図２は本実施例を適用するマイクロコンピュータの構成を示す図である。  
マイコン２０にはＩＯポート２５を備えており，ＩＯポート２５から入力した情報を基に所定の演算を行い，結果をポート２５から出力する機能を持つ。マイコン２０内のＣＰＵ２１では、ＲＯＭ２４に記憶したプログラムおよびデータに基づいて所定の演算を行う。また、演算に使用する情報を一時的に記憶するＲＡＭ  ２３を有しており、ＲＡＭ２３はデータを記憶する時に誤り訂正符号を記憶する領域を持つ。
【００２５】
ＣＰＵ２１とＲＡＭ２３の間にはＥＣＣ２２が配置されており，ＣＰＵ２１がＲＡＭ２３にデータを記憶するときもしくはＲＡＭ２３から記憶しているデータを読み出す時にＥＣＣ２２を介してデータの授受を行う。ＥＣＣ２２では、記憶するデータに対して誤り訂正符号を付加することで、ＣＰＵ２１へ受け渡す記憶した値の保証を行う。ＣＰＵ２１がデータの読み出しを行う時、ＥＣＣ２２は読み出したデータと誤り訂正符号との照合を行い、一致しない場合、すなわち、データ値が保障されない場合は、例外処理を発生させる。
【００２６】
ＣＰＵ２１の要求によりＥＣＣ２２がＲＡＭ２３へのアクセスを実施する時、ＥＣＣ２２で実施するＲＡＭ２３に対するデータの書き込み時に行う誤り訂正符号の付加と、データの読み出し時に行う読み出したデータと誤り訂正符号の照合と例外処理の発生させる機能は、ＣＰＵ２１によって有効と無効とを切り替える事ができる。
【００２７】
この、ＥＣＣ機能を無効とした状態で書き込みを行ったデータに対し、ＥＣＣ機能を有効にした状態で読み出しを行った際に発生する例外処理により、ソフトウェアモジュール間のメモリ干渉を検出する。
【００２８】
図１のように、ＲＡＭ１３は保護すべきメモリ領域を持つソフトウェアモジュールＡが使用するメモリであり、ソフトウェアモジュールＡとは独立したソフトウェアモジュールＢ  １２がデータの書き込みを行ってはならない。このソフトウェアモジュールＢのＲＡＭ１３への書き込みをメモリ干渉として検出する。
【００２９】
図３と図４のフローチャートでは、保護すべきメモリ領域を持つソフトウェアモジュールで実施する処理を処理Ａ（Ｓ１０２）、処理Ａとは独立したソフトウェアモジュールで実施する処理を処理Ｂ（Ｓ１０４）としたとき、処理Ａで使用するメモリに対する処理Ｂの干渉があったことを検出する流れを示した例である。
処理Ａを実施する前に実施する処理（Ｓ１０１）でＥＣＣ機能を有効とし、処理Ａ（Ｓ１０２）が終了する時、（Ｓ１０３）でＥＣＣ機能を無効とする。
従って、（Ｓ１０１）と（Ｓ１０３）の間で行われる処理Ａ（Ｓ１０２）のメモリアクセスについては、全て誤り訂正符号付きの処理となる。
一方で処理Ｂ（Ｓ１０４）を実施する際は、ＥＣＣ機能は有効としない状態で処理を行う。従って、処理Ｂ（１０４）でのメモリアクセスについては、全て誤り訂正符号無しのメモリアクセスとなる。
【００３０】
この時のメモリの状態は図５の状態となっている。処理Ａ（Ｓ１０２）が書き込んだ処理Ａ（Ｓ１０２）で書き込みを行うデータは誤り訂正符号が書き込まれた状態となり、処理Ｂ（Ｓ１０４）で書き込みを行ったデータは誤り訂正符号領域が不定な状態となる。
この時、処理Ａ（Ｓ１０２）が実施するメモリの読み出しは、自処理の中で書き込みを行ったメモリに対しては、誤り訂正符号が付加されているためＥＣＣ機能による例外処理は発生しない。
【００３１】
メモリ干渉発生の例として、ＣＰＵの異常やアドレスバスの異常により、処理Ａ（Ｓ１０２）が使用するデータ領域に、処理Ｂ（Ｓ１０４）が書き込みを行った場合、メモリ領域は図６の状態となる。
【００３２】
図６では処理Ａが使用するデータ領域に対して誤り訂正符号領域が不定となっている領域があり、この状態で処理Ａ（Ｓ１０２）がＥＣＣ有効状態で読み出しを実施すると、誤り訂正符号が付加されていないため、図４の例外処理が発生する。
図４の例外処理の発生は、処理Ａ（Ｓ１０２）で使用するメモリに対し意図しない更新が行われた事になり、処理Ａ（Ｓ１０２）に対する処理Ｂ（Ｓ１０４）のメモリ干渉を検知したことになる。
【符号の説明】
【００３３】
１１  ソフトウェアモジュールＡ
１２  ソフトウェアモジュールＢ
１３  ＲＡＭ
２０  マイクロコンピュータ
２１  ＣＰＵ
２２  ＥＣＣ
２３  ＲＡＭ
２４  ＲＯＭ
２５  ＩＯポート
【図１】
2016177717.tif 000003
【図２】
2016177717.tif 000004
【図３】
2016177717.tif 000005
【図４】
2016177717.tif 000006
【図５】
2016177717.tif 000007
【図６】
2016177717.tif 000008