(57)【要約】【課題】特にリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害されないようにする。【解決手段】ＲＡＭ診断管理テーブル１１には、ＲＡＭ１内の各エリア毎に、そのエリアに格納するデータのデータ種別、ポインタ、診断トリガー、診断手法、診断間隔（診断周期）やタスクレベル等の各種属性情報等からなる管理情報が記憶される。特に、各データ種別毎に適切な診断手法が予め決定されて登録されている。割込関連データ処理部１２等の各種機能部は、ＲＡＭ診断管理テーブル１１が示す内容に応じた診断処理を実行する。また、診断処理にはタスクレベルが割り当てられ、診断処理中であってもよりタスクレベルが高い処理が発生した場合には、割り込みを行わせる。【選択図】      図１
2010097432.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータの各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行するＲＡＭ診断装置であって、
各種管理情報に基づいて、前記各格納エリア毎にその格納データのリード／ライト制御を行うと共に、前記各格納エリアに対して、その格納エリアのＲＡＭ診断を行うものと判定したときに、その格納エリアに対応するＲＡＭ診断手法を用いてその格納エリアに対するＲＡＭ診断処理を実行するＲＡＭ制御／診断処理手段と、
前記ＲＡＭ制御／診断処理手段に関する前記各種管理情報を予め前記各格納エリアに記憶しておくＲＡＭ診断管理情報記憶手段と、
を有することを特徴とするＲＡＭ診断装置。
【請求項２】
前記ＲＡＭ診断処理手段は、前記ＲＡＭ診断処理に対して所定のタスクレベルを割り当てて実行し、該ＲＡＭ診断処理実行中に該ＲＡＭ診断処理のタスクレベルよりも高いレベルのタスクが発生した場合には、該ＲＡＭ診断処理を中断して該タスクを実行させることを特徴とする請求項１記載のＲＡＭ診断装置。
【請求項３】
前記各格納エリアのうち前記スタックデータに関する格納エリアは、任意のスタックデータと該スタックデータの反転データである反転スタックデータを格納するものであり、
前記ＲＡＭ制御／診断処理手段は、スタック割り込み処理によるスタックデータ書き込みの際に、該スタックデータの反転データを生成し、該スタックデータとその反転データとを前記スタックデータに関する格納エリアに格納し、該格納エリアからスタックデータを読み出す際には、前記スタックデータとその反転データを用いる反転二重化処理により該格納エリアのＲＡＭ診断処理を実行することを特徴とする請求項１または２記載のＲＡＭ診断装置。
【請求項４】
前記ＲＡＭ制御／診断処理手段による前記各ＤＭＡデータを格納する各格納エリアである各ＤＭＡエリア対するＲＡＭ診断処理に関しては、前記管理情報に応じて、チェックコードによるＲＡＭ診断処理を行うＤＭＡエリアと、定期的に「メモリ読み書き」によるＲＡＭ診断処理を行うＤＭＡエリアとがあることを特徴とする請求項１〜３の何れかに記載のＲＡＭ診断装置。
【請求項５】
アプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータの各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行するＲＡＭ診断装置のコンピュータを、
予め前記各格納エリアに対するＲＡＭ制御／診断処理に関する各種管理情報を記憶するＲＡＭ診断管理情報記憶手段と、
該各種管理情報に基づいて、前記各格納エリア毎にその格納データのリード／ライト制御を行うと共に、前記各格納エリアに対して、その格納エリアのＲＡＭ診断を行うものと判定したときに、その格納エリアに対応するＲＡＭ診断手法を用いてその格納エリアに対するＲＡＭ診断処理を実行するＲＡＭ制御／診断処理手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＡＭの故障診断装置に関する。
【背景技術】
【０００２】
従来より、パソコン等の情報処理装置やＣＰＵを内蔵したＩＣカード等においては、故障等の有無を診断する診断機能が付加されている。この診断処理はＣＰＵが行うものであり、ＣＰＵは自己診断の他、ＲＡＭやＲＯＭ等の故障診断を行う。たとえば、揮発性メモリであるＲＡＭに対する故障診断処理（ＲＡＭ診断）は、通常、ＣＰＵによってＲＡＭの各アドレスに所定のデータを書き込み、続いて、このデータを読み出して、これが正しいデータであるか否かを判定することによって行われる。
【０００３】
ここで、特許文献１や非特許文献１に開示される従来技術が知られている。
特許文献１の従来技術では、オンライン中に所定の周期で割込み禁止をした状態でメモリの診断を時間的に分割して全領域をおこなっている。
【０００４】
非特許文献１にはＲＡＭ診断の各種のアルゴリズムと当該アルゴリズムの診断効果が記載されている。
【特許文献１】特開２０００−６６９６５号公報
【非特許文献１】ＪＩＳ  Ｃ  ０５０８  電気・電子・プログラマブル電子安全関連系の機能安全
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１では周期的にＲＡＭ診断のために割込み禁止となる。当該ＲＡＭ診断方式では全ＲＡＭが診断対象となるため、リアルタイム性が必要な処理が妨害されずにリアルタイム性を保つには全ＲＡＭの診断を一巡する周期を長くする必要がある。しかし一巡する周期を長くすると異常発生から異常検知までの時間も長くなるという問題が発生する。
【０００６】
非特許文献１にはＲＡＭ診断の各種のアルゴリズムと当該アルゴリズムの診断効果が記載されているが、診断効果の高いアルゴリズムによってはＲＡＭの大きさによって１回の診断時間が数日かかるなど実現できない場合がある。また、実現できたとしてもリアルタイム性が必要な処理が診断処理により妨害され、リアルタイム性が保てない場合がある。
【０００７】
また、非特許文献１にはＲＡＭの診断方法のアルゴリズムが述べられているが、実装方法については記載されていない。また、非特許文献１に記載されているDouble RAM with hardware or software comparison and read/write test のアルゴリズムは（以降、反転二重化と呼ぶ）、アプリケーションプロブラムが書き込むデータ（アプリケーションデータ）には容易に適用できるが、スタックデータやＤＭＡ（Direct Memory Access）データが使用しているＲＡＭエリアの診断には容易には適用できない（ＯＳやハードウェアが書き込み制御をしている為）。
【０００８】
尚、上記反転二重化の診断手法では、ＲＡＭに格納する任意のデータに対してその反転データ（ビット反転したデータ；例えば0101→1010）を生成して、この反転データも格納する。そして、診断処理を行う際には、上記格納した任意のデータとその反転データを読出して、この反転データを反転して（例えば1010→0101）これが任意のデータと一致するか否かを判定するものである。ＲＡＭに異常が無ければ両者は一致するはずであり、不一
致である場合には異常有りと判定して、所定の異常対応処理を実行する。
【０００９】
本発明の課題は、アプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータ等の各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行するＲＡＭ診断装置において、予め登録される管理情報に基づいて、各格納エリア毎に個別のタイミングで適切な診断手法により診断処理を行うことができ、それによってリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害され難く、更にＲＡＭ診断処理中であっても割り込みを可能とすることで、上記リアルタイム性が必要な処理をリアルタイム性を保って実行させることができるＲＡＭ診断装置、そのプログラム等を提供することにある。
【課題を解決するための手段】
【００１０】
本発明のＲＡＭ診断装置は、アプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータの各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行するＲＡＭ診断装置であって、各種管理情報に基づいて、前記各格納エリア毎にその格納データのリード／ライト制御を行うと共に、前記各格納エリアに対して、その格納エリアのＲＡＭ診断を行うものと判定したときに、その格納エリアに対応するＲＡＭ診断手法を用いてその格納エリアに対するＲＡＭ診断処理を実行するＲＡＭ制御／診断処理手段と、前記ＲＡＭ制御／診断処理手段に関する前記各種管理情報を予め前記各格納エリアに記憶しておくＲＡＭ診断管理情報記憶手段とを有する。
【００１１】
上記構成のＲＡＭ診断装置によれば、予め登録される各種管理情報に基づいて各格納エリア毎に個別のタイミングで適切な診断手法により診断処理を行うことができ、それによってリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害され難くなる。
【００１２】
上記ＲＡＭ診断装置において、更に、例えば、前記ＲＡＭ診断処理手段は、前記ＲＡＭ診断処理に対して所定のタスクレベルを割り当てて実行し、該ＲＡＭ診断処理実行中に該ＲＡＭ診断処理のタスクレベルよりも高いレベルのタスクが発生した場合には、該ＲＡＭ診断処理を中断して該タスクを実行させる。
【００１３】
一般的な従来技術では、ＲＡＭ診断処理中は割り込み禁止となるので、特にＲＡＭ全体に対して一度にＲＡＭ診断処理を実行する場合、実行時間が非常に長くなり、リアルタイム性が必要な処理がＲＡＭ診断処理によって長時間妨害されることになり、問題が大きかった。これに対して、上記特許文献１の手法では、ＲＡＭ診断処理中は割り込み禁止となる点は一般的な従来技術と同じであるが、メモリ診断を時間的に分割しており、ＲＡＭ全体に対して一度にＲＡＭ診断処理を実行するのではなく、１回のＲＡＭ診断処理ではＲＡＭの領域の一部のみを処理対象としている。よって、１回当たりのＲＡＭ診断処理時間は短くて済むが、その間は割り込み禁止なので、リアルタイム性が必要な処理を実行できない。
【００１４】
これに対して、上記本発明のＲＡＭ診断装置では、ＲＡＭ診断処理中でも割り込み禁止とすることなく、ＲＡＭ診断処理に対して所定のタスクレベルを割り当てて実行することで、上記問題を解決できる。すなわち、上記リアルタイム性が必要な処理は、通常、そのタスクレベルは高いので、ＲＡＭ診断処理実行中にリアルタイム性が必要な処理が発生した場合には、割り込みによりリアルタイム性が必要な処理を実行することができる。
【００１５】
また、例えば、前記各格納エリアのうち前記スタックデータに関する格納エリアは、任意のスタックデータと該スタックデータの反転データである反転スタックデータを格納するものであり、前記ＲＡＭ制御／診断処理手段は、スタック割り込み処理によるスタック
データ書き込みの際に、該スタックデータの反転データを生成し、該スタックデータとその反転データとを前記スタックデータに関する格納エリアに格納し、該格納エリアからスタックデータを読み出す際には、前記スタックデータとその反転データを用いる反転二重化処理により該格納エリアのＲＡＭ診断処理を実行する。
【００１６】
従来では、スタックデータに関しては反転二重化方式は適用できなかったが、本発明のＲＡＭ診断装置では上記構成により適用可能となる。既存の一般的なＲＡＭ診断手法として例えば“ギャルパット”、“アブラハム”等の所謂「メモリ読み書き」によるＲＡＭ診断処理が知られているが、反転二重化方式は「メモリ読み書き」によるＲＡＭ診断処理よりも処理時間が短くて済むことが期待でき、スタックデータに対しても反転二重化方式を適用可能とすることで、ＲＡＭ診断処理の効率が向上することが期待できる。
【００１７】
また、例えば、前記ＲＡＭ制御／診断処理手段による前記各ＤＭＡデータを格納する各格納エリアで、各ＤＭＡエリア対するＲＡＭ診断処理に関しては、前記管理情報に応じて、チェックコードによるＲＡＭ診断処理を行うＤＭＡエリアと、定期的に「メモリ読み書き」によるＲＡＭ診断処理を行うＤＭＡエリアとがある。
【００１８】
ＤＭＡデータに関しても、チェックコードによる簡易なＲＡＭ診断処理が適用可能なものに対しては、チェックコードによるＲＡＭ診断処理を行うことで、ＲＡＭ診断処理の効率が向上することが期待できる。
【発明の効果】
【００１９】
本発明のＲＡＭ診断装置によれば、特にアプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータ等の各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行する場合において、予め登録される管理情報に基づいて、各格納エリア毎に個別のタイミングで適切な診断手法により診断処理を行うことができ、それによってリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害され難くでき、更にＲＡＭ診断処理中であっても割り込みを可能とすることで、上記リアルタイム性が必要な処理をリアルタイム性を保って実行させることができる。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のＲＡＭ診断システムの構成ブロック図である。
図１において、ＲＡＭ１は、本例のＲＡＭ診断システムの診断対象であるＲＡＭを示すものである。
【００２１】
ＣＰＵ２０は、ＲＯＭ１０とＲＡＭ１を制御する。特に、ＲＯＭ１０に格納された各種アプリケーションプログラムを読出し実行し、その際、必要に応じてＲＯＭ１０に格納された各種データを参照することで、ＲＡＭ１に対するデータ・リード・ライト制御や、ＲＡＭ１の診断を実行する。尚、上記ＲＯＭ１０に格納された各種アプリケーションプログラムや各種データを、ＲＡＭ１に格納する構成であってもよく、この場合には当然ＣＰＵ２０はＲＡＭ１からアプリケーションプログラム等を読み出して実行することになる。
【００２２】
ＲＯＭ１０は、まず、ＲＡＭ診断管理テーブル１１を記憶している。このＲＡＭ診断管理テーブル１１は、本方式のＲＡＭオンライン診断方式の管理をするためのテーブルであり、具体例は図２に示し、後に説明する。
【００２３】
また、ＲＯＭ１０は、割込関連データ処理部１２、アプリケーションデータ書込処理部１３、データ読込処理部１４、ＲＡＭ診断処理部１５の各種アプリケーションプログラム
を記憶している。ＣＰＵ２０が、これら各種アプリケーションプログラムを読出・実行することにより、これら各種処理部１２〜１５の後述する機能処理が実現される。その意味で、これら各種処理部１２〜１５は、ＣＰＵ２０内に示しても良い。以下の説明では、これら各種処理部１２〜１５は、ＣＰＵ２０によって読出・実行されるものであることを前提とする。つまり、これら各種処理部１２〜１５は、ＲＯＭ１０に記憶されたアプリケーションプログラム自体を意味するものではなく、これらプログラムがＣＰＵ２０によって読出・実行されてなる各種処理機能部を意味するものとする。
【００２４】
尚、これら割込関連データ処理部１２、アプリケーションデータ書込処理部１３、データ読込処理部１４、ＲＡＭ診断処理部１５をまとめて１つの機能処理部と見做してもよく、この１つの機能処理部を例えばＲＡＭ制御／診断処理部と言うものとする。
【００２５】
まず、割込関連データ処理部１２は、任意の割込のタイミングで又は定期的に、ＲＡＭ診断に関係する処理を行う機能部であり、その処理の一例を図３Ａのフローチャート図に示し、後に説明する。
【００２６】
アプリケーションデータ書込処理部１３は、通常のデータエリアへ反転二重化方式のＲＡＭ診断を適用するためのデータ書込処理を行う処理機能部である。つまり、任意のアプリケーションデータをＲＡＭ１に書き込む際に、後にデータ読込処理部１４によってこのデータを読出す際に反転二重化方式でのＲＡＭ診断を行わせる為に、このデータとこのデータの反転データとをＲＡＭ１に書き込む処理を行うものである。その処理の一例を図４のフローチャート図に示し、後に説明する。
【００２７】
尚、上記“通常のデータエリア”とは、ここでは、ＣＰＵ２０が実行する任意のアプリケーションによってＲＡＭ１に対して読み書きされるデータであって、後述する「固定データ」以外のデータの書き込み領域を意味するものとする。
【００２８】
データ読込処理部１４は、反転二重化方式で反転二重化のデータ読込みとＲＡＭ診断処理を行う処理機能部である。つまり、任意のアプリケーションデータを読み出す際に、上記の通り、アプリケーションデータ書込処理部１３によってこのデータの反転データもＲＡＭに記憶されているので、これら読出し対象のデータ及びその反転データを読み出して、反転二重化方式でのＲＡＭ診断を行うものである。その処理の一例を図５のフローチャート図に示し、後に説明する。
【００２９】
ＲＡＭ診断処理部１５は、ＲＡＭ１のメモリ読み書きによる一般的なＲＡＭ診断処理を行う処理機能部である。その処理の一例を図６を参照して後に説明する。
図２（ａ）は、ＲＡＭ診断管理テーブル１１のデータ構成例である。
【００３０】
ＲＡＭ診断管理テーブル１１は、各種データ毎の格納エリアを有するＲＡＭ１の当該各格納エリア毎に、そのデータ種別に応じた各種管理情報を記憶するものである。各種データ（データ種別）とは、例えば後述するアプリケーションデータ、スタックデータ、ＤＭＡデータ、固定データ等である。
【００３１】
図示の例では、ＲＡＭ診断管理テーブル１１は、番号３１、領域種別とポインタ３２、領域サイズ３３、診断トリガー３４、診断手法３５、属性３６等の各種管理情報を記憶する。
【００３２】
番号３１は、ＲＡＭ診断管理テーブル１１の各データ（レコード）を特定するための一意の通し番号である。
領域種別とポインタ３２（以下の説明ではポインタ３２と記す）は、ＲＡＭ１における
各種データ記憶領域（エリア）の領域種別と先頭アドレスである。例えば、番号３１＝１のレコードにおいては領域種別（＝スタックエリア）とその先頭ポインタが格納され、番号３１＝２のレコードにおいては領域種別（＝反転スタックエリア）とその先頭ポインタが格納される。これより、以下の説明では逐一述べないが、ＲＡＭ診断管理テーブル１１において処理対象のデータ（場合によってはその反転データ）に対応するレコードは、ポインタ３２を参照することで判別する。
【００３３】
尚、図２（ａ）に示す番号３１＝‘６’のレコードのポインタ３２に示すデータエリアとは、アプリケーションのデータを格納するエリアであり、番号３１＝‘７’のレコードのポインタ３２に示す反転データエリアとは、このアプリケーションのデータの反転データを格納するエリアを意味する。上記アプリケーションのデータとは、ＣＰＵ２０が実行する任意のアプリケーションによってＲＡＭ１に対して読み書きされるデータを意味するが、ここではそのうちの「固定データ以外のデータ」を意味するものとする。上述した“通常のデータエリア”が、上記番号３１＝‘６’のレコードのポインタ３２に示すデータエリアに相当する。つまり、上記アプリケーションのデータは、上述した“通常のデータエリア”に格納されるデータである。
【００３４】
尚、この様に、アプリケーションのデータだけでなく、スタックデータに関してもその反転データを格納するエリアを設け且つスタックデータ格納の際に反転データを生成して格納することで、スタックデータに関してもＲＡＭ診断手法として反転二重化方式を適用可能としたことも、本手法の特徴の１つである。詳しくは後述する。
【００３５】
尚、スタックエリア、反転スタックエリアに関しては、上記先頭ポインタだけでなく、後述するように最後に積んだデータの位置を示すポインタも別途記憶管理している。
領域サイズ３３は、上記各種データ記憶領域（エリア）のサイズである。
【００３６】
診断トリガー３４は、上記各種データ記憶領域（エリア）に対してＲＡＭ診断処理を実行するトリガーである。診断手法３５は、上記各種データ記憶領域（エリア）に対するＲＡＭ診断処理の診断手法である。診断手法３５は、各データ種別毎に最適な診断手法を、予め実験等により求めて、登録しておくものである。これは、例えば実験により各データ種別毎に各種診断手法を適用してみて、各データ種別毎に最も処理時間が短かったものを最適な／適切な診断手法と判断するものである。
【００３７】
診断トリガー３４は、例えば上記スタックデータや上述した“アプリケーションのデータ”の記憶領域に関しては、図示の番号３１＝１，２，６，７のレコードに示すように、スタック割込、アプリ呼び出しとなっている。すなわち、スタック処理（スタックデータの書込／読出）や、アプリケーションによる任意のデータの書込／読出処理の際に、診断処理を行うものである。これは、詳しくは後述するように、書き込み処理の際に、書き込み対象データだけでなくその反転データも生成・格納し、異常か否かを診断する処理は、データ読出し処理の際に行う。尚、反転データを用いるのは、スタック割込、アプリ呼び出しの場合、診断手法３５が反転二重化方式であるからである。
【００３８】
一方、ＤＭＡエリアに関しては、ＤＭＡデータの書込／読出処理はＣＰＵ２０では管理・検知できない。すなわち、上記のように書込／読出のタイミングで診断処理を行うことは出来ないので、診断トリガー３４は定周期となっている。つまり、予め設定される時間間隔で定期的に診断処理を行う。そして、各ＤＭＡデータの格納領域である各ＤＭＡエリアに関しては、図示の番号３１＝３，４等のレコードに示す通り、診断手法３５は「メモリ読み書き」である。この「メモリ読み書き」は、既存の一般的な診断手法であり、ここでは後に図６で説明するアブラハム方式を用いるが、この例に限らない（例えばギャルパット方式等であってもよい）。
【００３９】
但し、各ＤＭＡエリアのうち、ＤＭＡ処理終了時にアクセスされるエリア（図示の例では番号３１＝５であるＤＭＡｎエリア）に関しては、そのときにＤＭＡ終了割込がＣＰＵ２０に入力されるので、これを診断処理のトリガーとする。また、その際にＣＲＣ（Cyclic Redundancy Check；巡回冗長検査）データ（一般的に例えば１６bit）も一緒に入力されるので、ＣＲＣを用いる診断手法３５を適用している。
【００４０】
また、アプリケーションが扱うデータのうち、図示の番号＝８等のレコードで示す閾値の固定的な（つまり、書換／更新が行われない）データである固定データに関しては、図示の通り、診断トリガー３４は定周期であり、診断手法３５はＣＲＣである。
【００４１】
属性３６は、診断手法に付随する各種データであり、ここでは自己診断率等のデータである。自己診断率については後述するが、“99%”や“90%”で表される割合を指す。更に、定周期で診断を行うエリアに関しては、その診断間隔とタスクレベルが設定されている。また、上記ＤＭＡｎエリアに関しても、タスクレベルが設定される。
【００４２】
ここで、これらのエリアに関してタスクレベルを設定する理由について説明する。
まず、例えばリアルタイムオペレーティングシステム等においては、各タスクに優先度が割り当てられ、タスクの優先度（ここではレベルという）に基づいてタスク実行スケジューリングを行うことが知られている。あるタスクレベルのタスクを実行中に、これよりもレベルが高いタスクを実行可能となった場合には、即座にタスク切替を行うものである。
【００４３】
そして、図７（ａ）に示すように従来ではＲＡＭ診断処理中は一切の割り込みを禁止していたのに対して、図７（ｂ）に示すように本手法ではＲＡＭ診断処理中であっても割り込み可能となっている。これは、ＲＡＭ診断処理のレベルよりも高いレベルのタスク等からの割り込みを許可し、当該高いレベルのタスク等の処理を実行後に、ＲＡＭ診断処理を再開する。ここで、ＲＡＭ診断処理のレベルは、基本的には、そのＲＡＭ診断処理のトリガーとなった処理のレベル（スタック割込みレベル、アプリケーションやタスクのレベル等）を適用するが、定周期診断に関してはトリガーは後述するステップＳ８の処理（登録された周期か？）であり処理レベルが無いので、属性３６に設定している。尚、属性３６に設定するタスクレベルは、人間が任意に決めてよいが、上述したことから、最もレベルが高い（優先度が高い）ものに設定することは望ましくない。
【００４４】
また、図７（ｃ）にはスタックデータ処理のレベルについて示す。図示のように任意のレベルの任意のアプリケーションを実行中に、スタックデータを書き込む際には、スタック割込みにより書き込みを行うが（従来では標準スタック関数による；本手法では図３Ａの処理による）、スタックは各タスクで共通に使用されるので、レベルを上げて処理を行う。つまり、図示のように、スタック割込みレベルは、アプリケーションのレベルよりも高いレベルとなっている（例えば最も高いレベルとするがこの例に限らない。これは、従来からこの様になっている）。一方、スタックデータの読込み処理に関しては、図示の通りアプリケーションにより実行されるのでアプリケーションと同じレベルで動作することになる。
【００４５】
尚、図示の例では、固定データに関しては番号３１＝８の１つの管理レコードのみ示すが、固定データが複数存在する場合には、それぞれについて同様の管理レコードが登録されていてよい。また、各固定データエリア毎にその固定データのＣＲＣ等のチェックコードを予め生成して、これを例えばテーブル１１の属性３６等に記憶しておいてもよい。
【００４６】
図２（ｂ）には、ＲＡＭ１内の記憶領域における上記各ポインタ３２の位置の具体例を
示す。同図に示す１，２，３等の番号は番号３１に相当し、よって例えば図示の番号１はスタックエリア先頭ポインタの位置を意味する。
【００４７】
尚、番号１と２、番号６と７は、ＲＡＭのワード線間隔と同じにならないようアドレスを配置する。これは、よく知られていることなので、特に説明しない。
図３Ａは、上記割込関連データ処理部１２の処理フローチャート図である。
【００４８】
当該処理は下記の何れかの割込で起動する。
・DMA終了割込
・スタック割込
・定周期時間割込
まず、本処理が上記何れの割込で起動したものであるのかをステップＳ１，Ｓ６，Ｓ８により判定する。すなわち、例えば、スタック割込か否かを判定し（ステップＳ１）、スタック割込の場合は（ステップＳ１，ＹＥＳ）ステップＳ２の処理へ進み、スタック割込でない場合は（ステップＳ１，ＮＯ）ステップＳ６の処理へ進む。
【００４９】
ステップＳ２では、スタックの獲得か返却かを判断する。スタックの獲得の場合は（ステップＳ２,ＹＥＳ）、ステップＳ３、Ｓ４に進み、タスク開始時のスタックの獲得の場合は（ステップＳ４,ＹＥＳ）、ステップＳ５、ＥＮＤへ進む。タスク開始時のスタック獲得でない場合は（ステップＳ４,ＮＯ）、ＥＮＤへ進む。
【００５０】
スタック獲得の場合は（ステップＳ２,ＹＥＳ）、まずスタックポインタ及び反転スタックポインタを更新する（ステップＳ３）。このとき、スタックポインタは、図３Ｂに示す“旧スタックポインタ”の位置になっており、ステップＳ３の処理を行うことで、スタックポインタの位置を図示の新スタックポインタの位置へと移動させる。位置の移動量はスタック獲得のパラメータで指定される。タスク開始時のスタックの獲得の場合は（ステップＳ４,ＹＥＳ）、レジスタ退避のためレジスタのデータをスタックエリアに書き込み、及び当該データをビット反転させた（例えば0101→1010）反転データを生成して反転スタックエリアに書き込む（ステップＳ５）。
【００５１】
スタックの返却の場合は（ステップＳ２,ＮＯ）、ステップＳ１２へ進み、タスク終了の場合は（ステップＳ１２，ＹＥＳ）ステップＳ１３、１４、ＥＮＤへ進む。タスク終了時のスタック返却でない場合は（ステップＳ１２,ＮＯ）、ステップＳ１４、ＥＮＤへ進む。
【００５２】
タスク終了の場合は（ステップＳ１２,ＹＥＳ）、レジスタ復元のためレジスタのデータをスタックエリアから読み込み、及び当該データの反転データを反転スタックエリアから読み込み反転照合する（例えば当該データが0101の場合は反転データは1010であり、反転照合する場合は反転データ1010を反転し0101として当該データ0101と合致するか判断する）。照合が一致する場合は当該データをレジスタに復元する。照合が一致しない場合は異常処理を行う。その後、スタックポインタ及び反転スタックポインタを更新する（ステップＳ１４）このとき、スタックポインタは、図３Ｂに示す“新スタックポインタ”の位置になっており、ステップＳ１４の処理を行うことで、スタックポインタの位置を図示の旧スタックポインタの位置へと移動させる。位置の移動量はスタック返却のパラメータで指定される。
【００５３】
本例では、アプリケーションがスタックにデータを書き込む際に、図４のデータ書込処理を行うことで当該データをスタックエリアに書き込み、更に反転スタックエリアへ当該データの反転データを書き込む。当該処理はアプリケーションのレベルと同じレベルとする。そして、当該アプリケーションレベルより高いレベルのタスクがあった場合には、こ
のタスクを優先して実行させる。
【００５４】
そして、本例では、アプリケーションがスタックデータを読み出す際に、当該スタックデータと反転データとを用いた後述する図５のＲＡＭ診断処理を実行することで、このスタックエリアに異常があるか否かを判定する。この場合の診断処理のレベルは、当該スタックデータを読み出すアプリケーションのレベルと同じレベルとする。そして、診断処理中にこの診断処理のレベルよりも高いレベルのタスクがあった場合には、このタスクを優先して実行させる。
【００５５】
尚、スタックポインタの位置は、スタックエリア先頭ポインタからの相対アドレスとして記憶管理される。これは、反転スタックポインタについても同様である。
尚、スタック返却の場合におけるステップＳ５の処理は、上記獲得の場合における同処理とは逆に、例えば現在のスタックポインタが新スタックポインタの位置である場合、これを旧スタックポインタの位置へと移動させるものである。これは反転スタックエリアについても同様である。
【００５６】
尚、スタックポインタのスタック先頭からの相対アドレスと反転スタックポインタの反転スタック先頭からの相対アドレスが一致しているかをチェックして、一致していない場合はＲＡＭ異常と判定する処理を行うようにしてもよい。
【００５７】
上記ステップＳ６の処理では、ＤＭＡ終了割込かを判断する。
ＤＭＡ終了割込の場合（ステップＳ６，ＹＥＳ）、ステップＳ７の処理を行う。違う場合は（ステップＳ６，ＮＯ）ステップＳ８へ進む。
【００５８】
ステップＳ７の処理は、ＤＭＡ終了割込に対応するエリアに対する診断処理であり、上記図２（ａ）に示す例ではＤＭＡｎエリアの診断処理を行うことになり且つその診断手法はＣＲＣである。更に、その属性３６を参照することで、この診断処理のレベルを決定して診断処理を実行する。図２（ａ）に示す例ではタスクレベル３となっているので、この診断処理はタスクレベル３で実行することになり、もし診断処理中にタスクレベル１や２等の高レベルの他のタスクが実行可能となった場合には、診断処理を一時中断して、当該レベル（優先度）が高いタスクを実行する。レベルが高いタスクとは、例えば上述したリアルタイム性が必要な処理である。上述したように従来ではリアルタイム性が必要な処理が診断処理により妨害され、リアルタイム性が保てない場合があるという問題があったが、本手法によりこの問題は解決される。
【００５９】
また、上記の場合、診断対象となるエリアのアドレス等は、図２のテーブルにおいて、その診断トリガー３４が「ＤＭＡ終了割込」であるレコードのポインタ３２や領域サイズ３３を参照すれば分かる。これは、他のトリガー（スタック割込やアプリ呼び出し等）による診断処理の際にも同様である。
【００６０】
上記ステップＳ７の処理では、処理対象エリア（上記の例ではＤＭＡｎエリア）のデータのＣＲＣを生成し、このデータに付加されているＣＲＣと一致するか否かを判定し、一致しない場合はＲＡＭ異常と判定する。尚、チェックコードはＣＲＣ以外でも可能である。
【００６１】
ＤＭＡ終了割込でも無い場合には（ステップＳ６，ＮＯ）、現在時刻と上記属性３６における診断間隔とに基づいて、診断トリガー３４が定周期である各エリアのうち、登録された診断周期となったものがあるか否かを判定し（ステップＳ８）、該当するエリアがある場合には（ステップＳ８，ＹＥＳ）ステップＳ９へ進み、無い場合には（ステップＳ８，ＮＯ）本処理を終了する。尚、この処理は一例であり、例えば上記属性３６における各
診断間隔を不図示の各タイマにセットして、何れかのタイマがタイムアップすることで上記定周期時間割込が発生する構成とした場合には、上記ステップＳ８の判定は必要なく、代わりに例えば「定周期時間割込か？」等の判定を行う。但し、図３Ａの処理は、上記３つの割り込みの何れかによって起動されるので、ステップＳ１，Ｓ６の判定がＮＯで且つ「定周期時間割込か？」の判定がＮＯとなることは、基本的にあり得ないと考えてよい。尚、「定周期時間割込か？」の判定がＹＥＳの場合、ステップＳ９以降の処理を実行するが、これら処理が完了したら、タイムアップしたタイマを再びセットする必要がある。
【００６２】
ステップＳ９では、上記該当するエリアがＤＭＡデータの格納エリア（ＤＭＡエリア）であるか否かを判定する。そして、ＤＭＡエリアでは無い場合には（ステップＳ９，ＮＯ）、図２（ａ）に示す例では診断トリガー３４が定周期であるものでＤＭＡエリア以外のエリアは固定データエリアのみであるので、ここでは固定データエリアに関して診断処理を行う。固定データエリアに関しては、図２（ａ）に示すように診断手法３５はＣＲＣであるので、上記ＤＭＡｎエリアの場合と同様に、上記ステップＳ７の処理を実行する。尚、固定データエリアには、固定データを格納する際にそのＣＲＣを生成して一緒に格納してある。尚、各エリアに格納されるデータの種別は、例えばポインタ３２に格納してあり、これによってＤＭＡエリアであるか否かを判別できる。また、ステップＳ７の処理では上記の通り属性３６に格納されているタスクレベルのレベルで診断処理を実行させるものであり、図２に示す例では固定データエリアに関してはタスクレベル１となっているので、レベル１で処理実行させることになる。
【００６３】
一方、診断対象がＤＭＡデータである場合には（ステップＳ９，ＹＥＳ）、まずＤＭＡを禁止する。ＤＭＡ中の場合はＤＭＡを停止させる（ステップＳ１０）。そして、診断対象エリアの診断手法３５に従って、この場合は上記「メモリ読み書き」手法により診断処理を行う（ステップＳ１１）。「メモリ読み書き」手法の一例を図６に示し後に説明する。
【００６４】
また、図２（ａ）に示す各レコードのうち、番号３１＝６，７のレコードはデータエリアと反転データエリアに関するものであり、データエリアにはＣＰＵ２０が実行する任意のアプリケーションが読み書きするデータ（上記アプリケーションデータ）が格納され、その反転データが反転データエリアに格納される。
【００６５】
上記アプリケーションデータ書込処理部１３は、このアプリケーションデータをＲＡＭ１に書き込む処理を行う機能部であり、上記データ読込処理部１４はこのアプリケーションデータまたはスタックデータをＲＡＭ１から読み出す処理を行う機能部である。これら各機能部は、何れもアプリケーションによる機能と考えてよく、アプリケーション実行中にこれら各機能部の処理が行われる。つまり、これらの各機能部の処理は、アプリケーション関数とするか、またはアプリケーションのプログラム内にインライン展開している。
【００６６】
この様に、アプリケーションデータに関しては、アプリケーションデータ書込処理部１３とデータ読込処理部１４とによってデータ・リード／ライト処理が行われると共にＲＡＭ診断に関する処理が実行される(上記の通り、図３Ａの処理にはアプリケーションデータに関する処理はない)。このＲＡＭ診断は、反転二重化方式の診断処理である。
【００６７】
また、スタックデータに関しては、上記図３Ａにおけるスタックの獲得処理（スタックデータの書き込み含む）／返却処理は、従来では例えばＣＰＵ２０内に予め用意されている標準スタック関数を、例えばアプリケーション実行中に当該アプリケーションが呼び出して実行させるものであり、標準スタック関数では反転データの生成・格納は行われていないので、反転二重化方式のＲＡＭ診断は行えなかった。これに対して、本装置では、アプリケーション実行中にスタックに関する処理があった場合には当該アプリケーションが
スタック割込で図３Ａの処理を実行させることで、スタックの獲得処理／返却処理が行われると共に、反転データの生成・書き込みも行われる。そして、上記データ読込処理部１４は、アプリケーションデータ／スタックデータの読み出しを行うと共にその際にＲＡＭ診断処理を行うものであり、スタックデータの読出しの際にも、上記アプリケーションデータの場合と同様に、反転二重化方式のＲＡＭ診断処理を行う。この様に、本装置では、スタックエリアに関しても、反転二重化方式のＲＡＭ診断処理を行うことができる。
【００６８】
上記の通りアプリケーションデータとスタックデータに関しては、診断手法として反転二重化方式が適用されるものであり、データ書き込み時に反転データを生成・格納しておく必要がある。スタックデータに関しては、図３ＡのステップＳ４で書き込み処理が実行されているが、アプリケーションデータに関してはアプリケーションデータ書込処理部１３による以下に説明する図４の処理が実行される。そして、アプリケーションデータ、スタックデータの何れにおいても、そのデータ読出しの際にデータ読込処理部１４による後述する図５の処理によって、ＲＡＭ異常か否かの診断が行われる。
【００６９】
尚、上記図３Ａの処理は、図２（ａ）に示すＲＡＭ診断管理テーブル１１の各種管理情報を参照しながら実行するものと考えても良い。例えば、ステップＳ１の判定がＹＥＳになった場合、ＲＡＭ診断管理テーブル１１における該当レコード（診断トリガー３４が「スタック割込」のレコード）を参照して、その診断手法３５（反転二重化）を認識することで、ステップＳ４の処理が行われるものと考えることもできる。これは、他の処理でも同様であり、特にＲＡＭ診断処理実行に際して、適用すべき診断手法３５を認識する為にＲＡＭ診断管理テーブル１１を参照するものと考えても良い。勿論、最初から、ＲＡＭ診断管理テーブル１１の各種管理情報（特に診断手法）の内容を反映させたプログラムを作成するものであってもよい。何れの場合でも、基本的にＲＡＭ診断管理テーブル１１の各種管理情報の内容に基づいて、ＲＡＭ診断処理が実行されることに変わりは無い。尚、これは、図３Ａに限らず、図４以降の他のフローチャートの処理についても同様である。
【００７０】
図４に、上記アプリケーションデータ書込処理部１３の処理フローチャートを示す。
当該処理は、アプリケーション関数とするか、またはアプリケーションのプログラム内にインライン展開している。
【００７１】
図４の処理では、まず、指定された相対アドレスにより、データエリア先頭ポインタからの相対アドレスの位置へアプリケーションデータを書き込む（ステップＳ２１）。更に、このアプリケーションデータの反転データを生成して、指定された相対アドレスにより、反転データエリア先頭ポインタからの相対アドレスの位置へ反転データを書き込む（ステップＳ２２）。尚、相対アドレスは例えばアプリケーションによって指定され、データエリア先頭ポインタは図２（ａ）のＲＡＭ診断管理テーブル１１を参照すれば分かる。これは他の処理／データに関しても同様であり、逐一説明しないものとする。
【００７２】
図５に、データ読込処理部１４の処理フローチャートを示す。
上記の通り、この処理は、アプリケーションによるアプリケーションデータまたはスタックデータの読出し処理の際に実行され、当該処理はアプリケーション関数とするか、またはアプリケーションのプログラム内にインライン展開する。
【００７３】
図５の処理では、指定されたスタックデータまたはアプリケーションデータの相対アドレスと先頭ポインタに基づいて所定の領域からデータを読み出す。すなわち、スタックデータであれば、スタックエリア先頭ポインタからの相対アドレスの位置から、スタックデータを読み出す。アプリケーションデータであれば、データエリア先頭ポインタからの相対アドレスの位置からアプリケーションデータを読み込む（ステップＳ３１）。
【００７４】
反転データに関しても該当位置からデータを読出す。そして、読み出した反転データを再反転する。つまり、スタックデータであれば、反転スタックエリア先頭ポインタからの相対アドレスの位置から、反転スタックデータを読み出し、これを反転する。アプリケーションデータであれば、反転データエリア先頭ポインタからの相対アドレスの位置から反転アプリケーションデータを読み込み、これを反転する（ステップＳ３２）。
【００７５】
そして、ステップＳ３１で取得したデータとステップＳ３２の処理結果として得られるデータとを比較して、一致するか否かを判定する（ステップＳ３３）。つまり、スタックデータであれば、ステップＳ３１で得たスタックデータと、ステップＳ３２で得た「反転スタックデータを反転したデータ（再反転スタックデータというものとする）」とが一致するか否かを判定する。アプリケーションデータであれば、ステップＳ３１で得たアプリケーションデータと、ステップＳ３２で得た「反転アプリケーションデータを反転したデータ（再反転データというものとする）」とが一致するか否かを判定する。
【００７６】
そして、一致する場合には（ステップＳ３３，ＹＥＳ）、正常であるものとして、診断処理を終了する。一方、不一致の場合には（ステップＳ３３、ＮＯ）、ＲＡＭ１における当該診断対象エリアに異常が発生したものと判定して、所定のＲＡＭ異常処理（例えばＲＡＭ異常発生を通知する処理等）を実行する（ステップＳ３４）。
【００７７】
図６は、上記ＲＡＭ診断処理部１５によって実行される処理の一例を説明する為の図である。つまり、上記「メモリ読み書き」診断手法の一例を説明する為の図であり、ここではアブラハム方式を説明する為の図である。
【００７８】
この方式では、まず、ＲＡＭにおける診断対象エリアのデータを、バッファへ退避させた後、以下の診断処理を行う。
まずイニシャライズ処理としてＲＡＭにおける診断対象エリアの全Cellを‘０’にする。そして、まず、全CellをビットＯＮした後（‘１’にする）にリード処理を行うことで、全て‘１’であるか否かをチェックする。続いて、全CellをビットＯＦＦした後（‘０’にする）にリード処理を行うことで、全て‘０’であるか否かをチェックする。これらを２度繰り返す。
【００７９】
更に、全CellをビットＯＮして直ちにビットＯＦＦした後にリード処理を行うことで、全て‘０’であるか否かをチェックする。これも２回実行する。その後、更に、リセット処理として全CellをビットＯＮした後、全CellをビットＯＦＦして直ちにビットＯＮした後にリード処理を行うことで、全て‘１’であるか否かをチェックする。これも２回実行する。
【００８０】
以上の診断処理が完了したら、バッファへ退避させたデータを、ＲＡＭの診断対象エリアに戻して、本処理は終了する。
以上、アブラハム方式について説明したが、上述してあるように、「メモリ読み書き」診断手法はこの例に限るものではない。
【００８１】
尚、反転二重化やチェックコードによる診断手法は、基本的に、「メモリ読み書き」診断手法よりも時間が掛からない。よって、特にスタックデータに関しても反転二重化による診断手法を適用できるようにしたことで、あるいはＤＭＡデータであってもチェックコードによる判定が可能なものにはチェックコードによる診断手法を適用することで、リアルタイム性を妨害し難くなる。更に、診断処理中は割り込み禁止としていた従来手法に比べて、本手法では診断処理中でもこの診断処理にタスクレベルを割り当てることで、特にリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害されないことになる。
【００８２】
以上説明したように、本例のＲＡＭ診断システムでは、ＲＡＭ１の各領域種別（各種データの格納エリア）に対応づけて、最適な／適切な（例えば処理時間が短くて済み（ＣＰＵ負荷が小さくて済み）、リアルタイム性を妨害し難い）ＲＡＭ診断手法を予め決定しておき、各領域種別毎に個別にその診断トリガー、診断手法に従ってその領域（エリア）の診断を実行する。例えばデータ読出しのときやＤＭＡ終了時に、ＲＡＭ診断処理を行うエリアもあり、適切なタイミングでＲＡＭ診断を行うことができ、また定周期でＲＡＭ診断を行う場合（特に診断間隔を短くする必要がある場合）と比べて、ＲＡＭ診断回数が少なくてすむことも期待でき、ＣＰＵの負荷を軽減できることが期待できる。
【００８３】
また、ＲＡＭ診断処理を実行中、割り込み禁止にすることなく、リアルタイム性が必要な処理（タスクレベルが高い処理）が実行可能となる。これより、ＲＡＭ診断に関して、リアルタイム性が必要な処理がＲＡＭ診断処理によって妨害されず、リアルタイム性を保って実行することができる。そのために、ＲＡＭ診断管理テーブル１１を設け、ＲＡＭ１の各領域種別に対応づけて、診断トリガー、ＲＡＭ診断手法、ＲＡＭ診断処理のタスクレベル等を管理する。
【００８４】
アプリケーションデータエリア、及びスタックエリアについては、反転二重化方式によるＲＡＭ診断処理を行う。本手法では、ＲＡＭ診断処理に対してタスクレベルを割り当て、これよりレベルの高い（例えばリアルタイム性が必要な）タスクの割り込みを許可する。すなわち、アプリケーションデータエリアに関しては、当該データをアクセスするタスク（アプリケーション）のレベルで、ＲＡＭ診断処理を動作させる。一方、スタックエリアについては、スタックデータ書き込み時はスタック割り込みレベルで動作させ、スタックデータ読み込み時は当該データをアクセスするタスク（アプリケーション）のレベルで、ＲＡＭ診断処理を動作させる。
【００８５】
各ＤＭＡデータを格納する各ＤＭＡエリアについては、そのＤＭＡデータにＣＲＣ等のチェックコードが付加される場合には、チェックコードを用いたＲＡＭ診断処理を実行する。このＲＡＭ診断処理のレベルは、ＲＡＭ診断管理テーブル１１（属性３６）に予め登録されているので、これを参照することで、この登録されたレベルでＲＡＭ診断処理を動作させる。尚、上記の一例では、ＣＲＣ等のチェックコードが付加されるＤＭＡデータは、ＤＭＡ処理の最後のデータ（ＤＭＡｎエリアのデータ）であるので、診断トリガーはＤＭＡ終了割込となっているが、この例に限らず、例えば診断トリガーが定周期となる場合もあってよい。
【００８６】
また、チェックコードを付加できないＤＭＡデータに関しては、各ＤＭＡデータエリア毎に予めＲＡＭ診断管理テーブル１１に設定されている所定周期で、各ＤＭＡデータエリア毎に周期的に（定周期で）ＲＡＭ診断処理を実行する。この診断処理の際にはＤＭＡ転送を禁止し、また診断手法は一般的な「メモリ読み書き」診断等とする。この場合も、当該診断対象のＤＭＡデータエリアに関してＲＡＭ診断管理テーブル１１（属性３６）に予め登録されたタスクレベルで、ＲＡＭ診断処理を動作させる。
【００８７】
また、固定データの場合は、予め各固定データの領域を複数設定しそれぞれにＣＲＣデータ等のチェックコードを付加する。そして、各固定データの領域毎に予めＲＡＭ診断管理テーブル１１に登録された周期で、周期的に（定周期で）チェックコードを用いたＲＡＭ診断処理を実行する。この場合も、当該診断対象の固定データエリアに関してＲＡＭ診断管理テーブル１１（属性３６）に予め登録されたレベルで、ＲＡＭ診断処理を動作させる。
【００８８】
本例のＲＡＭ診断システムによれば、上述した効果、すなわち、ＣＰＵによるＣＰＵ外部のＲＡＭの診断処理（オンラインのＲＡＭ診断処理）を、リアルタイム性が必要な処理
がＲＡＭ診断処理によって妨害されず、更にリアルタイム性を保って実行することができ、ＲＡＭ診断に伴う処理性能の低下を防止することができるという効果が得られる。すなわち、本例のＲＡＭ診断装置によれば、特にアプリケーションが読み書きするデータであるアプリケーションデータの格納エリア以外にも、各ＤＭＡデータ、スタックデータ、固定データ等の各種データ毎の格納エリアを有するＲＡＭに対するＲＡＭ診断処理を実行する場合において、上記ＲＡＭ診断管理テーブル１１等に予め登録される上記各種管理情報に基づいて、各格納エリア毎に個別のタイミングで適切な診断手法により診断処理を行うことができ、それによってリアルタイム性が必要な処理がＲＡＭ診断処理によって妨害され難くでき、更にＲＡＭ診断処理中であっても割り込みを可能とすることで、上記リアルタイム性が必要な処理をリアルタイム性を保って実行させることができる。
【００８９】
そして、更に以下に記す効果も得られる。
つまり、ＲＡＭ診断管理テーブル１１でＲＡＭ診断方式と適用ＲＡＭ領域のサイズが管理されることにより、ＲＡＭ診断方式から機能安全に係る自己診断率（DC:   Diagnostic
Coverage）が予め分かるので、これを上記の通りテーブル１１の属性３６に登録しておくことで、適用ＲＡＭ領域のサイズからＲＡＭ全体に対する当該診断方式の比率を求めることにより、ＲＡＭ全体の自己診断率を求めることが容易に可能となる。
【００９０】
すなわち、以下の式により、ＲＡＭ全体の自己診断率を求めることができる。
ＲＡＭ全体の自己診断率  ＝  Σ自己診断率ｉ×（領域サイズｉ／ＲＡＭ全体領域サイズ）
尚、上記式におけるＲＡＭ全体領域サイズは、当然、予め分かっているものであり、予め登録等しておく。また、上記式における“ｉ”は、テーブル１１における番号３１を意味する。つまり、上記“領域サイズｉ”、“自己診断率ｉ”とは、番号３１＝ｉのレコードにおける領域サイズ３３に登録されている領域サイズ、及び属性３６に登録されている自己診断率を意味する。例えばｉ＝１であれば、図２（ａ）に示す例では、領域サイズ＝１ｋバイト、自己診断率＝９９％である。この様に、テーブル１１に予め登録されたデータに基づいて、例えばＣＰＵ２０等が上記テーブル１１のデータや上記の式に基づいてＲＡＭ全体の自己診断率の算出処理を行うことができ、ＲＡＭ全体の自己診断率を容易に求めることができる。
【００９１】
また、上記ＲＡＭ診断方式に応じた自己診断率ｉは、ここでは例えば最大自己診断率（低→６０％、中→９０％、高→９９％）を用いるものとするが、この例に限るものではない。これは例えば参考資料（ＩＥＣ61508-7）に示されており、故障検知技法としてよく知られているものであるのでここでは特に説明しないが、例えばＲＡＭ試験の方式として知られている“ウォークパス”、“ギャルパット”、“アブラハム”の各方式を例にすると、“ギャルパット”の“アブラハム”の最大自己診断率が９９％であるのに対して、“ウォークパス”の最大自己診断率は９０％であることが知られている。
【００９２】
また尚、上記参考資料等によって知られているように、危険側故障率λＤは、診断により検出される故障率λＤＤと、検出されずに残留する故障率λＤＵとから成る。上記自己診断率（ＤＣ）は、上記危険側故障率λＤはのうち上記検出される故障率λＤＤの割合を意味する。つまり、自己診断率（ＤＣ）は以下の式により表され、この式にしたがって各自己診断率ｉを求めるようにしてもよい。
【００９３】
自己診断率（ＤＣ）  ≡  λＤＤ／λＤ
【図面の簡単な説明】
【００９４】
【図１】本例のＲＡＭ診断システムの構成ブロック図である。
【図２】（ａ）はＲＡＭ診断管理テーブルのデータ構成例、（ｂ）はポインタの配置例である。
【図３Ａ】図１の割込関連データ処理部の処理フローチャート図である。
【図３Ｂ】スタック／反転スタックポインタの一例である。
【図４】図１のアプリケーションデータ書込処理部の処理フローチャート図である。
【図５】図１のデータ読込処理部の処理フローチャート図である。
【図６】メモリ読み書き診断手法の一例であるアブラハム方式を説明する為の図である。
【図７】（ａ）は従来のＲＡＭ診断処理中の割り込みに関して説明する為の図であり、（ｂ）は本手法のＲＡＭ診断処理中の割り込みに関して説明する為の図であり、（ｃ）はスタックデータ処理のレベルを示す図である。
【符号の説明】
【００９５】
１  ＲＡＭ
１０  ＲＯＭ
１１  ＲＡＭ診断管理テーブル
１２  割込関連データ処理部
１３  アプリケーションデータ書込処理部
１４  データ読込処理部
１５  ＲＡＭ診断処理部
２０  ＣＰＵ
３１  番号
３２  領域種別とポインタ
３３  領域サイズ
３４  診断トリガー
３５  診断手法
３６  属性
【図３Ａ】
2010097432.tif 000003
【図４】
2010097432.tif 000004
【図５】
2010097432.tif 000005
【図６】
2010097432.tif 000006
【図７】
2010097432.tif 000007
【図１】
2010097432.tif 000008
【図２】
2010097432.tif 000009
【図３Ｂ】
2010097432.tif 000010