説明

故障検出プログラム作成装置、プリプロセッサ、故障検出プログラム作成方法、及びプログラム

【課題】プログラムの本来性能を低下させずにプロセッサの故障検出率を高めることを目的として、アセンブリ言語で記述されたソースプログラムに対し、演算を二重化するコードをプログラムの空き部分に挿入することを特徴とする。
【解決手段】プリプロセッサ(10)は、アセンブリ言語で記述したプログラム(1)の性能を低下させずに、プログラム(1)内の空き命令を見つけて、二重化パターンファイル(11)を参照して二重化パターンを挿入して自動的に演算を二重化する。二重化できない場合、前記プリプロセッサ(10)は、前記二重化パターンの挿入前後の前記命令の出現回数に基づいて二重化度を算出し、他の命令に比べて前記二重化度が低い命令についてランダムパターンファイルを参照してランダムパターンを生成し、性能を低下させずにプログラム(1)に挿入する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プリプロセッサの故障検出率を高める故障検出プログラム作成方法に関する。
【背景技術】
【0002】
プロセッサの高速化技術の一つに、VLIW(Very Long Instruction Word)がある。VLIWでは、依存関係にない複数の命令を一つの命令としてまとめて同時に実行する。同時実行される命令の数は常に一定に保たれ、規定の数に達しない場合は「何もしない」命令で埋められる。また、1命令の長さが従来のプロセッサに比べて極めて長い。
【0003】
VLIWプロセッサは複数の演算器を実装しており、複数の命令を同時に実行できるが、各命令間の処理の論理的な順序保証が必要な場合は、複数の命令を同時に実行できない。この時、プログラムの空き命令部分にはアセンブラによりNo OPeration命令(nop)が挿入される。
【0004】
また、プログラムの実行においては、プロセッサの演算器はnop動作となるため、演算器は空き状態になっている。この空き状態の演算器を利用して演算を二重化し、プロセッサ故障を検出することでデータインティグリティ(Data Integrity)を向上させる方法が存在する。なお、データインティグリティとは、認可されていないデータの変更に対して防護することにより保証される「データの完全性」である。認可されていないデータの変更には、意図的な変更(破壊を含む)とアクシデントによる変更(喪失を含む)の両方を含む。
【0005】
従来、C言語によるプログラム開発では、ソースコードをコンパイルする時点で二重化したコードを出力し、その後、最適化を行うことで演算の二重化を実現しているが、二重化によりプログラムサイズが増大し、性能が低下してしまう問題があった。
【0006】
一方、特に性能が要求される処理ではC言語などの高級言語よりもアセンブリ言語を用いて開発が行われる。アセンブリ言語においてプロセッサのデータインティグリティを向上させるプログラムを開発する場合、人手設計により二重化コードを追加する必要があり、開発工数が増加し、品質の低下が生じた。
【0007】
関連する技術として、特開2005−166057号公報(特許文献1)に障害検出コンピュータシステムが開示されている。
この従来技術は、プログラムを実行するデジタルプロセッサの計算エラーを検出する方法に関する。
この方法は、以下のステップを含む。
(1)第1ステップ
プログラムを、計算セグメントに分ける。
(2)第2ステップ
前記セグメントの少なくとも1つのソースコードをコンパイルするステップであって、それによって、2つのコードセクションを生成し、この2つのコードセクションの一方が、他方に対して機能的に冗長である。
(3)第3ステップ
前記2つのコードセクションの実行によって生成された結果を比較する検証コードを生成する。
(4)第4ステップ
前記コードセクションそれぞれを、異なる計算領域で実行するステップであって、それによって、各結果を生成する。
(5)第5ステップ
前記検証コードを使用して、前記各結果を比較する。
(6)第6ステップ
前記各結果が同一である場合にのみ、前記コードセクションの1つを実行するステップであって、それによって、前記プログラムの実行のその後のフローを変更する。
【0008】
特許文献1では、ソースコードのコンパイル時二重化コードを生成し、オプティマイザで最適化を行うが、コンパイル時に二重化コードを生成するため二重化コードを生成しないプログラムに対して性能低下が発生していた。
【0009】
また、特開平11−24931号公報(特許文献2)にVLIW型計算機が開示されている。
このVLIW型計算機は、複数の演算器と、実行手段と、比較器と、通知手段とで構成されることを特徴とする。
複数の演算器は、少なくとも第1の演算器及び第2の演算器を含む。実行手段は、前記第1の演算器があるサイクルにおいて演算命令を実行する時、前記第1の演算器以外の演算器に演算すべき命令が無い場合、前記第1の演算器で実行する命令と同じ命令を前記第1演算器以外の演算器に実行させる。比較器は、前記第1の演算器による前記命令の実行結果と前記第1演算器以外の演算器による前記命令の実行結果とを比較する。通知手段は、前記比較器による比較の結果、不一致を生じた時にそれを通知する。
【0010】
特許文献2では、複数の演算器の演算結果を比較する命令をハードウェアに追加する必要があるため、専用プロセッサを開発しなければならず、一般的なプロセッサを利用する上では本特許は利用できなかった。
【0011】
【特許文献1】特開2005−166057号公報
【特許文献2】特開平11−24931号公報
【発明の開示】
【発明が解決しようとする課題】
【0012】
本発明の目的は、プログラムの本来性能を低下させずにプロセッサの故障検出率を高めるため、アセンブリ言語で記述されたソースプログラムに対し、演算を二重化するコードをプログラムの空き部分に挿入する故障検出プログラム作成方法を提供することである。
【課題を解決するための手段】
【0013】
以下に、[発明を実施するための最良の形態]で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、[特許請求の範囲]の記載と[発明を実施するための最良の形態]との対応関係を明らかにするために付加されたものである。但し、それらの番号を、[特許請求の範囲]に記載されている発明の技術的範囲の解釈に用いてはならない。
【0014】
本発明の故障検出プログラム作成装置は、アセンブリ言語で記述したプログラム(1)内の空き命令を見つけて、二重化パターンファイル(11)を参照して自動的に二重化パターンを挿入して、命令を二重化した中間ファイル(2)を生成するプリプロセッサ(10)と、前記中間ファイル(2)にアセンブル処理を行い、実行形式プログラム(3)を出力するアセンブラ実行部(20)と、前記実行形式プログラム(3)を実行するデータ処理部(30)とを具備する。
【0015】
前記プリプロセッサ(10)は、前記命令を二重化できない場合、前記二重化パターンの挿入前後の前記命令の出現回数に基づいて前記命令毎の二重化度を算出し、他の命令と比べて前記二重化度が低い命令について、ランダムパターンファイルを参照してランダムパターンを生成して前記プログラム(1)に挿入する。
【0016】
前記データ処理部(30)は、前記実行形式プログラム(3)に基づいて、オリジナルコードを実行した結果と二重化コードを実行した結果とを比較して比較結果の一致をチェックし、前記比較結果が不一致の場合、障害処理を行う。
【0017】
前記データ処理部(30)は、前記比較結果が一致していた場合、前記プログラム(1)の実行を続行する。
【0018】
本発明のプリプロセッサ(10)は、アセンブリ言語で記述したプログラム(1)と、前記プログラム(1)に二重化パターンを挿入するために参照する二重化パターンファイル(11)とを使用し、前記プログラム(1)内の空き命令を見つけて前記二重化パターンファイル(11)に規定されている二重化コードを挿入し、自動的に命令を二重化する。
【0019】
本発明のプリプロセッサ(10)は、前記プログラム(1)にランダムパターンを挿入するために参照するランダムパターンファイルを更に使用し、前記命令を二重化できない場合、前記命令の二重化度を算出し、前記二重化度が低い命令について前記ランダムパターンを生成して前記プログラム(1)に挿入する。
【0020】
本発明の故障検出プログラム作成方法は、(a)ソースプログラム(1)内の命令コードを指すポインタを初期化するステップと、(b)前記ポインタで指されたコードAを取り出すステップと、(c)次の命令コードを指すために前記ポインタを進めるステップと、(d)前記コードAが取り出せない場合、前記ソースプログラム(1)の終了と判断するステップと、(e)前記ソースプログラム(1)の終了と判断した場合、中間ファイル(2)を出力するステップと、(f)前記コードAの取り出し後、前記コードAと同一サイクルで実行されるコードBの有無をチェックするステップと、(g)前記コードBが存在する場合、前記(b)ステップへ戻り、前記(b)ステップからの処理を繰り返すステップと、(h)前記コードBが存在しない場合、前記コードAが二重化対象命令かチェックするステップと、(i)二重化パターンファイル(11)の所定の文字列を含む行をサーチし、前記コードAが存在した場合、二重化対象命令であるかチェックするステップと、(j)前記コードAが二重化対象命令である場合、二重化コードサイクル数を取得するステップと、(k)前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルにおいて前記コードの空きの有無をチェックするステップと、(l)前記コードの空きがないサイクルが存在した場合、前記(b)ステップへ戻るステップと、(m)全てのサイクルに前記コードの空きがあった場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルに、他のエリアからの分岐による移入の有無をチェックするステップと、(n)他のエリアからの分岐による移入が存在する場合、前記(b)ステップへ戻るステップと、(o)前記他のエリアからの分岐による移入が存在しない場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルに前記二重化コードを挿入するステップとを具備する。
【0021】
前記(i)ステップは、(i1)前記コードAが二重化対象命令でない場合、前記(b)ステップへ戻るステップを具備する。
【0022】
前記(i)ステップは、(i2)前記コードAが二重化対象外命令である場合、ランダムパターンファイルに定義されている命令を選択し、前記命令のランダムコードサイクル数を取得するステップを具備する。
【0023】
前記(o)ステップは、(o1)前記他のエリアからの分岐による移入が存在しない場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルにランダムコードを挿入するステップを具備する。
【0024】
本発明のプログラムは、上記の故障検出プログラム作成方法をコンピュータに実行させる。
【発明の効果】
【0025】
第1の効果は、アセンブリ言語で記述したプログラムの性能を低下させずデータインティグリティ(Data Integrity)を向上させることにある。その理由は、高速化のためにアセンブリ言語で記述しているため二重化コードを追加するにあたり性能を低下させてはならないが、データインティグリティの向上は通常は性能低下を伴うことが多く、性能高速化とデータインティグリティの向上は相反するためである。
第2の効果は、二重化コードの追加のための設計を自動化できることにある。その理由は、人手作業で二重化コードを追加するのは限度があり、オリジナルコードが大きいほど、二重化コードを人手で追加することは現実的ではない。また、人手作業では性能低下のリスクや不具合盛り込みのリスクを伴うが、プリプロセッサにより空きエリアに性能低下なく二重化コードを挿入することで、前記リスクを回避できるためである。
【発明を実施するための最良の形態】
【0026】
以下に、本発明の第1実施形態について添付図面を参照して説明する。
図1を参照すると、本実施例は、プリプロセッサ10と、アセンブラ実行装置20と、データ処理装置30を備える。
【0027】
プリプロセッサ10は、二重化コードを挿入するための規則を規定した二重化パターンファイル11を参照しながら、アセンブリ言語で記述されたソースプログラム1を解析し、二重化コードを挿入して中間ファイル2を出力する。
アセンブラ実行装置20は、中間ファイル2を入力としてアセンブル処理を行い、実行形式プログラム3を出力する。
データ処理装置30は、VLIW(Very Long Instruction Word)プロセッサを搭載した、プログラム制御により動作する一般的なコンピュータ装置である。ここでは、データ処理装置30は実行形式プログラム3を実行する。
【0028】
ここで、図1に、実行形式プログラム3を実行した際のデータ処理装置30の動作をフローチャートで示す。
(1)ステップS31
ステップS31にてオリジナルコードを実行する。なお、オリジナルコードは複数回実行されており、この後もオリジナルコードの実行を続行する。ここでは例として、オリジナルコードの1回目の実行を示す。但し、実際には、上記の例に限定されるものではない。
(2)ステップS32
ステップS32にて二重化コードを実行する。
(3)ステップS33
次に、ステップS33にて、ステップS31でオリジナルコードを実行した結果と、ステップS32で二重化コードを実行した結果とについて、それぞれの結果を比較する。
(4)ステップS34
ステップS34にて比較結果の一致をチェックする。
(5)ステップS35
ステップS34にて比較結果が不一致の場合、障害処理へ移入する。
(6)ステップS36
ステップS34にて比較結果が一致していた場合、プログラムの実行を続行する。
【0029】
なお、本発明は、中央処理装置(図示されず)と、記憶装置(図示されず)とを具備するコンピュータ上において実施しても良い。この時、中央処理装置が、プリプロセッサ10、アセンブラ実行装置20、及びデータ処理装置30として機能する。また、記憶装置は、ソースプログラム1、中間ファイル2、実行形式プログラム3、及び二重化パターンファイル11を記憶する。
【0030】
図2は二重化パターンファイル11の例である。
二重化パターンファイル11は、“TYPE”行に二重化コードのサイクル数を規定する数字及び二重化対象命令を記述する。その下に二重化コード、比較命令、分岐命令を記述する。前記一連の形式にて、全ての二重化対象命令について規定する。
【0031】
二重化パターンファイルは、二重化対象命令と二重化コードを規定するファイルであれば必ずしもこの形式でなくても良い。またファイルでなくてもよく、プリプロセッサ10内で保持するデータとしても良い。
【0032】
プリプロセッサ10は、二重化コードを挿入するため、以下のアルゴリズムを備えている。
ソースプログラム1内のある命令を命令Aとすると、命令Aと同時に実行される命令が存在しないことを確認する。次に、二重化パターンファイル11内をサーチし、命令Aが二重化対象命令であることを確認する。次に、二重化パターンファイル11内の命令Aの二重化コードサイクル数以上の連続した空き命令があることを確認する。次に、前記の連続した空きエリア内に他のエリアからの分岐による移入がないことを確認する。前記条件を全て満たした場合、二重化コードを挿入可能であると判断しソースプログラム1の該当箇所に二重化パターンファイル11で規定している二重化コードを挿入し、中間ファイル2として出力する。以上の処理をソースプログラム1内の全ての命令について行う。
【0033】
次に、図面を参照して、本発明の第1実施形態の動作について詳細に説明する。
図3A,図3Bはプリプロセッサ10の具体的な動作を定義したフローチャートである。
(1)ステップS101
プリプロセッサ10は、ソースプログラム1内の命令コードを指すポインタを備え、ステップS101で初期化する。
(2)ステップS102
ステップS102ではポインタで指されたコードAを取り出す。ステップS102はソースプログラム1の全ての命令について処理を行うためのループ処理の先頭である。
(3)ステップS103
ステップS103では次の命令コードを指すためにポインタを進める。
(4)ステップS104
ステップS102でコードAが取り出せない場合、ステップS104にてソースプログラム1の終了と判断する。
(5)ステップS105
ソースプログラム1の終了と判断した場合、ステップS105にて中間ファイル2を出力し、プリプロセッサ10を終了する。
(6)ステップS106
ステップS102でのコードAの取り出し後、コードAと同一サイクルで実行されるコードBの有無をチェックする。
(7)ステップS107
コードBが存在する場合、ステップS102へ戻り、ステップS102からの処理を繰り返す。
(8)ステップS108
コードBが存在しない場合、つまりコードに空きがある場合、ステップS108にてコードAが二重化対象命令かチェックする。二重化パターンファイル11の“TYPE”行をサーチしコードAが存在した場合、二重化対象命令であるかチェックし、コードAが二重化対象命令でない場合は、ステップS102へ戻る。
(9)ステップS109
コードAが二重化対象命令である場合は、ステップS109にて二重化コードサイクル数を取得する。
(10)ステップS110
ステップS110ではコードA実行サイクルからステップS109で取得したサイクル数までの各サイクルにおいてコードの空きの有無をチェックする。
(11)ステップS111
コードの空きがないサイクルが存在した場合、ステップS102へ戻る。
(12)ステップS112
全てのサイクルにコードの空きがあった場合、ステップS112にてコードA実行サイクルからステップS109で取得したサイクル数までの各サイクルに、他のエリアからの分岐による移入の有無をチェックする。これは二重化コードの途中に分岐した場合、二重化チェック処理が正常動作しないためである。
(13)ステップS113
他のエリアからの分岐による移入が存在する場合、ステップS102へ戻る。
(14)ステップS114
他のエリアからの分岐による移入が存在しない場合、ステップS114にてコードA実行サイクルからステップS109で取得したサイクル数までの各サイクルに二重化コードを挿入する。その後、ステップS102へ戻って処理を繰り返し、ソースプログラム1の全命令について二重化コードの挿入処理を行う。
【0034】
図2によると、二重化コードは二重化パターンファイル11で規定しており、二重化対象命令、二重化コードのサイクル数、二重化コードを一つの組として記述する。#S1#、#S2#、#D1#の表記は、二重化コード挿入時にコードAで参照しているレジスタや定数、演算結果を格納するレジスタを置換するための定義である。
【0035】
図4は二重化コードの挿入前後の例である。
図4では、先頭サイクル1のadd命令が二重化パターンファイル11内に存在し、二重化コードサイクル数が3であるため、先頭から3サイクル分にコードの空きがあればよく、更に、連続した3サイクルの間に分岐で移入するケースはないと仮定する。
この時、プリプロセッサ10は、#S1#、#S2#、#D1#の定義をサイクル1のadd命令で使用しているレジスタA,B,Cにそれぞれ置換し、各サイクルの演算器2側に二重化コードを挿入する。
【0036】
プリプロセッサ10が出力した中間ファイル2は、アセンブラ実行装置20により実行形式プログラム3に変換される。
データ処理装置30で実行形式プログラム3を実行すると、ステップS31,32にてそれぞれの演算器でオリジナルコード及び二重化コードを実行する。次に、ステップS33にてそれぞれの演算結果の比較を行い、演算結果が不一致の場合、故障と判断し障害処理35へ分岐し、演算結果が一致した場合は処理を続行する。
【0037】
次に、本発明の第2実施形態の構成について図面を参照して詳細に説明する。
第1実施形態との相違点は、プリプロセッサは二重化コードを挿入できない箇所に、ランダムデータによる演算コードを挿入することであり、ランダムコードを挿入するための規則を規定したランダムパターンファイルを参照する。すなわち、プリプロセッサ10は、二重化コードを挿入できない箇所では、二重化パターンファイル11の代わりにランダムパターンファイルを参照する。従って、ランダムパターンファイルは、二重化パターンファイル11の一種であるとみなすことができる。
【0038】
図5はランダムパターンファイルの一例である。二重化パターンコードと同様な形式であるが、ランダムコード対象命令、ランダムコードサイクル数、ランダムデータによる演算コードを規定している。
【0039】
図6A,図6Bは、二重化パターンを適用できない場合に、ランダムパターンファイルの命令を挿入する動作を説明したフローチャートである。
(1)ステップS201
ステップS201からS207は、第1実施形態のステップS101〜S107と同様である。
プリプロセッサ10は、ソースプログラム1内の命令コードを指すポインタを備え、ステップS201で初期化する。
(2)ステップS202
ステップS202ではポインタで指されたコードAを取り出す。ステップS202はソースプログラム1の全ての命令について処理を行うためのループ処理の先頭である。
(3)ステップS203
ステップS203では次の命令コードを指すためにポインタを進める。
(4)ステップS204
ステップS202でコードAが取り出せない場合、ステップS204にてソースプログラム1の終了と判断する。
(5)ステップS205
ソースプログラム1の終了と判断した場合、ステップS205にて中間ファイル2を出力し、プリプロセッサ10を終了する。
(6)ステップS206
ステップS202でのコードAの取り出し後、コードAと同一サイクルで実行されるコードBの有無をチェックする。
(7)ステップS207
コードBが存在する場合、ステップS202へ戻り、ステップS202からの処理を繰り返す。
(8)ステップS208
コードBが存在しない場合、つまりコードに空きがある場合、ステップS208にてコードAが二重化対象命令かチェックする。二重化パターンファイル11の“TYPE”行をサーチしコードAが存在した場合、二重化対象命令であるかチェックする。
(8−2)ステップS208−2
ステップS208にてコードAが二重化対象外命令であった時、ステップS208−2にてランダムパターンファイルに定義されている命令を選択し、命令のランダムコードサイクル数を取得する。命令を選択する基準は、命令毎の二重化度を算出し、あるいはプログラムのパス毎の実行頻度を考慮して二重化割合の低い命令を選択する。あるいはファイルの先頭から順に選択していっても良いし、ランダムに選択しても良い。
なお、命令についての二重化度は、以下の式で算出する。
(二重化コード挿入前のソースコードに対する命令の出現回数)÷(二重化コード挿入後のソースコードに対する命令の出現回数)
この式により、全ての二重化対象命令について算出する。
(9)ステップS209
ステップS209からステップS213は、第1実施形態のステップS109からステップS113と同様である。
コードAが二重化対象命令である場合、ステップS209にて二重化コードサイクル数を取得する。
(10)ステップS210
ステップS210ではコードA実行サイクルからステップS209で取得したサイクル数までの各サイクルにおいてコードの空きの有無をチェックする。
(11)ステップS211
コードの空きがないサイクルが存在した場合、ステップS202へ戻る。
(12)ステップS212
全てのサイクルにコードの空きがあった場合、ステップS212にてコードA実行サイクルからステップS209で取得したサイクル数までの各サイクルに、他のエリアからの分岐による移入の有無をチェックする。これは二重化コードの途中に分岐した場合、二重化チェック処理が正常動作しないためである。
(13)ステップS213
他のエリアからの分岐による移入が存在する場合、ステップS202へ戻る。
(14)ステップS214
他のエリアからの分岐による移入が存在しない場合、ステップS214にてコードA実行サイクルからステップS209で取得したサイクル数までの各サイクルにランダムコードを挿入する。その後、ステップS202へ戻って処理を繰り返し、ソースプログラム1の全命令について二重化コードあるいはランダムコードの挿入処理を行う。
【0040】
図7はランダムコードの挿入前後の例である。
図7では、先頭サイクル1のload命令が二重化パターンファイル11内に存在しないため、ランダムパターンファイルからandcm命令を決定した。ランダムコードサイクル数が3であるため、先頭から3サイクル分の空きがあればよく、更に連続した3サイクルの間に移入するケースはないと仮定する。
この時、プリプロセッサ10は#RAND#記述部についてランダムデータを生成して置換し、各サイクルの演算器2側にランダムコードを挿入する。
また、ステップS210では、二重化命令を挿入する際のプロセッサ制約等により同一サイクルに命令を挿入できない等の都合により、先頭サイクルを前後にずらしても良い。
更に、ステップS212の条件が満たされていれば連続した空きサイクルでなく、サイクル間が離れていても良い。
【0041】
以上のように、本発明は、一般的なVLIWプロセッサ上でチェックを行うことを前提としており、チェックのための専用回路を必要とせず、故障の検出を実現する。また、プログラムの性能を低下させないように二重化演算を挿入するため、空きサイクル数を考慮して二重化演算パターンを挿入する。
【0042】
本発明では、プリプロセッサ10が、二重化コードを挿入するための規則を規定した二重化パターンファイル11を参照しながら、アセンブリ言語で記述されたソースプログラム1を解析し、二重化コードを挿入して中間ファイル2を出力する。
二重化パターンファイル11は、図2に示すように、二重化の対象とする命令(二重化対象命令)と、二重化コードを挿入するのに必要なサイクル数の二重化コードサイクル数と、二重化コードを一つの組として、全ての二重化可能な命令について規定するファイルである。
【0043】
プリプロセッサ10が二重化コードを挿入するためのアルゴリズムは次の通りである。
ソースプログラム1内のある命令を命令Aとすると、命令Aと同時に実行される命令が存在しないことを確認する。次に、二重化パターンファイル11内をサーチし、命令Aが二重化対象命令であることを確認する。次に、二重化パターンファイル11内の命令Aの二重化コードサイクル数以上の連続した空き命令があることを確認する。次に、前記の連続した空きエリア内に他のエリアからの分岐による移入がないことを確認する。前記条件を全て満たした場合、二重化コードを挿入可能であると判断しソースプログラム1の該当箇所に二重化パターンファイル11で規定している二重化コードを挿入し、中間ファイル2として出力する。以上の処理をソースプログラム1内の全ての命令について行う。
【0044】
アセンブラ実行装置20では前記中間ファイル2をアセンブルし、実行形式プログラム3を生成する。アセンブラ実行装置20により生成された実行形式プログラム3を、VLIWプロセッサを搭載した一般的なコンピュータシステムであるデータ処理装置30で実行する。
【0045】
本発明の特徴について以下に説明する。
(1)アセンブリ言語で記述したプログラムの性能を低下させずに、プログラム内の空き命令を見つけて自動的に演算を二重化するプリプロセッサを備える。
(2)プリプロセッサが二重化パターン挿入のために参照する二重化パターンを有する
(3)二重化できない場合は、二重化度を算出し、二重化度が低い命令についてランダムパターンを生成し、性能を低下させずにプログラムに挿入するプリプロセッサを備える。
(4)プリプロセッサがランダムパターン挿入のために参照するランダムパターンを有する。
【0046】
本発明によれば、高性能を要求されるプログラムにおいてデータインティグリティ(Data Integrity)を高めることも必要なミッションクリティカルなプログラムの開発といった用途に適用できる。
また、エミュレーションプログラムに本発明を適用することにより、エミュレーションされる側のプログラムを二重化しなくてもデータインティグリティ向上効果がある。
【図面の簡単な説明】
【0047】
【図1】図1は、プログラムアセンブルフローチャート及びプログラム実行フローチャートである。
【図2】図2は、二重化パターンファイルの例を示す図である。
【図3A】図3Aは、プリプロセッサの動作を示すフローチャートである。
【図3B】図3Bは、図3Aの続きである。
【図4】図4は、二重化コード挿入例を示す図である。
【図5】図5は、ランダムパターンファイル例を示す図である。
【図6A】図6Aは、ランダムコードのケースにおけるプリプロセッサの動作を示すフローチャートである。
【図6B】図6Bは、図6Aの続きである。
【図7】図7は、ランダムコード挿入例を示す図である。
【符号の説明】
【0048】
1… ソースプログラム
2… 中間ファイル
3… 実行形式プログラム
10… プリプロセッサ
11… 二重化パターンファイル
20… アセンブラ実行装置
30… データ処理装置

【特許請求の範囲】
【請求項1】
アセンブリ言語で記述したプログラム内の空き命令を見つけて、二重化パターンファイルを参照して自動的に二重化パターンを挿入して、命令を二重化した中間ファイルを生成するプリプロセッサと、
前記中間ファイルにアセンブル処理を行い、実行形式プログラムを出力するアセンブラ実行部と、
前記実行形式プログラムを実行するデータ処理部と
を具備する
故障検出プログラム作成装置。
【請求項2】
請求項1に記載の故障検出プログラム作成装置において、
前記プリプロセッサは、前記命令を二重化できない場合、前記二重化パターンの挿入前後の前記命令の出現回数に基づいて前記命令毎の二重化度を算出し、他の命令と比べて前記二重化度が低い命令について、ランダムパターンファイルを参照してランダムパターンを生成して前記プログラムに挿入する
故障検出プログラム作成装置。
【請求項3】
請求項1に記載の故障検出プログラム作成装置において、
前記データ処理部は、
前記実行形式プログラムに基づいて、オリジナルコードを実行した結果と二重化コードを実行した結果とを比較して比較結果の一致をチェックし、前記比較結果が不一致の場合、障害処理を行う
故障検出プログラム作成装置。
【請求項4】
請求項3に記載の故障検出プログラム作成装置において、
前記データ処理部は、
前記比較結果が一致していた場合、前記プログラムの実行を続行する
故障検出プログラム作成装置。
【請求項5】
アセンブリ言語で記述したプログラムと、
前記プログラムに二重化パターンを挿入するために参照する二重化パターンファイルと
を使用し、
前記プログラム内の空き命令を見つけて前記二重化パターンファイルに規定されている二重化コードを挿入し、自動的に命令を二重化する
プリプロセッサ。
【請求項6】
請求項5に記載のプリプロセッサにおいて、
前記プログラムにランダムパターンを挿入するために参照するランダムパターンファイルを更に使用し、
前記命令を二重化できない場合、前記二重化パターンの挿入前後の前記命令の出現回数に基づいて前記命令の二重化度を算出し、前記二重化度が低い命令について前記ランダムパターンを生成して前記プログラムに挿入する
プリプロセッサ。
【請求項7】
(a)ソースプログラム内の命令コードを指すポインタを初期化するステップと、
(b)前記ポインタで指されたコードAを取り出すステップと、
(c)次の命令コードを指すために前記ポインタを進めるステップと、
(d)前記コードAが取り出せない場合、前記ソースプログラムの終了と判断するステップと、
(e)前記ソースプログラムの終了と判断した場合、中間ファイルを出力するステップと、
(f)前記コードAの取り出し後、前記コードAと同一サイクルで実行されるコードBの有無をチェックするステップと、
(g)前記コードBが存在する場合、前記(b)ステップへ戻り、前記(b)ステップからの処理を繰り返すステップと、
(h)前記コードBが存在しない場合、前記コードAが二重化対象命令かチェックするステップと、
(i)二重化パターンファイルの所定の文字列を含む行をサーチし、前記コードAが存在した場合、二重化対象命令であるかチェックするステップと、
(j)前記コードAが二重化対象命令である場合、二重化コードサイクル数を取得するステップと、
(k)前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルにおいて前記コードの空きの有無をチェックするステップと、
(l)前記コードの空きがないサイクルが存在した場合、前記(b)ステップへ戻るステップと、
(m)全てのサイクルに前記コードの空きがあった場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルに、他のエリアからの分岐による移入の有無をチェックするステップと、
(n)他のエリアからの分岐による移入が存在する場合、前記(b)ステップへ戻るステップと、
(o)前記他のエリアからの分岐による移入が存在しない場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルに前記二重化コードを挿入するステップと
を具備する
故障検出プログラム作成方法。
【請求項8】
請求項7に記載の故障検出プログラム作成方法において、
前記(i)ステップは、
(i1)前記コードAが二重化対象命令でない場合、前記(b)ステップへ戻るステップを具備する
故障検出プログラム作成方法。
【請求項9】
請求項7に記載の故障検出プログラム作成方法において、
前記(i)ステップは、
(i2)前記コードAが二重化対象外命令である場合、ランダムパターンファイルに定義されている命令を選択し、前記命令のランダムコードサイクル数を取得するステップを具備する
故障検出プログラム作成方法。
【請求項10】
請求項9に記載の故障検出プログラム作成方法において、
前記(o)ステップは、
(o1)前記他のエリアからの分岐による移入が存在しない場合、前記コードAの実行サイクルから前記二重化コードサイクル数までの各サイクルにランダムコードを挿入するステップを具備する
故障検出プログラム作成方法。
【請求項11】
請求項7乃至10のいずれか一項に記載の故障検出プログラム作成方法を、コンピュータに実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6A】
image rotate

【図6B】
image rotate

【図7】
image rotate


【公開番号】特開2007−133536(P2007−133536A)
【公開日】平成19年5月31日(2007.5.31)
【国際特許分類】
【出願番号】特願2005−324466(P2005−324466)
【出願日】平成17年11月9日(2005.11.9)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】