(57)【要約】【課題】  性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供する。【解決手段】  冗長プログラムに対する性能要件情報を入力し、特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶し、実装パターンに基づき、実装されたプログラムコードである参照コードを記憶し、当該実装パターン情報の中で性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する参照コードを参照する為の情報を含む冗長パターン情報を作成し、当該冗長パターン情報に基づいて読み出した、当該参照コードから冗長プログラムを作成する。【選択図】  図１
2013228791.tif 000002
【特許請求の範囲】
【請求項１】
同一機能で実装の異なる所定数の冗長プログラムを生成する為のソフトウェア冗長化装置であって、
前記冗長プログラムに対する性能要件情報を入力する入力部と、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶する実装パターン情報記憶部と、
前記実装パターンに基づいて実装されたプログラムコードである参照コードを記憶する参照コード記憶部と、
前記実装パターン情報記憶部から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成するパターン抽出部と、
前記パターン抽出情報を記憶するパターン抽出情報記憶部と、
前記パターン抽出情報記憶部から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から所定数の実装パターン情報を選択し、当該実装パターン情報に対応する前記参照コードを参照する為の情報である参照コード情報を含む冗長パターン情報を作成するパターン選択部と、
前記冗長パターン情報を記憶する冗長パターン情報記憶部と、
前記冗長パターン情報記憶部から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから冗長プログラムを作成するプログラム生成部と、
前記冗長プログラムを出力する出力部と、を備えることを特徴とするソフトウェア冗長化装置。
【請求項２】
前記プログラム生成部は、前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して並べ替えを行うことを特徴とする請求項１に記載のソフトウェア冗長化装置。
【請求項３】
前記プログラム生成部は、前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して前記性能要件を満たす範囲でダミー命令乃至ダミー領域の挿入を行うことを特徴とする請求項１及び請求項２のいずれかに記載のソフトウェア冗長化装置。
【請求項４】
前記パターン選択部は、最も実装パラメータの異なる所定数の実装パターン情報を選択することを特徴とする請求項１から請求項３のいずれかに記載のソフトウェア冗長化装置。
【請求項５】
前記パターン選択部は、最も性能パラメータの近い所定数の実装パターン情報を選択することを特徴とする請求項１から請求項３のいずれかに記載のソフトウェア冗長化装置。
【請求項６】
前記パターン選択部は、前記実装パラメータ乃至性能パラメータをｎ次元ベクトルとみなした距離を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項４及び請求項５のいずれかに記載のソフトウェア冗長化装置。
【請求項７】
前記パターン選択部は、前記実装パラメータ乃至性能パラメータをｎ次元ベクトルとみなした類似度を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項４及び請求項５のいずれかに記載のソフトウェア冗長化装置。
【請求項８】
計算機を用いて、同一機能で実装の異なる所定数の冗長プログラムを生成するソフトウェア冗長化方法であって、
前記冗長プログラムに対する性能要件情報を入力し、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶装置に記憶し、
前記実装パターンに基づいて実装されたプログラムコードである参照コードを前記記憶装置に記憶し、
前記記憶装置から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成し、
前記パターン抽出情報を前記記憶装置に記憶し、
前記記憶装置から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から所定数の実装パターン情報を選択し、当該実装パターン情報に対応する前記参照コードを参照する為の情報である参照コード情報を含む冗長パターン情報を作成して、前記記憶装置に記憶し、
前記記憶装置から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから冗長プログラムを作成し、
前記冗長プログラムを出力することを特徴とするソフトウェア冗長化方法。
【請求項９】
前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して並べ替えを行うことを特徴とする請求項８に記載のソフトウェア冗長化方法。
【請求項１０】
前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して前記性能要件を満たす範囲でダミー命令乃至ダミー領域の挿入を行うことを特徴とする請求項８及び請求項９のいずれかに記載のソフトウェア冗長化方法。
【請求項１１】
前記パターンの選択の際は、最も実装パラメータの異なる所定数の実装パターン情報を選択することを特徴とする請求項８から請求項１０のいずれかに記載のソフトウェア冗長化方法。
【請求項１２】
前記パターンの選択の際は、最も性能パラメータの近い所定数の実装パターン情報を選択することを特徴とする請求項８から請求項１０のいずれかに記載のソフトウェア冗長化方法。
【請求項１３】
前記パターンの選択の際は、前記実装パラメータ乃至性能パラメータをｎ次元ベクトルとみなした距離を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項１１及び請求項１２のいずれかに記載のソフトウェア冗長化方法。
【請求項１４】
前記パターンの選択の際は、前記実装パラメータ乃至性能パラメータをｎ次元ベクトルとみなした類似度を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項１１及び請求項１２のいずれかに記載のソフトウェア冗長化方法。
【請求項１５】
計算機で読み取り可能な記憶媒体であって、請求項８に記載のソフトウェア冗長化方法を実行するためのプログラムを格納したことを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同一機能で実装の異なる複数の冗長プログラムを生成する為のソフトウェア冗長化装置及び方法に関する。
【背景技術】
【０００２】
本技術分野の背景技術として、特開昭６２−１７４８３７号公報（特許文献１）がある。この公報には、「従来のデュアル装置の考え方をソフトウェアにも拡大し、現在ソフトウェアの不良で誤った結果になってもそのまま出力していたのを、コピーでなく各々独立に開発したソフトウェアを併行して走らせ、出力結果を逐次比較し、結果が一致したもののみを出力し、結果が一致しなかったらユーザに出力せず、原因を調査するように考慮したソフトウェアの二重化方式である。」と記載されている。
【０００３】
非特許文献１では、ソフトウェアの冗長実装において多様性を増大させるのに推奨される実践手法について議論されている。
【０００４】
また、特開２０１０−３９８９２号公報（特許文献２）には、課題として「Webサービスの設計において、設計者の負担を軽減する。」と記載されており、その解決手段として、「本発明のパターン作成装置は、パターン、パターンを実行する基盤となるソフトウェア、非機能要件、非機能要件の優先度を受け付け、非機能要件及びソフトウェアを検索キーとして製品対応情報を検索し、ソフトウェアの元で実装可能な実現処理を抽出し、非機能要件及び優先度に基づき非機能要件対応情報を検索して、優先度の高い非機能要件を打ち消すような影響のない実現処理を抽出し、前記２回の抽出によって抽出された実現処理に共通する実現処理を検索キーとして、組み合わせ可否情報を参照し、相互に実装可能な実現処理を組み合わせとして抽出し、当該組み合わせから、非機能要件毎に、非機能要件に関連付けられた実現処理が少なくとも１つ含まれるような組み合わせを取得し、取得した実現処理の組み合わせをパターンに適用して作成した修正パターンを表示し、記憶する。」と記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６２−１７４８３７号公報
【特許文献２】特開２０１０−３９８９２号公報
【非特許文献】
【０００６】
【非特許文献１】B. Littlewood, L. Strigini ”A discussion of practices for enhancing diversity in software designs”DISPO Project Draft Technical Report LS_DI_TR-04, Ver. 1.1d, 2000
【発明の概要】
【発明が解決しようとする課題】
【０００７】
装置信頼性向上の一手法として構成要素の多重化（冗長化）が一般的に行われている。ソフトウェアの故障（バグ）やエラッタ（errata、マイクロプロセッサに存在する構造上の欠陥）の場合、その発生機序（発生機構）は決定論的であり、条件が揃えば必ず発生する為、単純なコピーによる多重化ではなく、機能的には同一であるが、アルゴリズム等の異なる多様性の高いプログラム（ソフトウェアダイバーシティ、diversity（多様性））により信頼性の向上を図る。
【０００８】
前記特許文献１に記載されるソフトウェア二重化方式は、ソフトウェアダイバーシティを実現する技術の一つであるが、同一内容の入力に対し同一内容の出力になるはずの仕様で、コピーでなく、各々独立して開発したソフトウェアを用いる為、多大な開発コストが必要となる上、必ずしも高い多様性が得られるとは限らない。
【０００９】
一方、例えば、前記非特許文献１に記載されている自動コード変換等によれば、低コストで、多様性のあるソフトウェアを生成できるが、ソフトウェアに要求される非機能要件である性能要件を満たせない可能性がある。例えば、実行時間・メモリ量・精度等の性能要件を考慮していない為、これらの性能要件を満足しないコードが生成されるおそれがある。
【００１０】
また、前記特許文献２に記載されるパターン作成装置では、指定された優先度にしたがって非機能要件を満たすソフトウェア部品組み合わせパターンを作成するが、非機能要件実現手法の有無のみを考慮する為、ソフトウェアダイバーシティに適した多様性の高い複数のパターンの抽出には、適さない。
【００１１】
そこで、本発明は、性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供する。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明のソフトウェア冗長化装置は、同一機能で実装の異なる所定数の冗長プログラムを生成する為のソフトウェア冗長化装置であって、
前記冗長プログラムに対する性能要件情報を入力する入力部と、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶する実装パターン情報記憶部と、
前記実装パターンに基づき、実装されたプログラムコードである参照コードを記憶する参照コード記憶部と、
前記実装パターン情報記憶部から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成するパターン抽出部と、
前記パターン抽出情報を記憶するパターン抽出情報記憶部と、
前記パターン抽出情報記憶部から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する前記参照コードを参照する為の情報を含む冗長パターン情報を作成するパターン選択部と、
前記冗長パターン情報を記憶する冗長パターン情報記憶部と、
前記冗長パターン情報記憶部から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから前記冗長プログラムを作成するプログラム生成部と、
前記冗長プログラムを出力する出力部とを備える。
【発明の効果】
【００１３】
本発明によれば、性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供することができる。
【００１４】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１５】
【図１】ソフトウェア冗長化装置の構成図の例である。
【図２】ソフトウェア冗長化装置の機能ブロック図の例である。
【図３】ソフトウェア冗長化プログラムによる中央演算処理装置の処理を説明するフローチャートの例である。
【図４】パターン抽出部の処理を説明するフローチャートの例である。
【図５】パターン選択部の処理を説明するフローチャートの例である。
【図６】プログラム生成部の処理を説明するフローチャートの例である。
【図７】ソフトウェア冗長化装置の構成図の例である。
【図８】ソフトウェア冗長化装置の機能ブロック図の例である。
【図９】ソフトウェア冗長化プログラムによる中央演算処理装置の処理を説明するフローチャートの例である。
【図１０】パターン選択部の処理を説明するフローチャートの例である。
【図１１】プログラム生成部の処理を説明するフローチャートの例である。
【図１２】実装パターン情報の例である。
【図１３Ａ】冗長パターン情報の例である。
【図１３Ｂ】冗長パターン情報の例である。
【図１４Ａ】プログラムの命令列に対する調整処理の例である。
【図１４Ｂ】プログラムの命令列に対する調整処理の例である。
【図１５Ａ】プログラムのメモリ配置に対する調整処理の例である。
【図１５Ｂ】プログラムのメモリ配置に対する調整処理の例である。
【発明を実施するための形態】
【００１６】
本発明によるソフトウェア冗長化装置は、特定の同一演算機能で実装内容の異なる複数（冗長化数）の冗長プログラムを作成する。本実施例の「多様性」とは、プログラムの実装パラメータまたは性能パラメータが異なっていることを言い、多様性が高いとは、プログラムごとに実装パラメータまたは性能パラメータの内容が異なっている度合いが大きいことを言う。
【００１７】
以下、本発明の実施例を、図面を用いて説明する。
【実施例１】
【００１８】
本実施例では、性能要件を満たしながら、多様性の高い冗長プログラムの生成を行うソフトウェア冗長化装置の例を説明する。
【００１９】
図１は、本実施例のソフトウェア冗長化装置１の構成図の例である。
【００２０】
ソフトウェア冗長化装置１は、コンピュータであり、中央演算処理装置１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５を有している。中央演算処理装置１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５は、バス１６に接続されており、中央演算処理装置１１の制御により相互にデータの転送を行うことができる。
【００２１】
中央演算処理装置１１は、主記憶装置１２に記憶されたソフトウェア冗長化プログラム１００にしたがって、ソフトウェア冗長化装置１の各構成要素の制御処理と演算処理を実行する。
【００２２】
補助記憶装置１３は、予め作成された実装パターン情報１１１及び参照コード１１２を記憶している。
【００２３】
ここで、実装パターンとは、特定の演算機能をプログラムに実装する際のバリエーションを表す実装パラメータの組み合わせである。実装パラメータとしては、例えば演算アルゴリズム、データ型、処理単位、使用命令等が挙げられる。実行時間、メモリ使用量、演算誤差等のプログラムの性能は、実装パターンによって変わってくる。参照コードとは、実装パターンに基づき、実装されたプログラムコードであり、各々の実装パターンに対して１対１に関連づけられる。
【００２４】
図１２は、実装パターン情報１１１の一例を示す図である。
実装パターン情報１１１においては、パターン毎にＩＤ１２０１、実装パラメータ１２０２、性能パラメータ１２０３、参照コードファイル１２０４により構成されるレコードを記憶している。ＩＤ１２０１は、実装パターンを一意に識別できるものであればよく、図１２に示した形式である必要は無い。実装パラメータ１２０２は、さらに演算アルゴリズム１２０５、データ型１２０６、処理単位１２０７、使用命令１２０８を含み、性能パラメータ１２０３は、実行サイクル１２０９、メモリ使用量１２１０、演算誤差１２１１を含んでいるが、プログラムの性能に関係するパラメータであればよく、これらに限定されるものではない。
【００２５】
図２は、ソフトウェア冗長化装置１の機能を示すブロック図の例である。
性能要件情報２０は、ソフトウェア冗長化装置１へ入力装置１４を介して入力されるデータであり、ソフトウェア冗長化装置１から出力装置１５を介して出力される冗長プログラム２１に対する性能要件を含んでいる。
中央演算処理装置１１が、ソフトウェア冗長化プログラム１００にしたがって動作することによって、パターン抽出部１０１、パターン選択部１０２、プログラム生成部１０３として機能する。実装パターン情報１１１、参照コード１１２は、補助記憶装置１３に記憶され、パターン抽出情報１０４及び冗長パターン情報１０５は、主記憶装置１２に記憶され、ソフトウェア冗長化プログラム１００に基づいて中央演算処理装置１１により書込み制御、または読出し制御が行われる。
【００２６】
図３は、ソフトウェア冗長化装置１の処理を説明するフローチャートの一例である。
ステップＳ０１において、入力装置１４は、ユーザから性能要件を受け付け、性能要件情報２０として主記憶装置１２に記憶する。
【００２７】
ステップＳ０２において、中央演算処理装置１１は、パターン抽出部１０１として動作する。中央演算処理装置１１は、補助記憶装置１３から実装パターン情報１１１を、主記憶装置１２から性能要件情報２０を読み込み、実装パターン情報１１１から性能要件情報２０に含まれる全ての性能要件を満たす実装パターンを抽出し、パターン抽出情報１０４として、主記憶装置１２に記憶する。ここで、パターン抽出情報１０４は、抽出された実装パターン数と、抽出された各実装パターンのレコードを含んでいる。
【００２８】
ステップＳ０３において、中央演算処理装置１１は、パターン抽出情報１０４に含まれる抽出された実装パターン数をチェックし、抽出された実装パターン数が０である場合、すなわち性能要件を満たす実装パターンが無い場合には、以降のステップＳ０４〜Ｓ０６の処理を実行せずに終了する。抽出された実装パターン数が０より大きい場合、すなわち性能要件を満たす実装パターンが少なくとも１つ以上ある場合には、ステップＳ０４〜Ｓ０６の処理を順次実行する。
【００２９】
ここで、本実施例における用語を説明する。「冗長化数」は、利用者が予め指定する冗長の度合いを示す数である。例えば、ソフトウェアを二重化する場合、「冗長化数」として２を設定し、三重化する場合は、「冗長化数」として３を設定する。以下のパターン抽出処理で抽出された、性能要件を満たすパターンの数が「パターン抽出数」（以下では「抽出数」と略記する場合もあり）であり、「パターン抽出数」のパターンのうち、出力対象として選択する多様性の高いパターンの数として「冗長パターン数」を定義する。通常（「パターン抽出数」が「冗長化数」以上である場合）、「冗長パターン数」は「冗長化数」に等しくするが、「パターン抽出数」が「冗長化数」に満たない場合には、「パターン抽出数」そのものを「冗長パターン数」とし、「冗長パターン数」すなわち「パターン抽出数」のパターンのうち一部又は全部を重複させることにより「冗長化数」のパターンと見做す。以下の処理では、抽出処理の結果である「パターン抽出数」と予め指定した「冗長化数」とが比較される。また、プログラム素片である参照コードを用いて「冗長パターン」から「冗長プログラム」が生成される。
【００３０】
ステップＳ０４において、中央演算処理装置１１は、パターン選択部１０２として動作する。中央演算処理装置１１は、主記憶装置１２からパターン抽出情報１０４を読み込み、抽出されたパターンのうちで最も多様性の異なるパターンを冗長化数分だけ選択し、冗長パターン情報１０５として、主記憶装置１２に記憶する。ここで、冗長パターン情報１０５は、選択された冗長パターン数と、選択されたパターンのレコードのうち少なくとも参照コードファイル情報とを含んでいる。図１３Ａに、冗長パターン情報１０５の一例を示す。
【００３１】
ステップＳ０５において、中央演算処理装置１１は、プログラム生成部１０３として動作する。中央演算処理装置１１は、主記憶装置１２から冗長パターン情報１０５を読み込む。さらに、各冗長パターンに関連付けられた参照コードを補助記憶装置１３から読み込み、冗長プログラム２１を生成して、補助記憶装置１３に記憶する。
【００３２】
ステップＳ０６において、出力装置１５は、補助記憶装置１３に記憶されている冗長プログラム２１を出力する。
【００３３】
図４は、パターン抽出ステップＳ０２における処理の詳細を説明するフローチャートの一例である。
ステップＳ２１において、中央演算処理装置１１は、主記憶装置１２から性能要件情報２０を読み込むとともに、パターン抽出数を０に設定することによりパターン抽出情報を初期化する。
【００３４】
ステップＳ２２において、中央演算処理装置１１は、補助記憶装置１３に記憶されている実装パターン情報１１１のレコードを順次読み込む。
【００３５】
ステップＳ２３において、中央演算処理装置１１は、性能要件情報２０に含まれる性能要件と実装パターン情報１１１のレコードに含まれる性能パラメータとを比較し、性能パラメータが性能要件を満足するか否かを判定する。
性能パラメータが性能要件を満足する場合、ステップＳ２４において、中央演算処理装置１１は、パターン抽出数に１を加算するとともに、当該レコードを主記憶装置１２のパターン抽出情報１０４に追加して書き込む。
性能パラメータが性能要件を満足しない場合、ステップＳ２４の処理を実行せずに、ステップＳ２５に進む。
【００３６】
ステップＳ２５において、中央演算処理装置１１は、ステップＳ２２からステップＳ２４までの処理が、実装パターン情報１１１の全てのレコードに対して完了したかどうか判定し、完了している場合には終了し、完了していない場合には、ステップＳ２２に戻り、未処理のレコードについて、ステップＳ２２からステップＳ２４までの処理を繰り返す。
【００３７】
以上により、実装パターン情報１１１のうち、性能要件を満たす全ての実装パターンが抽出される。
【００３８】
図５は、パターン選択ステップＳ０４における処理の詳細を説明するフローチャートの一例である。
ステップＳ３１において、中央演算処理装置１１は、主記憶装置１２からパターン抽出情報１０４を読み込み、性能要件を満たすパターンの数であるパターン抽出数と、そのパターン抽出数分の抽出パターンのレコードを取り出す。
【００３９】
ステップＳ３２において、中央演算処理装置１１は、パターン抽出数と冗長化数を比較する。パターン抽出数が冗長化数より大きい場合、ステップＳ３３に進む。パターン抽出数が冗長化数以下の場合、冗長パターン数をパターン抽出数に設定し、ステップＳ３３の処理を行わず、ステップＳ３４に進む。
【００４０】
ステップＳ３３において、中央演算処理装置１１は、パターン抽出情報１０４に含まれる全抽出パターンのレコードに含まれる実装パラメータないし性能パラメータの類似度を解析して、類似度が最も異なる、すなわち最も類似度の低い冗長化数のパターンを選択する。即ち、類似度の低いパターンを選択することによって、互いにタイプの異なるパターンが選択されることとなり、その結果、パターンの多様性が向上する。ここで、類似度解析手法としては、例えば、異なるパラメータ数等の単純な指標の他、ユークリッド距離、標準ユークリッド距離、マハラノビス距離、マンハッタン距離、チェビシェフ距離、ミンコフスキー距離等のｎ次元ベクトルの距離や、コサイン類似度、ピアソンの相関係数、偏差パターン類似度等のｎ次元ベクトルの類似度といった種々の既知の手法を用いることができる。なお、性能パラメータについては、最も類似するパターンを選択するようにしてもよい。
【００４１】
ステップＳ３４において、中央演算処理装置１１は、冗長パターン数と、ステップＳ３３で選択された冗長化数分のパターン（抽出数＞冗長化数の場合）、またはパターン抽出情報そのもの（抽出数≦冗長化数の場合）のレコードのうち、少なくとも参照コードファイルを含む必要な情報とを、冗長パターン情報１０５として主記憶装置１２に書き込む。
【００４２】
以上により、パターン抽出情報１０４のうち、最も類似度の低い、すなわち最も多様性の高い冗長パターン数（冗長化数または抽出数）の実装パターンが選択される。
【００４３】
図６は、プログラム生成ステップＳ０５における処理の詳細を説明するフローチャートの一例である。
ステップＳ４１において、中央演算処理装置１１は、主記憶装置１２から冗長パターン情報１０５を読み込む。
【００４４】
ステップＳ４２において、中央演算処理装置１１は、冗長パターン情報１０５に含まれる各パターンの参照コードファイルをキーとして、補助記憶装置１３に記憶されている参照コード情報１１２を検索し、該当する参照コードを順次読み込む。
【００４５】
ステップＳ４３において、中央演算処理装置１１は、読み込んだ参照コードから冗長プログラムを生成する。ここで、冗長プログラムは、参照コードそのものでもよいし、アセンブリコードやオブジェクトコードまたは実行形式ファイル等、目的に応じた形式であればよい。
【００４６】
ステップＳ４４において、中央演算処理装置１１は、生成した冗長プログラムを補助記憶装置１３に書き込む。
【００４７】
ステップＳ４５において、中央演算処理装置１１は、ステップＳ４２からステップＳ４４までの処理が、冗長パターン情報１０５の全てのパターンに対して完了したかどうかを判定し、完了している場合には終了し、完了していない場合には、ステップＳ４２に戻り、未処理のパターンについて、ステップＳ４２からステップＳ４４までの処理を繰り返す。
【００４８】
以上のように、本実施例のソフトウェア冗長化装置１によれば、性能要件を満たしながら、多様性の高い冗長プログラムの生成を行うことができる。
【００４９】
なお、冗長パターン数が、冗長化数に満たない場合には、不足分の冗長プログラムを重複使用することによって補うことができる。重複使用する冗長プログラムができるだけ集中しないよう、例えば、先頭あるいは末尾のプログラムから順に重複させればよい。
【実施例２】
【００５０】
実施例１では、冗長パターン数が、冗長化数に満たない場合には、不足分の冗長プログラムを重複使用する為、重複している冗長プログラムについては、ソフトウェアダイバーシティの効果が得られない。
本実施例では、冗長パターン数が、冗長化数に満たない場合にも、多様性の高い冗長プログラムの生成を行うことのできるソフトウェア冗長化装置の例を説明する。
なお、本実施例におけるソフトウェア冗長化装置２を説明する図７から図１１において、実施例１のソフトウェア冗長化装置１と重複する部分については、同一の符号を付し、説明を省略する。
図７は、本実施例におけるソフトウェア冗長化装置２の構成図の例である。
ソフトウェア冗長化装置２は、図１におけるソフトウェア冗長化プログラム１００の代わりにソフトウェア冗長化プログラム２００を有する点で、実施例１のソフトウェア冗長化装置１と異なっている。
【００５１】
図８は、ソフトウェア冗長化装置２の機能を示すブロック図の例である。
中央演算処理装置１１が、ソフトウェア冗長化プログラム２００にしたがって動作することによって、パターン選択部１０２及びプログラム生成部１０３の代わりに、各々パターン選択部２０２及びプログラム生成部２０３として機能する点が、実施例１と異なっている。また、冗長パターン情報１０５の代わりに、冗長パターン情報２０５が、主記憶装置１２に記憶される点で、実施例１と異なっている。
【００５２】
図９は、ソフトウェア冗長化装置２の処理を説明するフローチャートの一例である。
ステップＳ０４・ステップＳ０５の代わりにステップＳ１４・ステップＳ１５の処理を実行する点で、実施例１と異なっている。
【００５３】
ステップＳ１４において、中央演算処理装置１１は、パターン選択部２０２として動作する。中央演算処理装置１１は、主記憶装置１２からパターン抽出情報１０４を読み込み、抽出されたパターンのうちで最も異なる冗長化数までのパターンを選択し、冗長パターン情報２０５として、主記憶装置１２に記憶する。ここで、冗長パターン情報２０５は、選択された冗長パターン数と、選択されたパターンのレコードのうち、少なくとも参照コードファイルおよび性能パラメータの余裕度とを含んでいる。性能パラメータの余裕度とは、各パターンの性能パラメータが、性能要件に対してどの程度の余裕があるかを表す指標であり、例えば、性能要件と性能パラメータとの差分や、あるいは性能要件に対する性能パラメータの百分率等で表すことができるが、これらに限定されるものではない。図１３Ｂに、冗長パターン情報２０５の一例を示す。
【００５４】
ステップＳ１５において、中央演算処理装置１１は、プログラム生成部２０３として動作する。中央演算処理装置１１は、主記憶装置１２から冗長パターン情報２０５を読み込
む。さらに、各冗長パターンに関連付けられた参照コードを補助記憶装置１３から読み込み、冗長プログラム２１を生成し、調整した後、補助記憶装置１３に記憶する。
【００５５】
図１０は、パターン選択ステップＳ１４における処理の詳細を説明するフローチャートの一例である。
ステップＳ３５の処理を追加し、ステップＳ３４の代わりにステップＳ３６の処理を実行する点で、実施例１と異なっている。
【００５６】
ステップＳ３５において、中央演算処理装置１１は、冗長パターン、すなわちステップＳ３３で選択された冗長化数分のパターン（抽出数＞冗長化数の場合）、またはパターン抽出情報そのもの（抽出数≦冗長化数の場合）の各々について、性能要件と各冗長パターンの性能パラメータを用いて性能パラメータの余裕度の計算を行う。
【００５７】
ステップＳ３６において、中央演算処理装置１１は、冗長パターン数と、冗長パターンのレコードのうち、少なくとも参照コードファイルを含む必要な情報と、さらに当該パターンの性能パラメータの余裕度とを、冗長パターン情報２０５として主記憶装置１２に書き込む。
【００５８】
図１１は、プログラム生成ステップＳ１５における処理の詳細を説明するフローチャートの一例である。
ステップＳ４８の処理を追加し、ステップＳ４1、ステップＳ４２及びステップＳ４５の代わりにステップＳ４６、ステップＳ４７及びステップＳ４９の処理を実行する点で、実施例１と異なっている。
【００５９】
ステップＳ４６において、中央演算処理装置１１は、主記憶装置１２から冗長パターン情報２０５を読み込み、冗長パターン数と、各冗長パターンのレコードのうち、少なくとも参照コードファイルを含む必要な情報と、さらに当該パターンの性能パラメータの余裕度とを取り出す。
【００６０】
ステップＳ４７において、中央演算処理装置１１は、冗長パターン情報２０５に含まれる各パターンの参照コードファイルをキーとして、補助記憶装置１３に記憶されている参照コード情報１１２を検索し、該当する参照コードを順次読み込む。冗長パターンが一巡した場合には、先頭パターンに戻ってステップＳ４８のプログラム調整を繰り返す。
【００６１】
冗長パターン数が冗長化数に満たない場合の具体的な処理を説明する。例えば、冗長化数が２で、冗長パターン数が１の場合、冗長パターンＰ１に対してプログラム調整を繰り返して、Ｐ１からＰ１´及びＰ１″を生成する。また、冗長化数が３で、冗長パターン数が２の場合、冗長パターンＰ１及びＰ２に対してそれぞれプログラム調整を行ってＰ１´及びＰ２´を生成し、Ｐ１に対して再度プログラム調整を行ってＰ１″を生成することで、冗長化数分の冗長パターンを生成する。
【００６２】
ステップＳ４８において、中央演算処理装置１１は、冗長パターン毎に生成された冗長プログラムに対して、当該パターンの性能パラメータ余裕度を参照し、性能要件を満足する範囲でプログラム調整を行う。プログラム調整とは、機能変更を伴わないプログラムレベルでの修正であり、例えば、プログラムの命令列に対する並べ替えやダミー命令の挿入、あるいは、プログラムのメモリ配置に対する並べ替えやダミー領域の挿入等の操作である。
図１４Ａは、プログラムの命令列に対する並べ替えによるプログラム調整の一例を示す図である。
調整前命令列Ｃ１の互いにデータ依存関係を持たない命令Ｘ、命令Ｙ及び命令Ｚからなる部分Ｃ１１に対して、並べ替えを行い、命令Ｚ、命令Ｙ及び命令Ｘからなる部分Ｃ２１に置き換えることによって、調整後命令列Ｃ２を出力する。例えば、仮に中央演算処理装置の未知のエラッタにより命令Ｘ及び命令Ｙまたは、命令Ｙ及び命令Ｚのシーケンスが正常に動作しなかったとすれば、この並べ替え調整によって、エラッタを回避できることになる。
図１４Ｂは、プログラムの命令列に対するダミー命令挿入によるプログラム調整の一例を示す図である。
調整前命令列Ｃ１の命令Ｘ、命令Ｙ及び命令Ｚからなる部分Ｃ１１に対して、命令実行のタイミング調整のためのｎｏｐ(no-operation)命令を挿入し、命令Ｘ、ｎｏｐ、命令Ｙ、ｎｏｐ及び命令Ｚからなる部分Ｃ３１に置き換えることによって、調整後命令列Ｃ３を出力する。図１４Ａと同様に、例えば、中央演算処理装置の実行タイミングに起因すると推定される未知のエラッタにより命令Ｘ及び命令Ｙまたは、命令Ｙ及び命令Ｚのシーケンスが正常に動作しなかったとすれば、このダミー命令挿入調整によって、エラッタを回避できることになる。なお、ダミー命令挿入を行う場合には、実行サイクルの要件を満たす範囲で実施する必要がある。また、ダミー命令としては、ｎｏｐ命令以外の同等の命令として、例えば、あるレジスタに０を加算し、書き戻す命令等を使用することができる。
図１５Ａは、プログラムのメモリ配置に対する並べ替えによるプログラム調整の一例を示す図である。図１５Ａ、Ｂのメモリマップでは、コード領域からスタック領域に向かってアドレス付けされているものとする。
調整前メモリマップＭ１のデータ領域に隣接して配置されたバッファＸ及びバッファＹからなる部分Ｍ１１に対して、並べ替えを行い、バッファＹ及びバッファＸからなる部分Ｍ２１に置き換えることによって、調整後メモリマップＭ２を出力する。例えば、仮にプログラムにバッファＸがオーバフローするとバッファＹの一部が書き換えられる不具合があったとすれば、この並べ替え調整によりバッファＹが、バッファＸのオーバフローによって上書きされる現象が回避できることになる。
図１５Ｂは、プログラムのメモリ配置に対するダミー領域挿入によるプログラム調整の一例を示す図である。
調整前メモリマップＭ１のデータ領域に隣接して配置されたバッファＸ及びバッファＹからなる部分Ｍ１１に対して、ダミー領域挿入を行い、バッファＸ、ダミーデータ、バッファＹ及びダミーデータからなる部分Ｍ３１に置き換えることによって、調整後メモリマップＭ３を出力する。図１５Ａと同様に、例えば、仮にプログラムにバッファＸがオーバフローするとバッファＹの一部が書き換えられる不具合があったとすれば、このダミー領域挿入調整によりバッファＹが、バッファＸのオーバフローで上書きされる現象が回避できることになる。なお、ダミー領域挿入を行う場合には、メモリ使用量の要件を満たす範囲で実施する必要がある。また、バッファをヒープ領域にとる場合には、動的メモリ割り当ての実行順序・サイズを変更することにより、同等の効果を得ることができる。
上記のプログラム調整処理は、個別に行ってもよいし、いくつかを組み合わせてもよい。同一のパターンに対しては、調整方法を変更する必要があるが、ステップ３８の処理を実行する毎にランダムに調整方法を変更してもよい。
【００６３】
図１１のステップＳ４９において、中央演算処理装置１１は、ステップＳ４７からステップＳ４４までの処理による出力パターン数が、冗長化数に等しくなったか判定し、等しい場合には終了し、等しくない場合には、ステップＳ４７に戻り、ステップＳ４７からステップＳ４４までの処理を繰り返す。
【００６４】
以上のように、本実施例のソフトウェア冗長化装置２によれば、生成した各冗長プログラムに対して、さらにプログラム調整を行うので、実施例１のソフトウェア冗長化装置１に比べ、より多様性の高い冗長プログラムの生成を行うことができる。
【００６５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００６６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００６７】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００６８】
１、２：プログラム冗長化装置、１１：中央演算処理装置、１２：主記憶装置、１３：補助記憶装置、１４：入力装置、１５：出力装置、１６：バス、１００、２００：ソフトウェア冗長化プログラム、１１１：実装パターン情報、１１２：参照コード、２０：性能要件情報、２１：冗長プログラム、１０１：パターン抽出部、１０２、２０２：パターン選択部、１０３、２０３：プログラム生成部、１０４：パターン抽出情報、１０５、２０５：冗長パターン情報
【図１】
2013228791.tif 000003
【図２】
2013228791.tif 000004
【図３】
2013228791.tif 000005
【図４】
2013228791.tif 000006
【図５】
2013228791.tif 000007
【図６】
2013228791.tif 000008
【図７】
2013228791.tif 000009
【図８】
2013228791.tif 000010
【図９】
2013228791.tif 000011
【図１０】
2013228791.tif 000012
【図１１】
2013228791.tif 000013
【図１２】
2013228791.tif 000014
【図１３Ａ】
2013228791.tif 000015
【図１３Ｂ】
2013228791.tif 000016
【図１４Ａ】
2013228791.tif 000017
【図１４Ｂ】
2013228791.tif 000018
【図１５Ａ】
2013228791.tif 000019
【図１５Ｂ】
2013228791.tif 000020