(57)【要約】      （修正有）【課題】異なるOS、CPUなどを用いた複数の計算機により構成された計算機システムにおいて、コピー先計算機の処理をコピー元計算機と同期をとって再開する機能を提供する。【解決手段】異なる形式のデータを処理する複数の処理計算機１１、１２と管理計算機とから構成され、前記処理計算機のそれぞれは、前記処理の途中結果のデータを生成し次の処理を実行する処理部２１１、２２１と、前記途中結果のデータを記憶する記憶部２２０、２３０と、前記記憶されたデータを予め定められた形式のデータへ変換する変換部２１２、２２２と、前記予め定められた形式のデータを他の前記処理計算機へ出力する転送部２１５，２２５と、前記処理の結果を前記管理計算機へ出力する通信部と、を備え、前記管理計算機は、複数の前記処理計算機それぞれから入力した前記処理の結果を比較し、最も一致する数の多い前記処理の結果を前記計算機システムの外部へ出力する。【選択図】図２
2015082197.tif 000002
【特許請求の範囲】
【請求項１】
異なる形式のデータを処理する複数の処理計算機と管理計算機とから構成された計算機システムであって、
前記処理計算機のそれぞれは、
前記処理の途中結果のデータを生成し、前記途中結果のデータに基づいて次の処理を実行する処理部と、
前記途中結果のデータを前記処理部で処理可能な形式で記憶する記憶部と、
前記記憶されたデータを予め定められた形式のデータへ変換し、前記予め定められた形式のデータを前記記憶部に記憶する形式のデータへ変換する変換部と、
前記予め定められた形式のデータを他の前記処理計算機へ出力し、前記他の処理計算機から入力する転送部と、
前記処理の結果を前記管理計算機へ出力する通信部と、
を備え、
前記計算機システムへ追加された第１の前記処理計算機は、既に前記計算機システムに存在する第２の前記処理計算機から前記予め定められた形式のデータを前記転送部で入力し、当該入力したデータを前記変換部にて前記処理部で処理可能な形式のデータへ変換し、当該変換したデータを前記記憶部へ記憶し、当該記憶したデータに基づいて次の処理を実行し、当該実行を含む前記処理の結果を前記管理計算機へ出力し、
前記管理計算機は、前記第１の処理計算機と前記第２の処理計算機を含む複数の前記処理計算機それぞれから入力した前記処理の結果を比較し、最も一致する数の多い前記処理の結果を前記計算機システムの外部へ出力すること、
を特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記第２の処理計算機は、
前記変換部が、前記生成された途中結果のデータの記憶を検出し、当該検出に基づいて前記記憶されたデータを予め定められた形式のデータへ変換すること、
を特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記第２の処理計算機は、
前記記憶部が、記憶領域をページテーブルによりページ単位で管理し、前記生成された途中結果のデータを記憶すると前記ページテーブルの前記記憶したページのフラグをセットし、
前記変換部が、前記フラグのセットを検出し、当該検出に基づいて前記ページに記憶されたデータを予め定められた形式のデータへ変換すること、
を特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムであって、
前記第２の処理計算機は、
前記記憶部が、さらに読み込み専用に設定可能であり、読み込み専用に設定されている状態でデータを記憶する際に発生する例外のハンドリング処理により前記発生を記録し、
前記変換部が、前記発生の記録に基づいて前記記憶されたデータを予め定められた形式のデータへ変換すること、
を特徴とする計算機システム。
【請求項５】
請求項１に記載の計算機システムであって、
前記第２の処理計算機は、
前記記憶部が、前記記憶されたデータのコピーを記録媒体へ記録し、前記コピーの元のデータと前記記録したデータとを比較し、
前記変換部が、前記比較の結果に基づいて前記記憶されたデータを予め定められた形式のデータへ変換すること、
を特徴とする計算機システム。
【請求項６】
請求項１の計算機システムであって、
前記処理計算機のそれぞれは、
前記記憶部が、前記データをメモリへ記憶すること、
を特徴とする計算機システム。
【請求項７】
請求項１の計算機システムであって、
前記処理計算機のそれぞれは、
前記記憶部が、前記データをファイルに格納すること、
を特徴とする計算機システム。
【請求項８】
請求項１の計算機システムであって、
前記処理計算機のそれぞれは、
前記記憶部が、前記データをデータベースに格納すること、
を特徴とする計算機システム。
【請求項９】
請求項１の計算機システムであって、
前記処理計算機のそれぞれは、
前記変換部が、前記記憶されたデータの変数名と同じ変数名を付して予め定められた形式のデータへ変換し、前記予め定められた形式のデータの変数名と同じ変数名と記憶位置とを対応付けて、前記記憶部に記憶する形式のデータへ変換し、当該変換したデータを前記記憶位置へ記憶すること、
を特徴とする計算機システム。
【請求項１０】
請求項１の計算機システムであって、
前記予め定められた形式はXML形式あるいはJSON形式であり、
前記処理装置のそれぞれは、
前記変換部が、前記記憶されたデータを前記XML形式あるいはJSON形式のデータへ変換し、前記XML形式あるいはJSON形式のデータを前記記憶部に記憶する形式のデータへ変換すること、
を特徴とする計算機システム。
【請求項１１】
異なる形式のデータを処理する複数の処理計算機と管理計算機とから構成された計算機システムの処理方法であって、
第１の前記処理計算機が前記処理の途中結果のデータを生成して記憶するステップと、
前記第１の処理計算機が前記生成して記憶したデータを予め定められた形式のデータへ変換して記憶するステップと、
前記第１の処理計算機が前記変換して記憶したデータを第２の前記処理計算機へ出力するステップと、
前記第２の処理計算機が前記出力されたデータを入力し、前記第２の処理計算機で処理可能な形式のデータへ変換して記憶するステップと、
前記第１の処理計算機が前記生成して記憶したデータに基づき次の処理を実行して第１の処理結果を前記管理計算機へ出力するステップと、
前記第２の処理計算機が前記変換して記憶したデータに基づき次の処理を実行して第２の処理結果を前記管理計算機へ出力するステップと、
前記管理計算機が前記第１の処理計算機と前記第２の処理計算機を含む複数の前記処理計算機それぞれから入力した前記第１の処理結果と前記第２の処理結果を含む処理結果を比較し、最も一致する数の多い前記処理の結果を前記計算機システムの外部へ出力するステップと、
を有することを特徴とする計算機システムの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機システムに関するものである。
【背景技術】
【０００２】
社会インフラの制御などへ計算機の利用が進み、計算機の障害は重大な影響をもたらすため、計算機の信頼性の確保は重要な課題である。複数の計算機により障害をカバーし合い、障害の発生した計算機を交換などして処理を継続する計算機システムも普及している。
【０００３】
例えば、特許文献１には、FTCシステム（Fault Tolerant Computer System）において、稼働中の計算機は無停止、処理継続のまま、該稼働中の計算機の有するメモリデータを他の計算機に一致させるために、稼働中のコピー元計算機のある時点でのメモリの全データのスナップショットを取得し、スナップショットのデータを障害により交換などされたコピー先計算機のメモリへ書込み、コピー先計算機の処理を該コピー元計算機と同期をとって再開することが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−２０８９６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示された技術によれば、同じ構成の複数の計算機によりFTCシステムを構成することができる。しかし、OS（Operating System）、CPU（Central Processing Unit）などの構成の異なる複数の計算機ではスナップショットのデータをコピー先計算機のメモリへ書き込んでも、OS、CPUなどが異なることにより、コピー元計算機で用いられるエンディアン、ビット数、構造体構成などで規定されるデータ形式が、コピー先計算機のデータ形式と異なり、コピー先計算機の処理を再開できない可能性がある。
【０００６】
本発明の目的は、異なるOSまたはCPUなどをそれぞれ用いた複数の計算機により構成された計算機システムにおいて、データをコピーし、コピー先計算機の処理をコピー元計算機と同期をとって再開することにある。
【課題を解決するための手段】
【０００７】
本発明にかかる計算機システムは、異なる形式のデータを処理する複数の処理計算機と管理計算機とから構成された計算機システムであって、前記処理計算機のそれぞれは、前記処理の途中結果のデータを生成し、前記途中結果のデータに基づいて次の処理を実行する処理部と、前記途中結果のデータを前記処理部で処理可能な形式で記憶する記憶部と、前記記憶されたデータを予め定められた形式のデータへ変換し、前記予め定められた形式のデータを前記記憶部に記憶する形式のデータへ変換する変換部と、前記予め定められた形式のデータを他の前記処理計算機へ出力し、前記他の処理計算機から入力する転送部と、前記処理の結果を前記管理計算機へ出力する通信部と、
を備え、前記計算機システムへ追加された第１の前記処理計算機は、既に前記計算機システムに存在する第２の前記処理計算機から前記予め定められた形式のデータを前記転送部で入力し、当該入力したデータを前記変換部にて前記処理部で処理可能な形式のデータへ変換し、当該変換したデータを前記記憶部へ記憶し、当該記憶したデータに基づいて次の処理を実行し、当該実行を含む前記処理の結果を前記管理計算機へ出力し、前記管理計算機は、前記第１の処理計算機と前記第２の処理計算機を含む複数の前記処理計算機それぞれから入力した前記処理の結果を比較し、最も一致する数の多い前記処理の結果を前記計算機システムの外部へ出力すること、を特徴とする。
【０００８】
また、本発明は計算機システムの処理方法としても把握される。
【発明の効果】
【０００９】
本発明によれば、異なるOSまたはCPUなどをそれぞれ用いたことにより異なる形式のデータを処理する複数の処理計算機で計算機システムを構成しても、複数の処理計算機間で形式を変換してデータをコピーすることにより、同期をとって再開することを可能にする。
【図面の簡単な説明】
【００１０】
【図１】複数の計算装置を含むFTCシステムの構成の例を示す図である。
【図２】計算装置のモジュール構成の例を示す図である。
【図３】アプリケーションを再開するまでの処理シーケンスの例を示す図である。
【図４】メモリ割り当て処理フローと登録される変数テーブルの例を示す図である。
【図５】ページテーブルの例を示す図である。
【図６】メモリ更新の処理シーケンスの例を示す図である。
【図７】データ更新検出・データ形式変換の処理シーケンスの例を示す図である。
【図８】更新データ転送・更新データ書き込みの処理シーケンスの例を示す図である。
【図９】アプリケーション再開後データアクセスの処理シーケンスの例を示す図である。
【図１０】アプリケーションを再開するまでの処理シーケンスの別の例を示す図である。
【図１１】データ更新検出・データ形式変換の処理シーケンスの別の例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を用いて好ましいFTCシステムの実施例を説明する。
【実施例１】
【００１２】
図１は異なるCPUやOSを採用した複数の計算装置から構成され、構成する各計算装置において同じ処理を並列実行させることによる、FTCシステムの構成の例を示す図である。以下では主にデータの転送について説明するため、例として、２台の計算装置A 11及び計算装置B 12から成るFTCシステム10について説明するが、計算装置の台数はシステムの要求に合わせて増加させることが可能であり、各計算装置の処理結果の多数決をとる場合は３台以上としてもよい。FTCシステム10の主な構成要素は、内部ネットワーク13を介して相互接続する計算装置A 11と計算装置B 12、外部ネットワーク15に接続し外部システム16との通信の中継を行うゲートウェイサーバ14などである。
【００１３】
FTCシステム10は、外部ネットワーク15を介して外部システム16からの要求を受け付けて、該要求に対する処理を実施し、処理結果を該外部システム16へ返信することにより、サービスを提供する。FTCシステム10の内部では、ゲートウェイサーバ14が外部システム16からの要求を受信し、内部ネットワーク13を介して計算装置A 11と計算装置B 12へ該要求を転送する。該要求を受け取った計算装置A 11と計算装置B 12では、該要求に対する処理をそれぞれ実施し、処理結果を内部ネットワーク13経由でゲートウェイサーバ14へそれぞれ送信する。ゲートウェイサーバ14は計算装置A 11と計算装置B 12から受信した処理結果から、要求元の外部システム16に対する応答を作成し、外部ネットワーク15を介して外部システム16へ送信する。この際、ゲートウェイサーバ14は計算装置A 11と計算装置B 12から受信した処理結果同士を比較照合、正誤判定などを行う。ここで、計算装置が３台以上の場合は、多数決などにより最も確からしい処理結果を外部システム16へ送信してもよい。
【００１４】
ここで、例えばFTCシステム10は外部システム16を制御する制御システムであり、外部システム16からの要求は測定された入力データであり、外部システム16に対する応答となる処理結果は外部システム16に対する制御データであってもよい。また、ゲートウェイサーバ14は複数の計算装置に対して上記のとおり動作するため、複数の計算装置の管理計算機でもある。
【００１５】
計算装置A 11と計算装置B 12の主なハードウェア構成は、CPU、記憶装置(メモリ、ハードディスク)、通信装置などである。記憶装置には、処理要求に対する処理を実行するアプリケーションのプログラム及びデータ、アプリケーションが動作するために必要な基本的機能を提供するライブラリ及びOSなどが格納される。アプリケーションによる処理結果は通信装置により内部ネットワーク13を介してゲートウェイサーバ14へ送信される。
【００１６】
FTCシステム10では、計算装置A 11と計算装置B 12のそれぞれにおいて、異なる種類のCPUやOSが適用されていてもよい。アプリケーションは、計算装置A 11と計算装置B 12のそれぞれにおいて、同一の処理内容を同一の処理順序で実行する。外部システム16からの同一の要求に対して複数の計算装置で並行処理することで、１つ以上の計算装置で障害が発生した場合でも、残りの計算装置が稼働を継続することで、システムとして正常なサービス提供を中断することなく継続でき、システムの耐障害性、信頼性を高めている。
【００１７】
さらに、FTCシステム10では、１つ以上の計算装置が計算装置間の並行処理から外れた後で、修理、交換などを施した該計算装置へ、並行処理を継続中の他の計算装置から、アプリケーションのデータをコピーして一致化することにより、元の全計算装置による並行処理状態を回復する計算装置再組込みの機能を備える。
【００１８】
図２はFTCシステムを構成する計算装置の機能的なモジュール構成の例を示す図である。ここでは後のデータ転送の説明のために、計算装置A 11と計算装置B 12の例を示すが、３台以上の計算装置においても同じ構成である。計算装置A 11の構成要素としては、外部システムからの要求に対して処理を行うアプリケーションを実行するアプリケーション実行部211、アプリケーションが処理実行中に使用するデータを格納するメモリ213、メモリ213に格納されたデータが計算装置毎のCPU、OSなどの種類に依存した形式になっているのに対してCPU、OSなどの種類に依存せずに任意の計算装置で解釈可能な環境非依存形式に変換されたデータを格納する環境非依存形式データストア214、メモリ213へアプリケーションが書き込んだデータを読込み、環境非依存形式へデータを変換して環境非依存形式データストア214へ格納し、計算装置再組込み処理の際は、該環境非依存形式データを計算装置A 11から計算装置B 12へ送信するなどの処理を実行するデータ管理部212を含む。
【００１９】
また、内部ネットワーク13を介して計算装置間または計算装置A 11とゲートウェイサーバ14の間の通信を実行する通信部215、アプリケーション実行部211がメモリ213上のデータへアクセスする際にアドレス解決やダーティフラグ管理を実行するメモリ管理部216、メモリ管理部216のアドレス解決やダーティフラグ管理に必要なデータを格納するページテーブル217、データ管理部212が、メモリ213上のデータと、該データに対応する環境非依存形式データストア214上の環境非依存形式データを対応付け、更に該環境非依存形式データの最後の更新後に計算装置A 11から計算装置B 12へ転送したか否かを把握するためのフラグを保存する変数テーブル218などが含まれる。
【００２０】
環境非依存形式データストア214に格納されるデータの環境非依存形式の例としては、XML (Extensible Markup Language)形式、JSON (JavaScript(登録商標) Object Notation)形式などが適用可能である。これら形式のデータは、異なるCPU、OSなどで構成された計算装置間で、CPU、OSなどの種類に依存せずに同一のデータとして扱うことが可能である。
【００２１】
メモリ管理部216及びページテーブル217としては、一般的なCPUが備えるMMU (Memory Management Unit)と、該MMUに対応した形式を持つページテーブルでもよい。アプリケーション実行部211とデータ管理部212としては、CPU A 219のプログラムの実行により実現される機能的なモジュールでもよい。ページテーブル217、メモリ213、環境非依存形式データストア214、変数テーブル218としては、例えば１つのメモリである記憶装置220のそれぞれ異なる領域であってもよいし、全部または一部が物理的に異なるメモリなどであってもよい。さらに、記憶装置220のハードディスクであってもよく、実施例２ではメモリ213をハードディスクに替えてファイルとして格納する例を説明する。
【００２２】
なお、計算装置B 12の構成要素は物としては異なるが、計算装置A 11と同様であるため説明を省略する。
【００２３】
図３は、FTCシステム10を構成する１つ以上の計算装置が計算装置間の並行処理から外れた後で、修理、交換などを施した該計算装置へ、並行処理を継続中の他の計算装置から、アプリケーションのデータをコピーして一致化することにより、元の全計算装置による並行処理状態を回復する、計算装置再組込みの処理のシーケンスの例を示す図である。図３ではアプリケーションの実行により書き込まれるデータを中心に説明するため、メモリ213、環境非依存形式データストア214、メモリ223を記載しているが、アプリケーション実行部211、データ管理部212などの動作では記載を省略したページテーブル217、変数テーブル218を使用する。これらを使用する動作については後で説明する。
【００２４】
まず、計算装置A 11のアプリケーション実行部211はアプリ初起動300によりアプリケーションを実行するために必要な初期設定などを行う。そして、メモリ割り当て要求301によりデータ管理部212に対してメモリ割り当てを要求する。メモリ割り当て310にて、データ管理部212はアプリケーション実行部211から受け取ったメモリ割り当て要求に基づいて、メモリ213において新たに領域を割り当て、割り当てた領域のアドレスをアプリケーション実行部211へ渡す。
【００２５】
アプリケーション実行部211は、アプリケーション処理の実行における処理途中結果のデータを保存するため、メモリ更新302にてメモリ213上のデータ管理部212から受け取ったアドレスにある領域に対してメモリ更新処理を実行する。これはアプリケーションプログラムにおける変数への値の代入あるいは退避であって、その変数の値を使用し、アプリ処理303にてさらに次のアプリケーション処理を実行し、その実行における処理途中結果のデータをさらに保存する。このため、通常、メモリ更新302はアプリケーションの処理内容に基づいて繰り返し実行される。このメモリ更新302に対して、データ管理部212はデータ更新検出及びデータ形式変換311により、それまでにメモリ213上に割り当てた領域の中で、直前のデータ更新検出及びデータ形式変換311の処理以降に更新された差分領域を特定し、メモリ213上の該更新された領域からデータを読み出し、データを環境非依存形式へ変換し、環境非依存形式データストア214へ変換したデータを記録する。なお、データ更新検出及びデータ形式変換311はデータ管理部212によって繰り返し実行される。該繰り返し実行のタイミングとしては、一定の設定された周期（１秒毎に実行など）での実行などとしてもよいし、メモリ更新302をカウントするなどして更新量に基づき実行してもよい。
【００２６】
データ管理部212は、計算装置B 12から計算装置再組込みの開始要求を受信すると、全データ転送312にて、環境非依存形式データストア214上の全データを読み出し、該全データを計算装置B 12へ送信する。更新データ転送313にて、データ管理部212は、直前に実行された全データ転送312または更新データ転送313の内でより後に実行された処理以降に更新された環境非依存形式データストア214上のデータ（更新差分データ）を読み出し、該更新差分データを計算装置B 12へ送信する。なお、該更新データ転送313は、環境非依存形式データストア214上から計算装置B 12へ未送信の更新差分データが無くなるまで繰り返し実行される。なお、更新データ転送313はメモリ更新302によるメモリ213の更新を検出する毎に実行してもよいし、一定の設定された周期内の更新をまとめて検出して、一定の設定された周期毎に実行するなどとしてもよい。
【００２７】
メモリ更新302に対して更新データ転送313が追いつき、環境非依存形式データストア214上から計算装置B 12へ未送信の更新差分データが無くなったことを検出すると、再組込み完了通知314により、データ管理部212は、計算装置再組込みの完了通知を計算装置B 12へ送信して、計算装置A 11側の計算装置再組込みの処理を完了する。メモリ更新302の頻度が高く、未送信の更新差分データが無くならない場合は、アプリケーション実行部211の動作を一時的に停止することでメモリ更新302を抑制し、未送信の更新差分データが無くなった時点で再組込み完了通知314により完了通知を送信して、アプリケーション実行部211の動作停止を解除するなどしてもよい。
【００２８】
以上の計算装置A 11の動作に対して計算装置 B 12のアプリケーション実行部221はアプリ再起動330により、アプリケーションの処理再開として起動し、アプリケーションの実行としては待機状態とする。そして、アプリケーションが処理再開するために必要な領域をメモリ223上に作成した後、アプリケーションの処理を再開する。アプリケーション実行部221はメモリ割り当て要求331によりデータ管理部222へデータ管理部222に対してメモリ割り当てを要求する。メモリ割り当て320にて、データ管理部222はアプリケーション実行部221から受け取ったメモリ割り当て要求に基づいて、メモリ223において新たに領域を割り当て、割り当てた領域のアドレスをアプリケーション実行部221へ渡す。計算装置B 12は計算装置A 11とは異なるため、メモリ割り当て320によりメモリ223へ割り当てられたアドレスや容量などは異なる可能性があるものの、メモリ割り当て310に対応する領域が確保できる。
【００２９】
次に、アプリ準備完了通知332にて、アプリケーション実行部221はアプリケーションの準備が完了したことをデータ管理部222へ通知する。再組込み開始要求321にて、データ管理部222は計算装置A 11へ計算装置再組込みの開始要求を送信する。これに対し、全データ転送312によりデータが送信されるため、全データ書込み322にて、データ管理部222は、計算装置A 11から受信した環境非依存形式のデータを計算装置B 12上のアプリケーションが使用可能な形式へ再変換し、メモリ割り当て320にて割り当てたアドレスに基づきメモリ223へ書き込む。
【００３０】
さらに、更新データ書き込み323にて、データ管理部222は、計算装置A 11から受信した環境非依存形式の更新差分データを、計算装置B 12上のアプリケーションが使用可能な形式へ再変換し、メモリ割り当て320にて割り当てたアドレスに基づきメモリ223へ書き込む。なお、該更新データ書き込み323は、計算装置A 11から更新差分データを受信するたびに繰り返し実行する。アプリ再開通知324にて、データ管理部222は、計算装置A 11から計算装置再組込みの完了通知を受信すると、アプリケーション実行部221へアプリケーションの再開通知を送る。アプリ再開333にて、アプリケーション実行部221は、データ管理部222からアプリケーションの再開通知を受け取ると、メモリ割り当て要求331にて受け取ったアドレスを使用し、そのアドレスに書き込まれた再変換されたデータに基づいてアプリケーションの処理を再開する。
【００３１】
図４は、データ管理部212がアプリケーション実行部211からメモリ割り当て要求を受けた際に実行するメモリ割り当て310の処理フローと、その処理の中で登録される変数テーブル218のスキーマの例を示した図である。変数テーブル218について説明するが、変数テーブル228のスキーマは同一であるため説明を省略する。なお、該変数テーブル218は任意の記憶装置上に任意の記録形態で記録して構わない。変数テーブル218の各行はアプリケーションが使用する変数データにそれぞれ対応する。データ型401には、変数データのデータ型が格納される。データ型とは、整数型、浮動小数点型、文字列型などであり、メモリ213上の該データのサイズ、符号化形式などを規定する。
【００３２】
仮想アドレス／オフセット402には、変数データのメモリ213上の保存位置を指定する仮想アドレスの値が格納される。仮想アドレスについては図５を用いて後で説明する。オフセットはファイル内のオフセットであり、実施例２にて説明する。変数名403には変数データの名称である変数名が格納される。該変数名は環境非依存形式データストア214上の保存位置を規定するキー値としても使用される。転送状態404には、環境非依存形式データストア214上の変数データが最後に更新された後、計算装置A 11から計算装置B 12へ送信されたか否かを規定するフラグが格納される。該転送状態404が取りうる値は、送信していない場合を示す"未転送"、送信した場合を示す"転送済"、の２つである。
【００３３】
処理フローとしては、メモリ割り当て要求受け取り411にて、データ管理部212は、アプリケーション実行部211からメモリ割り当て要求を受け取る。なお、該メモリ割り当て要求においてアプリケーション実行部211は、割り当てるメモリに格納する予定のデータ型と該データの変数名を引数として指定する。必要メモリサイズ取得412にて、データ管理部212は、指定された該データ型のデータをメモリ213上に保存するために必要なメモリサイズを取得する。一般的には、計算装置毎の環境において該データ型のデータをメモリ213上に保存するために必要なメモリサイズは一意に予め定義されている。
【００３４】
メモリ領域割り当て413にて、データ管理部212は、必要なメモリサイズのデータを格納可能なメモリ領域をメモリ213上に割り当てる。なお、該メモリ領域割り当てには、一般的な計算機環境で提供されるメモリ割り当てルーチン(POSIXのmalloc関数など)を使用してもよく、あるいは、独自のメモリ割り当て実装を用いてもよい。変数テーブル登録414にて、データ管理部212は、割り当てたメモリ領域を新たな行として変数テーブル218へ登録する。その際、データ型401には引数のデータ型を、仮想アドレス／オフセット402には割り当てたメモリ領域の先頭アドレスを、変数名403には引数の変数名を、転送状態404には"未転送"を、それぞれ登録する。メモリ割り当て結果返値415にて、データ管理部212は、アプリケーション実行部211へ、割り当てたメモリ領域の先頭アドレスを返値する。
【００３５】
図５はページテーブル217のスキーマの例を示した図である。ページテーブル227のスキーマは同一であるため説明を省略する。なお、該ページテーブル217は任意の記憶装置上に任意の記録形態で記録して構わない。ページテーブル217の各行は異なるメモリページに対応する。ここでメモリページとは一般的なプロセッサにおいて規定される一定サイズのデータ領域のことである。仮想アドレス501には仮想アドレスの値が格納される。仮想アドレスとは、アプリケーションが使用するメモリ空間におけるメモリページの位置を指定するオフセットであり、物理メモリ上のオフセットとは独立に設定できる。アプリケーションすなわちアプリケーション実行部211からは仮想アドレスの値を使用してメモリ213へアクセスされる。物理アドレス502には物理アドレスの値が格納される。物理アドレスとはメモリページの物理メモリ上のオフセットである。仮想アドレスの値とその仮想アドレスの値に対応する物理アドレスの値とはメモリ管理部216によりページテーブル217を使用して変換される。
【００３６】
ダーティフラグ503にはダーティフラグの値が格納される。ダーティフラグ503が取りうる値は"set"と"cleared"の２つである。ダーティフラグ503とは、最後に該ダーティフラグを"cleared"に設定してから、次に該ダーティフラグを確認するまでの間に、該メモリページが更新されたかどうかを示すフラグである。更新された場合、該ダーティフラグは"set"に設定変更される。なお、"set"の状態でさらに該メモリページが更新されて"set"をさらに設定しても"set"が設定されていることに変わりはないため、"set"を設定する際に"cleared"であることを確認する必要はない。また、該ダーティフラグ503が確認された時点で"set"になっていた場合は"cleared"に設定する。これらの設定に関しては図６、７を用いて更に説明する。
【００３７】
図６は、アプリケーション実行部211がメモリ213上のデータを更新するための処理のシーケンスの例を示す図である。メモリ更新要求601にて、アプリケーション実行部211は、メモリ213上のデータの更新をメモリ管理部216へ要求する。この際、アプリケーション実行部211は、更新対象データのアドレス、サイズ、更新に使用する新データを指定する。ページテーブルエントリ検索602にて、メモリ管理部216は、指定されたアドレスと仮想アドレス501の値が一致するページテーブル217のエントリをページテーブル217から検索して取得する。メモリアドレス変換603にて、メモリ管理部216は、一致したエントリの物理アドレス502を参照し、メモリ管理部216上の更新対象のデータの物理的な位置を特定する。
【００３８】
そして、ダーティフラグ設定604にて、メモリ管理部216は、一致したエントリのダーティフラグ503に"set"を設定する。メモリ内容更新605にて、メモリ管理部216は、メモリ213上の更新対象のデータ内容を指定された新データを用いて更新する。メモリ更新完了606にて、メモリ管理部216は、メモリ更新が完了したことをアプリケーション実行部211へ通知する。
【００３９】
以上の処理により、アプリケーション実行部211がメモリ213上のデータを更新すると、該データが更新されたことがページテーブル217に記録され、該ページテーブル217を参照することにより、該データの更新有無を判別できる。なお、該データの更新有無の判別する他の処理のシーケンスとして、"cleared"に設定するのと同じ条件でメモリ213上のデータを一旦読み込み専用状態に設定し、アプリケーション実行部211が該データを更新する際に発生する例外のハンドリング処理の中で、更新発生を記録するなどとしてもよい。ここで、読み込み専用状態の設定と例外のハンドリング処理は、アプリケーション実行部211とは独立したCPU A 219で実行されるメモリ213を管理するプログラムで行ってもよい。一般にMMUやページテーブルを設定するメモリの管理プログラムが存在する。また、該データの更新有無の判別する他の処理のシーケンスとして、メモリ213上のデータのコピーを予め任意の記録媒体に記録しておき、更新後のデータと比較することにより更新発生を検出するなどとしてもよい。ここで、データのコピーと比較はメモリ管理部216が行ってもよく、メモリ213内の割り当てられた領域すべてをコピーしてもよく、定期的にコピーして定期的に比較してもよい。さらに、同様に機能するこれ以外の任意の判別の処理のシーケンスを使ってもよい。
【００４０】
図７は、データ管理部212がメモリ213上の更新されたデータを検出し、該更新されたデータを、環境非依存形式へ変換して、該環境非依存形式データを環境非依存形式データストア214へ格納する処理のシーケンスの例を示す図である。まず、変数テーブルからのエントリ取得701にて、データ管理部212は、変数テーブル218から1つエントリを取得する。変数更新有無確認702にて、データ管理部212は、変数テーブル218の該エントリの仮想アドレス／オフセット402の値と仮想アドレス501の値が対応するページテーブル217のエントリを取得し、ダーティフラグ503が"set"されているかどうかによって、変数テーブル218の該エントリの仮想アドレス／オフセット402に対応するメモリ213上のデータが更新されているか判別する。更新有703がNOであれば、変数データ取得704から変数テーブルエントリの未転送状態への設定707までの処理を省略し、変数テーブル218の次のエントリに対する処理へ進む。
【００４１】
更新有703がYESであれば、データ管理部212は、ダーティフラグ503を"cleared"に設定し、変数データ取得704にてメモリ213上の更新されたデータの内容を読み込む。変数データの環境非依存形式への変換705にて、データ管理部212は、変数テーブル218から取得したエントリのデータ型401と計算装置A 11のエンディアンなどの情報を利用して、読み込んだメモリ213上の該データを環境非依存形式へ変換する。環境非依存形式データの保存706にて、データ管理部212は、該環境非依存形式データを変数テーブル218の該エントリの変数名403に対応付けて環境非依存形式データストア214へ保存する。変数テーブルエントリの未転送状態への設定707にて、データ管理部212は、変数テーブル218の該エントリの転送状態404を"未転送"に設定する。
【００４２】
全変数の処理完了708にて、データ管理部212は、変数テーブルからのエントリ取得701から変数テーブルエントリの未転送状態への設定707までの処理を、変数テーブル218の全エントリについて、順に実行し、データ更新検出及びデータ形式変換の処理を完了する。
【００４３】
図８は、計算装置A 11上のデータ管理部212が、環境非依存形式データストア214上の環境非依存形式データの内、前回の更新差分データ転送及びデータ書き込みの処理以降に更新された環境非依存形式データを検出し、計算装置B 12へ送信し、計算装置B 12が受信した該環境非依存形式データを、環境非依存形式からアプリケーションが使用可能な形式へ変換し、該変換したデータをメモリ223に書き込む処理のシーケンスの例を示す図である。まず、計算装置A 11のデータ管理部212は、変数テーブルからのエントリ取得801にて、変数テーブル218から1つエントリを取得し、転送状態802にて該エントリの転送状態404を読んで"転送済"状態すなわちNOであれば、変数データ取得803から変数テーブルエントリの転送済状態への設定805までの処理を省略して変数テーブル218の次のエントリへ進む。
【００４４】
転送状態802にて"未転送"状態すなわちYESであれば、変数データ取得803にて、データ管理部212は、変数テーブル218の該エントリの変数名403に対応する環境非依存形式データストア214上の環境非依存形式データを取得する。変数データ転送804にて、データ管理部212は、変数テーブル218から得たデータ型、変数名、及び該環境非依存形式データを計算装置B 12へ送信する。そして、変数テーブルエントリの転送済状態への設定805にて、データ管理部212は、変数テーブル218の該エントリの転送状態404を、"転送済"にセットする。全変数の処理完了806にて、データ管理部212は、変数テーブルからのエントリ取得801から変数テーブルエントリの転送済状態への設定804までの処理を、変数テーブル218の全エントリについて順番に実行する。
【００４５】
これに対し、計算装置B 12のデータ管理部222は、データ形式再変換811にて、計算装置A 11から受信した環境非依存形式データを、計算装置B 12上のアプリケーションが使用可能な形式へ再変換する。再変換は計算装置A 11から受信したデータ型に対応する計算装置B 12のデータ型のエンディアンなどのデータ形式へ環境非依存形式データを変換する。そして、変数データ書込み812にて、データ管理部222は、該再変換したデータをメモリ223へ保存する。保存するメモリ223のアドレスは、計算装置A 11から受信した変数名を変数テーブル228の変数名403の中から検索し、一致した変数名のエントリの仮想アドレス／オフセット402の値を使用する。ここで、メモリ割り当て要求331はメモリ割り当て要求301と同じ変数名を引数として要求するため、一致する変数名が存在する。なお、変数テーブル228にはデータ型401もあるため、受信したデータ型ではなく、受信した変数名に一致した変数名のエントリのデータ型401を使用してもよい。
【００４６】
以上、説明したようにデータ形式の異なる計算装置B 12においても計算装置A 11と同じメモリの内容とすることができるため、アプリケーションの処理をそのメモリの内容の時点から再開することができる。そして、複数の計算装置において同一の処理内容を同一の処理順序で実行することにより、システムの耐障害性、信頼性を高めることができる。
【００４７】
以上の説明では計算装置B 12において計算装置A 11からデータを受信する前にメモリ割り当て320を予め実行しておいて、使用する各変数のアドレスを確定したが、例えばメモリ割り当て320を予め実行しなくてもよい。図３において、メモリ割り当て要求331とメモリ割り当て320を省略したシーケンスとし、更新データ書込み323にて変数テーブル228の登録を行う。すなわち、図８において、変数データ書込み812にて変数テーブルから仮想アドレス／オフセット402などの値を読み出す代わりに、図４のメモリ領域割り当て413と同じ処理により仮想アドレス／オフセット402の値を生成し、計算装置A 11から受信したデータ型、変数名とともに変数テーブル228へ書き込む。そして、生成した仮想アドレス／オフセット402の値の位置へ変換データを保存する。
【００４８】
この場合、アプリケーション実行部221はアプリ再開333の時点で各変数のアドレスを取得していないため、図９に示すような処理のシーケンスを実行する。図９は、再組込みが完了した後に、計算装置B 12において、アプリケーション実行部221がメモリ223上のデータにアクセスする処理のシーケンスの例を示す図である。計算装置B 12のアプリケーション実行部221は、アドレス問合せ901にて、データ管理部222へアクセスしたいデータの変数名を通知して該データのアドレスを問い合わせる。変数検索911にて、データ管理部222は、変数テーブル228から当該変数名と変数名403が対応するエントリを検索する。アドレス通知912にて、データ管理部222は、アプリケーション実行部221へ当該エントリの仮想アドレス／オフセット402の値をアドレスとして通知する。データアクセス902にて、アプリケーション実行部221は、メモリ223上の該アドレスに格納されたデータへアクセスする。このようにすることで、アプリケーション実行部221はデータアクセス902毎にアドレスを問い合わせる必要はあるが、メモリ割り当て320などを予め実行する必要はない。
【００４９】
また、アプリケーション実行部221がデータアクセス902毎ではなく、アプリ再開333の直前にまとめてアドレスを取得してもよい。図１０は、計算装置B 12において環境非依存形式データストア224へ一時的に環境非依存形式データを保存し、アプリ実行部221のメモリ割り当て要求331に応じ、まとめてデータ形式を再変換してメモリ223へ保存するとともに、アプリ実行部221へアドレスを渡す処理のシーケンスの例を示す図である。
【００５０】
図３の全データ書込み322と更新データ書込み323は図８を用いて説明したようにデータを再変換してメモリ223へ保存するのに対し、図１０の全データ書込み325と更新データ書込み326はデータを再変換せず、環境非依存形式データを環境非依存形式データストア224へ保存する。そして、アプリ再開333の直前のメモリ割り当て要求331に対して、データ管理部222は単なるメモリ割り当てを実行するのではなく、メモリ割り当てデータ形式変換327を実行する。メモリ割り当てデータ形式変換327では、メモリ割り当て要求331の引数で指定された変数名のデータを環境非依存形式データストア224から読み出し、データ形式を再変換したデータをメモリ223へ保存し、その保存したアドレスをメモリ割り当て要求331へ渡す。このようにすることで、アプリ実行部221側からはメモリの割り当てを要求しただけであっても、その割り当てられた領域のアドレスに再変換されたデータが保存されているため、アプリケーションの処理を再開することができる。
【００５１】
以上、説明したようにデータ形式の再変換のタイミングとアプリ実行部221へアドレスを渡すタイミングとはさまざまな組み合わせが可能であり、計算装置B 12のCPU B 229やメモリ管理部226の種類などに応じて、最も処理時間の短くなるなどのタイミングを選択してもよい。
【実施例２】
【００５２】
実施例２として、アプリケーション実行部211がデータを格納する先へ、メモリの代わりにハードディスク上などのファイルを適用した場合の例を説明する。アプリケーション実行部211がデータを格納する先へ、メモリの代わりにファイルを適用した場合の変数テーブル218のスキーマは図４に示したとおりであり、仮想アドレス／オフセット402には仮想アドレスではなく、変数データのファイル上の保存位置を指定するオフセット値が格納される。また、図４のメモリ領域割り当て413ではメモリ領域を割り当てるが、この例ではファイル領域を割り当てる。
【００５３】
図１１は、アプリケーション実行部211がデータを格納する先として、メモリの代わりにファイルを適用した場合の、データ更新検出及びデータ形式変換の処理のシーケンスの例を示す図であり、メモリの場合の図７に対応する。主な構成要素はメモリを使用する場合と殆ど同様であるが、データ更新有無の判別に、ページテーブル217の代わりにOS 231のファイル更新検出機能を用いる。アプリケーション実行部211がファイルを更新する際には必ずOS 231に要求し、OS 231が該ファイル更新処理を実行するため、更新有無を記録することが可能である。該更新有無の記録についてはOS 231内のどのような構成で実装してもよいため、その実装についての説明は省略する。
【００５４】
データ管理部212は、変数テーブルからのエントリ取得701にて、変数テーブル218から１つのエントリを取得した後、OS問合せによる変数更新有無確認712にて、変数テーブル218の該エントリのオフセット402に対応するファイルデータが更新されているか、OS 231に問い合わせて判別する。更新されていれば、変数データ取得714にて、データ管理部212は、ファイル上の該データの内容を読み込む。その他の処理のシーケンスは図７で説明したとおりであり、同じ処理には同じ符号を付けてある。
【００５５】
また、データの更新は、メモリ管理部216を介して行うのではなく、OS 231に要求することによって実行する。このため、ファイルとしての記憶装置220と記憶装置220を制御するOS 231とが記憶部を構成することになる。その他の処理のシーケンスなどは既に図を用いて説明したものと同様である。
【００５６】
以上、説明したようにファイル上のデータ形式の異なる計算装置B 12においても計算装置A 11と同じファイルの内容とすることができるため、ファイルの内容を使用してアプリケーションの処理をそのファイルの内容の時点から再開することができる。
【実施例３】
【００５７】
実施例３として、実施例２においてアプリケーション実行部211がデータを格納する先としてファイルを適用したのに対し、ファイルの代わりにデータベースを用いる場合の例を説明する。データベースはデータを格納するデータ格納部と、アプリケーション実行部211からの要求に応じてデータを更新するデータ更新インターフェースを備えるものとする。このため、データ格納部とデータ更新インターフェースとが記憶部を構成することとなる。その他の構成要素はファイルを使用する場合と同様であるが、データ更新インターフェースでデータ更新有無の記録が可能であるため、データ更新有無の判別に、OSのファイル更新検出機能を必要としないため、OSが同ファイル更新検出機能を備えていない場合にも適用できる利点がある。また、データ格納部がデータを格納する際に当該データを環境非依存形式へ変換してもよい。この場合、図１１に示したデータ管理部212の処理としての変数データを環境非依存形式へ変換705が不要となる利点がある。
【符号の説明】
【００５８】
２１１、２２１：アプリケーション実行部、２１２、２２２：データ管理部、２１３、２２３：メモリ、２１４、２２４：環境非依存形式データストア、２１５、２２５：通信部、２１６、２２６：メモリ管理部、２１７、２２７：ページテーブル、２１８、２２８：変数テーブル
【図１】
2015082197.tif 000003
【図２】
2015082197.tif 000004
【図３】
2015082197.tif 000005
【図４】
2015082197.tif 000006
【図５】
2015082197.tif 000007
【図６】
2015082197.tif 000008
【図７】
2015082197.tif 000009
【図８】
2015082197.tif 000010
【図９】
2015082197.tif 000011
【図１０】
2015082197.tif 000012
【図１１】
2015082197.tif 000013