(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、
エラーに対する信頼性が互いに異なる複数の物理メモリと、
前記ＣＰＵにより実行されて安全性が互いに異なる複数のプログラムからアクセスするために前記物理メモリに作成された共有メモリに関する情報が記録されている共有メモリ管理テーブルを記憶する記憶部と、
前記プログラムによる前記共有メモリへのアクセスを管理する共有メモリ管理部と、を備え、
前記共有メモリ管理テーブルは、前記共有メモリの信頼性に関する情報を含み、
前記共有メモリ管理部は、前記共有メモリ管理テーブルを参照して、前記共有メモリの信頼性と前記プログラムの安全性に対応する信頼性とを比較し、その比較結果に基づいて前記プログラムによる前記共有メモリへのアクセスを管理するメモリ管理システム。
【請求項２】
請求項１に記載のメモリ管理システムであって、
前記共有メモリ管理部は、
前記共有メモリの信頼性が前記プログラムの安全性に対応する信頼性よりも高いか同じである場合に、前記プログラムによる前記共有メモリへのアクセスを許可し、
前記共有メモリの信頼性が前記プログラムの安全性に対応する信頼性よりも低い場合に、前記プログラムによる前記共有メモリへのアクセスを拒否するメモリ管理システム。
【請求項３】
請求項２に記載のメモリ管理システムであって、
前記共有メモリ管理部は、前記共有メモリの信頼性が前記プログラムの安全性に対応する信頼性よりも高いか同じである場合に、前記プログラムによる前記共有メモリへのアクセスを許可することを示すアクセス許可情報を前記共有メモリ管理テーブルに追加して記録し、
前記共有メモリ管理テーブルに前記アクセス許可情報が記録されている場合、前記共有メモリ管理部は、前記アクセス許可情報に基づいて前記プログラムによる前記共有メモリへのアクセスを許可するメモリ管理システム。
【請求項４】
請求項１に記載のメモリ管理システムであって、
前記物理メモリへアクセスが行われる際に前記物理メモリに保存された情報の異常を検知して前記ＣＰＵに割り込み処理を発生させるメモリ異常検知部をさらに備え、
前記共有メモリ管理部は、前記プログラムが前記共有メモリからデータの読み込みを行う際に、前記共有メモリの信頼性が前記プログラムの安全性に対応する信頼性よりも低い場合に、前記メモリ異常検知部による前記ＣＰＵへの割り込み処理を無効化するメモリ管理システム。
【請求項５】
請求項４に記載のメモリ管理システムであって、
前記共有メモリ管理部は、前記プログラムが前記共有メモリへデータの書き込みを行う際に、前記データの改変を検知するためのデータ改変検知符号を算出し、前記データおよび前記データ改変検知符号を前記共有メモリに書き込み、
前記共有メモリ管理部は、前記プログラムが前記共有メモリからデータの読み込みを行う際に、前記共有メモリの信頼性が前記プログラムの安全性に対応する信頼性よりも低い場合に、前記メモリ異常検知部による前記ＣＰＵへの割り込み処理を無効化した状態で、前記共有メモリから前記データおよび前記データ改変検知符号を読み込んで前記データの改変の有無を判断するメモリ管理システム。
【請求項６】
請求項４に記載のメモリ管理システムであって、
前記メモリ異常検知部は、前記プログラムが前記共有メモリへデータの書き込みを行う際に、前記データの改変を検知するためのデータ改変検知符号を算出し、前記データおよび前記データ改変検知符号を前記共有メモリに書き込み、
前記メモリ異常検知部は、前記プログラムが前記共有メモリからデータの読み込みを行う際に、前記共有メモリから前記データおよび前記データ改変検知符号を読み込んで前記データの改変の有無を判断し、
前記共有メモリ管理部は、前記メモリ異常検知部の判断結果に基づいて前記データの改変の有無を判断するメモリ管理システム。
【請求項７】
請求項１に記載のメモリ管理システムであって、
前記共有メモリの作成を要求した前記プログラムの安全度に基づき前記複数の物理メモリのいずれかを選択し、選択した前記物理メモリに前記共有メモリを作成し、作成された前記共有メモリに関する情報が記録された前記共有メモリ管理テーブルを作成して前記記憶部に記憶させる共有メモリ作成部をさらに備えるメモリ管理システム。
【請求項８】
請求項１に記載のメモリ管理システムであって、
前記共有メモリにアクセスする複数の前記プログラムのそれぞれの安全度のうち、最も高い安全度に基づき前記複数の物理メモリのいずれかを選択し、選択した前記物理メモリに前記共有メモリを作成し、作成された前記共有メモリに関する情報が記録された前記共有メモリ管理テーブルを作成して前記記憶部に記憶させる共有メモリ作成部をさらに備えるメモリ管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理システムに関する。
【背景技術】
【０００２】
近年、多くの車両制御は、電子化された車両制御機器を操作する電子制御装置（ECU：Electronic Control Unit）によって行われている。自動運転など車両制御に関する要求の高度化により、ＥＣＵに求められる機能も高度化、複雑化している。
その一方で、自動車の車両制御には、装置のソフトウェア・ハードウェアの誤作動を回避するための安全性もまた求められる。プログラムの安全度を示すために、開発過程での安全設計や安全性検証を行うことで認証を受けられるＡＳＩＬという指標がＩＳＯ２６２６２で定義されている。車両に搭載された各機器の動作を制御する制御プログラムでは安全度を高めることができるが、自動運転を実現するための高度な画像処理機能や機械学習においては、処理が複雑であるため全体を安全とすることは難しい。そのため、今後の自動運転システムでは、安全度の高い車両制御プログラムと、相対的に安全度の低い高度情報処理プログラムを混載し、これらを連携させて動かすことが求められている。
ところで、ＥＣＵは主記憶装置、すなわち物理メモリを構成の一つとして備える。物理メモリは偶発的なエラーへの対処の観点から複数の種類に分類することができ、その種類ごとにエラーに対する信頼性が異なる。信頼性の高いメモリは高コストなので、ＥＣＵには信頼性の異なる複数種類のメモリが混在して用いられることが多い。
特許文献１には、安全度の高い車両制御プログラムと安全度の低いプログラムを同一計算機上で動かす場合の、それぞれのプログラムの使うメモリのアクセス制限の基本的な仕組みが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−６７１０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されている発明では、物理メモリ上で起きる偶発的なエラーによって安全性の高いプログラムの動作が妨げられることを防ぐことができない。
【課題を解決するための手段】
【０００５】
本発明の第１の態様によると、メモリ管理システムは、ＣＰＵと、エラーに対する信頼性が互いに異なる複数の物理メモリと、前記ＣＰＵにより実行されて安全性が互いに異なる複数のプログラムからアクセスするために前記物理メモリに作成された共有メモリに関する情報が記録されている共有メモリ管理テーブルを記憶する記憶部と、前記プログラムによる前記共有メモリへのアクセスを管理する共有メモリ管理部と、を備え、前記共有メモリ管理テーブルは、前記共有メモリの信頼性に関する情報を含み、前記共有メモリ管理部は、前記共有メモリ管理テーブルを参照して、前記共有メモリの信頼性と前記プログラムの安全性に対応する信頼性とを比較し、その比較結果に基づいて前記プログラムによる前記共有メモリへのアクセスを管理する。
【発明の効果】
【０００６】
本発明によれば、物理メモリ上で起きる偶発的なエラーによって安全性の高いプログラムの動作が妨げられることを防ぎ、安全性の高いプログラムの可用性を向上することができる。
【図面の簡単な説明】
【０００７】
【図１】共有メモリ管理システム８の構成を示すブロック図
【図２】ＯＳ７Ｂの共有メモリに関する機能を機能ブロックとして表す図
【図３】プログラム管理テーブル１２の一例を示す図
【図４】安全度対応テーブル１６の一例を示す図
【図５】物理メモリ信頼度テーブル１５の一例を示す図
【図６】共有メモリ管理テーブル１４の一例を示す図
【図７】メモリ管理初期化部１９の処理を示すフローチャート
【図８】共有メモリ作成部１８の処理を示すフローチャート
【図９】共有メモリ管理部１７の処理を示すフローチャート
【図１０】メモリ異常検知部２０の処理を示すフローチャート
【図１１】変形例３における共有メモリ管理テーブル１４Ａの一例を示す図
【図１２】変形例３における共有メモリ管理部１７の処理を示すフローチャート
【図１３】第２の実施の形態における共有メモリ作成部１８の処理を示すフローチャート
【図１４】第３の実施の形態における共有メモリ管理部１７の処理を示すフローチャート
【図１５】メモリ異常記録テーブル２１の一例を示す図
【図１６】第４の実施の形態における共有メモリ管理部１７の動作を示すフローチャート
【発明を実施するための形態】
【０００８】
＜実施の形態に共通する事項：物理メモリの種類＞
物理メモリは、メモリセルに蓄えられた電荷の有無により情報を記録している。この電荷が外的要因、たとえば宇宙からの中性子線により偶発的に書き変わる問題、いわゆるソフトエラーの問題が知られている。この問題に対処するために、ソフトエラーの検知や訂正が可能な物理メモリが開発されている。ソフトエラーの検知や訂正の観点から、たとえば物理メモリを、ソフトエラーに対する信頼性がそれぞれ異なる以下の３つに分類することができる。
【０００９】
１）ノンパリティメモリ
専ら情報を記憶することに特化しており、エラーの発生の検知およびエラーの訂正を目的とした特別な構成を有しない物理メモリ。
２）パリティ付きメモリ
ソフトエラーの発生を検出するパリティビットの記憶領域を有する物理メモリ。たとえば８ビットのデータを保存する際に、Highのビット数が合計で偶数になるように１ビットのパリティビットがその８ビットのデータと関連付けて物理メモリに保存される。
３）ＥＣＣ付きメモリ
ソフトエラーの検出および訂正（Error Check and Correct、ＥＣＣ）が可能となるＥＣＣビットの記憶領域を有する物理メモリ。たとえば８ビットのデータが保存される際に２ビットのＥＣＣビットが算出されその８ビットのデータに関連付けて保存される。この場合は、１ビットのソフトエラーであれば検出および訂正が可能であり、２ビットのソフトエラーであれば検出のみが可能である。ＥＣＣビット数を増加させることで訂正可能なビット数を増やすことができる。
以下ではパリティビットとＥＣＣビットをまとめて「付加ビット」と呼ぶこともある。
以下に説明する実施の形態ではこの３つを対象として説明するが、本発明はチップスペアリングなど上記３つ以外の物理メモリにも適用可能である。
【００１０】
（第１の実施の形態）
以下、図１〜図１０を参照して、共有メモリ管理システムの第１の実施の形態を説明する。
図１は、本発明にかかる共有メモリ管理システム８の構成を示すブロック図である。共有メモリ管理システム８は、ＣＰＵ１と、複数の物理メモリと、メモリコントローラ６と、記憶部７とを備える。ＣＰＵ１、メモリコントローラ６、および記憶部７は、データバス５により接続される。
【００１１】
共有メモリ管理システム８は複数の物理メモリスロットを備え、ソフトエラーに対する信頼性や容量の異なる物理メモリを接続できる。本実施の形態では、物理メモリ３ａ、３ｂ、３ｃの３つが備えられているとする。以下では、物理メモリ３ａ、３ｂ、３ｃを区別する必要がない場合はまとめて物理メモリ３と呼ぶ。
本明細書では、共有メモリとはいずれかの物理メモリに確保される記憶領域であって複数のプログラムからアクセスされることを前提に管理される記憶領域をいう。また共有メモリと区別するために、物理メモリに確保される記憶領域であって単独のプログラム７Ａからのみアクセスされることを前提とされる記憶領域を非共有メモリと呼ぶ。
【００１２】
物理メモリ３は、高速に読み書きが可能な揮発性記憶領域と、ＳＰＤ（Serial Presence Detect）情報を格納する小容量の不揮発性記憶領域を備える。ＳＰＤ情報とは、物理メモリの特性を表す情報であり、たとえばサイズ、すなわち記憶容量、パリティビットの有無、エラー訂正可能なビット数、動作周波数である。なお、本実施の形態ではＣＰＵ１が揮発性記憶領域を備える場合は、その揮発性記憶領域も物理メモリ３の１つであるとして扱う。ＣＰＵ１が揮発性記憶領域を備える場合は、ＣＰＵ１の読み出し専用領域にＳＰＤ情報が格納される。そのため、物理メモリがＣＰＵ１と同一の半導体内部に配置されているか否かは、ＳＰＤ情報に基づき判断できる。
【００１３】
記憶部７には複数のプログラム７Ａ、およびオペレーティングシステム（以下、ＯＳ）７Ｂが格納される。
ＣＰＵ１は、記憶部７に格納されたプログラム７Ａを物理メモリ３に読み込んで実行する。ＣＰＵ１は、プログラム７Ａの指令に基づきメモリコントローラ６に物理メモリ３へのアクセス、たとえば共有メモリの作成、共有メモリの読み書き、非共有メモリの読み書き、を要求する。なお図１ではＣＰＵ１は１つのみ存在するが、共有メモリ管理システム８が複数のＣＰＵを備えて冗長性を確保してもよい。
【００１４】
メモリコントローラ６は、物理メモリ３がデータバス５と接続されるインタフェースであり、メモリ異常検知部２０を備える。メモリコントローラ６が有する基本的な機能はメモリコントローラ６が備えるハードウエアロジックにより実現され、共有メモリの処理など高度な機能はＯＳ７Ｂ、すなわちソフトウエアにより実現される。共有メモリに関する機能は後述する。メモリコントローラ６が有する基本的な機能とは、メモリコントローラ６の物理メモリ３に対するアドレスを指定した読み書き、およびメモリ異常検知部２０のメモリ異常の検知である。
【００１５】
メモリ異常検知部２０は、パリティビットやＥＣＣビットの処理を行う。たとえば、メモリコントローラ６がパリティ付きメモリにデータを書き込む際は、メモリ異常検知部２０がパリティビットの算出を行い、メモリコントローラ６がデータとともにそのデータに関連付けられたパリティビットをパリティ付きメモリに書きこむ。また、メモリコントローラ６がパリティ付きメモリからデータを読み込む際は、メモリコントローラ６がデータとともにそのデータに関連付けられたパリティビットを読み込むと、メモリ異常検知部２０がパリティビットの整合性を確認する。データとパリティビットの整合性がある場合は異常が検出されないので特段の処理を行わない。データとパリティビットの整合性がない場合、すなわちソフトエラーを検出した場合はＣＰＵ１に処理を停止させる割り込み命令を出力する。メモリ異常検知部２０は、メモリコントローラ６がＥＣＣ付きメモリにアクセスする際にも同様の処理を行い、読み出しの際にエラーを検出すると訂正可能な範囲でエラーを訂正してデータをＣＰＵ１に出力し、訂正が不可能な場合はＣＰＵ１に処理を停止させる割り込み命令を出力する。たとえば１ビット訂正可能なＥＣＣメモリにおいて、メモリ異常検知部２０が２ビット書き換えられたことを検出するとエラー訂正が可能な範囲を超えているためＣＰＵ１に割り込み命令を出力する。
【００１６】
メモリ異常検知部２０の機能はたとえばCoreLink DMC-400 Dynamic Memory Controller Technical Reference Manual（http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0466c/apas07s01.html）などに示されている。
【００１７】
（共有メモリに関する機能）
ＯＳ７Ｂ、すなわちソフトウエアにより実現される、共有メモリに関する機能を説明する。図２は、ＯＳ７Ｂにより実現される３つの機能を機能ブロックとして表し、それら機能ブロックが作成・使用する情報を併せて示す図である。
ＯＳ７Ｂにより実現される機能を表す３つの機能ブロックとは、共有メモリの読み書きに関する処理を担当する共有メモリ管理部１７、共有メモリを作成する共有メモリ作成部１８、および共有メモリを作成する準備を行うメモリ管理初期化部１９である。
【００１８】
これら３つの機能ブロックが作成・使用する情報は、プログラム管理テーブル１２、共有メモリ管理テーブル１４、物理メモリ信頼度テーブル１５、および安全度対応テーブル１６である。図２における破線は読み込みを行うことを示しており、図中の実線は作成や書き込みを行うことを示している。プログラム管理テーブル１２、共有メモリ管理テーブル１４、物理メモリ信頼度テーブル１５、および安全度対応テーブル１６は、物理メモリ３ａ、３ｂ、３ｃのうち最も信頼度の高いものに配置される。
【００１９】
メモリ管理初期化部１９は、共有メモリ管理システム８が起動するたびに、共有メモリ管理システム８に接続されている全ての物理メモリ３からＳＰＤ情報を読み込み、後述する手順で物理メモリ信頼度テーブル１５を作成する。
共有メモリ作成部１８は、プログラム７Ａからの共有メモリの作成要求に基づき後述する手順で共有メモリを作成し、作成した共有メモリの情報を共有メモリ管理テーブル１４に書きこむ。
共有メモリ管理部１７は、プログラム７Ａからの共有メモリの読み書き要求に基づき、後述するようにアクセス可否を判断する。アクセス可能と判断する場合は共有メモリのアドレスを特定してメモリコントローラ６の基本的な機能により読み書きを実行し、アクセス不可と判断する場合はエラーを出力する。
【００２０】
プログラム管理テーブル１２には、プログラム７Ａを識別するプログラム識別子と、プログラムの安全度とが関連付けて記録される。プログラム識別子とは、プログラム７Ａを識別する一意な文字列であり文字列そのものに意味はない。安全度とは、たとえばＩＳＯ２６２６２においてＡＳＩＬ（Automotive Safety Integrity Level）を用いて分類される、プログラム７Ａに欠陥があった場合のリスクの大きさを示した指標であり、ＱＭ＜ＡＳＩＬ０＜ＡＳＩＬ１＜ＡＳＩＬ２＜ＡＳＩＬ３、の順に右側ほどリスクが大きいことを示す。プログラム管理テーブル１２に記録される情報は静的であり、原則として書き換えられない。
図３は、プログラム管理テーブル１２の一例を示す図である。図３には、プログラム識別子がＡＡＡ、ＢＢＢ，ＣＣＣ，ＤＤＤである４つのプログラムが、それぞれ、ＡＳＩＬ２、ＱＭ、ＱＭ、ＡＳＩＬ１の安全度であることがわかる。
【００２１】
安全度対応テーブル１６には、プログラム７Ａの安全度ごとに必要な物理メモリ３の信頼度が関連付けて記録される。安全度対応テーブル１６に記録される情報は静的であり、原則として書き換えられない。後述するように、あるプログラムがアクセス可能な物理メモリは、そのプログラムの安全度に対応する信頼度以上の信頼度を有するメモリである。
図４は安全度対応テーブル１６の一例を示す図である。物理メモリ３の信頼度はたとえば数字により表される。物理メモリ３の信頼度は大きい数ほどエラーに対する信頼性が高く、ソフトエラーによるデータ異常が発生しにくいことを示す。図４からたとえば、安全度がＡＳＩＬ１のプログラムがアクセス可能な物理メモリ３は、信頼度が３または４の物理メモリ３であることがわかる。
【００２２】
物理メモリ信頼度テーブル１５には、共有メモリ管理システム８に搭載されるそれぞれの物理メモリ３に関して、ＯＳ７Ｂが管理するアドレス空間との対応、およびその物理メモリの信頼度が格納される。アドレス空間の対応は、たとえば先頭アドレスと領域の広さ、すなわちサイズとで表すことができる。ただしアドレス空間の対応は、先頭アドレスと終了アドレスで表してもよい。物理メモリ信頼度テーブル１５はメモリ管理初期化部１９により共有メモリ管理システム８が起動するたびに作成される。たとえば、共有メモリ管理システム８を構成する物理メモリ３を入れ替えると、メモリ管理初期化部１９により新たな物理メモリ信頼度テーブル１５が作成される。
図５は、物理メモリ信頼度テーブル１５の一例を示す図である。図５に示す例では、共有メモリ管理システム８が３つの物理メモリを備え、それぞれの物理メモリの信頼度が０，１，３であることがわかる。
【００２３】
共有メモリ管理テーブル１４には、作成されている共有メモリに関する情報、すなわち、ＯＳ７Ｂが管理するアドレス空間における共有メモリの先頭アドレス、サイズ、共有メモリ識別子、および信頼度が記録される。共有メモリ識別子とは、異なるプログラム同士がメモリを共有するために事前に定める識別子である。共有メモリの信頼度とは、その共有メモリが格納される物理メモリの信頼度である。
図６は、共有メモリ管理テーブル１４の一例を示す図である。図４に示す例では、共有メモリ識別子がＳＨ＿Ａ、ＳＨ＿Ｂ、ＳＨ＿Ｃ、ＳＨ＿Ｄの４つの共有メモリが作成されていることがわかる。
【００２４】
（メモリ管理初期化部１９の動作）
メモリ管理初期化部１９による物理メモリ信頼度テーブル１５の作成を説明する。
図７は、共有メモリ管理システム８が起動した際に動作するメモリ管理初期化部１９の初期化処理を示すフローチャートである。以下に説明する各ステップの実行主体は共有メモリ管理システム８のＣＰＵ１である。
ステップＳ５０１では、物理メモリ信頼度テーブル１５をゼロクリア、すなわち記録されている情報を削除し、ステップＳ５０２に進む。
続くステップＳ５０２〜Ｓ５０９の処理は共有メモリ管理システム８に接続されている物理メモリ３の数だけ繰り返され、処理対象の物理メモリ３を順番に変更する。
【００２５】
ステップＳ５０２では、処理対象の物理メモリ３のＳＰＤ情報を読み込み、続くステップＳ５０２Ａでは処理対象の物理メモリの信頼度を仮にゼロに設定し、ステップＳ５０３に進む。
ステップＳ５０３では、ステップＳ５０２において読み込んだＳＰＤ情報に基づき、処理対象の物理メモリがパリティビットやＥＣＣビットを備えるか否かを判断する。いずれかを備えると判断する場合はステップＳ５０４に進み、いずれも備えない、すなわちノンパリティであると判断する場合はステップＳ５０９に進む。
ステップＳ５０４では物理メモリの信頼度を仮に１に設定し、ステップＳ５０５に進む。
【００２６】
ステップＳ５０５では、処理対象の物理メモリがＥＣＣビットを備えるか否かを判断し、ＥＣＣビットを備えると判断する場合はステップＳ５０６に進み、ＥＣＣビットを備えないと判断する場合はステップＳ５０９に進む。
ステップＳ５０６では、処理対象の物理メモリの信頼度に訂正可能ビット数を加算し、ステップＳ５０７に進む。たとえば２ビットが訂正可能であれば、その物理メモリ３の信頼度は３である。
ステップＳ５０７では、処理対象の物理メモリがＣＰＵ１と同一の半導体内部に配置されているか否かを判断する。この判断は、前述のＳＰＤ情報に基づき判断できる。同一の半導体内部に配置されていると判断する場合はステップＳ５０８に進み、同一の半導体内部に配置されていないと判断する場合はステップＳ５０９に進む。
【００２７】
ステップＳ５０８では、ステップＳ５０６において加算された物理メモリの信頼度にさらに１を加算する。ここで信頼度を加算する理由は２つある。第１の理由は、物理メモリがＣＰＵ１と同一の半導体内部に配置されている場合は、当該物理メモリの容量が小さく中性子線の影響を受ける確率が低いからである。第２の理由は、同一のシリコンダイに配置されていれば配線長が短く通信中のノイズの影響を受けにくいからである。次にステップＳ５０９に進む。
【００２８】
ステップＳ５０９では、物理メモリ信頼度テーブル１５に処理対象の物理メモリに関する以下の３つの情報を書き込む。すなわち、ＯＳ７Ｂが管理するメモリ空間におけるその物理メモリの先頭アドレス、ステップＳ５０２において読み込んだＳＰＤ情報に含まれる物理メモリのサイズ、およびステップＳ５０２Ａ〜ステップＳ５０８において算出した物理メモリの信頼度である。なおＯＳ７Ｂが管理するメモリ空間におけるその物理メモリの先頭アドレスは、物理メモリ信頼度テーブル１５に物理メモリの情報が書き込まれていなければゼロ（０ｘ００００）であり、物理メモリの情報が書き込まれていれば最下段の物理メモリ先頭アドレスにその最下段の物理メモリのサイズを加算した値となる。
以上説明したステップＳ５０２〜ステップＳ５０９を共有メモリ管理システム８に接続されているそれぞれの物理メモリ３を対象に繰り返し、これが終了すると図７に示すフローチャートを終了する。
【００２９】
（共有メモリ作成部１８の動作）
共有メモリ作成部１８による共有メモリの割り当て、および共有メモリ管理テーブル１４への追記を説明する。
図８は、メモリコントローラ６がプログラム７Ａから共有メモリの作成指令を受けた際に共有メモリ作成部１８が行う処理を示すフローチャートである。以下に説明する各ステップの実行主体は共有メモリ管理システム８のＣＰＵ１である。
ステップＳ６０１では、共有メモリの作成を要求したプログラム７Ａの識別子、作成を要求されている共有メモリの識別子、および作成を要求されている共有メモリのサイズを読み込み、ステップＳ６０２に進む。
【００３０】
ステップＳ６０２では、プログラム管理テーブル１２を読み込み、ステップＳ６０３に進む。
ステップＳ６０３では、プログラム管理テーブル１２を用いてステップＳ６０１において読み込んだプログラム７Ａの識別子に対応する安全度を特定し、ステップＳ６０４に進む。
ステップＳ６０４では、安全度対応テーブル１６を読み込みステップＳ６０５に進む。
ステップＳ６０５では、安全度対応テーブル１６を用いてステップＳ６０３において特定した安全度に対応する信頼度を特定し、ステップＳ６０６に進む。
【００３１】
ステップＳ６０６では、共有メモリ管理テーブル１４、および物理メモリ信頼度テーブル１５を読み込み、ステップＳ６０７に進む。
ステップＳ６０７では、共有メモリ管理テーブル１４、および物理メモリ信頼度テーブル１５を参照して、ステップＳ６０５において特定した信頼度以上の信頼度があり、まだ共有メモリに割り当てられていない領域（以下、未割当領域）が要求されたサイズ以上ある物理メモリ３を特定する。複数の物理メモリ３が特定された場合は、特定された中で最も信頼度が低い物理メモリ３を選択する。次にステップＳ６０８に進む。
ステップＳ６０８では、ステップＳ６０７において条件を満たす物理メモリ３を特定できたか否かを判断し、特定できた場合はステップＳ６０９に進み、発見できなかった場合はステップＳ６１１に進む。
【００３２】
ステップＳ６０９では、ステップＳ６０７において特定した物理メモリ３の未割当領域の先頭アドレス、要求された共有メモリのサイズ、共有メモリ識別子、および特定した物理メモリ３の信頼度を共有メモリ管理テーブル１４に書きこみステップＳ６１０に進む。共有メモリ管理テーブル１４にメモリ領域の情報を書き込むことにより、共有メモリを作成すると共に、作成された共有メモリに関する情報が記録された新たな共有メモリ管理テーブル１４を作成したことになる。そして、作成した新たな共有メモリ管理テーブル１４を記憶部７に記憶させる。
ステップＳ６１０では、作成した共有メモリのアドレスを共有メモリの作成を要求したプログラムに出力し、図８のフローチャートを終了する。
ステップＳ６１１では、共有メモリを確保できなかった旨のエラーを共有メモリの作成を要求したプログラムに出力し、図８のフローチャートを終了する。
【００３３】
（共有メモリ管理部１７の動作）
共有メモリ管理部１７による、プログラムからの要求に応じた共有メモリへのアクセスを説明する。
図９は、共有メモリ管理部１７がプログラムから共有メモリのアドレスを要求された場合の処理を示すフローチャートである。
ステップＳ７０１では、アクセスを要求したプログラム７Ａの識別子、およびアクセスする対象となる共有メモリの識別子を読み込み、ステップＳ７０２に進む。
【００３４】
ステップＳ７０２では、プログラム管理テーブル１２を読み込み、ステップＳ７０３に進む。
ステップＳ７０３では、プログラム管理テーブル１２を用いてステップＳ７０１において読み込んだプログラム７Ａの識別子に対応する安全度を特定し、ステップＳ７０４に進む。
ステップＳ７０４では、安全度対応テーブル１６を読み込みステップＳ７０５に進む。
ステップＳ７０５では、安全度対応テーブル１６を用いてステップＳ７０３において特定した安全度に対応する信頼度を特定し、ステップＳ７０６に進む。
【００３５】
ステップＳ７０６では、共有メモリ管理テーブル１４を読み込み、ステップＳ７０７に進む。
ステップＳ７０７では、アクセス対象である共有メモリの信頼度を特定する。すなわち、ステップＳ７０６において読み込んだ共有メモリ管理テーブル１４を参照して、ステップＳ７０１において読み込んだアクセス対象である共有メモリの識別子に対応する共有メモリ信頼度を特定する。次にステップＳ７０８に進む。
【００３６】
ステップＳ７０８では、アクセス条件を満たすか否かの判定を行う。ここでは、ステップＳ７０７において特定した共有メモリの信頼度と、ステップＳ７０３において特定したプログラム７Ａの安全度に対応する信頼度とを比較して、アクセス対象の共有メモリの信頼度がアクセスを要求したプログラム７Ａの安全度に対応する信頼度以上であるか否かを判断する。その結果、アクセス対象の共有メモリの信頼度がアクセスを要求したプログラム７Ａの安全度に対応する信頼度以上であれば、アクセス条件を満たすと判断してステップＳ７０９に進み、そうでない場合はアクセス条件を満たさないと判断してステップＳ７１０に進む。
たとえば、識別子が「ＢＢＢ」であるプログラム７Ａが共有メモリ識別子「ＳＨ＿Ｂ」の共有メモリへのアクセスを要求した場合は以下のように判断される。すなわち、プログラム管理テーブル１２を参照すると識別子「ＢＢＢ」であるプログラム７Ａの安全度は「ＱＭ」であり、物理メモリ信頼度テーブル１５を参照すると安全度「ＱＭ」に対応する信頼度は「１」である。共有メモリ管理テーブル１４を参照すると、共有メモリ識別子「ＳＨ＿Ｂ」の共有メモリの信頼度は「２」なので、「２」＞「１」でありステップＳ７０８の条件を満たすと判断できる。すなわち、アクセス対象である共有メモリ識別子「ＳＨ＿Ｂ」の共有メモリの信頼性は、アクセスを要求した識別子「ＢＢＢ」であるプログラム７Ａの安全度「ＱＭ」に対応する信頼性よりも高いため、アクセス条件を満たすと判断することができる。
【００３７】
ステップＳ７０９では、プログラム７Ａからの要求に従い共有メモリにアクセスし、読み込んだデータの出力、または書き込みの終了を示す信号を出力して図９のフローチャートを終了する。
ステップＳ７０８において否定判定されると実行されるステップＳ７１０では、アクセスを要求したプログラム７Ａにアクセスが拒否された旨のエラーを出力し、図９のフローチャートを終了する。
なおステップＳ７０９において、共有メモリ管理部１７が共有メモリへのアクセスまでは行わず、プログラム７Ａに共有メモリの先頭アドレスを出力してもよい。前述の例では共有メモリ識別子「ＳＨ＿Ｂ」の共有メモリの先頭アドレスである「０ｘ１０００」を出力する。
【００３８】
（メモリ異常検知部２０の動作）
メモリ異常検知部２０の動作、すなわちパリティビットやＥＣＣビットの処理を説明する。
図１０は、メモリ異常検知部２０の動作を表すフローチャートである。メモリ異常検知部２０は、メモリコントローラ６がプログラム７Ａからメモリへのアクセス、すなわち読み込み、および書き込みを要求されると動作を開始する。
【００３９】
ステップＳ１１０１では、処理対象の物理メモリ３がノンパリティメモリであるか否かを判断する。処理対象がノンパリティメモリの場合はメモリ異常検知部２０は処理をする必要がないので、図１０に示すプログラム７Ａを終了する。処理対象がノンパリティメモリではない場合、すなわちパリティ付きメモリまたはＥＣＣメモリの場合はステップＳ１１０２に進む。
ステップＳ１１０２では、メモリコントローラ６が要求されているアクセスの目的が、読み込みおよび書き込みのいずれであるかを判断する。読み込みであると判断する場合はステップＳ１１０３に進み、書き込みであると判断する場合はステップＳ１１０７に進む。
【００４０】
ステップＳ１１０３では、物理メモリ３から指定されたアドレスのデータと付加ビット、すなわちパリティビットまたはＥＣＣビットを読み出し、ステップＳ１１０４に進む。
ステップＳ１１０４では、付加ビットの検証、すなわちステップＳ１１０３において読み込んだデータと付加ビットとの整合性を確認し、可能であればＥＣＣビットを用いてデータを訂正する。次にステップＳ１１０５に進む。
ステップＳ１１０５では、ステップＳ１１０４における付加ビットの検証によりエラーが検出されたか否かを判断する。エラーが検出されたと判断する場合はステップＳ１１０６に進み、ステップＳ１１０６においてＣＰＵ１に対して割り込みをかけてエラー検出を通知した後、図１０のフローチャートを終了する。一方、ステップＳ１１０５でエラーが検出されないと判断する場合は何もせず、そのまま図１０のフローチャートを終了する。なお本ステップでは、ＥＣＣビットにより訂正可能な範囲のエラーであれば、エラーが検出されないとして扱う。
【００４１】
要求されているアクセスが書き込みであると判断された場合に実行されるステップＳ１１０７では、付加ビット、すなわちパリティビット、またはＥＣＣビットを算出しステップＳ１１０８に進む。
ステップＳ１１０８では、処理対象のメモリに、データおよびステップＳ１１０７において算出した付加ビットを書き込み、図１０のフローチャートを終了する。
【００４２】
上述した第１の実施の形態によれば、次の作用効果が得られる。
（１）共有メモリ管理システム８は、ＣＰＵ１と、エラーに対する信頼性が互いに異なる複数の物理メモリ３と、ＣＰＵ１により実行されて安全性が互いに異なる複数のプログラム７Ａからアクセスするために物理メモリ３に作成された共有メモリに関する情報が記録されている共有メモリ管理テーブル１４を記憶する記憶部７と、プログラム７Ａによる共有メモリへのアクセスを管理する共有メモリ管理部１７と、を備える。共有メモリ管理テーブル１４は、共有メモリの信頼性に関する情報である共有メモリの信頼度を含む。共有メモリ管理部１７は、共有メモリ管理テーブル１４を参照して（図９ステップＳ７０７）、共有メモリの信頼性とプログラム７Ａの安全性に対応する信頼性とを比較し（図９ステップＳ７０８）、その比較結果に基づいてプログラム７Ａによる共有メモリへのアクセスを管理する（図９ステップＳ７０９、Ｓ７１０）。このようにしたので、物理メモリ３上で起きる偶発的なエラーによって安全性の高いプログラム７Ａの動作が妨げられることを防ぎ、安全性の高いプログラム７Ａの可用性を向上することができる。
【００４３】
（２）共有メモリ管理部１７は、共有メモリの信頼性がプログラム７Ａの安全性に対応する信頼性よりも高いか同じである場合に（図９ステップＳ７０８：Ｙｅｓ）、プログラム７Ａによる共有メモリへのアクセスを許可する（図９ステップＳ７０９）。一方、共有メモリの信頼性がプログラム７Ａの安全性に対応する信頼性よりも低い場合に（図９ステップＳ７０８：Ｎｏ）、プログラム７Ａによる共有メモリへのアクセスを拒否する（図９ステップＳ７１０）。
そのため、記憶部７に格納されるそれぞれのプログラム７Ａは、それぞれのプログラム７Ａの安全度に対応する信頼度を満たさない共有メモリにはアクセスしないため、信頼性の低い物理メモリ上で起きるエラーによって安全性の高いプログラム７Ａの動作が妨げられることを防止できる。
【００４４】
（３）共有メモリ管理システム８は、共有メモリの作成を要求したプログラム７Ａの安全度に基づき複数の物理メモリ３のいずれかを選択し、選択した物理メモリ３に共有メモリを作成し、作成された共有メモリに関する情報が記録された共有メモリ管理テーブル１４を作成して記憶部７に記憶させる共有メモリ作成部１８を備える。
そのため、不必要に高い安全度の物理メモリ３に共有メモリを作成することがない。
【００４５】
（４）物理メモリ３が備える不揮発性記憶領域に備えられた情報、すなわちＳＰＤ情報に基づき当該物理メモリ３の信頼度を決定するメモリ管理初期化部１９を備える。メモリ管理初期化部１９は、当該共有メモリ管理システム８が起動するたびに当該共有メモリ管理システム８に接続された全ての物理メモリ３について信頼度を決定し、記憶部７に格納する。
そのため、ＳＰＤ情報に基づきエラー検出能力やエラー訂正能力を物理メモリの信頼度として算出することができる。また、共有メモリ管理システム８に接続する物理メモリ３の構成を変更すると、ユーザによる設定の変更を待つことなく記憶部７に追加された物理メモリ３の情報を追加することができる。
【００４６】
上述した第１の実施の形態は、以下のように変形してもよい。
（変形例１）
上述した第１の実施の形態において示した物理メモリの信頼度、およびプログラム７Ａの安全度に対応する安全度は例示であり、上述した以外の信頼度および安全度を用いてもよい。たとえば、物理メモリの信頼度を６段階以上に設定してもよいし、４段階以下に設定してもよい。また、プログラム７Ａの安全度に対応する安全度にＩＳＯ２６２６２で定義されるＡＳＩＬ以外を用いてもよい。
【００４７】
（変形例２）
プログラム管理テーブル１２および安全度対応テーブル１６を統合し、プログラム識別子とプログラム７Ａが使用する共有メモリに求める信頼度とを関連付けて保存してもよい。さらに、プログラム管理テーブル１２および／または安全度対応テーブル１６に格納されている情報を、共有メモリ管理テーブル１４や物理メモリ信頼度テーブル１５と組み合わせて保存してもよい。
すなわち、共有メモリ管理システム８にプログラム管理テーブル１２、共有メモリ管理テーブル１４、物理メモリ信頼度テーブル１５、安全度対応テーブル１６の情報が格納されていれば良く、保存されている形態を問わない。
また、共有メモリ管理テーブル１４において共有メモリの信頼度を記録しないこととしてもよい。すなわち、物理メモリ信頼度テーブル１５の先頭アドレスおよびサイズと、共有メモリ管理テーブル１４の先頭アドレスおよびサイズとを比較することで、各共有メモリがどの物理メモリに作成されたかが分かる。これにより、物理メモリの信頼度から各共有メモリの信頼度を知ることができる。そのため、共有メモリ管理テーブル１４において、共有メモリの信頼度は必ずしも必要ではない。なお、共有メモリ管理テーブル１４に共有メモリの信頼度が記録されない場合、その共有メモリ管理テーブル１４では、先頭アドレスおよびサイズが共有メモリの信頼度に関する情報に相当する。
【００４８】
（変形例３）
共有メモリ管理テーブルは、アクセス可能なプログラムの識別子が格納される列（以下、「アクセス許可欄」）をさらに備える共有メモリ管理テーブル１４Ａとしてもよい。この場合は、アクセスを要求したプログラムが共有メモリにアクセス可能と共有メモリ管理部１７が判断した場合（図９、ステップＳ７０８：ＹＥＳ）に、共有メモリ管理テーブル１４Ａのアクセスされる共有メモリの行に、当該プログラムによる共有メモリへのアクセスを許可することを示すアクセス許可情報として、アクセスを行うプログラムのプログラム識別子を記録する。そして次回以降は、共有メモリ管理テーブル１４Ａのアクセス許可欄にそのプログラムの識別子が記載されていることから、アクセスが可能であることが容易に判別できる。
【００４９】
図１１は、共有メモリ管理テーブル１４Ａの一例を示す図である。図１１の右端に示す「アクセス許可プログラム」の列が前述のアクセス許可欄であり、アクセス許可情報としてのプログラム識別子が記録されている。アクセス許可欄にプログラム識別子が記載されたプログラムは、アクセス許可欄を参照することにより、その共有メモリにアクセス可能であることが容易に判断できる。
図１２は、変形例３における共有メモリ管理部１７の動作を表すフローチャートである。第１の実施の形態との差異は、ステップＳ７０２の次にステップＳ７８１、Ｓ７８２が実行され、ステップＳ７０９の次にステップＳ７８０が実行される点である。
【００５０】
ステップＳ７８１では、共有メモリ管理テーブル１４Ａの、ステップＳ７０１において読み込んだ共有メモリ識別子を有する行において、アクセス許可欄にステップＳ７０１において読み込んだプログラム識別子が記載されているか否かを判断する。記載されていると判断する場合はステップＳ７８２に進んでステップＳ７０９と同様に共有メモリにアクセスする。記載されていないと判断する場合はステップＳ７０２に進み、ステップＳ７０８まで第１の実施の形態と同様に処理を行う。
【００５１】
そしてステップＳ７０９の次に実行されるステップＳ７８０では、前述のステップＳ７８１の処理が可能となるように以下の処理を行う。すなわち、共有メモリ管理テーブル１４Ａの、ステップＳ７０１において読み込んだ共有メモリ識別子を有する行のアクセス許可欄に、アクセスを許可したプログラムの識別子、すなわちステップＳ７０１において読み込んだプログラム識別子を追加する。以上で図１２のフローチャートを終了する。
この変形例３によれば、次の作用効果が得られる。
【００５２】
（１）共有メモリ管理部１７は、共有メモリの信頼性がプログラム７Ａの安全性に対応する信頼性よりも高いか同じである場合に（図１２ステップＳ７０８：Ｙｅｓ）、プログラム７Ａによる共有メモリへのアクセスを許可することを示すアクセス許可情報として、そのプログラム７Ａのプログラム識別子を共有メモリ管理テーブル１４Ａのアクセス許可欄に追加して記録する（図１２ステップＳ７８０）。そして、共有メモリ管理テーブル１４Ａのアクセス許可欄にプログラム識別子が記録されている場合（図１２ステップＳ７８１：Ｙｅｓ）、共有メモリ管理部１７は、これに基づいてプログラム７Ａによる共有メモリへのアクセスを許可する（図１２ステップＳ７８２）。
そのため、共有メモリ管理部１７は共有メモリ管理テーブル１４Ａのアクセス許可欄を参照することにより、プログラム７Ａが共有メモリへのアクセスが許可されていることを容易に判別することができる。
【００５３】
（変形例４）
物理メモリ信頼度テーブル１５に記録される物理メモリ３の信頼度は、ＳＰＤ情報以外に基づいて設定されてもよい。たとえば、共有メモリ管理システム８の回路設計やＳＰＤ情報には記載されない物理メモリ３の特性に基づき、その信頼度を増減させてもよい。たとえば、物理メモリ３を鉛で覆ったことにより信頼度を「１」増加させてもよい。
【００５４】
（変形例５）
上述した第１の実施の形態では、共有メモリ管理部１７、共有メモリ作成部１８、およびメモリ管理初期化部１９は記憶部７に格納されるＯＳ７Ｂにより実現される機能ブロックであった。しかし、共有メモリ管理部１７、共有メモリ作成部１８、およびメモリ管理初期化部１９は他のソフトウエアにより実現されてもよいし、ＡＳＩＣ（application specific integrated circuit）やＦＰＧＡ（Field Programmable Gate Array）により実現されてもよい。
【００５５】
（変形例６）
上述した第１の実施の形態では、プログラム管理テーブル１２、共有メモリ管理テーブル１４、物理メモリ信頼度テーブル１５、および安全度対応テーブル１６は、最も信頼度の高い物理メモリ３に配置されるとした。しかし、これらが配置されるのは物理メモリ３に限定されず、たとえばメモリコントローラ６が備える専用の記憶領域に配置されてもよい。
【００５６】
（変形例７）
上述した第１の実施の形態では、プログラムの安全度に対応する信頼度を特定し、その特定した信頼度と共有メモリの信頼度を比較した。しかし、プログラムの安全度と共有メモリの信頼度の比較方法はこれに限定されない。共有メモリの信頼度に対応する安全度を特定し、特定した安全度とプログラムの安全度を比較してもよい。さらに、安全度や信頼度以外の第３の指標を用いて比較してもよい。すなわち、プログラムの安全度に対応する第３の指標の値を特定し、共有メモリの信頼度に対応する第３の指標の値を特定し、特定した第３の指標の値同士を比較してもよい。
【００５７】
（第２の実施の形態）
図１３を参照して、共有メモリ管理システムの第２の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、共有メモリを作成する際に、その共有メモリにアクセスする各プログラム７Ａの安全度に対応する安全度のうち、最も高い安全度に基づき共有メモリを作成する点で、第１の実施の形態と異なる。
【００５８】
（構成）
共有メモリ管理システム８のハードウエア構成は第１の実施の形態と同様である。記憶部７に格納されるＯＳ７Ｂの一部であって、共有メモリ作成部１８の動作が第１の実施の形態と異なる。
また本実施の形態では、プログラム７Ａがメモリコントローラ６に共有メモリの作成指令を出力する際に、共有メモリの識別子に加えて、その共有メモリにアクセスする可能性がある全てのプログラム７Ａの識別子をメモリコントローラ６に出力する。
【００５９】
（共有メモリ作成部１８の動作）
図１３は、第２の実施の形態において、メモリコントローラ６がプログラム７Ａから共有メモリの作成指令を受けた際に共有メモリ作成部１８が行う処理を示すフローチャートである。以下に説明する各ステップの実行主体はＣＰＵ１である。第１の実施の形態における図８と同じ処理には同一のステップ番号を付し、説明を省略する。
ステップＳ８０１では、これから作成する共有メモリにアクセスする全てのプログラム７Ａの識別子、作成を要求されている共有メモリの識別子、および作成を要求されている共有メモリのサイズを読み込み、ステップＳ８０２に進む。
【００６０】
ステップＳ８０２ではプログラム管理テーブル１２を読み込み、ステップＳ８０３に進む。
ステップＳ８０３では、プログラム管理テーブル１２を用いてステップＳ８０１において読み込んだそれぞれのプログラム７Ａの識別子に対応する安全度を特定し、ステップＳ８０４に進む。
ステップＳ８０４では、ステップＳ８０３において特定した安全度のうち、最高の安全度を特定してステップＳ６０４に進む。
ステップＳ６０４以降の処理は次の１点を除いて第１の実施の形態と同様である。すなわち、ステップＳ８０４において特定した最高の安全度を、第１の実施の形態におけるステップＳ６０３において特定した安全度と読みかえる。
【００６１】
上述した第２の実施の形態によれば、次の作用効果が得られる。
（１）共有メモリ管理システム８は、共有メモリにアクセスする複数のプログラム７Ａのそれぞれの安全度のうち、最も高い安全度に基づき複数の物理メモリ３のいずれかを選択し、選択した物理メモリに共有メモリを作成し、作成された共有メモリに関する情報が記録された共有メモリ管理テーブル１４を作成して記憶部７に記憶させる共有メモリ作成部１８を備える。
前述した第１の実施の形態では、共有メモリにアクセスする複数のプログラム７Ａのうち、最も安全度が高いプログラム７Ａが共有メモリの作成指令を出力する必要があった。しかし本実施の形態ではいずれのプログラム７Ａが共有メモリの作成指令を出力しても、その共有メモリのいずれもがアクセス可能な共有メモリが作成される。
また、共有メモリの作成時には予定していなかったプログラム７Ａがその共有メモリにアクセスする場合であっても、共有メモリ管理部１７は第１の実施の形態と同様に動作するので、共有メモリの優先度とそのプログラム７Ａの安全度との関係からアクセス可否を判断することができる。
【００６２】
（第２の実施の形態の変形例）
あらかじめ予定されたプログラム、すなわち共有メモリの作成時にプログラム識別子が出力されたプログラム以外は共有メモリにアクセスしないことを前提として、共有メモリ管理部１７によるプログラムごとの共有メモリへのアクセス可否判断を省略してもよい。
【００６３】
（第３の実施の形態）
図１４を参照して、共有メモリ管理システムの第３の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、プログラム７Ａの安全度の基準を満たさない共有メモリからのデータを読み込む際には、ＣＰＵ割り込みを発生させないようにメモリ異常検知部２０を一時的に無効にし、別途ソフトエラーを検出する点で、第１の実施の形態と異なる。
【００６４】
（構成）
共有メモリ管理システム８のハードウエア構成は第１の実施の形態と同様である。記憶部７に格納されるＯＳ７Ｂの一部であって、共有メモリ管理部１７の動作が第１の実施の形態と異なる。
また本実施の形態では、プログラム７Ａがメモリコントローラ６に共有メモリにアクセスする際に、共有メモリの識別子に加えて、アクセスする目的、すなわち読み込み、又は書き込みを共有メモリ管理部１７に伝達する。
【００６５】
（処理の概要）
メモリ異常検知部２０は、パリティビットやＥＣＣビットを用いてソフトエラーを検出し、ソフトエラーの訂正が不可能な場合はＣＰＵ１に割り込み命令を出力する。この割り込み処理は、意図しないソフトエラーの発生を知らせる点では有用ではあるが、読み込み対象の物理メモリ３の信頼度が低いことが事前に明らかである場合には他の処理も中断されるため望ましくない。そこで、信頼度が低い物理メモリ３からデータを読み出す際には一時的にメモリ異常検知部２０によるＣＰＵ割り込み機能を無効化する。さらに、メモリ異常検知部２０と同様にパリティビットの算出、および検証を行う機能を共有メモリ管理部１７に持たせることで、従来と同様にソフトエラーを検出する。
なお、前述の“読み込み対象の物理メモリ３の信頼度が低いことが事前に明らかである場合”とは、たとえばプログラム７Ａの安全度に対応する信頼度よりも、共有メモリが配置された物理メモリ３の信頼度が低い場合である。
【００６６】
図１４は、第３の実施の形態において共有メモリ管理部１７がプログラム７Ａから共有メモリへのアクセスを要求された際に実行する処理を示すフローチャートである。第１の実施の形態と同一の処理には同一のステップ番号を付して説明を省略する。
ステップＳ９０１では、アクセスを要求したプログラム７Ａの識別子、共有メモリの識別子、およびアクセスの目的を読み込み、ステップＳ９０２に進む。
【００６７】
ステップＳ９０２では、アクセスの目的が読み込みであるか否かを判断する。読み込みであると判断する場合は、共有メモリの信頼度がプログラム７Ａの安全度に対応する信頼度の条件を満たすか否かにより処理が異なるのでその判断のためにステップＳ７０２に進む。読み込みではない、すなわち書き込みであると判断する場合は、前述の信頼度によらず常にパリティビットの算出・書き込みを行うのでステップＳ９１１に進む。
ステップＳ７０２〜ステップＳ７０７では第１の実施の形態において説明したように、プログラム７Ａの安全度に対応する信頼度と、アクセス対象である共有メモリの信頼度が特定される。続くステップＳ７０８では、アクセス対象である共有メモリの信頼度がプログラム７Ａの安全度に対応する信頼度以上であるか否かを判断する。条件を満たすと判断する場合はステップＳ９１０に進み、条件を満たさないと判断する場合はステップＳ９０３に進む。
【００６８】
ステップＳ９０３では、メモリ異常検知部２０によるＣＰＵ割り込みを一時的に無効化してステップＳ９０４に進む。
ステップＳ９０４では、メモリ異常検知部２０によるＣＰＵ割り込みを無効化した状態で、アクセス対象である共有メモリからデータおよびそのデータに関連付けられたパリティビットを読み込み、ステップＳ９０５に進む。
ステップＳ９０５では、メモリ異常検知部２０によるＣＰＵ割り込みを有効化してステップＳ９０６に進む。
ステップＳ９０６では、ステップＳ９０４において読み込んだデータとパリティビットとの整合性を検証する。たとえば、ステップＳ９０４において読み込んだデータに含まれるＨｉｇｈのビット数とパリティビットのＨｉｇｈのビット数の合計が偶数になれば整合すると判断する。次にステップＳ９０７に進む。
【００６９】
ステップＳ９０７では、ステップＳ９０６においてパリティビットが整合したか否かを判断する。整合したと判断する場合はステップＳ９０８に進み、整合しない、すなわちソフトエラーが検出されたと判断する場合はステップＳ９０９に進む。
ステップＳ９０８では、ソフトエラーが検出されなかったので、ステップＳ９０４において読み込んだデータをアクセス要求を行ったプログラム７Ａに出力し、図１４のフローチャートを終了する。
ステップＳ９０９では、アクセス要求を行ったプログラム７Ａにソフトエラーが発生し、読み込みに失敗した旨のエラーを出力し、図１４のフローチャートを終了する。
【００７０】
アクセスの目的が書き込みであった場合に実行されるステップＳ９１１では、共有メモリ管理テーブル１４を読み込み、ステップＳ９１２に進む。
ステップＳ９１２では、アクセス対象である共有メモリの識別子、および共有メモリ管理テーブル１４を用いて、アクセス対象である共有メモリのアドレスを特定する。
ステップＳ９１３では、共有メモリへのアクセスを要求したプログラム７Ａから書き込むデータを受領し、そのデータのパリティビットを算出してステップＳ９１４に進む。
ステップＳ９１４では、ステップＳ９１２において特定したアドレスに、データおよびステップＳ９１３において算出したパリティビットを書き込み、図１４のフローチャートを終了する。
【００７１】
上述した第３の実施の形態によれば、次の作用効果が得られる。
（１）共有メモリ管理部１７は、プログラム７Ａが共有メモリへデータの書き込みを行う際に（図１４、ステップＳ９０２：Ｙｅｓ）、データの改変を検知するためのデータ改変検知符号、たとえばパリティビットを算出し、データおよびデータ改変検知符号を共有メモリに書き込む（図１４、ステップＳ９１１〜Ｓ９１４）。共有メモリ管理部１７は、プログラム７Ａが共有メモリからデータの読み込みを行う際に、その共有メモリの信頼性がプログラム７Ａの安全性に対応する信頼性よりも低い場合に（図１４、ステップＳ７０８：Ｎｏ）、メモリ異常検知部２０によるＣＰＵ１への割り込み処理を無効化する（図１４ステップＳ９０３）。そしてこの状態で、共有メモリからデータおよびデータ改変検知符号を読み込んでデータの改変の有無を判断する（図１４ステップＳ９０６）。
そのため、メモリ異常検知部２０によるＣＰＵ割り込みを発生させないにもかかわらず、ソフトエラーの検出も可能とすることができる。すなわち、信頼性の低い物理メモリに作成された共有メモリにアクセスしても安全性の高いプログラムの動作が妨げられることがなく、安全性の高いプログラムの可用性を向上することができる。
【００７２】
（第４の実施の形態）
図１５〜図１６を参照して、共有メモリ管理システムの第４の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、メモリ異常検知部２０が異常を検知するとＣＰＵ割り込みを発生させる代わりに異常の発生を記録させ、その記録に基づきソフトエラーを検出する点で第１の実施の形態と異なる。
本実施の形態において用いられる物理メモリ３は、ノンパリティメモリ以外、すなわちパリティ付きメモリ、またはＥＣＣ付きメモリに限定する。
【００７３】
（構成）
共有メモリ管理システム８のハードウエア構成は第１の実施の形態と同様である。記憶部７に格納されるＯＳ７Ｂの一部であって、共有メモリ管理部１７の動作が第１の実施の形態と異なる。
また本実施の形態では、プログラム７Ａがメモリコントローラ６に共有メモリにアクセスする際に、共有メモリの識別子に加えて、アクセスする目的、すなわち読み込み、又は書き込みを共有メモリ管理部１７に伝達する。
【００７４】
（処理の概要）
メモリ異常検知部２０は、パリティつきメモリではパリティビットを用いて、ＥＣＣ付きメモリではＥＣＣビットを用いて、第１の実施の形態において説明したようにソフトエラーを検出する。メモリ異常検知部２０はソフトエラーを検出すると、後述するメモリ異常記録テーブル２１にソフトエラーが検出されたアドレスを記録する。
図１５は、メモリ異常記録テーブル２１の一例を示す図である。メモリ異常記録テーブル２１にはソフトエラーが検出されたメモリのアドレスが記録される。図１５に示す例では、２つのアドレスでソフトエラーが検出されている。
【００７５】
共有メモリ管理部１７は、共有メモリからデータを読み出す前後におけるメモリ異常記録テーブル２１の差分の有無からソフトエラーの有無を判断することができる。換言すると、共有メモリからデータを読み出す前後でメモリ異常記録テーブル２１に変化がなければソフトエラーが発生していないと判断でき、共有メモリからデータを読み出す前後でメモリ異常記録テーブル２１に変化があればソフトエラーが発生したと判断できる。
【００７６】
（フローチャート）
図１６は、第４の実施の形態において共有メモリ管理部１７がプログラム７Ａから共有メモリへのアクセスを要求された際に実行する処理を示すフローチャートである。第１の実施の形態、および第３の実施の形態と同一の処理には同一のステップ番号を付して説明を省略する。
ステップＳ９０２においてアクセスの目的が書き込みであると判断する場合はステップＳ９１１に進み、共有メモリ管理テーブル１４を読み込んで書き込みアドレスを特定し（ステップＳ９１２）、データを共有メモリに書き込む（ステップＳ１０００）。このとき、書き込んだデータのパリティビット、またはＥＣＣビットはメモリ異常検知部２０により算出される。
【００７７】
ステップＳ９０２において肯定判定されると、続くステップＳ７０２〜ステップＳ７０７では第１の実施の形態において説明したように、プログラム７Ａの安全度に対応する信頼度と、アクセス対象である共有メモリの信頼度が特定される。続くステップＳ７０８では、アクセス対象である共有メモリの信頼度がプログラム７Ａの安全度に対応する信頼度以上であるか否かを判断する。条件を満たすと判断する場合はステップＳ９１０に進み、条件を満たさないと判断する場合はステップＳ１００１に進む。
ステップＳ１００１では、メモリ異常記録テーブル２１をクリア、すなわちメモリ異常記録テーブル２１に格納されている情報をすべて削除してステップＳ１００２に進む。
ステップＳ１００２では、メモリ異常検知部２０によるＣＰＵ割り込みを一時的に無効化してステップＳ１００４に進む。
【００７８】
ステップＳ１００３では、アクセス対象である共有メモリからデータを読み込む。なおこのとき、メモリ異常検知部２０によりこのデータに関連付けられるパリティビットまたはＥＣＣビットが読み込まれ、異常が検出されるとメモリ異常記録テーブル２１に記録される。次にステップＳ１００４に進む。
ステップＳ１００４では、メモリ異常検知部２０によるＣＰＵ割り込みを有効化してステップＳ１００５に進む。
ステップＳ１００５では、メモリ異常記録テーブル２１に何らかの異常が記録されているか否か、すなわちソフトエラーが検出されたか否かを判断する。異常が記録されていると判断する場合はステップＳ９０９に進んでエラーを出力し、異常が記録されていないと判断する場合はステップＳ９０８に進んでステップＳ１００３において読み込んだデータをアクセスを要求したプログラム７Ａに出力する。以上で図１６のフローチャートを終了する。
【００７９】
上述した第４の実施の形態によれば、次の作用効果が得られる。
（１）メモリ異常検知部２０は、プログラム７Ａが共有メモリへデータの書き込みを行う際に、データの改変を検知するためのデータ改変検知符号を算出し、データおよびデータ改変検知符号を共有メモリに書き込む。
メモリ異常検知部２０は、プログラム７Ａが共有メモリからデータの読み込みを行う際に、共有メモリからデータおよびデータ改変検知符号を読み込んでデータの改変の有無を判断する。
共有メモリ管理部１７は、このメモリ異常検知部２０の判断結果に基づいてデータの改変の有無を判断する。このように、第３の実施の形態ではパリティビットの算出やパリティビットの整合の確認を共有メモリ管理部１７が行っていたが、本実施の形態ではメモリ異常検知部２０がハードウエアロジックによりそれらの処理を行う。
そのため、共有メモリ管理システム８の全体として処理の負荷を軽減できる。
【００８０】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。
上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【００８１】
３、３ａ、３ｂ、３ｃ  …  物理メモリ
６  …  メモリコントローラ
７  …  記憶部
７Ａ  …  プログラム
８  …  共有メモリ管理システム
１２  …  プログラム管理テーブル
１４、１４Ａ  …  共有メモリ管理テーブル
１５  …  物理メモリ信頼度テーブル
１６  …  安全度対応テーブル
１７  …  共有メモリ管理部
１８  …  共有メモリ作成部
１９  …  メモリ管理初期化部
２０  …  メモリ異常検知部
２１  …  メモリ異常記録テーブル
【図１】
0006469599.tif 000002
【図２】
0006469599.tif 000003
【図３】
0006469599.tif 000004
【図４】
0006469599.tif 000005
【図５】
0006469599.tif 000006
【図６】
0006469599.tif 000007
【図７】
0006469599.tif 000008
【図８】
0006469599.tif 000009
【図９】
0006469599.tif 000010
【図１０】
0006469599.tif 000011
【図１１】
0006469599.tif 000012
【図１２】
0006469599.tif 000013
【図１３】
0006469599.tif 000014
【図１４】
0006469599.tif 000015
【図１５】
0006469599.tif 000016
【図１６】
0006469599.tif 000017