JP2013228791A - ソフトウェア冗長化装置及び方法 - Google Patents
ソフトウェア冗長化装置及び方法 Download PDFInfo
- Publication number
- JP2013228791A JP2013228791A JP2012098732A JP2012098732A JP2013228791A JP 2013228791 A JP2013228791 A JP 2013228791A JP 2012098732 A JP2012098732 A JP 2012098732A JP 2012098732 A JP2012098732 A JP 2012098732A JP 2013228791 A JP2013228791 A JP 2013228791A
- Authority
- JP
- Japan
- Prior art keywords
- pattern
- information
- mounting
- redundant
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】
性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供する。
【解決手段】
冗長プログラムに対する性能要件情報を入力し、特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶し、実装パターンに基づき、実装されたプログラムコードである参照コードを記憶し、当該実装パターン情報の中で性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する参照コードを参照する為の情報を含む冗長パターン情報を作成し、当該冗長パターン情報に基づいて読み出した、当該参照コードから冗長プログラムを作成する。
【選択図】 図1
性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供する。
【解決手段】
冗長プログラムに対する性能要件情報を入力し、特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶し、実装パターンに基づき、実装されたプログラムコードである参照コードを記憶し、当該実装パターン情報の中で性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する参照コードを参照する為の情報を含む冗長パターン情報を作成し、当該冗長パターン情報に基づいて読み出した、当該参照コードから冗長プログラムを作成する。
【選択図】 図1
Description
本発明は、同一機能で実装の異なる複数の冗長プログラムを生成する為のソフトウェア冗長化装置及び方法に関する。
本技術分野の背景技術として、特開昭62−174837号公報(特許文献1)がある。この公報には、「従来のデュアル装置の考え方をソフトウェアにも拡大し、現在ソフトウェアの不良で誤った結果になってもそのまま出力していたのを、コピーでなく各々独立に開発したソフトウェアを併行して走らせ、出力結果を逐次比較し、結果が一致したもののみを出力し、結果が一致しなかったらユーザに出力せず、原因を調査するように考慮したソフトウェアの二重化方式である。」と記載されている。
非特許文献1では、ソフトウェアの冗長実装において多様性を増大させるのに推奨される実践手法について議論されている。
また、特開2010−39892号公報(特許文献2)には、課題として「Webサービスの設計において、設計者の負担を軽減する。」と記載されており、その解決手段として、「本発明のパターン作成装置は、パターン、パターンを実行する基盤となるソフトウェア、非機能要件、非機能要件の優先度を受け付け、非機能要件及びソフトウェアを検索キーとして製品対応情報を検索し、ソフトウェアの元で実装可能な実現処理を抽出し、非機能要件及び優先度に基づき非機能要件対応情報を検索して、優先度の高い非機能要件を打ち消すような影響のない実現処理を抽出し、前記2回の抽出によって抽出された実現処理に共通する実現処理を検索キーとして、組み合わせ可否情報を参照し、相互に実装可能な実現処理を組み合わせとして抽出し、当該組み合わせから、非機能要件毎に、非機能要件に関連付けられた実現処理が少なくとも1つ含まれるような組み合わせを取得し、取得した実現処理の組み合わせをパターンに適用して作成した修正パターンを表示し、記憶する。」と記載されている。
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に記載されるソフトウェア二重化方式は、ソフトウェアダイバーシティを実現する技術の一つであるが、同一内容の入力に対し同一内容の出力になるはずの仕様で、コピーでなく、各々独立して開発したソフトウェアを用いる為、多大な開発コストが必要となる上、必ずしも高い多様性が得られるとは限らない。
一方、例えば、前記非特許文献1に記載されている自動コード変換等によれば、低コストで、多様性のあるソフトウェアを生成できるが、ソフトウェアに要求される非機能要件である性能要件を満たせない可能性がある。例えば、実行時間・メモリ量・精度等の性能要件を考慮していない為、これらの性能要件を満足しないコードが生成されるおそれがある。
また、前記特許文献2に記載されるパターン作成装置では、指定された優先度にしたがって非機能要件を満たすソフトウェア部品組み合わせパターンを作成するが、非機能要件実現手法の有無のみを考慮する為、ソフトウェアダイバーシティに適した多様性の高い複数のパターンの抽出には、適さない。
そこで、本発明は、性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供する。
上記課題を解決するために、本発明のソフトウェア冗長化装置は、同一機能で実装の異なる所定数の冗長プログラムを生成する為のソフトウェア冗長化装置であって、
前記冗長プログラムに対する性能要件情報を入力する入力部と、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶する実装パターン情報記憶部と、
前記実装パターンに基づき、実装されたプログラムコードである参照コードを記憶する参照コード記憶部と、
前記実装パターン情報記憶部から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成するパターン抽出部と、
前記パターン抽出情報を記憶するパターン抽出情報記憶部と、
前記パターン抽出情報記憶部から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する前記参照コードを参照する為の情報を含む冗長パターン情報を作成するパターン選択部と、
前記冗長パターン情報を記憶する冗長パターン情報記憶部と、
前記冗長パターン情報記憶部から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから前記冗長プログラムを作成するプログラム生成部と、
前記冗長プログラムを出力する出力部とを備える。
前記冗長プログラムに対する性能要件情報を入力する入力部と、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶する実装パターン情報記憶部と、
前記実装パターンに基づき、実装されたプログラムコードである参照コードを記憶する参照コード記憶部と、
前記実装パターン情報記憶部から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成するパターン抽出部と、
前記パターン抽出情報を記憶するパターン抽出情報記憶部と、
前記パターン抽出情報記憶部から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から選択した所定数の異なる実装パターンに対応する前記参照コードを参照する為の情報を含む冗長パターン情報を作成するパターン選択部と、
前記冗長パターン情報を記憶する冗長パターン情報記憶部と、
前記冗長パターン情報記憶部から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから前記冗長プログラムを作成するプログラム生成部と、
前記冗長プログラムを出力する出力部とを備える。
本発明によれば、性能要件を満たしつつ、多様性の高い冗長プログラムの生成を低コストで行えるソフトウェア冗長化装置及び方法を提供することができる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
本発明によるソフトウェア冗長化装置は、特定の同一演算機能で実装内容の異なる複数(冗長化数)の冗長プログラムを作成する。本実施例の「多様性」とは、プログラムの実装パラメータまたは性能パラメータが異なっていることを言い、多様性が高いとは、プログラムごとに実装パラメータまたは性能パラメータの内容が異なっている度合いが大きいことを言う。
以下、本発明の実施例を、図面を用いて説明する。
本実施例では、性能要件を満たしながら、多様性の高い冗長プログラムの生成を行うソフトウェア冗長化装置の例を説明する。
図1は、本実施例のソフトウェア冗長化装置1の構成図の例である。
ソフトウェア冗長化装置1は、コンピュータであり、中央演算処理装置11、主記憶装置12、補助記憶装置13、入力装置14、出力装置15を有している。中央演算処理装置11、主記憶装置12、補助記憶装置13、入力装置14、出力装置15は、バス16に接続されており、中央演算処理装置11の制御により相互にデータの転送を行うことができる。
中央演算処理装置11は、主記憶装置12に記憶されたソフトウェア冗長化プログラム100にしたがって、ソフトウェア冗長化装置1の各構成要素の制御処理と演算処理を実行する。
補助記憶装置13は、予め作成された実装パターン情報111及び参照コード112を記憶している。
ここで、実装パターンとは、特定の演算機能をプログラムに実装する際のバリエーションを表す実装パラメータの組み合わせである。実装パラメータとしては、例えば演算アルゴリズム、データ型、処理単位、使用命令等が挙げられる。実行時間、メモリ使用量、演算誤差等のプログラムの性能は、実装パターンによって変わってくる。参照コードとは、実装パターンに基づき、実装されたプログラムコードであり、各々の実装パターンに対して1対1に関連づけられる。
図12は、実装パターン情報111の一例を示す図である。
実装パターン情報111においては、パターン毎にID1201、実装パラメータ1202、性能パラメータ1203、参照コードファイル1204により構成されるレコードを記憶している。ID1201は、実装パターンを一意に識別できるものであればよく、図12に示した形式である必要は無い。実装パラメータ1202は、さらに演算アルゴリズム1205、データ型1206、処理単位1207、使用命令1208を含み、性能パラメータ1203は、実行サイクル1209、メモリ使用量1210、演算誤差1211を含んでいるが、プログラムの性能に関係するパラメータであればよく、これらに限定されるものではない。
実装パターン情報111においては、パターン毎にID1201、実装パラメータ1202、性能パラメータ1203、参照コードファイル1204により構成されるレコードを記憶している。ID1201は、実装パターンを一意に識別できるものであればよく、図12に示した形式である必要は無い。実装パラメータ1202は、さらに演算アルゴリズム1205、データ型1206、処理単位1207、使用命令1208を含み、性能パラメータ1203は、実行サイクル1209、メモリ使用量1210、演算誤差1211を含んでいるが、プログラムの性能に関係するパラメータであればよく、これらに限定されるものではない。
図2は、ソフトウェア冗長化装置1の機能を示すブロック図の例である。
性能要件情報20は、ソフトウェア冗長化装置1へ入力装置14を介して入力されるデータであり、ソフトウェア冗長化装置1から出力装置15を介して出力される冗長プログラム21に対する性能要件を含んでいる。
中央演算処理装置11が、ソフトウェア冗長化プログラム100にしたがって動作することによって、パターン抽出部101、パターン選択部102、プログラム生成部103として機能する。実装パターン情報111、参照コード112は、補助記憶装置13に記憶され、パターン抽出情報104及び冗長パターン情報105は、主記憶装置12に記憶され、ソフトウェア冗長化プログラム100に基づいて中央演算処理装置11により書込み制御、または読出し制御が行われる。
性能要件情報20は、ソフトウェア冗長化装置1へ入力装置14を介して入力されるデータであり、ソフトウェア冗長化装置1から出力装置15を介して出力される冗長プログラム21に対する性能要件を含んでいる。
中央演算処理装置11が、ソフトウェア冗長化プログラム100にしたがって動作することによって、パターン抽出部101、パターン選択部102、プログラム生成部103として機能する。実装パターン情報111、参照コード112は、補助記憶装置13に記憶され、パターン抽出情報104及び冗長パターン情報105は、主記憶装置12に記憶され、ソフトウェア冗長化プログラム100に基づいて中央演算処理装置11により書込み制御、または読出し制御が行われる。
図3は、ソフトウェア冗長化装置1の処理を説明するフローチャートの一例である。
ステップS01において、入力装置14は、ユーザから性能要件を受け付け、性能要件情報20として主記憶装置12に記憶する。
ステップS01において、入力装置14は、ユーザから性能要件を受け付け、性能要件情報20として主記憶装置12に記憶する。
ステップS02において、中央演算処理装置11は、パターン抽出部101として動作する。中央演算処理装置11は、補助記憶装置13から実装パターン情報111を、主記憶装置12から性能要件情報20を読み込み、実装パターン情報111から性能要件情報20に含まれる全ての性能要件を満たす実装パターンを抽出し、パターン抽出情報104として、主記憶装置12に記憶する。ここで、パターン抽出情報104は、抽出された実装パターン数と、抽出された各実装パターンのレコードを含んでいる。
ステップS03において、中央演算処理装置11は、パターン抽出情報104に含まれる抽出された実装パターン数をチェックし、抽出された実装パターン数が0である場合、すなわち性能要件を満たす実装パターンが無い場合には、以降のステップS04〜S06の処理を実行せずに終了する。抽出された実装パターン数が0より大きい場合、すなわち性能要件を満たす実装パターンが少なくとも1つ以上ある場合には、ステップS04〜S06の処理を順次実行する。
ここで、本実施例における用語を説明する。「冗長化数」は、利用者が予め指定する冗長の度合いを示す数である。例えば、ソフトウェアを二重化する場合、「冗長化数」として2を設定し、三重化する場合は、「冗長化数」として3を設定する。以下のパターン抽出処理で抽出された、性能要件を満たすパターンの数が「パターン抽出数」(以下では「抽出数」と略記する場合もあり)であり、「パターン抽出数」のパターンのうち、出力対象として選択する多様性の高いパターンの数として「冗長パターン数」を定義する。通常(「パターン抽出数」が「冗長化数」以上である場合)、「冗長パターン数」は「冗長化数」に等しくするが、「パターン抽出数」が「冗長化数」に満たない場合には、「パターン抽出数」そのものを「冗長パターン数」とし、「冗長パターン数」すなわち「パターン抽出数」のパターンのうち一部又は全部を重複させることにより「冗長化数」のパターンと見做す。以下の処理では、抽出処理の結果である「パターン抽出数」と予め指定した「冗長化数」とが比較される。また、プログラム素片である参照コードを用いて「冗長パターン」から「冗長プログラム」が生成される。
ステップS04において、中央演算処理装置11は、パターン選択部102として動作する。中央演算処理装置11は、主記憶装置12からパターン抽出情報104を読み込み、抽出されたパターンのうちで最も多様性の異なるパターンを冗長化数分だけ選択し、冗長パターン情報105として、主記憶装置12に記憶する。ここで、冗長パターン情報105は、選択された冗長パターン数と、選択されたパターンのレコードのうち少なくとも参照コードファイル情報とを含んでいる。図13Aに、冗長パターン情報105の一例を示す。
ステップS05において、中央演算処理装置11は、プログラム生成部103として動作する。中央演算処理装置11は、主記憶装置12から冗長パターン情報105を読み込む。さらに、各冗長パターンに関連付けられた参照コードを補助記憶装置13から読み込み、冗長プログラム21を生成して、補助記憶装置13に記憶する。
ステップS06において、出力装置15は、補助記憶装置13に記憶されている冗長プログラム21を出力する。
図4は、パターン抽出ステップS02における処理の詳細を説明するフローチャートの一例である。
ステップS21において、中央演算処理装置11は、主記憶装置12から性能要件情報20を読み込むとともに、パターン抽出数を0に設定することによりパターン抽出情報を初期化する。
ステップS21において、中央演算処理装置11は、主記憶装置12から性能要件情報20を読み込むとともに、パターン抽出数を0に設定することによりパターン抽出情報を初期化する。
ステップS22において、中央演算処理装置11は、補助記憶装置13に記憶されている実装パターン情報111のレコードを順次読み込む。
ステップS23において、中央演算処理装置11は、性能要件情報20に含まれる性能要件と実装パターン情報111のレコードに含まれる性能パラメータとを比較し、性能パラメータが性能要件を満足するか否かを判定する。
性能パラメータが性能要件を満足する場合、ステップS24において、中央演算処理装置11は、パターン抽出数に1を加算するとともに、当該レコードを主記憶装置12のパターン抽出情報104に追加して書き込む。
性能パラメータが性能要件を満足しない場合、ステップS24の処理を実行せずに、ステップS25に進む。
性能パラメータが性能要件を満足する場合、ステップS24において、中央演算処理装置11は、パターン抽出数に1を加算するとともに、当該レコードを主記憶装置12のパターン抽出情報104に追加して書き込む。
性能パラメータが性能要件を満足しない場合、ステップS24の処理を実行せずに、ステップS25に進む。
ステップS25において、中央演算処理装置11は、ステップS22からステップS24までの処理が、実装パターン情報111の全てのレコードに対して完了したかどうか判定し、完了している場合には終了し、完了していない場合には、ステップS22に戻り、未処理のレコードについて、ステップS22からステップS24までの処理を繰り返す。
以上により、実装パターン情報111のうち、性能要件を満たす全ての実装パターンが抽出される。
図5は、パターン選択ステップS04における処理の詳細を説明するフローチャートの一例である。
ステップS31において、中央演算処理装置11は、主記憶装置12からパターン抽出情報104を読み込み、性能要件を満たすパターンの数であるパターン抽出数と、そのパターン抽出数分の抽出パターンのレコードを取り出す。
ステップS31において、中央演算処理装置11は、主記憶装置12からパターン抽出情報104を読み込み、性能要件を満たすパターンの数であるパターン抽出数と、そのパターン抽出数分の抽出パターンのレコードを取り出す。
ステップS32において、中央演算処理装置11は、パターン抽出数と冗長化数を比較する。パターン抽出数が冗長化数より大きい場合、ステップS33に進む。パターン抽出数が冗長化数以下の場合、冗長パターン数をパターン抽出数に設定し、ステップS33の処理を行わず、ステップS34に進む。
ステップS33において、中央演算処理装置11は、パターン抽出情報104に含まれる全抽出パターンのレコードに含まれる実装パラメータないし性能パラメータの類似度を解析して、類似度が最も異なる、すなわち最も類似度の低い冗長化数のパターンを選択する。即ち、類似度の低いパターンを選択することによって、互いにタイプの異なるパターンが選択されることとなり、その結果、パターンの多様性が向上する。ここで、類似度解析手法としては、例えば、異なるパラメータ数等の単純な指標の他、ユークリッド距離、標準ユークリッド距離、マハラノビス距離、マンハッタン距離、チェビシェフ距離、ミンコフスキー距離等のn次元ベクトルの距離や、コサイン類似度、ピアソンの相関係数、偏差パターン類似度等のn次元ベクトルの類似度といった種々の既知の手法を用いることができる。なお、性能パラメータについては、最も類似するパターンを選択するようにしてもよい。
ステップS34において、中央演算処理装置11は、冗長パターン数と、ステップS33で選択された冗長化数分のパターン(抽出数>冗長化数の場合)、またはパターン抽出情報そのもの(抽出数≦冗長化数の場合)のレコードのうち、少なくとも参照コードファイルを含む必要な情報とを、冗長パターン情報105として主記憶装置12に書き込む。
以上により、パターン抽出情報104のうち、最も類似度の低い、すなわち最も多様性の高い冗長パターン数(冗長化数または抽出数)の実装パターンが選択される。
図6は、プログラム生成ステップS05における処理の詳細を説明するフローチャートの一例である。
ステップS41において、中央演算処理装置11は、主記憶装置12から冗長パターン情報105を読み込む。
ステップS41において、中央演算処理装置11は、主記憶装置12から冗長パターン情報105を読み込む。
ステップS42において、中央演算処理装置11は、冗長パターン情報105に含まれる各パターンの参照コードファイルをキーとして、補助記憶装置13に記憶されている参照コード情報112を検索し、該当する参照コードを順次読み込む。
ステップS43において、中央演算処理装置11は、読み込んだ参照コードから冗長プログラムを生成する。ここで、冗長プログラムは、参照コードそのものでもよいし、アセンブリコードやオブジェクトコードまたは実行形式ファイル等、目的に応じた形式であればよい。
ステップS44において、中央演算処理装置11は、生成した冗長プログラムを補助記憶装置13に書き込む。
ステップS45において、中央演算処理装置11は、ステップS42からステップS44までの処理が、冗長パターン情報105の全てのパターンに対して完了したかどうかを判定し、完了している場合には終了し、完了していない場合には、ステップS42に戻り、未処理のパターンについて、ステップS42からステップS44までの処理を繰り返す。
以上のように、本実施例のソフトウェア冗長化装置1によれば、性能要件を満たしながら、多様性の高い冗長プログラムの生成を行うことができる。
なお、冗長パターン数が、冗長化数に満たない場合には、不足分の冗長プログラムを重複使用することによって補うことができる。重複使用する冗長プログラムができるだけ集中しないよう、例えば、先頭あるいは末尾のプログラムから順に重複させればよい。
実施例1では、冗長パターン数が、冗長化数に満たない場合には、不足分の冗長プログラムを重複使用する為、重複している冗長プログラムについては、ソフトウェアダイバーシティの効果が得られない。
本実施例では、冗長パターン数が、冗長化数に満たない場合にも、多様性の高い冗長プログラムの生成を行うことのできるソフトウェア冗長化装置の例を説明する。
なお、本実施例におけるソフトウェア冗長化装置2を説明する図7から図11において、実施例1のソフトウェア冗長化装置1と重複する部分については、同一の符号を付し、説明を省略する。
図7は、本実施例におけるソフトウェア冗長化装置2の構成図の例である。
ソフトウェア冗長化装置2は、図1におけるソフトウェア冗長化プログラム100の代わりにソフトウェア冗長化プログラム200を有する点で、実施例1のソフトウェア冗長化装置1と異なっている。
本実施例では、冗長パターン数が、冗長化数に満たない場合にも、多様性の高い冗長プログラムの生成を行うことのできるソフトウェア冗長化装置の例を説明する。
なお、本実施例におけるソフトウェア冗長化装置2を説明する図7から図11において、実施例1のソフトウェア冗長化装置1と重複する部分については、同一の符号を付し、説明を省略する。
図7は、本実施例におけるソフトウェア冗長化装置2の構成図の例である。
ソフトウェア冗長化装置2は、図1におけるソフトウェア冗長化プログラム100の代わりにソフトウェア冗長化プログラム200を有する点で、実施例1のソフトウェア冗長化装置1と異なっている。
図8は、ソフトウェア冗長化装置2の機能を示すブロック図の例である。
中央演算処理装置11が、ソフトウェア冗長化プログラム200にしたがって動作することによって、パターン選択部102及びプログラム生成部103の代わりに、各々パターン選択部202及びプログラム生成部203として機能する点が、実施例1と異なっている。また、冗長パターン情報105の代わりに、冗長パターン情報205が、主記憶装置12に記憶される点で、実施例1と異なっている。
中央演算処理装置11が、ソフトウェア冗長化プログラム200にしたがって動作することによって、パターン選択部102及びプログラム生成部103の代わりに、各々パターン選択部202及びプログラム生成部203として機能する点が、実施例1と異なっている。また、冗長パターン情報105の代わりに、冗長パターン情報205が、主記憶装置12に記憶される点で、実施例1と異なっている。
図9は、ソフトウェア冗長化装置2の処理を説明するフローチャートの一例である。
ステップS04・ステップS05の代わりにステップS14・ステップS15の処理を実行する点で、実施例1と異なっている。
ステップS04・ステップS05の代わりにステップS14・ステップS15の処理を実行する点で、実施例1と異なっている。
ステップS14において、中央演算処理装置11は、パターン選択部202として動作する。中央演算処理装置11は、主記憶装置12からパターン抽出情報104を読み込み、抽出されたパターンのうちで最も異なる冗長化数までのパターンを選択し、冗長パターン情報205として、主記憶装置12に記憶する。ここで、冗長パターン情報205は、選択された冗長パターン数と、選択されたパターンのレコードのうち、少なくとも参照コードファイルおよび性能パラメータの余裕度とを含んでいる。性能パラメータの余裕度とは、各パターンの性能パラメータが、性能要件に対してどの程度の余裕があるかを表す指標であり、例えば、性能要件と性能パラメータとの差分や、あるいは性能要件に対する性能パラメータの百分率等で表すことができるが、これらに限定されるものではない。図13Bに、冗長パターン情報205の一例を示す。
ステップS15において、中央演算処理装置11は、プログラム生成部203として動作する。中央演算処理装置11は、主記憶装置12から冗長パターン情報205を読み込
む。さらに、各冗長パターンに関連付けられた参照コードを補助記憶装置13から読み込み、冗長プログラム21を生成し、調整した後、補助記憶装置13に記憶する。
む。さらに、各冗長パターンに関連付けられた参照コードを補助記憶装置13から読み込み、冗長プログラム21を生成し、調整した後、補助記憶装置13に記憶する。
図10は、パターン選択ステップS14における処理の詳細を説明するフローチャートの一例である。
ステップS35の処理を追加し、ステップS34の代わりにステップS36の処理を実行する点で、実施例1と異なっている。
ステップS35の処理を追加し、ステップS34の代わりにステップS36の処理を実行する点で、実施例1と異なっている。
ステップS35において、中央演算処理装置11は、冗長パターン、すなわちステップS33で選択された冗長化数分のパターン(抽出数>冗長化数の場合)、またはパターン抽出情報そのもの(抽出数≦冗長化数の場合)の各々について、性能要件と各冗長パターンの性能パラメータを用いて性能パラメータの余裕度の計算を行う。
ステップS36において、中央演算処理装置11は、冗長パターン数と、冗長パターンのレコードのうち、少なくとも参照コードファイルを含む必要な情報と、さらに当該パターンの性能パラメータの余裕度とを、冗長パターン情報205として主記憶装置12に書き込む。
図11は、プログラム生成ステップS15における処理の詳細を説明するフローチャートの一例である。
ステップS48の処理を追加し、ステップS41、ステップS42及びステップS45の代わりにステップS46、ステップS47及びステップS49の処理を実行する点で、実施例1と異なっている。
ステップS48の処理を追加し、ステップS41、ステップS42及びステップS45の代わりにステップS46、ステップS47及びステップS49の処理を実行する点で、実施例1と異なっている。
ステップS46において、中央演算処理装置11は、主記憶装置12から冗長パターン情報205を読み込み、冗長パターン数と、各冗長パターンのレコードのうち、少なくとも参照コードファイルを含む必要な情報と、さらに当該パターンの性能パラメータの余裕度とを取り出す。
ステップS47において、中央演算処理装置11は、冗長パターン情報205に含まれる各パターンの参照コードファイルをキーとして、補助記憶装置13に記憶されている参照コード情報112を検索し、該当する参照コードを順次読み込む。冗長パターンが一巡した場合には、先頭パターンに戻ってステップS48のプログラム調整を繰り返す。
冗長パターン数が冗長化数に満たない場合の具体的な処理を説明する。例えば、冗長化数が2で、冗長パターン数が1の場合、冗長パターンP1に対してプログラム調整を繰り返して、P1からP1´及びP1″を生成する。また、冗長化数が3で、冗長パターン数が2の場合、冗長パターンP1及びP2に対してそれぞれプログラム調整を行ってP1´及びP2´を生成し、P1に対して再度プログラム調整を行ってP1″を生成することで、冗長化数分の冗長パターンを生成する。
ステップS48において、中央演算処理装置11は、冗長パターン毎に生成された冗長プログラムに対して、当該パターンの性能パラメータ余裕度を参照し、性能要件を満足する範囲でプログラム調整を行う。プログラム調整とは、機能変更を伴わないプログラムレベルでの修正であり、例えば、プログラムの命令列に対する並べ替えやダミー命令の挿入、あるいは、プログラムのメモリ配置に対する並べ替えやダミー領域の挿入等の操作である。
図14Aは、プログラムの命令列に対する並べ替えによるプログラム調整の一例を示す図である。
調整前命令列C1の互いにデータ依存関係を持たない命令X、命令Y及び命令Zからなる部分C11に対して、並べ替えを行い、命令Z、命令Y及び命令Xからなる部分C21に置き換えることによって、調整後命令列C2を出力する。例えば、仮に中央演算処理装置の未知のエラッタにより命令X及び命令Yまたは、命令Y及び命令Zのシーケンスが正常に動作しなかったとすれば、この並べ替え調整によって、エラッタを回避できることになる。
図14Bは、プログラムの命令列に対するダミー命令挿入によるプログラム調整の一例を示す図である。
調整前命令列C1の命令X、命令Y及び命令Zからなる部分C11に対して、命令実行のタイミング調整のためのnop(no-operation)命令を挿入し、命令X、nop、命令Y、nop及び命令Zからなる部分C31に置き換えることによって、調整後命令列C3を出力する。図14Aと同様に、例えば、中央演算処理装置の実行タイミングに起因すると推定される未知のエラッタにより命令X及び命令Yまたは、命令Y及び命令Zのシーケンスが正常に動作しなかったとすれば、このダミー命令挿入調整によって、エラッタを回避できることになる。なお、ダミー命令挿入を行う場合には、実行サイクルの要件を満たす範囲で実施する必要がある。また、ダミー命令としては、nop命令以外の同等の命令として、例えば、あるレジスタに0を加算し、書き戻す命令等を使用することができる。
図15Aは、プログラムのメモリ配置に対する並べ替えによるプログラム調整の一例を示す図である。図15A、Bのメモリマップでは、コード領域からスタック領域に向かってアドレス付けされているものとする。
調整前メモリマップM1のデータ領域に隣接して配置されたバッファX及びバッファYからなる部分M11に対して、並べ替えを行い、バッファY及びバッファXからなる部分M21に置き換えることによって、調整後メモリマップM2を出力する。例えば、仮にプログラムにバッファXがオーバフローするとバッファYの一部が書き換えられる不具合があったとすれば、この並べ替え調整によりバッファYが、バッファXのオーバフローによって上書きされる現象が回避できることになる。
図15Bは、プログラムのメモリ配置に対するダミー領域挿入によるプログラム調整の一例を示す図である。
調整前メモリマップM1のデータ領域に隣接して配置されたバッファX及びバッファYからなる部分M11に対して、ダミー領域挿入を行い、バッファX、ダミーデータ、バッファY及びダミーデータからなる部分M31に置き換えることによって、調整後メモリマップM3を出力する。図15Aと同様に、例えば、仮にプログラムにバッファXがオーバフローするとバッファYの一部が書き換えられる不具合があったとすれば、このダミー領域挿入調整によりバッファYが、バッファXのオーバフローで上書きされる現象が回避できることになる。なお、ダミー領域挿入を行う場合には、メモリ使用量の要件を満たす範囲で実施する必要がある。また、バッファをヒープ領域にとる場合には、動的メモリ割り当ての実行順序・サイズを変更することにより、同等の効果を得ることができる。
上記のプログラム調整処理は、個別に行ってもよいし、いくつかを組み合わせてもよい。同一のパターンに対しては、調整方法を変更する必要があるが、ステップ38の処理を実行する毎にランダムに調整方法を変更してもよい。
図14Aは、プログラムの命令列に対する並べ替えによるプログラム調整の一例を示す図である。
調整前命令列C1の互いにデータ依存関係を持たない命令X、命令Y及び命令Zからなる部分C11に対して、並べ替えを行い、命令Z、命令Y及び命令Xからなる部分C21に置き換えることによって、調整後命令列C2を出力する。例えば、仮に中央演算処理装置の未知のエラッタにより命令X及び命令Yまたは、命令Y及び命令Zのシーケンスが正常に動作しなかったとすれば、この並べ替え調整によって、エラッタを回避できることになる。
図14Bは、プログラムの命令列に対するダミー命令挿入によるプログラム調整の一例を示す図である。
調整前命令列C1の命令X、命令Y及び命令Zからなる部分C11に対して、命令実行のタイミング調整のためのnop(no-operation)命令を挿入し、命令X、nop、命令Y、nop及び命令Zからなる部分C31に置き換えることによって、調整後命令列C3を出力する。図14Aと同様に、例えば、中央演算処理装置の実行タイミングに起因すると推定される未知のエラッタにより命令X及び命令Yまたは、命令Y及び命令Zのシーケンスが正常に動作しなかったとすれば、このダミー命令挿入調整によって、エラッタを回避できることになる。なお、ダミー命令挿入を行う場合には、実行サイクルの要件を満たす範囲で実施する必要がある。また、ダミー命令としては、nop命令以外の同等の命令として、例えば、あるレジスタに0を加算し、書き戻す命令等を使用することができる。
図15Aは、プログラムのメモリ配置に対する並べ替えによるプログラム調整の一例を示す図である。図15A、Bのメモリマップでは、コード領域からスタック領域に向かってアドレス付けされているものとする。
調整前メモリマップM1のデータ領域に隣接して配置されたバッファX及びバッファYからなる部分M11に対して、並べ替えを行い、バッファY及びバッファXからなる部分M21に置き換えることによって、調整後メモリマップM2を出力する。例えば、仮にプログラムにバッファXがオーバフローするとバッファYの一部が書き換えられる不具合があったとすれば、この並べ替え調整によりバッファYが、バッファXのオーバフローによって上書きされる現象が回避できることになる。
図15Bは、プログラムのメモリ配置に対するダミー領域挿入によるプログラム調整の一例を示す図である。
調整前メモリマップM1のデータ領域に隣接して配置されたバッファX及びバッファYからなる部分M11に対して、ダミー領域挿入を行い、バッファX、ダミーデータ、バッファY及びダミーデータからなる部分M31に置き換えることによって、調整後メモリマップM3を出力する。図15Aと同様に、例えば、仮にプログラムにバッファXがオーバフローするとバッファYの一部が書き換えられる不具合があったとすれば、このダミー領域挿入調整によりバッファYが、バッファXのオーバフローで上書きされる現象が回避できることになる。なお、ダミー領域挿入を行う場合には、メモリ使用量の要件を満たす範囲で実施する必要がある。また、バッファをヒープ領域にとる場合には、動的メモリ割り当ての実行順序・サイズを変更することにより、同等の効果を得ることができる。
上記のプログラム調整処理は、個別に行ってもよいし、いくつかを組み合わせてもよい。同一のパターンに対しては、調整方法を変更する必要があるが、ステップ38の処理を実行する毎にランダムに調整方法を変更してもよい。
図11のステップS49において、中央演算処理装置11は、ステップS47からステップS44までの処理による出力パターン数が、冗長化数に等しくなったか判定し、等しい場合には終了し、等しくない場合には、ステップS47に戻り、ステップS47からステップS44までの処理を繰り返す。
以上のように、本実施例のソフトウェア冗長化装置2によれば、生成した各冗長プログラムに対して、さらにプログラム調整を行うので、実施例1のソフトウェア冗長化装置1に比べ、より多様性の高い冗長プログラムの生成を行うことができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
1、2:プログラム冗長化装置、11:中央演算処理装置、12:主記憶装置、13:補助記憶装置、14:入力装置、15:出力装置、16:バス、100、200:ソフトウェア冗長化プログラム、111:実装パターン情報、112:参照コード、20:性能要件情報、21:冗長プログラム、101:パターン抽出部、102、202:パターン選択部、103、203:プログラム生成部、104:パターン抽出情報、105、205:冗長パターン情報
Claims (15)
- 同一機能で実装の異なる所定数の冗長プログラムを生成する為のソフトウェア冗長化装置であって、
前記冗長プログラムに対する性能要件情報を入力する入力部と、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶する実装パターン情報記憶部と、
前記実装パターンに基づいて実装されたプログラムコードである参照コードを記憶する参照コード記憶部と、
前記実装パターン情報記憶部から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成するパターン抽出部と、
前記パターン抽出情報を記憶するパターン抽出情報記憶部と、
前記パターン抽出情報記憶部から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から所定数の実装パターン情報を選択し、当該実装パターン情報に対応する前記参照コードを参照する為の情報である参照コード情報を含む冗長パターン情報を作成するパターン選択部と、
前記冗長パターン情報を記憶する冗長パターン情報記憶部と、
前記冗長パターン情報記憶部から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから冗長プログラムを作成するプログラム生成部と、
前記冗長プログラムを出力する出力部と、を備えることを特徴とするソフトウェア冗長化装置。 - 前記プログラム生成部は、前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して並べ替えを行うことを特徴とする請求項1に記載のソフトウェア冗長化装置。
- 前記プログラム生成部は、前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して前記性能要件を満たす範囲でダミー命令乃至ダミー領域の挿入を行うことを特徴とする請求項1及び請求項2のいずれかに記載のソフトウェア冗長化装置。
- 前記パターン選択部は、最も実装パラメータの異なる所定数の実装パターン情報を選択することを特徴とする請求項1から請求項3のいずれかに記載のソフトウェア冗長化装置。
- 前記パターン選択部は、最も性能パラメータの近い所定数の実装パターン情報を選択することを特徴とする請求項1から請求項3のいずれかに記載のソフトウェア冗長化装置。
- 前記パターン選択部は、前記実装パラメータ乃至性能パラメータをn次元ベクトルとみなした距離を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項4及び請求項5のいずれかに記載のソフトウェア冗長化装置。
- 前記パターン選択部は、前記実装パラメータ乃至性能パラメータをn次元ベクトルとみなした類似度を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項4及び請求項5のいずれかに記載のソフトウェア冗長化装置。
- 計算機を用いて、同一機能で実装の異なる所定数の冗長プログラムを生成するソフトウェア冗長化方法であって、
前記冗長プログラムに対する性能要件情報を入力し、
特定の演算機能をプログラムに実装する際のパラメータの組み合わせパターンである実装パターンと当該実装パターンに関連付けられた性能パラメータとを含む実装パターン情報を記憶装置に記憶し、
前記実装パターンに基づいて実装されたプログラムコードである参照コードを前記記憶装置に記憶し、
前記記憶装置から実装パターン情報を読み出し、当該実装パターン情報の中で前記性能要件情報に含まれる全ての性能要件を満たす実装パターン情報を含むパターン抽出情報を作成し、
前記パターン抽出情報を前記記憶装置に記憶し、
前記記憶装置から前記パターン抽出情報を読み出し、当該パターン抽出情報の中から所定数の実装パターン情報を選択し、当該実装パターン情報に対応する前記参照コードを参照する為の情報である参照コード情報を含む冗長パターン情報を作成して、前記記憶装置に記憶し、
前記記憶装置から前記冗長パターン情報を読み出し、当該冗長パターン情報にもとづいて前記参照記憶部から参照コードを読み出し、当該参照コードから冗長プログラムを作成し、
前記冗長プログラムを出力することを特徴とするソフトウェア冗長化方法。 - 前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して並べ替えを行うことを特徴とする請求項8に記載のソフトウェア冗長化方法。
- 前記冗長プログラムを生成する際に、命令列乃至メモリ配置に対して前記性能要件を満たす範囲でダミー命令乃至ダミー領域の挿入を行うことを特徴とする請求項8及び請求項9のいずれかに記載のソフトウェア冗長化方法。
- 前記パターンの選択の際は、最も実装パラメータの異なる所定数の実装パターン情報を選択することを特徴とする請求項8から請求項10のいずれかに記載のソフトウェア冗長化方法。
- 前記パターンの選択の際は、最も性能パラメータの近い所定数の実装パターン情報を選択することを特徴とする請求項8から請求項10のいずれかに記載のソフトウェア冗長化方法。
- 前記パターンの選択の際は、前記実装パラメータ乃至性能パラメータをn次元ベクトルとみなした距離を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項11及び請求項12のいずれかに記載のソフトウェア冗長化方法。
- 前記パターンの選択の際は、前記実装パラメータ乃至性能パラメータをn次元ベクトルとみなした類似度を尺度として、所定数の実装パターン情報を選択することを特徴とする請求項11及び請求項12のいずれかに記載のソフトウェア冗長化方法。
- 計算機で読み取り可能な記憶媒体であって、請求項8に記載のソフトウェア冗長化方法を実行するためのプログラムを格納したことを特徴とする記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012098732A JP2013228791A (ja) | 2012-04-24 | 2012-04-24 | ソフトウェア冗長化装置及び方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012098732A JP2013228791A (ja) | 2012-04-24 | 2012-04-24 | ソフトウェア冗長化装置及び方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013228791A true JP2013228791A (ja) | 2013-11-07 |
Family
ID=49676385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012098732A Pending JP2013228791A (ja) | 2012-04-24 | 2012-04-24 | ソフトウェア冗長化装置及び方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013228791A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018094240A (ja) * | 2016-12-15 | 2018-06-21 | 株式会社オリンピア | 遊技機 |
CN112261388A (zh) * | 2020-09-07 | 2021-01-22 | 中国电影器材有限责任公司 | 一种卫星传送数字电影包的冗余恢复方法、装置和系统 |
-
2012
- 2012-04-24 JP JP2012098732A patent/JP2013228791A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018094240A (ja) * | 2016-12-15 | 2018-06-21 | 株式会社オリンピア | 遊技機 |
CN112261388A (zh) * | 2020-09-07 | 2021-01-22 | 中国电影器材有限责任公司 | 一种卫星传送数字电影包的冗余恢复方法、装置和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
JP6331756B2 (ja) | テストケース生成プログラム、テストケース生成方法、及びテストケース生成装置 | |
WO2014136172A1 (ja) | データベース装置、プログラムおよびデータ処理方法 | |
JP2019159538A (ja) | データセット検証装置、データセット検証方法、およびデータセット検証プログラム | |
JP2013228791A (ja) | ソフトウェア冗長化装置及び方法 | |
WO2020075282A1 (ja) | 変換方法、変換装置および変換プログラム | |
JP2007034584A (ja) | 高位合成装置、自動高位合成方法、高位合成プログラム及びゲートネットリスト自動検証方法 | |
JP5979966B2 (ja) | 回路設計支援装置及び回路設計支援方法及びプログラム | |
KR20180055447A (ko) | 데이터 처리 방법 및 장치 | |
JP5979965B2 (ja) | 回路設計支援装置及び回路設計支援方法及びプログラム | |
KR101969799B1 (ko) | 전자 장치 및 제어 방법 | |
JP6702072B2 (ja) | 制御プログラム、装置、及び方法 | |
KR100725415B1 (ko) | 데이터베이스의 로그병합 방법 및 장치 | |
JP4865449B2 (ja) | 差分生成装置及び差分適用装置及び差分生成プログラム及び差分適用プログラム及び差分生成適用システム及び差分生成適用方法 | |
JP2011018187A (ja) | 試験方法、試験プログラム、試験装置、及び試験システム | |
CN118034705B (zh) | 编译方法、编译系统、电子设备、介质、程序产品 | |
JP6497271B2 (ja) | テストデータ生成装置、方法、及びプログラム | |
JP4761808B2 (ja) | マイクロプロセッサおよびその制御方法 | |
KR101629141B1 (ko) | 스파이스 넷리스트를 에프피지에이 합성이 가능한 베릴로그 코드로 변환하는 방법 및 시스템 | |
CN118860358B (zh) | 硬件描述语言代码生成方法、闪存控制器和集成电路 | |
JP2015069220A (ja) | 性能評価プログラム生成装置、方法、及びプログラム | |
JP6699433B2 (ja) | データ管理プログラム、装置、及び方法 | |
WO2021161531A1 (ja) | ループアンローリング処理装置、方法およびプログラム | |
JP6807721B2 (ja) | 状態遷移編集装置および状態遷移編集プログラム | |
JP5907100B2 (ja) | ディスク制御装置およびディスクの減設方法、ストレージシステム、並びにコンピュータ・プログラム |