(57)【特許請求の範囲】
【請求項１】
複数の計算機で構成される複合系計算機システムにおいて、
前記複合系計算機システムの構成及び前記計算機で発生する各種イベントに対するシステムの動作を記述したプログラムであるシナリオを、前記各計算機毎の別々の処理に分解し、前記シナリオから前記各計算機で直接実行可能な形式のコマンド列である処理スクリプトに生成する、前記複数の計算機のうちのいずれか１つの計算機に設けられたシナリオコンパイル手段と、
前記シナリオコンパイル手段により生成された各計算機別の前記各処理スクリプトを対応する前記各計算機の記憶領域に配布する、前記１つの計算機に設けられたスクリプト配布手段と、
前記各計算機に設けられ、１つのイベントが発生したときに、その計算機に配布されている前記各処理スクリプトのうち、当該イベントに対応する処理スクリプトを実行するスクリプト実行手段であって、前記処理スクリプトの実行の許可または禁止について、前記各計算機毎に別々に、初期状態での設定及びイベント発生時での再設定を可能とすることで、前記シナリオの動作する計算機群である特定グループをイベント発生時に自動的に変化せ、且つ複数の前記イベントに対する処理スクリプトの実行順序が前記特定グループ内で全て同一となり、１つの前記イベントに対する処理スクリプトの実行が前記特定グループ内で全て終了するまで次の処理スクリプトの実行の開始を待つことを保証するように構成されたスクリプト実行手段とを具備し、
前記スクリプト実行手段は、
イベントの入力時には、そのイベントを自系の候補イベントとして取得すると共に当該候補イベントを前記特定グループ内の他の計算機に通知し、
前記特定グループ内の他の計算機からの前記候補イベントの通知時には、自系の候補イベントが存在しないならば、その通知された候補イベントを通知元計算機及び自系の候補イベントとしてそれぞれ取得すると共に、その自系の候補イベントを前記特定グループ内の他の計算機に通知し、自系の候補イベントが存在するならば、その通知された候補イベントを通知元計算機の候補イベントとして取得し、
前記特定グループ内の全ての計算機の候補イベントを取得した際に、当該候補イベントが全て同一であるならば、自系における候補イベントの確定状態を確定成功として対応する処理スクリプトを実行し、その実行の後に次のイベントの入力を要求し、そうでないならば、自系における候補イベントの確定状態を確定失敗として、自系の候補イベントを破棄して対応する処理スクリプトの実行を抑止し、次のイベントの入力を要求する
ことを特徴とする複合系計算機システム。
【請求項２】
前記スクリプト実行手段は、
前記特定グループの計算機の障害が検出された場合には、前記特定グループ内の当該障害が検出された計算機以外の全ての計算機の候補イベントを取得した際に、当該候補イベントが全て同一であるならば、自系における候補イベントの確定状態を確定保留として、その確定状態を前記特定グループ内の他の計算機に通知すると共に、前記特定グループ内の他の計算機から通知される前記確定状態を取得し、
前記特定グループ内の当該障害が検出された計算機以外の全ての計算機の前記確定状態を取得した際に、当該確定状態が全て確定保留または確定成功であるならば、自系における候補イベントの確定状態を確定成功として対応する処理スクリプトを実行し、その実行の後に次のイベントの入力を要求し、そうでないならば、自系における候補イベントの確定状態を確定失敗として、自系の候補イベントを破棄して対応する処理スクリプトの実行を抑止し、次のイベントの入力を要求する
ことを特徴とする請求項１記載の複合系計算機システム。
【請求項３】
前記スクリプト実行手段は、
前記特定グループの計算機構成を記憶する特定グループ構成記憶手段を備えており、
前記候補イベントが計算機の組み込み要求のイベントである場合、前記自系における候補イベントの確定状態を確定成功とした際に、前記組み込み要求イベントで要求された計算機が前記特定グループに組み込まれるように前記特定グループ構成記憶手段の内容を変更し、その内容を前記要求された計算機に通知する
ことを特徴とする請求項２記載の複合系計算機システム。
【請求項４】
前記スクリプト実行手段は、
前記特定グループの計算機構成を記憶する特定グループ構成記憶手段を備えており、
前記候補イベントが計算機の切り離し要求のイベントである場合、前記自系における候補イベントの確定状態を確定成功とした際に、前記組み込み要求イベントで要求された計算機が前記特定グループから切り離されるように前記特定グループ構成記憶手段の内容を変更する
ことを特徴とする請求項２記載の複合系計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の計算機により構成される複合系計算機システムに係り、特にシステムの構成及び制御内容を定義して、その定義内容に従う運用を行うのに好適な複合系計算機システムに関する。
【０００２】
【従来の技術】
従来、複数の計算機で構成される複合系計算機システムの構成及び制御内容の定義は、実行可能なスクリプト（プログラム）として、人が直接または簡単なマクロ（macro ）を介して各計算機毎に記述するのが一般的であった。この実行可能スクリプトの具体的な内容は、各計算機の接続関係の登録専用コマンドや各計算機の状態取り出しコマンド、例外手続きとしてのＣＰＵやディスク、ネットワーク等の障害検出時に実行させるべきコマンド列等である。また、例外手続きとしては、この他に、サーバ・プロセスの別計算機への移動または待機プロセスの実行開始、データやファイル、ネットワーク・アドレスの別計算機への引き継ぎ、警報出力などの特殊入出力装置の操作などがある。
【０００３】
【発明が解決しようとする課題】
上記したように従来は、複合系計算機システムの構成及び制御内容の定義は、実行可能なスクリプトとして人が直接または簡単なマクロを介して各計算機毎に記述したいた。
【０００４】
しかし、構成及び制御内容の定義には、あらゆる事態への配慮が必要であり、そのスクリプト記述は一般に難しい。
【０００５】
また、各計算機間での不整合等、スクリプトの記述ミスが発生し易い。
【０００６】
また、例外手続きに記述ミスまたは考え違い（意味的な不整合）があっても発見し難く、そのような誤りや漏れが運用時まで引き継がれる可能性が高い。
【０００７】
また、障害時の手続きについて、複合系計算機システムを構成する計算機の台数が多くなると（例えば３台以上になると）想定すべき障害のパターン数が多くなることから、スクリプト記述時に考え漏れを生じ易い。このため、障害発生時それを回避するための処理が正しく行われず、システムの異常停止という最悪の事態を招くことが少なくない。
【０００８】
本発明は上記事情を考慮してなされたものでその目的は、システム構成及び制御内容の定義が容易に記述でき、記述や操作上の誤りを少なくでき、しかも障害想定漏れが少なくて済み、その定義内容に従う信頼性のある運用が保証できる複合系計算機システムを提供することにある。
【０００９】
【課題を解決するための手段】
本発明は、複合系計算機システムの構成及び制御内容を抽象的且つ統合的に記述したプログラムであるシナリオを、上記各計算機毎の別々の処理に分解し、当該シナリオから上記各計算機で直接実行可能な形式のコマンド列である処理スクリプトを生成するシナリオコンパイル手段を備えると共に、上記各計算機に、上記シナリオコンパイル手段により生成されている各計算機別の各処理スクリプトのうち、計算機状態に対応し且つ該当する計算機用の処理スクリプトを実行するスクリプト実行手段とを備えたことを特徴とする。
【００１０】
ここで、複合系計算機システムの制御内容の具体例としては、計算機で発生する各種イベント（事象）に対するシステムの動作がある。
【００１１】
また、シナリオの抽象性の具体例としては、システム構成を定義する記述（例えば複合系計算機システムを構成する計算機を定義する計算機記述）の中で、実際の計算機の名前（定数）を、シナリオ内に閉じた変数（即ち、シナリオから生成される処理スクリプトには表われない変数）として定義し、シナリオ内の他の記述では、この変数を参照する形式がある。
【００１２】
また、シナリオの統合性（共通化）の具体例としては、イベントに対する処理を、複数の計算機について共通化して記述する形式、複数のイベントに対する処理も共通化して記述する形式、更には自系を指す特別な変数とイベントの部分を指す変数を設けることで、一部のみある計算機またはあるイベントに特別な処理がある場合にも共通化して記述する形式がある。この他、シナリオ内の特定の単位内での例えば稼働系と待機系の計算機の記述を、処理スクリプト内で用いられる定数と関係付けられたシナリオ内で用いられる変数（第１の変数）とは別の変数（第２の変数）に定義し、上記特定の単位内の他の部分では、この第２の変数を参照する形式がある。
【００１３】
このような構成においては、複合系計算機システムの構成及び制御内容を抽象的且つ統合的に記述したシナリオ（プログラム）が適用できることから、従来のように実行可能なスクリプトとして各計算機毎に記述する必要があった複合系計算機システムと異なって、システム構成及び制御内容の定義が容易に記述できる。特に、シナリオの抽象性と統合性（共通化）により、各計算機での同一計算機状態（イベント）に対する別々の処理をあたかも１つの処理であるかのように記述できることから、処理の記述数を減少できる。この効果は、複合系計算機システムの構成計算機数が多いほど顕著となる。特に、シナリオの動作する計算機群である後述する特定グループを設定し、各計算機上に当該グループの各計算機の状態を記憶するための状態記憶手段を設け、この状態記憶手段の内容によりイベント発生時の動作内容を決定する構成を適用する場合、当該状態記憶手段の更新に関しては、同一イベントに対して上記特定グループ内の全ての計算機で同一操作が行われるため、処理記述数削減の効果が大きい。
【００１４】
また本発明は、上記シナリオコンパイル手段により生成された各計算機別の各処理スクリプトを対応する各計算機の記憶領域に配布するスクリプト配布手段を設け、上記計算機での計算機状態に応じて（例えばイベント発生により）、その計算機に配布されている処理スクリプトのうち、当該計算機状態（発生イベント）に対応する処理スクリプトが上記スクリプト実行手段にて実行される構成としたことを特徴とする。ここで、上記シナリオコンパイル手段が、各計算機別の各処理スクリプトの他に、当該各処理スクリプトを該当する計算機に配布するためのコマンド列である配布スクリプトを生成する構成とし、この配布クリプトを上記スクリプト配布手段が実行することで、各計算機への処理スクリプト配布が行われるようにするとよい。
【００１５】
このように、シナリオコンパイル手段により生成された処理スクリプト等の成果物を（上記シナリオで定義された複合系計算機システムの）各計算機にスクリプト配布手段が配布するためのプログラム（配布スクリプト）が、当該シナリオコンパイル手段により自動生成される構成とすることで、この種のプログラムを人が各計算機毎に記述する場合と異なって記述誤りをなくすことができ、これにより配布操作の誤りと、計算機間の不整合を防止できる。
【００１６】
また本発明は、上記スクリプト実行手段に、処理スクリプトの実行の許可または禁止について、各計算機毎に別々に、初期状態での設定及びイベント発生時での再設定を可能にする機構を持たせ、シナリオの動作する計算機群である特定グループをイベント発生時に自動的に変化せることを特徴とする。
【００１７】
このようにすることで、特に（オペレーティングシステムの入れ替えやテストなどを目的とする）保守等のために、システムを停止させることなく、所望の計算機を切り離したり、或いは組み込むことが可能となる。
【００１８】
また本発明は、上記スクリプト実行手段に、複数のイベントに対する処理スクリプトの実行順序が上記特定グループ内で全て同一となり、１つのイベントに対する処理スクリプトの実行が上記特定グループ内で全て終了するまで次の処理スクリプトの実行の開始を待つことを保証する機構を更に持たせたことを特徴とする。
【００１９】
このような構成においては、ほぼ同時に複数の計算機で障害が発生したとしても正しい引き継ぎが可能となる同期イベント型複合系計算機システムが実現できる。
【００２０】
また本発明は、上記特定グループの各計算機の状態を記憶するための状態記憶手段を上記各計算機上に設け、上記特定グループ内の各計算機上のスクリプト実行手段において、イベント発生に伴う処理スクリプトの実行時に自系の状態記憶手段を参照してイベント発生時の動作内容を決定すると共に、状態記憶手段の内容に対して各計算機上で同一の更新処理を行う構成としたことを特徴とする。
【００２１】
このような構成においては、例えば特定グループ内の計算機で障害が発生がした場合に、その時点における特定グループ内の各計算機の状態を自系の状態記憶手段を参照することで知ることができ、これにより、障害が発生した計算機がサービス（アプリケーションプログラム）の実行中の計算機であるならば、どの計算機がその処理を引き継ぐかなどを自動決定できる。そのためには、計算機の状態に、処理の引き継ぎの優先順位を含めるとよい。
【００２２】
この他、互いに交わらない複数の特定グループを構成し、イベント発生時の動作内容を、各特定グループ毎に異なった状態記憶手段の内容によって変化させるようにすることで、物理的に１つのシステムでありながら、特定グループ数分の独立したシステムを自由に構築することが可能となる。
【００２３】
また本発明は、上記スクリプト実行手段に、上記特定グループ内でイベント発生に伴う処理スクリプトの実行が終了した後に、当該グループ内の全ての計算機に関する処理スクリプトの終了状態を取得し、その終了状態に従ってエラーリカバリ用の処理スクリプトを実行する機能を更に持たせたことを特徴とする。
【００２４】
このような構成においては、イベント発生時の処理のエラーリカバリが可能となる。
【００２５】
また本発明は、上記処理スクリプトに、その処理の一部として少なくとも１つのイベントを疑似的に発生させるコマンドを持たせることで、当該処理スクリプトが上記スクリプト実行手段により実行された場合に、少なくとも１つのイベントが疑似的に発生され、当該処理スクリプトの実行後に、この疑似的に発生されたイベント（疑似イベント）に対応する処理スクリプトが実行される構成としたことを特徴とする。
【００２６】
このような構成においては、１つのイベントに起因して複数の処理スクリプトを実行させることが可能となる。特に、上記エラーリカバリ用の処理スクリプトの実行により、少なくとも１つの疑似イベントが発生される構成とすることで、複合したエラーリカバリが可能となる。
【００２７】
また本発明は、上記シナリオコンパイル手段に、上記シナリオの記述内容の正誤を検出するための正誤検出手段及び上記シナリオの記述内容の意味を確認してその整合性を判定する意味確認手段の少なくとも１つを持たせると共に、上記正誤検出手段による記述誤り検出時または上記意味確認手段による不整合検出時に、その旨のエラーメッセージを出力するエラー出力手段を持たせたことを特徴とする。
【００２８】
このように、上記シナリオの記述内容の正誤確認機能を、当該シナリオの記述内容からその記述内容と同等の作用を与える処理スクリプトを生成するシナリオコンパイル手段に持たせることで、当該シナリオの記述誤りを容易に見つけることができる。この正誤確認機能の実現手段（正誤検出手段）としては、コマンドの引数に代表される記述値が不適合であることを検出する記述値不適合検出手段等が適用可能である。
【００２９】
また、上記シナリオの記述内容の意味の確認機能、或いはデバイス故障など起こり得る各種障害時を想定したシミュレーション機能を上記シナリオコンパイル手段に持たせることで、当該シナリオの意味的に不整合性のある箇所を容易に見つけることができ、実行するまで分かり難い制御アルゴリズムの問題点を実行前に認識することができる。この意味の確認機能の実現手段（意味確認手段）としては、イベントの発生が無限ループを構成していることを検出する無限ループ検出手段、状態記憶手段に対する更新操作内容が特定グループ内で同一とならないことを検出する状態記憶手段内容不一致検出手段、状態記憶手段に対する更新操作内容が、予め定められている当該状態記憶手段の内容が満たすべき条件（インタロック）に合致していないことを検出するインタロック検出手段、及び１つのイベントに対する各計算機での共有装置に対する操作内容が不整合であることを検出する共有装置操作不整合性検出手段の少なくとも１つが適用可能である。
【００３０】
特に、正誤検出手段により記述内容の誤りが検出された場合（記述値不適合検出手段によりコマンドの引数に代表される記述値が不適合であることが検出された場合）には、シナリオコンパイル手段による処理スクリプト生成を停止する構成とすることで、誤った処理スクリプトが生成されて、処理スクリプトの実行がエラーとなることを防止できる。
【００３１】
同様に、意味確認手段によりシナリオ中で意味的に不整合性のある箇所が検出された場合、シナリオコンパイル手段による処理スクリプト生成を停止する構成とすることで、各計算機間で整合性のない処理スクリプトが生成されて、例えば障害発生時の引き継ぎ等が正常に行われないといった不具合が生じるのを防止できる。
【００３２】
特に、イベントの発生が無限ループを構成していることを検出した場合に処理スクリプト生成を停止するならば、１つのイベントに対する一連の処理スクリプトの実行が必ず停止することを保証できる。また、状態記憶手段に対する更新操作内容が特定グループ内で同一とならないことを検出した場合に処理スクリプト生成を停止するならば、状態記憶手段の内容が上記特定グループ内で常に同一であることを保証できる。また、状態記憶手段に対する更新操作内容が、予め定められている当該状態記憶手段の内容が満たすべき条件（インタロック）に合致していないことを検出した場合に処理スクリプト生成を停止するならば、状態記憶手段の内容が常に指定条件を満たすことを保証できる。なお、この指定条件を上記シナリオ中に記述しているならば、インタロック検出手段での検出処理に便利である。また、１つのイベントに対する各計算機での共有装置に対する操作内容が不整合であることを検出した場合に処理スクリプト生成を停止するならば、処理スクリプトの共有装置に対する処理が不整合を起こさないことを保証できる。
【００３３】
この他、上記意味確認手段として、上記シナリオに記述された内容を解釈し、非同期に発生する可能性のある各種イベントを任意に組み合わせてシミュレーションする動作シミュレーション手段を適用するならば、意味の確認を動的に行うことができる。
【００３４】
また、上記シナリオコンパイル手段に、上記シナリオ内で用いられる変数を定数に置き換える置換手段と、この置換手段により置き換えられた定数を上記シナリオ内で伝播させる定数伝播手段とを持たせることで、変数を用いた記述に対しても上記各検出手段を有効に適用することが可能となる。また、上記シナリオコンパイル手段に、シナリオ内のループ文での記述を内部的に展開するループ展開手段を持たせることで、ループ変数を用いた記述に対しても上記各検出手段を有効に適用することが可能となる。
【００３５】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
【００３６】
［第１の実施形態］
図１は本発明の第１の実施形態に係る複合系計算機システムのブロック構成図である。
【００３７】
図１において、１００Ａ，１００Ｂは複合系計算機システムを構成する計算機であり、計算機間接続手段としての例えばＬＡＮ（ローカルエリアネットワーク）１０１により相互接続されている。
【００３８】
計算機１００Ａ，１００Ｂのうちの例えば計算機１００Ａには、複合系計算機システムの構成及び制御（特に、障害やオペレータ操作等により発生する各種イベントに対するシステムの動作）の定義内容を抽象的に且つ統合的に記述したプログラム（以下、ＨＡシナリオと称する）１１０が保存されているものとする。このＨＡ（High Availavility ）シナリオ１１０は、図２に示すように、人２０１が直接に、或はグラフィカルユーザインタフェース（Graphical User Interface；ＧＵＩ）２０２を介して記述されるものである。
【００３９】
計算機１００Ａは、ＨＡシナリオ１１０をコンパイルして、そのＨＡシナリオ１１０の記述内容通りの作用を与えるための、例えば計算機１００Ａ，１００Ｂで実行可能な形式のコマンド列の集合（以下、ＨＡスクリプト集合と称する）１２０を変換生成するコンパイラ（以下、ＨＡシナリオコンパイラと称する）１４０と、ＨＡスクリプト集合１２０の中から計算機１００Ａ，１００Ｂ用のＨＡスクリプト集合１３０Ａ，１３０Ｂを選択して該当する計算機１００Ａ，１００Ｂに配布するＨＡスクリプト配布機構１５０を内蔵している。
【００４０】
図１の構成の複合系計算機システムでは、図２に示すように、人２０１が直接に、或はＧＵＩ２０２を介して記述したＨＡシナリオ１１０は、（計算機１００Ａ上の）ＨＡシナリオコンパイラ１４０により読み込まれる。ＨＡシナリオコンパイラ１４０は、読み込んだＨＡシナリオ１１０について、その書式に従った字句及び構文解析を行って、システム内の各計算機毎の別々の処理、例えば計算機１００Ａ，１００Ｂ毎の別々の処理に分解し、計算機１００Ａ，１００Ｂで直接実行可能な形式のＨＡスクリプト集合１２０を生成する。このＨＡシナリオコンパイラ１４０の動作の詳細は後述する。
【００４１】
計算機１００Ａ上のＨＡスクリプト配布機構１５０は、ＨＡシナリオコンパイラ１４０により生成されたＨＡスクリプト集合１２０の中から計算機１００Ａ，１００Ｂで実行すべき部分を選択し、それぞれ計算機１００Ａ，１００Ｂ用のＨＡスクリプト集合１３０Ａ，１３０Ｂとして該当する計算機１００Ａ，１００Ｂの持つ例えば大容量記憶装置内の特定ディレクトリに配布（コピー）する。ここで、計算機１００Ａ上の配布機構１５０による計算機１００ＢへのＨＡスクリプト集合１３０Ｂの配布は、計算機１００Ａ，１００Ｂが相互接続されているＬＡＮ１０１を介して行われる。
【００４２】
ＨＡスクリプト配布機構１５０により計算機１００Ａ，１００Ｂの特定ディレクトリに配布されたＨＡスクリプト集合１３０Ａ，１３０Ｂ（中のＨＡスクリプト）は、計算機１００Ａ，１００Ｂが有するＨＡスクリプト実行機構１６０Ａ，１６０Ｂにより実行される。
【００４３】
次に、ＨＡシナリオ１１０と当該ＨＡシナリオ１１０から生成されるＨＡスクリプト集合１２０の詳細につき、計算機１００Ａ，１００Ｂのうちの一方の計算機、例えば計算機１００Ａ上で１つのアプリケーションプログラム（以下、アプリケーションと略称する）が実行されており、他方の計算機である計算機１００Ｂが待機する形態の場合を例に、図３乃至図６を参照して説明する。
【００４４】
まず、本システム内の計算機１００Ａ，１００Ｂで発生する各種イベント（事象）には、（１）他の計算機の障害検出、（２）アプリケーションの強制引継ぎ要求（以下、テイクオーバと称する）、（３）アプリケーションの通常引継ぎ要求（以下、スイッチオーバと称する）、（４）アプリケーションの開始要求、（５）アプリケーションの終了要求の５種類が含まれている。
【００４５】
ＨＡシナリオ１１０は、図３に示すように、計算機記述１１１と、システム記述１１２と、サービス記述１１３を含んでいる。
【００４６】
計算機記述１１１は、計算機に固有な情報を定義するものであり、例えば計算機の名前、ネットワークアドレスなどを定義する。
【００４７】
システム記述１１２は、計算機での各イベント（以下、ＨＡイベントと称する）に対するアプリケーションによらないシステムの動作を定義するものである。システム記述１１２は、主として他の計算機の障害検出に対して、ＨＡスクリプト実行機構（１６０Ａ，１６０Ｂ）を制御する処理を記述する。このシステム記述１１２は、アプリケーションによらないＨＡイベント、例えば他の計算機の障害検出を定義するシステムイベント記述１１２ａを含む。
【００４８】
サービス記述１１３は、各ＨＡイベントに対するアプリケーションの動作を定義するものであり、主としてアプリケーションのテイクオーバ、スイッチオーバ、開始要求、及び終了要求の各ＨＡイベントに対して、各計算機上での処理を定義する。このサービス記述１１３は、アプリケーション毎のＨＡイベント、例えばテイクオーバ、スイッチオーバ、開始要求、終了要求を定義するサービスイベント記述１１３ａを含む。
【００４９】
ＨＡシナリオ１１０は、前述したように、複合系計算機システムの構成及び制御（障害やオペレータ操作に対するシステムの動作）の定義内容を抽象的に且つ統合的に記述したものである。
【００５０】
ここでＨＡシナリオ１１０の抽象性について説明する。
【００５１】
まず本実施形態では、ＨＡスクリプト内で用いられる名前（である定数）と、ＨＡシナリオ１１０内で用いられる名前（である変数）とを区別し、ＨＡシナリオ１１０内で用いられる名前（変数）とＨＡスクリプト内で用いられる名前（定数）との関係をＨＡシナリオ１１０内に定義する形式を適用する。そこでＨＡシナリオ１１０では、計算機記述１１１の中で、実際の計算機の名前（定数）を、ＨＡシナリオ１１０内に閉じた変数（即ち、ＨＡシナリオ１１０から生成されるＨＡスクリプトには表われない変数）として定義し、ＨＡシナリオ１１０内の他の記述では、この変数を参照する形式を適用する。
【００５２】
このようなＨＡシナリオ１１０の抽象性により、当該ＨＡシナリオ１１０では、実際の計算機の名前は計算機記述の中の１箇所に記述すればよいことになる。これにより、システムを他のシステムに移動する場合などにおけるＨＡシナリオの変更が容易となる。
【００５３】
例えば、計算機Ａを計算機Ｃに、計算機Ｂを計算機Ｄに置き換える場合を考えると、ＨＡシナリオの記述は、図５（ａ）から図５（ｂ）のように変更するだけでよい。なお、図５中の{name="X"}のような記述(X=A,B,C,D) が実際の計算機の名前の記述部であり、例えば"server cpu1{name="B"}" は、計算機Ｂをserver cpu1 （第１のサーバ計算機）として定義していることを示す。
【００５４】
以上がＨＡシナリオ１１０の抽象性である。
【００５５】
次に、ＨＡシナリオ１１０の統合性について説明する。
【００５６】
まずＨＡシナリオ１１０では、システム記述１１２及びサービス記述１１３内で、ＨＡイベントに対する処理を、複数の計算機（ここでは計算機１００Ａ，１００Ｂ）について共通化して記述してある。また、複数のＨＡイベントに対する処理も共通化して記述してある。更に、自系を指す特別な変数とＨＡイベントの部分を指す変数を設けることで、一部のみある計算機またはあるＨＡイベントに特別な処理がある場合にも、共通化が図られている。
【００５７】
以上が、ＨＡシナリオ１１０の統合性（共通化）であり、このような統合性（共通化）により、ＨＡシナリオ１１０の作成が容易になる。
【００５８】
ＨＡシナリオ１１０の統合性（共通化）の例を、切り離しＨＡイベントに対する処理を共通化したサービス記述１１３の場合につき図６に示す。但し、この例では、システムを構成する計算機がcpu1，cpu2の２台ではなく、cpu1〜cpu4の４台の場合を想定している。
【００５９】
図６中の"syncevent OutX =(“切り離し”，cpuX)"のような記述(X=1,2,3,4) は、"syncevent OutX"の記述部分が、cpuXを切り離す切り離しＨＡイベントを表すことを定義したものである。
【００６０】
また、"syncaction ( cpu1｜cpu2｜cpu3｜cpu4, Out1｜Out2｜Out3｜Out4 )" は、処理をする計算機と、その計算機がどのイベントに対して処理をするかを、cpu1〜cpu4の４計算機と、Out1〜Out4の４イベントの合計４×４＝１６通りの組み合わせについて共通化して記述したものである。
【００６１】
また、"if ( localcpu==event.cpu )"中の"localcpu"はcpu1〜cpu4のうちの自系を指す変数であり、"event.cpu" は上記切り離しＨＡイベントOut1〜Out4の第２フィールド(cpuX)を指す変数であり、自系がＨＡイベントOut1〜Out4の第２フィールドの指す計算機であるか否かを判定する。
【００６２】
なお、図６中で"#" が付された記述行は、コメントの記述行である。
【００６３】
さて、ＨＡシナリオコンパイラ１４０は、計算機１００Ａ上で、以上に述べた形式のＨＡシナリオ１１０を読み込み、その計算機記述１１１の内容から、計算機の種類の情報を得ると共に、システムイベント記述１１２ａ及びサービスイベント記述１１３ａの内容からイベントの種類を取得し、更にシステム記述１１２及びサービス記述１１３の内容から処理の内容を得て、（イベント処理用ＨＡスクリプトの集合である）ＨＡスクリプト集合１２０を生成する。
【００６４】
ＨＡスクリプト集合１２０は、図４に示すように、計算機１００Ａにおける、計算機１００Ｂの障害検出に対する処理を記述したＨＡスクリプト１３１Ａ、計算機１００Ａにおける、計算機１００Ｂからのテイクオーバに対する処理を記述したＨＡスクリプト１３２Ａ、計算機１００Ａにおける、計算機１００Ａへのスイッチオーバに対する処理を記述したＨＡスクリプト１３３Ａ、計算機１００Ａにおける、計算機１００Ｂへのスイッチオーバに対する処理を記述したＨＡスクリプト１３４Ａ、計算機１００Ａにおける、計算機１００Ａでの開始要求に対する処理を記述したＨＡスクリプト１３５Ａ、計算機１００Ａにおける、計算機１００Ｂでの開始要求に対する処理を記述したＨＡスクリプト１３６Ａ、及び計算機１００Ａにおける、終了要求に対する処理を記述したＨＡスクリプト１３７Ａを有している。
【００６５】
ＨＡスクリプト集合１２０はまた、計算機１００Ｂにおける、計算機１００Ａの障害検出に対する処理を記述したＨＡスクリプト１３１Ｂ、計算機１００Ｂにおける、計算機１００Ａからのテイクオーバに対する処理を記述したＨＡスクリプト１３２Ｂ、計算機１００Ｂにおける、計算機１００Ａへのスイッチオーバに対する処理を記述したＨＡスクリプト１３３Ｂ、計算機１００Ｂにおける、計算機１００Ｂへのスイッチオーバに対する処理を記述したＨＡスクリプト１３４Ｂ、計算機１００Ｂにおける、計算機１００Ａでの開始要求に対する処理を記述したＨＡスクリプト１３５Ｂ、計算機１００Ｂにおける、計算機１００Ｂでの開始要求に対する処理を記述したＨＡスクリプト１３６Ｂ、及び計算機１００Ｂにおける、終了要求に対する処理を記述したＨＡスクリプト１３７Ｂを有している。
【００６６】
ここで、障害検出、テイクオーバ、スイッチオーバ及び開始要求のイベントは、本実施形態では２種類ずつある。但し、障害検出及びテイクオーバの各イベントに対するＨＡスクリプトは、ＨＡスクリプト１３１Ａ，１３１Ｂ及びＨＡスクリプト１３２Ａ，１３２Ｂのように、その性質から片方の計算機にしか必要ない。
【００６７】
計算機１００Ａ上のＨＡスクリプト配布機構１５０は、ＨＡシナリオコンパイラ１４０により生成されたＨＡスクリプト集合１２０の中から、計算機１００Ａで実行すべきＨＡスクリプト１３１Ａ〜１３７Ａを選択し、それらを計算機１００Ａ用のＨＡスクリプト集合１３０Ａとして、計算機１００Ａの持つ大容量記憶装置内の特定ディレクトリに配布する。またＨＡスクリプト配布機構１５０は、ＨＡスクリプト集合１２０の中から、計算機１００Ｂで実行すべきＨＡスクリプト１３１Ｂ〜１３７Ｂを選択し、それらを計算機１００Ｂ用のＨＡスクリプト集合１３０Ｂとして、計算機１００Ｂの持つ大容量記憶装置内の特定ディレクトリにＬＡＮ１０１を経由して配布する。
【００６８】
なお、ＨＡシナリオコンパイラ１４０及びＨＡスクリプト配布機構１５０は、（計算機１００Ａではなくて）計算機１００Ｂ上に設けられていても構わない。
【００６９】
計算機１００Ａ，１００Ｂ上のＨＡスクリプト実行機構１６０Ａ，１６０Ｂは、イベントが発生する毎に、ＨＡスクリプト集合１３０Ａ，１３０Ｂ中の該当するＨＡスクリプトを実行する。
【００７０】
［第２の実施形態］
次に、本発明の第２の実施形態につき図面を参照して説明する。
【００７１】
図７は４台の計算機で構成された複合系計算機システムの実施形態を示すブロック図である。
【００７２】
図７のシステムにおいて、４台の計算機７００Ａ，７００Ｂ，７００Ｃ，７００Ｄのうちの３台の計算機、例えば計算機７００Ａ，７００Ｂ，７００Ｃは、その計算機上でそれぞれ独立したアプリケーションＡＰ１〜ＡＰ３が動作している稼働系（master）となり、残りの１台の計算機７００Ｄは各計算機７００Ａ〜７００Ｃに共通の待機系（slave ）として待機する形態をとっているものとする。
【００７３】
この形態では、一般には、（前記第１の実施形態におけるＨＡシナリオ１１０に相当する）ＨＡシナリオ内に（サービス記述１１３に相当する）３つのサービス記述が必要になる。
【００７４】
しかしながら、ＨＡスクリプト内で用いられる名前（定数）と関係付けられたＨＡシナリオ内で用いられる名前（第１の変数）と、ＨＡシナリオ内の特定の単位内で用いられる名前（第２の変数）とを区別し、それらの関係をＨＡシナリオ内の特定の単位内に記述するならば、３つのサービス記述をほぼ共通化することが可能になる。このようなＨＡシナリオの例を図８に示す。
【００７５】
ここでは、３つのサービス記述８０１，８０２，８０３の先頭で、master=cpuX 及びslave=cpu4のような記述(X=1,2,3) により、稼働系と待機系の計算機を定義し、サービス記述８０１〜８０３内の他の部分８０４-1〜８０４-3（図８中の（１），（２），（３）の部分）では、この変数を参照する形式を適用している。
【００７６】
［第３の実施形態］
次に、本発明の第３の実施形態につき図面を参照して説明する。
【００７７】
図９は本発明の第３の実施形態に係る複合系計算機システムにおいて、オペレータ要求による計算機の組み込み／切り離し、及び障害発生計算機の自動切り離しを説明するための図である。ここでは、３台の計算機９００Ａ，９００Ｂ，９００Ｃから構成される複合系計算機システムであって、ハードウェアまたはソフトウェアの障害や、オペレータ操作（オペレータ入力）などの各イベントに対して、各計算機９００Ａ〜９００Ｃが同期をとって、各計算機９００Ａ〜９００Ｃに定義されているイベント処理のためのＨＡスクリプトを同時に実行することにより、障害処理もしくは要求された処理を行う同期イベント型の複合系計算機システムを前提としている。
【００７８】
本システムでのＨＡイベントには、（１）実行禁止にできない特別なＨＡイベントである新ＨＡグループの作成要求、（２）他の計算機の障害検出、（３）計算機の組み込み要求、（４）計算機の切り離し要求の４種類が含まれている。ここで、ＨＡグループ（特定グループ）とは、互いに同期をとってＨＡスクリプトを実行する計算機の集合をいう。但し、初期状態のＨＡグループ（新ＨＡグループ）は、１台の計算機のみからなる。
【００７９】
上記（１）〜（４）の各ＨＡイベントは、（前記第１の実施形態におけるシステムイベント記述１１２ａに相当する）ＨＡシナリオのシステムイベント記述内に記述されるもので、上記（２）を除く各ＨＡイベントはオペレータ操作に従って発生され、上記（２）のＨＡイベントは計算機の障害検出により自動的に発生される。
【００８０】
上記（１）の新ＨＡグループの作成要求に対する処理は、指定された計算機をＨＡスクリプトの実行許可にする処理を含む。
【００８１】
次に、上記（２）の他の計算機の障害検出に対する処理は、障害を起こした計算機をＨＡスクリプトの実行禁止にする処理を含む。
【００８２】
次に、上記（３）の計算機の組み込み要求に対する処理は、指定された計算機をＨＡスクリプトの実行許可にする処理を含む。
【００８３】
次に、上記（４）の計算機の切り離し要求に対する処理は、指定された計算機をＨＡスクリプトの実行禁止にする処理を含む。
【００８４】
なお、上記（１）の新ＨＡグループの作成要求と、（２）の計算機の組み込み要求とは、以下に述べるように異なる機能である。まず、前者はＨＡグループが新しく作られることを意味するのに対し、後者は既に作成されているあるＨＡグループに対して組み込まれることを意味する。特に前者はＨＡスクリプトの実行禁止になっている計算機に発生するイベントであるのに対し、後者はＨＡスクリプトの実行許可になっている計算機（即ちＨＡグループ内の計算機）に発生するイベントである点で異なる。
【００８５】
また、計算機の組み込み、切り離しは、主として保守などの目的で１台だけの計算機を停止させたい場合などに用いられる。
【００８６】
図９中の各計算機９００Ａ〜９００Ｃは図示せぬＬＡＮにより相互接続されている。計算機９００Ａ〜９００Ｃ上には、（前記第１の実施形態におけるＨＡスクリプト実行機構１６０Ａ，１６０Ｂに相当する）ＨＡスクリプト実行機構９６０Ａ〜９６０Ｃが設けられている。これら計算機９００Ａ〜９００Ｃ上のＨＡスクリプト実行機構９６０Ａ〜９６０Ｃは、互いに協調して動作し、特に他の計算機のＨＡスクリプトの実行を許可することができるようになっている。この場合、実行を許可された計算機は、実行を許可した計算機と同じＨＡグループに入っていると認識する。
【００８７】
図９において、同図（ａ）に示すように、計算機９００Ａで、当該計算機９００Ａからなる新ＨＡグループの作成要求のＨＡイベント９０１がオペレータ操作により発生したものとする。この場合、計算機９００Ａは、自系をＨＡスクリプトの実行許可状態にすることで、図９（ｂ）に示すように自系のみからなるＨＡグループ９０２を作成する。
【００８８】
次に、ＨＡグループ９０２の計算機９００Ａで、図９（ｂ）に示すように、計算機９００Ｂの（ＨＡグループ９０２への）組み込み要求のＨＡイベント９０３がオペレータ操作により発生したものとする。この場合、計算機９００Ａは、ＨＡイベント９０３で指定された計算機９００ＢをＨＡスクリプトの実行許可状態にすることで、図９（ｃ）に示すように当該計算機９００ＢをＨＡグループ９０２に組み込む。これにより、ＨＡグループの計算機９００Ａと、新たにＨＡグループ９０２に組み込まれた計算機９００Ｂとは、互いに協調して動作する。
【００８９】
次に、ＨＡグループ９０２の計算機９００Ａ，９００Ｂで、図９（ｃ）に示すように、計算機９００Ｃの（ＨＡグループ９０２への）組み込み要求のＨＡイベント９０４が（計算機９００Ａまたは９００Ｂに対する）オペレータ操作により発生したものとする。この場合、計算機９００Ａ，９００Ｂは、ＨＡイベント９０４で指定された計算機９００ＣをＨＡスクリプトの実行許可状態にすることで、図９（ｄ）に示すように当該計算機９００ＣをＨＡグループ９０２に組み込む。これにより、ＨＡグループの計算機９００Ａ，９００Ｂと、新たにＨＡグループ９０２に組み込まれた計算機９００Ｃとは、互いに協調して動作する。
【００９０】
このような状態で、図９（ｅ）に示すように計算機Ａで障害９０５が発生し、その障害９０５を計算機９００Ｂ，９００Ｃにおいて検出したものとする。すると、計算機９００Ｂ，９００Ｃでは、図９（ｅ）に示すように計算機９００Ａの障害検出のＨＡイベント９０６が発生する。この場合、計算機９００Ｂ，９００Ｃは、障害９０５が発生した計算機９００ＡがＨＡスクリプトの実行禁止状態になったとみなすことで、図９（ｆ）に示すように当該計算機９００ＡをＨＡグループ９０２から自動的に切り離す。
【００９１】
次に、計算機９００ＡがＨＡグループ９０２から切り離されている状態で、ＨＡグループ９０２の計算機９００Ｂ，９００Ｃで、図９（ｆ）に示すように、計算機９００Ｂの（ＨＡグループ９０２からの）切り離し要求のＨＡイベント９０７がオペレータ操作により発生したものとする。この場合、計算機９００Ｂ，９００Ｃは、ＨＡイベント９０７で指定された計算機９００ＢをＨＡスクリプトの実行禁止状態にすることで、図９（ｇ）に示すように当該計算機９００ＢをＨＡグループ９０２から切り離す。
【００９２】
次に、計算機９００Ａ，９００ＢがＨＡグループ９０２から切り離されている状態で、ＨＡグループ９０２の９００Ｃで、図９（ｇ）に示すように、計算機９００Ｃ自身の（ＨＡグループ９０２からの）切り離し要求のＨＡイベント９０８がオペレータ操作により発生したものとする。この場合、計算機９００Ｃは、ＨＡイベント９０８で指定された計算機９００Ｃ自身をＨＡスクリプトの実行禁止状態にすることで、図９（ｈ）に示すように当該計算機９００Ｃ自身をＨＡグループ９０２から切り離す。
【００９３】
このように、各計算機９００Ａ〜９００Ｄ毎に別々に、ＨＡスクリプトの実行の許可／禁止の初期状態での設定、及びＨＡイベント発生時での再設定を可能とする機構を持つことで、ＨＡグループをＨＡイベント発生時に自動的に変化させ、オペレータ操作に従うオンライン状態での計算機の組み込み／切り離し、及び障害発生計算機の自動切り離しが容易に行える。
【００９４】
これは、特に（オペレーティングシステムの入れ替えやテストなどを目的とする）保守等のために、システムを停止させることなく、所望の計算機を切り離したり、或いは組み込むのに好都合である。なお従来は、システムを停止させずに計算機の組み込み／切り離しを行うと、誤って障害として検出されて引き継ぎ処理が行われるため、一旦システムを停止させてから計算機の組み込み／切り離しを行う必要があった。
【００９５】
［第４の実施形態］
次に、本発明の第４の実施形態につき図面を参照して説明する。
【００９６】
図１０は、複合系計算機システムにおいて、障害が発生した計算機で動いていたアプリケーションを他の計算機で自動的に引き継ぐ形態を説明するための図である。ここでは、４台の計算機１０００Ａ，１０００Ｂ，１０００Ｃ，１０００Ｄから構成される複合系計算機システムを前提としている。
【００９７】
まず本システムで適用される（前記第１の実施形態におけるＨＡシナリオ１１０に相当する）ＨＡシナリオは、次のような条件に従うアプリケーションの引き継ぎを行うように記述されているものとする。
【００９８】
（１）計算機１０００Ａに障害発生したとき、計算機１０００Ｂが正常なら、計算機１０００Ａで動いていたアプリケーションを計算機１０００Ｂへ引き継ぐ。
【００９９】
（２）計算機１０００Ａに障害発生したとき、計算機１０００Ｂが正常でなく、計算機１０００Ｃが正常なら、計算機１０００Ａで動いていたアプリケーションを計算機１０００Ｃへ引き継ぐ。
【０１００】
（３）計算機１０００Ｂに障害発生したとき、計算機１０００Ｄが正常なら、計算機１０００Ｂで動いていたアプリケーションを計算機１０００Ｄへ引き継ぐ。
【０１０１】
（４）計算機１０００Ｃに障害発生したとき、計算機１０００Ｄが正常なら、計算機１０００Ｃで動いていたアプリケーションを計算機１０００Ｄへ引き継ぐ。
【０１０２】
図１０において、計算機１０００Ａ，１０００Ｂにほぼ同時に障害が発生したものとする。この場合、計算機１０００Ａの障害検出のＨＡイベントと計算機１０００Ｂの障害検出のＨＡイベントとが、それぞれ計算機１０００Ｃ，１０００Ｄでほぼ同時に発生するが、その発生順序は、計算機１０００Ｃ，１０００Ｄにおいて同一であるとは限らない。これは、検出の遅延や通信の遅延のために起こる。
【０１０３】
ところが従来は、障害が発生した計算機で動いていたアプリケーションを別の計算機で引き継ぐ場合には、次に述べるように上記した障害検出のＨＡイベントの発生順序は重要である。
【０１０４】
例えば、計算機１０００Ａ、計算機１０００Ｂの順序で障害が検出されたとするならば、計算機１０００Ａで実行されていたアプリケーションは、まず上記（１）の条件に従い、図１０において符号１００１ａで示される引継ぎ経路で計算機１０００Ｂに（一時的に）引き継がれ、計算機１０００Ｂの障害が検出された時点で、上記（３）の条件に従い、図１０において符号１００１ｂで示される引継ぎ経路で計算機１０００Ｄに引き継がれる。即ち、先に計算機１０００Ａの障害が検出された場合には、計算機１０００Ａで実行されていたアプリケーションは結局計算機１０００Ｄに引き継がれる。
【０１０５】
一方、計算機１０００Ｂ、計算機１０００Ａの順序で障害が検出されたとするならば、計算機１０００Ｂで実行されていたアプリケーションは、まず上記（３）の条件に従って計算機１０００Ｄに（一時的に）引き継がれるものの、計算機１０００Ａの障害が検出された時点で、この引き継ぎは解消され、新たに、計算機１０００Ａで実行されていたアプリケーションが、上記（２）の条件に従い、図１０において符号１００２で示される引継ぎ経路で計算機１０００Ｃに引き継がれる。即ち、先に計算機１０００Ｂの障害が検出された場合には、計算機１０００Ａで実行されていたアプリケーションは計算機１０００Ｃに引き継がれる。
【０１０６】
したがって、計算機１０００Ｃ，１０００Ｄにおいて、いずれも計算機１０００Ａ、計算機１０００Ｂの順序で障害が検出された場合には、計算機１０００Ａで実行されていたアプリケーションが経路１００１ａ，１００１ｂで計算機１０００Ｄに正しく引き継がれる。同様に、計算機１０００Ｃ，１０００Ｄにおいて、いずれも計算機１０００Ｂ、計算機１０００Ａの順序で障害が検出された場合には、計算機１０００Ａで実行されていたアプリケーションが経路１００２で計算機１０００Ｃに正しく引き継がれる。
【０１０７】
しかしながら、計算機１０００Ｃにおいて計算機１０００Ａ、計算機１０００Ｂの順序で障害が検出され、計算機１０００Ｄにおいてその逆に計算機１０００Ｂ、計算機１０００Ａの順序で障害が検出された場合には、計算機１０００Ｃ，１０００Ｄのいずれでも引き継ぎが行われない。また、計算機１０００Ｃにおいて計算機１０００Ｂ、計算機１０００Ａの順序で障害が検出され、計算機１０００Ｄにおいてその逆に計算機１０００Ａ、計算機１０００Ｂの順序で障害が検出された場合には、計算機１０００Ａで実行されていたアプリケーションが、経路１００２で計算機１０００Ｃに引き継がれると共に、経路１０００１ａ，１０００１ｂで計算機１０００Ｄにも引き継がれる。
【０１０８】
即ち従来技術では、計算機１０００Ｃ，１０００Ｄで発生される、計算機１０００Ａの障害検出のＨＡイベントと計算機１０００Ｂの障害検出のＨＡイベントの順序が、両計算機１０００Ｃ，１０００Ｄで異なる場合には、計算機１０００Ｃと計算機１０００Ｄの両方に（計算機１０００Ａで実行していたアプリケーションの）引き継ぎが行われてしまうか、両方共引き継ぎが行われないかのいずれかとなり、正しい結果とならない。
【０１０９】
そこで本実施形態では、このような不具合を解消するために、（前記第１の実施形態におけるＨＡスクリプト実行機構１６０Ａ，１６０Ｂに相当する）各計算機１０００Ａ〜１０００Ｄ内のＨＡスクリプト実行機構を、図１１のように構成している。
【０１１０】
まず、各計算機１０００Ａ〜１０００Ｄ内のＨＡスクリプト実行機構は、新ＨＡグループの作成要求ＨＡイベントを受け付けるＨＡイベント受付部１１０１、計算機の障害検出ＨＡイベントを受け付けるＨＡイベント受付部１１０２、計算機の組み込み要求ＨＡイベントを受け付けるＨＡイベント受付部１１０３、計算機の切り離し要求ＨＡイベントを受け付けるＨＡイベント受付部１１０４、及びその他のＨＡイベントを受け付けるＨＡイベント受付部１１０５とを有している。
【０１１１】
ＨＡスクリプト実行機構はまた、他系のＨＡスクリプト実行機構との間の通信を行う通信部１１０６、及びＨＡスクリプトを実行するＨＡスクリプト実行部１１０７を有している。
【０１１２】
ＨＡスクリプト実行機構は更に、ＨＡグループの構成情報を格納しておくＨＡグループ構成記憶部１１０８、次に実行する可能性のあるＨＡスクリプトの要因となるＨＡイベントを候補ＨＡイベントとして格納しておく候補ＨＡイベント記憶部１１０９、検出した障害の情報を格納しておく障害検出記憶部１１１０、及び候補ＨＡイベントの確定状態を格納しておく確定状態記憶部１１１１を有している。各記憶部１１０８〜１１１１は、自系に関する該当する情報を格納しておくための記憶領域と、他系に関する該当する情報を格納しておくための３台の計算機分の記憶領域とを持つ。
【０１１３】
ＨＡスクリプト実行機構は更に、ＨＡイベント受付部１１０３〜１１０５で受け付けられたＨＡイベントを一時格納（保留）しておくためのＦＩＦＯ（先入れ先出し）方式のＨＡイベント保留記憶部１１１２、一連のＨＡスクリプトの実行順序を管理する順序番号を記憶しておくための順序番号記憶部１１１３、及びＨＡグループ内の各計算機が協調してＨＡイベント処理を行うための同期制御を司る同期制御部１１１４を有している。
【０１１４】
次に、図１１の構成のＨＡスクリプト実行機構の動作の概略について述べる。
【０１１５】
まず、新ＨＡグループの作成要求ＨＡイベントの受付部１１０１は、自系計算機がＨＡグループに入ってない場合にのみ、該当するＨＡイベントを受け付ける。
【０１１６】
一方、計算機の障害検出ＨＡイベントの受付部１１０２は、障害検出ＨＡイベントを無条件で受け付ける。また、計算機の組み込み要求ＨＡイベントの受付部１１０３、計算機の切り離し要求ＨＡイベントの受付部１１０４、及びその他のＨＡイベントの受付部１１０５は、該当するＨＡイベントを無条件で受け付ける。
【０１１７】
新ＨＡグループの作成要求ＨＡイベントの受付部１１０１、及び計算機の障害検出ＨＡイベントの受付部１１０２で受け付けられた各ＨＡイベントは、そのまま同期制御部１１１４に入力される。
【０１１８】
これに対し、計算機の組み込み要求ＨＡイベントの受付部１１０３、計算機の切り離し要求ＨＡイベントの受付部１１０４、及びその他のＨＡイベントの受付部１１０５で受け付けられた各ＨＡイベントは、一旦ＨＡイベント保留記憶部１１１２に保持され、同期制御部１１１４からの要求に応じて当該同期制御部１１１４に入力される。
【０１１９】
一方、通信部１１０６は、ＨＡグループ構成記憶部１１０８、候補ＨＡイベント記憶部１１０９、障害検出記憶部１１１０、及び確定状態記憶部１１１１の自系用の記憶領域にそれぞれ格納されている自系に関する情報を、他系（のＨＡスクリプト実行機構）に通知すると共に、他系（のＨＡスクリプト実行機構内の通信部１１０６）から通知された情報をそれぞれ対応する記憶部１１０８〜１１１１の対応する記憶領域に格納する。ここで、他系への情報通知は、順序番号記憶部１１１３に格納されている順序番号を付加して行われる。また、他系からの情報の受信時には、その情報が当該情報に付加されていた順序番号と共に、記憶部１１０８〜１１１１のうちの該当する情報の記憶部に格納される。
【０１２０】
同期制御部１１１４は、ＨＡグループ構成記憶部１１０８、候補ＨＡイベント記憶部１１０９、障害検出記憶部１１１０、及び確定状態記憶部１１１１にそれぞれ格納されている自系並びに他系に関する情報と、自系で入力されたＨＡイベントから、最新の自系の状態を決定し、その状態を対応する各記憶部１１０８〜１１１１の自系用記憶領域に格納する。
【０１２１】
このとき、もし自系の確定状態が確定成功であるならば、ＨＡスクリプト実行部１１０７は、候補ＨＡイベント記憶部１１０９に格納されている候補ＨＡイベントに対応するＨＡスクリプトの実行を行い、順序番号を更新する。これに対し、自系の確定状態が確定失敗であるならば、ＨＡスクリプト実行部１１０７は、候補ＨＡイベント記憶部１１０９に格納されている候補ＨＡイベントを破棄し、順序番号を更新する。
【０１２２】
次に、図１１の構成のＨＡスクリプト実行機構を図１０の複合系計算機システムの各計算機１０００Ａ〜１０００Ｄに設けた場合の典型的な処理について、（１）新ＨＡグループの作成、計算機の組み込み／切り離し以外の場合の通常の処理（障害が検出されなかった場合の処理）、（２）新ＨＡグループの作成、計算機の組み込み／切り離し以外の場合の障害検出時の処理、（３）新ＨＡグループの作成の場合の処理、（４）計算機の組み込みの場合の処理、（５）計算機の切り離しの場合の処理を例に、図１２乃至図１６を適宜参照して順に説明する。
【０１２３】
（１）新ＨＡグループの作成、計算機の組み込み／切り離し以外の場合の通常の処理
この処理は、ＨＡグループ内の計算機で行われる。ここでは、図１０中の各計算機１０００Ａ〜１０００Ｄが全てＨＡグループに含まれているものとする。
【０１２４】
まずＨＡグループ内のある計算機のＨＡスクリプト実行機構の持つ同期制御部１１１４からの入力要求により、ＨＡイベント保留記憶部１１１２の先頭に位置している（新ＨＡグループの作成、計算機の組み込み／切り離し以外の）ＨＡイベント、例えばＨＡイベント受付部１１０５で受け付けられてＨＡイベント保留記憶部１１１２にＦＩＦＯで格納されたＨＡイベント（その他のＨＡイベント、通常のＨＡイベント）が入力されたものとする。この場合、同期制御部１１１４は、この入力ＨＡイベントを候補ＨＡイベントとして候補ＨＡイベント記憶部１１０９内の自系用記憶領域に格納する（ステップＳ１）。
【０１２５】
通信部１１０６は、候補ＨＡイベント記憶部１１０９に格納された自系の候補ＨＡイベントを他系に通知する（ステップＳ２）。
【０１２６】
この他系に通知された候補ＨＡイベントは、その系の候補ＨＡイベント記憶部１１０９内の通知元計算機用の記憶領域に格納される（ステップＳ３）。また、候補ＨＡイベントが通知された系で候補ＨＡイベントが決定していない場合には、当該イベントはその系の候補ＨＡイベントとなり、その系の候補ＨＡイベント記憶部１１０９内の自系用記憶領域にも格納される。またステップＳ３では、この候補ＨＡイベント記憶部１１０９内の自系用記憶領域の内容が他系に通知される。
【０１２７】
このようにして、ＨＡグループ内の各計算機１０００Ａ〜１０００ＤのＨＡスクリプト実行機構の持つ通信部１１０６では、いずれかの計算機の障害が検出されない限り（ステップＳ４）、他系の候補ＨＡイベントを全て受信する（ステップＳ５）。
【０１２８】
ＨＡグループ内の各計算機１０００Ａ〜１０００Ｄの同期制御部１１１４は、候補ＨＡイベント記憶部１１０９に格納されている他系の候補ＨＡイベントと自系の候補ＨＡイベント、即ち各計算機１０００Ａ〜１０００Ｄの候補ＨＡイベントが全て等しいならば（ステップＳ６）、自系の確定状態を確定成功とし（ステップＳ７）、そうでないならば確定失敗とする（ステップＳ８）。確定成功の例を図１７（ａ）に、確定失敗の例を図１７（ｂ）に示す。なお、図１７においてｅ，ｆはそれぞれ異なる候補ＨＡイベントを示す。
【０１２９】
各計算機１０００Ａ〜１０００Ｄでは、確定成功となった場合には、同期制御部１１１４の制御によりＨＡスクリプト実行部１１０７にて該当するＨＡイベントについてのＨＡスクリプトが実行され（ステップＳ９）、その実行終了時にＨＡイベント保留記憶部１１１２の先頭に位置しているＨＡイベントが、上記確定したＨＡイベントと同一であれば、それが削除される（ステップＳ１０）。また、確定状態記憶部１１１１の自系用の記憶領域に確定成功を示す確定状態が格納される。
【０１３０】
これに対し、確定失敗となった場合には、候補ＨＡイベント記憶部１１０９に格納されている自系の候補ＨＡイベントは破棄され（ステップＳ１１）、同期制御部１１１４からＨＡイベント保留記憶部１１１２に対してＨＡイベントの再要求が行われる（ステップＳ１３）。ここで、確定失敗判定時からＨＡイベントの再要求までの時間間隔はランダムに設定される（ステップＳ１２）。また、確定状態記憶部１１１１の自系用の記憶領域に確定失敗を示す確定状態が格納される。
【０１３１】
同期制御部１１１４は、上記ステップＳ１０またはＳ１３の後、順序番号記憶部１１１３内の順序番号を次に進め、次のＨＡイベントの入力を待つ（ステップＳ１４）。
【０１３２】
このように本実施形態においては、ＨＡグループ内の全ての計算機の候補ＨＡイベントが等しくなるまでは、言い換えれば、１つのＨＡイベントに対する処理スクリプトの実行がＨＡグループ内で全て終了するまでは、次のＨＡスクリプトの実行は抑止される。この結果、複数のＨＡイベントに対するＨＡスクリプトの実行順序がＨＡグループ内で全て同一となる。
【０１３３】
なお、１つの順序番号についての確定状態は、最終的にはＨＡグループ内の計算機１０００Ａ〜１０００Ｄで全て確定成功か或いは全て確定失敗かのどちらかに決定されるが、通信の遅延時間のために、決定は全ての計算機１０００Ａ〜１０００Ｄで同時ではない。したがって、他系の計算機の処理が次の順序番号に進んでしまっているか否かを、その系からの通知情報に付されていた順序番号から判断し、進んでいる場合には、自系の次の順序番号の処理が開始するまで保留する必要がある。そのため、各記憶部１１０８〜１１１１には、現在の状態の記憶領域と１つ前の状態の記憶領域の２つが確保されている。
【０１３４】
（２）新ＨＡグループの作成、計算機の組み込み／切り離し以外の場合の障害検出時の処理
まずＨＡグループ内のある計算機で障害検出ＨＡイベントが入力されると、前記した通常のＨＡイベントの入力時と同様にして、その障害検出ＨＡイベントが他系に通知される。
【０１３５】
このように、ＨＡグループ内のある計算機で障害検出ＨＡイベントが入力され、その障害検出ＨＡイベントが他系に通知された場合、即ちＨＡグループ内の計算機で障害が検出された場合（ステップＳ４）、ＨＡグループ内の障害が検出された計算機を除く各計算機の通信部１１０６では、障害が検出された計算機以外の候補ＨＡイベントを全て受信する（ステップＳ１５）。
【０１３６】
ＨＡグループ内の障害が検出された計算機を除く各計算機の同期制御部１１１４は、候補ＨＡイベント記憶部１１０９に格納されている、障害が検出された計算機以外の候補ＨＡイベントと自系の候補ＨＡイベントが全て等しいならば（ステップＳ１６）、自系の確定状態を確定保留とし（ステップＳ１７）、そうでないならば確定失敗とする（ステップＳ１８）。この確定保留は、確定成功と確定失敗との間の中間的な状態を示すもので、この確定保留の例を図１７（ｃ）に示す。また、この図１７（ｃ）には、上記確定保留判定時における確定状態記憶部１１１１の内容が併せて示されている。
【０１３７】
次に、自系の確定状態が確定状態記憶部１１１１の自系用の記憶領域に格納され、その確定状態が他系に通知される（ステップＳ１９）。
【０１３８】
ＨＡグループ内の障害が検出された計算機を除く各計算機では、障害が検出された計算機以外の確定状態を全て受信する（ステップＳ２０）。この結果、ＨＡグループ内の障害が検出された計算機を除く各計算機の確定状態記憶部１１１１の内容は図１７（ｄ）に示すようになる。
【０１３９】
ＨＡグループ内の障害が検出された計算機を除く各計算機の同期制御部１１１４は、確定状態記憶部１１１１に格納されている、障害が検出された計算機以外の確定状態が全て確定保留か確定成功であるならば（ステップＳ２１）、確定状態を確定成功とし（ステップＳ７）、そうでないならば確定失敗とする（ステップＳ８）。
【０１４０】
このように本実施形態においては、ＨＡグループ内の障害が検出された計算機を除く全ての計算機の確定状態が確定保留か確定成功となるまでは、ＨＡスクリプトの実行は抑止される。従って、このような障害検出時の処理を図１０の例に適用した場合には、計算機１０００Ａ〜１０００Ｄのうち、障害が発生していない計算機１０００Ｃ及び計算機１０００Ｄにおいて確定状態が確定保留か確定成功となって初めてＨＡスクリプトが実行されることから、結局計算機Ａで実行されていたアプリケーションは計算機１０００Ｃまたは計算機１０００Ｄのどちらか一方のみに正しく引き継がれる。
【０１４１】
（３）新ＨＡグループの作成の場合の処理
まずＨＡグループ内のある計算機（のＨＡスクリプト実行機構の持つ同期制御部１１１４）で新ＨＡグループの作成要求ＨＡイベントが入力されたものとする。この場合、計算機間の通信は行われず、計算機１０００Ａ〜１０００Ｄのうち、新ＨＡグループの作成要求ＨＡイベントが入力された計算機が、１台でＨＡグループを構成するような設定に、全ての記憶部１１０８〜１１１１を初期化する（ステップＳ３１）
（４）計算機の組み込みの場合の処理
まずＨＡグループ内のある計算機（のＨＡスクリプト実行機構の持つ同期制御部１１１４）で計算機の組み込み要求ＨＡイベントが入力されたものとする。この場合、図１２及び図１３のフローチャート中のステップＳ１〜Ｓ２１と同様の処理が行われ、その結果、計算機の組み込み要求ＨＡイベントが確定成功となったなら（ステップＳ４１）、組み込まれる計算機以外の計算機（の同期制御部１１１４）は、組み込み要求ＨＡイベントで要求された計算機がＨＡグループに組み込まれるように自系のＨＡグループ構成記憶部１１０８を変更し（ステップＳ４２）、組み込まれる計算機に対してＨＡグループ構成を通知する（ステップＳ４３）。
【０１４２】
これを受けて、組み込まれる計算機は、通知されたＨＡグループ構成に基づいて、自系のＨＡグループ構成記憶部１１０８及び順序番号記憶部１１１３に対する情報設定を行い、候補ＨＡイベント記憶部１１０９、障害検出記憶部１１１０及び確定状態記憶部１１１１を初期化する（ステップＳ４４）。
【０１４３】
その後、組み込み要求ＨＡイベントで要求された計算機を含むＨＡグループ内の各計算機（の同期制御部１１１４）は、順序番号記憶部１１１３内の順序番号を次に進め、次のＨＡイベントの入力を待つ（ステップＳ４５）。
【０１４４】
これに対し、計算機の組み込み要求ＨＡイベントが確定失敗となったなら（ステップＳ４６）、組み込まれる計算機以外の計算機（の同期制御部１１１４）は、順序番号記憶部１１１３内の順序番号を次に進め、次のＨＡイベントの入力を待つ（ステップＳ４５）。
【０１４５】
（５）計算機の切り離しの場合の処理
まずＨＡグループ内のある計算機（のＨＡスクリプト実行機構の持つ同期制御部１１１４）で計算機の切り離し要求ＨＡイベントが入力されたものとする。この場合、図１２及び図１３のフローチャート中のステップＳ１〜Ｓ２１と同様の処理が行われ、その結果、計算機の切り離し要求ＨＡイベントが確定成功となったなら（ステップＳ５１）、切り離される計算機以外の計算機（の同期制御部１１１４）は、自系のＨＡグループ構成記憶部１１０８の内容（ＨＡグループ構成）を変更し、切り離し要求ＨＡイベントで要求された計算機をＨＡグループから切り離す（ステップＳ５２）。
【０１４６】
一方、切り離される計算機は、新ＨＡグループの作成要求ＨＡイベントが入力されるか、他系から組み込みのためのＨＡグループ構成が通知されるまで待機状態となる（ステップＳ５３）。
【０１４７】
その後、切り離された計算機を除くＨＡグループ内の各計算機（の同期制御部１１１４）は、順序番号記憶部１１１３内の順序番号を次に進め、次のＨＡイベントの入力を待つ（ステップＳ５４）。
【０１４８】
これに対し、計算機の切り離し要求ＨＡイベントが確定失敗となったなら（ステップＳ５５）、切り離しが要求された計算機を含むＨＡグループ内の各計算機（の同期制御部１１１４）は、順序番号記憶部１１１３内の順序番号を次に進め、次のＨＡイベントの入力を待つ（ステップＳ５４）。
【０１４９】
以上のように、本実施形態においては、複数のＨＡイベントに対するＨＡスクリプトの実行順序がＨＡグループ内で同一であり、１つのＨＡイベントに対するＨＡスクリプトの実行がＨＡグループ内で全て終了するまで次のＨＡスクリプトの実行が開始されないように保証できるため、複数のＨＡイベントに対する動作が矛盾なく行える。
【０１５０】
［第５の実施形態］
次に、本発明の第５の実施形態につき図面を参照して説明する。
【０１５１】
図１８は、複合系計算機システムにおいて、アプリケーションの引き継ぎ先を、動的に変更可能な優先順位に従って決定する形態を説明するための図である。ここでは、４台の計算機１８００Ａ，１８００Ｂ，１８００Ｃ，１８００Ｄから構成される複合系計算機システムを前提としている。
【０１５２】
各計算機１８００Ａ〜１８００Ｄには、前記第４の実施形態で述べた図１１と同様の構成のＨＡスクリプト実行機構１８１０に加えて、各計算機１８００Ａ〜１８００ＤのＨＡグループ内の状態（アプリケーションの引き継ぎの優先順位等）を格納しておくＨＡ状態テーブル１８２０が設けられる。このＨＡ状態テーブル１８２０に格納される各計算機１８００Ａ〜１８００ＤのＨＡグループ内の状態には、ＨＡグループ内でアプリケーションの実行中であることを示す“実行中”、（実行中の計算機が障害を起こした場合における）ＨＡグループ内でのアプリケーションの引き継ぎの優先度（優先順位）を表す“優先度１”〜“優先度４”（数値が小さいほど高優先度）、障害が検出されていることを示す“障害検出”、ＨＡグループから切り離されていることを示す“切り離し”等がある。
【０１５３】
また、ＨＡシナリオのシステム記述並びにサービス記述内で使用可能なＨＡ状態テーブル参照記述、ＨＡシナリオのシステム記述並びにサービス記述内にあるＨＡ状態テーブル更新記述、ＨＡスクリプトから使用可能なＨＡ状態テーブル参照コマンド並びに更新コマンドが用意される。
【０１５４】
また、ＨＡスクリプト実行機構１８１０には、計算機の組み込み時に、組み込まれる計算機に対してＨＡ状態テーブル１８２０の内容を配布する機能（ＨＡ状態テーブル配布機能）と、新ＨＡグループの作成時に、ＨＡ状態テーブル１８２０の内容を初期化する機能（ＨＡ状態テーブル初期化機能）が付加されている。
【０１５５】
さて、（前記第１の実施形態におけるＨＡシナリオ１１０に相当する）ＨＡシナリオ（内のシステム記述及びサービス記述）には、ＨＡ状態テーブル１８２０の更新のため、図１９に示すようなＨＡ状態テーブル更新記述１９００が含まれている。このＨＡ状態テーブル更新記述１９００は、ＨＡグループ内でのＨＡ状態テーブル（１８２０）の更新が全て同一のため、計算機によらずに共通に記述される。
【０１５６】
ＨＡ状態テーブル更新記述１９００中の"get s=state(outcpu)" は、ＨＡ状態テーブルを参照して、障害が検出された計算機(outcpu)のＨＡグループ内の状態を変数ｓとして取得することを指示するＨＡ状態テーブル参照コマンド１９０１である。
【０１５７】
また、"get t=state(host)" は、ＨＡ状態テーブルを参照して、 host=cpu1〜cpu4で示される各計算機１８００Ａ〜１８００Ｄのそれぞれについて、その計算機(host)のＨＡグループ内の状態を変数ｔとして取得することを指示するＨＡ状態テーブル参照コマンド１９０２である。
【０１５８】
ＨＡ状態テーブル更新記述１９００中には、上記参照コマンド１９０１〜１９０２に従って取得した、障害が検出された計算機(outcpu)のＨＡグループ内の状態ｓが、“実行中”、“優先度１”、“優先度２”、“優先度３”、または“優先度４”のいずれであるかにより、hostで示される計算機のＨＡ状態テーブル１８２０の状態をどのように更新するかを指示するＨＡ状態テーブル更新コマンド群１９１１〜１９１５が含まれている（図では一部省略されている）。
【０１５９】
ＨＡ状態テーブル更新コマンド群１９１１〜１９１５は、hostで示される計算機のＨＡ状態テーブル１８２０の状態を、上記参照コマンド１９０１，１９０２に従って取得した当該計算機(host)のＨＡグループ内の状態ｔに応じて決定するためのＨＡ状態テーブル更新コマンドの集合である。例えば、ＨＡ状態テーブル更新コマンド群１９１１では、障害が検出された計算機(outcpu)が“実行中”の場合に、hostで示される計算機の状態を、当該hostで示される計算機の現在の状態が“実行中”ならば“障害検出”とし、“優先度１”ならば（アプリケーション引き継ぎのために）“実行中”とし、“優先度２”ならば“優先度１”とし、“優先度３”ならば“優先度２”とし、“優先度４”ならば“優先度３”とすることが指示される。他のＨＡ状態テーブル更新コマンド群１９１２〜１９１５も同様であり、障害が検出された計算機(outcpu)の状態とhostで示される計算機の状態が一致しているならば、当該hostで示される計算機の状態を“障害検出”とし、それ以外の場合には、hostで示される計算機の状態を、当該計算機の現在の状態より１つ上の状態とすることが指示される。
【０１６０】
また、ＨＡシナリオには、（前記第１の実施形態におけるサービス記述１１３に相当する）図２０に示すようなサービス記述２０００が含まれている。このサービス記述２０００には、障害検出時の処理が記述されている。
【０１６１】
図２０中の"syncaction ( cpu1｜cpu2｜cpu3｜cpu4 , TakeOver1｜ TakeOver2｜ TakeOver3｜ TakeOver4 )" は、処理をする計算機と、その計算機がどの引き継ぎ要求（テイクオーバ）のイベントに対して処理をするかを、cpu1〜cpu4の４計算機と、 TakeOver1〜TakeOver4 の４イベントの合計４×４＝１６通りの組み合わせについて共通化して記述したものである。
【０１６２】
また、"set outcpu=event.cpu"は、障害が検出された計算機(event.cpu) を変数outcpuとして設定するための記述部分である。
【０１６３】
また、"get s=state(event.cpu)"は、障害が検出された計算機(event.cpu) のＨＡ状態テーブル内の状態を取得して変数ｓとして設定することを指示するＨＡ状態テーブル参照コマンド２００１である。
【０１６４】
また、"if(s=="実行中")から始まる記述２００２は、変数ｓで示されるＨＡ状態テーブルの状態、即ち障害が検出された計算機(event.cpu) のＨＡ状態テーブルの状態が実行中である場合に、cpu1〜cpu4のうちの自系(localcpu)の状態に応じてどのような処理をするのかを記述したものである。この記述２００２は、自系のＨＡ状態テーブル内の状態を変数ｔとして取得することを指示するＨＡ状態テーブル参照コマンド２００３を含む。
【０１６５】
さて、図１８の複合系計算機システムにおいて、同図（ａ）に示すように、計算機１８００Ａ〜１８００Ｄのうち計算機１８００ＤだけがＨＡグループから外れているものとする。
【０１６６】
このような状態では、ＨＡグループ内の計算機１８００Ａ〜１８００Ｃに設けられている（システム内の各計算機１８００Ａ〜１８００Ｄの引き継ぎの優先順位等を格納している）ＨＡ状態テーブル１８２０の内容は、図１８（ａ）に示すように全て同一となるように制御される。具体的には、ＨＡグループへの計算機の組み込み時には、その組み込まれる計算機のＨＡ状態テーブル１８２０の内容を、ＨＡグループ内の各計算機のＨＡ状態テーブル１８２０と同一に保つために、その組み込まれる計算機にＨＡグループ内の各計算機からＨＡ状態テーブル１８２０の内容が配布される。これは、計算機の組み込み要求ＨＡイベントに伴う組み込み処理の一部として行われる。
【０１６７】
ここでは、各計算機１８００Ａ〜１８００Ｃ上のＨＡ状態テーブル１８２０の内容から明らかなように、計算機１８００Ｂがアプリケーション１８３０の実行中であり、アプリケーションの引き継ぎの優先度が計算機１８００Ａは優先度１に、計算機１８００Ｃは優先度２に設定されているものとする。このＨＡ状態テーブル１８２０の内容は、ＨＡスクリプトの実行に伴って適宜参照、更新される。
【０１６８】
ここで、図１８（ａ）に示すように、計算機１８００Ａ，１８００Ｃ，１８００Ｄで（アプリケーション１８３０を実行中の）計算機１８００Ｂの障害検出イベント１８４０が発生したものとする。
【０１６９】
すると計算機１８００Ａ，１８００Ｃ，１８００Ｄのうち、ＨＡグループに入っている計算機１８００Ａ，１８００Ｃ内のＨＡスクリプト実行機構１８１０は、図１８（ｂ）に示すように、計算機１８００Ｂの障害検出イベント１８４０に対するＨＡスクリプト１８５０を実行する。
【０１７０】
この例では、アプリケーションの引き継ぎの優先度が、計算機１８００Ａは優先度１に、計算機１８００Ｃは優先度２に設定されていることから、計算機１８００Ｂで実行されていたアプリケーション１８３０は、図１８（ｃ）に示すように計算機１８００Ａに引き継がれ、当該計算機１８００Ａが実行中となるように、計算機１８００Ａ，１８００Ｃ上のＨＡ状態テーブル１８２０の内容が更新される。また、計算機１８００Ｃの優先度は優先度２から優先度１に更新される。また、障害が検出された計算機１８００ＢはＨＡグループから切り離され、計算機１８００Ａ，１８００Ｃ上のＨＡ状態テーブル１８２０における計算機１８００Ｂの状態は、“実行中”から“障害検出”に更新される。
【０１７１】
このように本実施形態においては、障害検出イベント発生時におけるアプリケーションの引き継ぎ先（即ちＨＡイベント発生時の動作内容）をＨＡ状態テーブル１８２０の示すＨＡグループ（内の各計算機）の状態によって決定する（変化させる）ことができる。
【０１７２】
以上はシステム内にＨＡグループが最大１つだけ存在する場合について説明したが、互いに交わらない複数のＨＡグループ（即ち、共通の計算機を構成要素としない複数のＨＡグループ）を設定することも可能である。
【０１７３】
図２１は、図１８のシステムにおいて、計算機１８００Ａと計算機１８００Ｃで１つのＨＡグループ２１０１を構成し、計算機１８００Ｂと計算機１８００Ｄで別のＨＡグループ２１０２を構成している例を示す。
【０１７４】
図２１のようなＨＡグループ構成では、それぞれのＨＡグループ２１０１，２１０２で、独立にＨＡ状態テーブル１８２０の内容を更新することが可能となり、ＨＡイベント発生時の動作内容を、ＨＡグループ毎に異なったＨＡグループの状態によって決定することが可能となる。
【０１７５】
［第６の実施形態］
次に、本発明の第６の実施形態につき図面を参照して説明する。
【０１７６】
図２２は、複合系計算機システムにおいて、ＨＡイベント発生時の処理のエラーリカバリを可能とした形態を説明するための図である。
【０１７７】
図２２において、各計算機２２００Ａ〜２２００Ｄには、前記第４の実施形態で述べた図１１と同様の構成のＨＡスクリプト実行機構２２１０が設けられており、このＨＡスクリプト実行機構２２１０には、ＨＡイベントに対するＨＡスクリプト（例えば、障害検出ＨＡイベント２２４０に対するＨＡスクリプト２２２０）が終了した後、ＨＡグループ内でその終了状態を通知し、必要な他系の終了状態を全て受信したならば、エラーリカバリ用のＨＡスクリプト２２３０を実行する機能が付加されている。ここで、ＨＡスクリプトの終了状態には、ＨＡスクリプトが正常終了したことを示す状態（正常終了）、異常終了したことを示す状態（異常終了）、計算機に障害が発生したことを示す状態（障害検出）、及びその計算機がＨＡグループに入っていないことを示す状態（ＨＡグループ切り離し）の４種がある。
【０１７８】
また、本実施形態で適用されるＨＡシナリオのシステム記述及びサービス記述には、エラーリカバリ処理記述部が用意されている。このエラーリカバリ処理記述部では、ＨＡイベントに対するＨＡスクリプトの上記終了状態（各計算機で正常終了したか、異常終了したか、計算機に障害が発生したか、その計算機がＨＡグループに入っていないか）を取得するためのコマンドが記述できるようになっている。
【０１７９】
次に、図２２のシステムにおける各計算機の基本的な動作について、図２３のフローチャートを参照して説明する。
【０１８０】
図２２のシステムでは、何らかのＨＡイベントが発生すると、各計算機、例えば計算機２２００Ａ〜２２００Ｄ（障害検出ＨＡイベントの場合には、障害が検出された計算機を除く）内のＨＡスクリプト実行機構２２１０で対応するＨＡスクリプトが実行される（ステップＳ６１）。
【０１８１】
ＨＡスクリプト実行機構２２１０は、ＨＡスクリプトを実行すると、自系のＨＡスクリプトの終了状態を他系に通知する（ステップＳ６２）。
【０１８２】
ＨＡスクリプト実行機構２２１０は、ＨＡグループに入っていないか、障害が検出された計算機以外の全てのＨＡスクリプト終了状態の通知を待ち合わせる（ステップＳ６３）。
【０１８３】
ＨＡスクリプト実行機構２２１０は、ＨＡグループに入っていないか、障害が検出された計算機以外の全てのＨＡスクリプトを受信すると、その受信した終了状態（正常終了、異常終了、障害検出、ＨＡグループ切り離し）と計算機の組を引数として、エラーリカバリ用のＨＡスクリプト２２３０を実行する（ステップＳ６４）。このステップＳ６４では、エラーリカバリ用のＨＡスクリプト２２３０に従い、適切なエラー処理が選択され、実行される。なお、発生したＨＡイベントに基づいて実行されたＨＡスクリプトがＨＡグループ内で全て正常終了した場合には、エラーリカバリ用のＨＡスクリプト２２３０自体は実行されるものの、実質的には何も行われない設定となっている。
【０１８４】
次に、エラーリカバリの具体例につき、計算機２２００Ａに障害が発生した場合を例に説明する。
【０１８５】
まず、計算機２２００Ａ〜２２００ＤがＨＡグループに入っているものとする。この状態で、計算機２２００Ａに障害が発生し、その結果、ＨＡグループ内の他の計算機２２００Ｂ〜２２００Ｄで、図２２（ａ）に示すように計算機２２００Ａの障害検出ＨＡイベント２２４０が発生したものとする。
【０１８６】
すると、各計算機２２００Ｂ〜２２００Ｄ内のＨＡスクリプト実行機構２２１０は、図２２（ｂ）に示すように、障害検出ＨＡイベント２２４０に対するＨＡスクリプト２２２０を実行する。
【０１８７】
本実施形態では、計算機２２００Ａで動作していたアプリケーションを計算機２２００Ｂに引き継ぐようにＨＡシナリオが記述されているものとする。この場合、計算機２２００ＢはＨＡスクリプト２２２０の実行により、本来ならば計算機２２００Ａで動作していたアプリケーションを引き継ぐことになる。ところが本実施形態では、計算機２２００ＢでのＨＡスクリプト２２２０の実行が図２２（ｂ）に示すように異常終了し、当該計算機２２００Ｂへの引き継ぎ２２４１に失敗したものとする。
【０１８８】
計算機２２００Ｂへの引き継ぎ２２４１に失敗した場合、当該計算機２２００Ｂから他系に対し、図２２（ｂ）に示すようにＨＡスクリプト（２２２０）の異常終了通知２２４２がなされる。一方、計算機２２００Ｃ，２２００ＤではＨＡスクリプト２２２０の実行が正常終了したものとすると、計算機２２００Ｃ，２２００Ｄから他系に対し、図２２（ｂ）に示すようにＨＡスクリプト（２２２０）の正常終了通知２２４３がなされる。
【０１８９】
各計算機２２００Ｂ〜２２００Ｄ（内のＨＡスクリプト実行機構２２１０）は、障害が検出された計算機２２００Ａ以外の各計算機のＨＡスクリプト終了状態を全て取得すると、その取得した終了状態と計算機の組を引数として、図２２（ｃ）に示すようにエラーリカバリ用のＨＡスクリプト２２３０を実行する。
【０１９０】
ここでＨＡシナリオには、計算機２２００Ｂへの引き継ぎに失敗した場合に、計算機２００Ｃに引き継ぐようにエラーリカバリするように記述されているものとする。このような場合、計算機２２００Ｃ（内のＨＡスクリプト実行機構２２１０）は、エラーリカバリ用のＨＡスクリプト２２３０の実行により、計算機２２００ＢでのＨＡスクリプトが異常終了したことを得て、図２２（ｃ）に示すように、障害が検出された計算機２２００Ａで動作していたアプリケーションの引き継ぎ２２４４を実行する。
【０１９１】
［第７の実施形態］
次に、本発明の第７の実施形態につき図面を参照して説明する。
【０１９２】
図２４は、複合系計算機システムにおいて、ＨＡスクリプトの処理の一部として、疑似的にＨＡイベントを発生させることで、１つのＨＡイベントに起因して複数のＨＡスクリプトを実行可能とした形態を説明するための図である。
【０１９３】
本システムを構成する各計算機には、前記第４の実施形態で述べた図１１と同様の構成のＨＡスクリプト実行機構（図示せず）が設けられており、当該ＨＡスクリプト実行機構には、発生した疑似的なＨＡイベント（疑似ＨＡイベント）を、通常のＨＡイベントに先立って受け付ける機能が付加されている。
【０１９４】
また本システムでは、ＨＡシナリオのシステム記述並びにサービス記述内で使用可能な疑似ＨＡイベント発生記述、（この疑似ＨＡイベント発生記述に対応する）ＨＡスクリプトから使用可能な疑似ＨＡイベント発生コマンドが用意される。
【０１９５】
このようなシステムでは、ＨＡイベントが発生し、そのＨＡイベントに対するＨＡスクリプトが各計算機で実行されると、疑似ＨＡイベント発生コマンドに従って疑似ＨＡイベントが発生される。この結果、ＨＡスクリプトの実行が終了すると、当該ＨＡスクリプトの実行過程で発生した疑似ＨＡイベントに対するＨＡイベントが実行されることになる。
【０１９６】
以下、疑似ＨＡイベントの発生の具体列につき、図２４を参照して説明する。
【０１９７】
まず本実施形態で適用されるＨＡシナリオでは、それぞれのサービス記述毎に、アプリケーションの開始要求を別々のＨＡイベントとして定義し、個別にアプリケーションの開始が指定できるものとする。そこで、全てのアプリケーションの開始要求のＨＡイベントを、それらのＨＡイベントが疑似ＨＡイベントとして発生するように記述する。ここでは、全てのアプリケーション（ＡＰ１，ＡＰ２）の開始要求のＨＡイベント２４００に対するＨＡスクリプト２４０１内に、アプリケーションＡＰ１，ＡＰ２の開始要求の疑似ＨＡイベント２４１１，２４１２を発生するコマンドが用意されているものとする。また、疑似ＨＡイベント２４１１，２４１２に対するＨＡスクリプト２４２１，２４２２が用意されているものとする。
【０１９８】
このため、本システムにおいて、全てのアプリケーションの開始要求のＨＡイベント２４００が発生すると、そのＨＡイベント２４００に対するＨＡスクリプト２４０１が実行されて、当該ＨＡスクリプト２４１０内で、アプリケーションＡＰ１，ＡＰ２の開始要求の疑似ＨＡイベント２４１１，２４１２が発生する。
【０１９９】
そして、全てのアプリケーションの開始要求のＨＡイベント２４００に対するＨＡスクリプト２４０１の実行が終了すると、当該ＨＡスクリプト２４０１内で最初に疑似ＨＡイベント２４１１として発生したアプリケーションＡＰ１の開始要求に対するＨＡスクリプト２４２１が実行される。
【０２００】
次に、このアプリケーションＡＰ１の開始要求に対するＨＡスクリプト２４２１が終了すると、今度は疑似ＨＡイベント２４１２として発生したアプリケーションＡＰ２の開始要求に対するＨＡスクリプト２４２２が実行される。その後、このアプリケーションＡＰ２の開始要求に対するＨＡスクリプト２４２２が終了する。
【０２０１】
以上は、ＨＡスクリプトの処理の一部として、疑似的にＨＡイベントを発生させる例として、アプリケーションの開始要求の疑似ＨＡイベントを発生させる場合について説明したが、これに限るものではなく、例えばアプリケーションの通常引き継ぎ要求（スイッチオーバ）を、アプリケーションの停止要求と、開始要求の各々の疑似ＨＡイベントとして発生させることも可能である。これは、ＨＡシナリオ内で、そのように記述することで実現できる。
【０２０２】
［第８の実施形態］
そこで、アプリケーションの通常引き継ぎ要求（スイッチオーバ）を、アプリケーションの停止要求と、開始要求の各々の疑似ＨＡイベントとして発生させる第８の実施形態につき、図２５を参照して説明する。
【０２０３】
図２５は、計算機２５００Ａから計算機２５００Ｂへのアプリケーションのスイッチオーバの例を示すもので、まず計算機２５００Ａ，２５００Ｂで、それぞれスイッチオーバのＨＡイベント２５１０が発生し、そのＨＡイベント２５１０に対するＨＡスクリプト２５１１が実行されたものとする。このＨＡスクリプト２５１１内では、アプリケーションの計算機２５００Ａでの停止要求の疑似ＨＡイベント２５２１と、アプリケーションの計算機２５００Ｂでの開始要求の疑似ＨＡイベント２５２２とが順に発生される。
【０２０４】
そして、スイッチオーバのＨＡスクリプト２５１１の実行が終了すると、当該ＨＡスクリプト２５１１内で最初に疑似ＨＡイベント２５２１として発生したアプリケーションの計算機２５００Ａでの停止要求に対するＨＡスクリプト２５３１が実行される。
【０２０５】
次に、このアプリケーションの計算機２５００Ａでの停止要求のＨＡスクリプト２５３１が終了すると、今度は疑似ＨＡイベント２５２２として発生したアプリケーションの計算機２５００Ｂでの開始要求に対するＨＡスクリプト２５３２が実行される。その後、このアプリケーションの計算機２５００Ｂでの開始要求に対するＨＡスクリプト２５３２が終了する。
【０２０６】
このように本実施形態においては、スイッチオーバの処理と、開始要求、停止要求の処理とを共通化することで、ＨＡシナリオの作成を容易にすることができる。
【０２０７】
また、スイッチオーバの処理を２つのＨＡイベント（２５２１，２５２２）に対する処理として分けることにより、停止処理が終了してから開始処理が開始されることが保証される。
【０２０８】
以上、ＨＡスクリプトの処理の一部として、疑似ＨＡイベントを発生させる第７及び第８の実施形態につき説明した。このＨＡスクリプトから疑似ＨＡイベントを発生させる技術を前記第６の実施形態に適用し、エラーリカバリ用のＨＡスクリプトからも疑似ＨＡイベントを発生させることで、エラーリカバリに失敗した場合のエラーリカバリを実現することができる。
【０２０９】
［第９の実施形態］
そこで、エラーリカバリ用のＨＡスクリプトからも疑似ＨＡイベントを発生させることで、エラーリカバリに失敗した場合のエラーリカバリを可能とする第９の実施形態につき、図２６及び図２７を参照して説明する。
【０２１０】
本実施形態が、前記第６の実施形態と異なる点は、エラーリカバリ用のＨＡスクリプトから、アプリケーションの引き継ぎ要求（テイクオーバ）が疑似ＨＡイベントとして発生するように構成されていることであり、処理の基本は、前記第６及び第７の実施形態で適用された処理の流れを合わせた形となる。
【０２１１】
図２６及び図２７の例では、（前記第６の実施形態における計算機２２００Ａ〜２２００Ｄに相当する）計算機２６００Ａ〜２６００ＤがＨＡグループに入っており、そのうちの計算機２６００Ａに障害２６０１が発生した結果、ＨＡグループ内の他の計算機２６００Ｂ〜２６００Ｄで、計算機２６００Ａの障害検出ＨＡイベント２６１０が発生した場合を想定している。
【０２１２】
さて、計算機２６００Ｂ〜２６００Ｄで計算機２６００Ａの障害検出ＨＡイベント２６１０が発生すると、図２６に示すように、その障害検出ＨＡイベント２６１０に対するＨＡスクリプト２６１１が、当該計算機２６００Ｂ〜２６００Ｄで実行される。このＨＡスクリプト２６１１では、計算機２６００Ａ（名前がＡの計算機）で動作していたアプリケーションを計算機２６００Ｂ（名前がＢの計算機）に引き継ぐようになっているが、当該計算機２６００ＢでのＨＡスクリプト２６１１の実行が異常終了して、図２６の例のように当該計算機２６００Ｂへの引き継ぎ２６１２が失敗したものとする。
【０２１３】
エラーリカバリ用のＨＡスクリプト２６１３内では、計算機２６００Ｃ（名前がＣの計算機）へのテイクオーバ（障害時引き継ぎ要求）の疑似ＨＡイベント２６１４が発生するものとする。この場合、エラーリカバリ用のＨＡスクリプト２６１３の実行が終了すると、各計算機２６００Ｂ〜２６００Ｄでは、当該ＨＡスクリプト２６１３内で疑似ＨＡイベント２６１４として発生した計算機２６００Ｃへのテイクオーバに対するＨＡスクリプト２６１５が実行される。
【０２１４】
ＨＡスクリプト２６１５では、計算機２６００Ａで動作していたアプリケーションを計算機２６００Ｃに引き継ぐようになっているが、当該計算機２６００ＣでのＨＡスクリプト２６１５の実行が異常終了して、図２６に示すように当該計算機２６００Ｃへの引き継ぎ２６１６が失敗したものとする。
【０２１５】
計算機２６００Ｃへの引き継ぎ２６１６に失敗した場合、当該計算機２６００Ｃから他系に対し、ＨＡスクリプト（２６１５）の異常終了通知がなされる。一方、計算機２６００Ｂ，２６００ＤではＨＡスクリプト２６１５の実行が正常終了したものとすると、計算機２６００Ｂ，２６００Ｄから他系に対し、ＨＡスクリプト（２６１５）の正常終了通知がなされる。
【０２１６】
各計算機２６００Ｂ〜２６００Ｄは、障害が検出された計算機２６００Ａ以外の各計算機のＨＡスクリプト終了状態を全て取得すると、その取得した終了状態と計算機の組を引数として、図２７に示すように、計算機２６００Ｃへのテイクオーバに対するエラーリカバリ用のＨＡスクリプト２６１７を実行する。
【０２１７】
エラーリカバリ用のＨＡスクリプト２６１７内では、計算機２６００Ｄ（名前がＤの計算機）へのテイクオーバの疑似ＨＡイベント２６１８が発生するものとする。この場合、エラーリカバリ用のＨＡスクリプト２６１７の実行が終了すると、各計算機２６００Ｂ〜２６００Ｄでは、当該ＨＡスクリプト２６１７内で疑似ＨＡイベント２６１８として発生した計算機２６００Ｄへのテイクオーバに対するＨＡスクリプト２６１９が実行される。
【０２１８】
ＨＡスクリプト２６１９では、計算機２６００Ａで動作していたアプリケーションを計算機２６００Ｄに引き継ぐようになっており、当該計算機２６００ＤでのＨＡスクリプト２６１９の実行が正常終了した結果、図２７に示すように当該計算機２６００Ｄへの引き継ぎ２６２０が成功したものとする。この場合、各計算機２６００Ｂ〜２６００Ｄでは、計算機２６００Ｄへのテイクオーバに対するエラーリカバリ用のＨＡスクリプト２６２１が実行されるが、計算機２６００Ｄへの引き継ぎ２６２０に成功していることから、実質的には何も行われない。
【０２１９】
以上、ＨＡスクリプト内で疑似的にＨＡイベントを発生させる第７乃至第９の実施形態について説明した。ここでは、疑似ＨＡイベントは、ＨＡイベントの発生に同期して発生することから、１つのＨＡイベントが発生すると、一連のＨＡスクリプトが次々に実行されることになる。したがって、もし疑似ＨＡイベントの無限ループがあると、一連のＨＡスクリプトの実行は永久に停止しないという問題が発生する。
【０２２０】
このような問題は、そもそもＨＡシナリオの書き方に起因して発生するわけであるが、従来のコンパイラ技術（例えば、構文解析など）では、この不具合を検出することはできない。しかも、該当するＨＡイベントが発生するまでは現象が現われないため、運用開始後も障害が発生するまでは発見されない場合が多い。
【０２２１】
［第１０の実施形態］
そこで、（前記第１の実施形態におけるＨＡシナリオコンパイラ１４０に相当する）ＨＡシナリオコンパイラにＨＡイベントの無限ループを検出する機能を持たせた実施形態について図２８を参照して説明する。
【０２２２】
図２８に示すＨＡシナリオコンパイラは、（前記第１の実施形態におけるＨＡシナリオ１１０に相当する）ＨＡシナリオの構文解析を行う構文解析部２８０１、構文解析の結果を受けて内部構造（内部形式の中間コード）に展開する展開部２８０２、ＨＡイベントを非同期に発生するものと、疑似ＨＡイベントとして発生するものとに区別（分類）するＨＡイベント分類部２８０３、疑似ＨＡイベントの呼び出し関係のグラフを作成するＨＡイベント呼び出し関係グラフ作成部２８０４、疑似ＨＡイベントの呼び出し関係のグラフからループの存在を判定するループ判定部２８０５、及びループ判定部２８０５の判定結果をもとにエラーメッセージを出力するエラー出力部２８０６を備えている。なお図２８では、展開された内部構造を最適化して目的のＨＡスクリプト集合をなすコード列を生成する最適化部等は省略されている。
【０２２３】
次に、図２８の構成のＨＡシナリオコンパイラの動作を、図２９のフローチャートを参照して説明する。
【０２２４】
まずＨＡシナリオコンパイラ内の構文解析部２８０１は、ＨＡシナリオを読み込み構文解析を行う（ステップＳ７１）。展開部２８０２は、構文解析部２８０１により構文解析された結果を受けて内部構造に展開する（ステップＳ７２）。これにより、例えば複数のＨＡイベントに共通化された記述が、複数のスクリプトに対応する記述に展開される。
【０２２５】
ＨＡイベント分類部２８０３は、展開部２８０１により展開された内部構造から、ＨＡイベントを、障害やオペレータ入力に起因して非同期に発生するものと、疑似ＨＡイベントとして発生するものとに区別する（ステップＳ７３）。
【０２２６】
ＨＡイベント呼び出し関係グラフ作成部２８０４は、ＨＡイベント分類部２８０３の分類結果をもとに、疑似ＨＡイベント発生記述を探索し、ＨＡイベントの呼び出し関係のグラフを作成する（ステップＳ７４）。
【０２２７】
ループ判定部２８０５は、ＨＡイベントの呼び出し関係のグラフを対象に深さ優先の探索を行うことで、非同期に発生するＨＡイベントを判定し、そこから始まるループ（疑似ＨＡイベントの無限ループ）の存在を判定する（ステップＳ７５）。
【０２２８】
エラー出力部２８０６は、ループ判定部２８０５によりループの存在が判定された場合、エラーメッセージを出力し、ＨＡシナリオコンパイラでの動作を停止する（ステップＳ７６）。
【０２２９】
このように本実施形態においては、ＨＡシナリオの記述内容の意味の確認をＨＡイベントの呼び出し関係について行って、疑似ＨＡイベントの無限ループの存在を検出することで、当該無限ループの存在のために、一連のＨＡスクリプトの実行が永久に停止しないという不具合の発生を防止できる。
【０２３０】
ところで、ＨＡシナリオにおけるデバイス名の書き間違い、オプションの書き間違いなど（ＨＡシナリオの記述内容の誤り）は、これらがＯＳ（オペレーティングシステム）やアプリケーションに依存するため、通常のコンパイラ技術では検出できない。
【０２３１】
［第１１の実施形態］
そこで、ＨＡシナリオにおけるデバイス名の書き間違い、オプションの書き間違いなどを検出可能とした実施形態について、図３０を参照して説明する。
【０２３２】
図３０に示すＨＡシナリオコンパイラは、ＨＡシナリオの構文解析を行う構文解析部３００１、構文解析の結果を受けて内部構造（内部形式の中間コード）に展開する展開部３００２、各計算機の処理での操作を抽出する操作抽出部３００３、各計算機の処理での操作（ＨＡ状態テーブルの操作、ディスク操作、ネットワーク操作、アプリケーション操作など）で使用される引数に期待される値を計算機毎に格納してある基準引数値データベース３００４、抽出された操作で使用される引数の正当性を判定する引数判定部３００５、及び引数判定部３００５の判定結果をもとにエラーメッセージを出力するエラー出力部３００６を備えている。なお図３０では、展開された内部構造を最適化して目的のＨＡスクリプト集合をなすコード列を生成する最適化部等は省略されている。
【０２３３】
次に、図３０の構成のＨＡシナリオコンパイラの動作を、図３１のフローチャートを参照して説明する。
【０２３４】
まずＨＡシナリオコンパイラ内の構文解析部３００１は、ＨＡシナリオを読み込み構文解析を行う（ステップＳ８１）。展開部３００２は、構文解析部３０００１により構文解析された結果を受けて内部構造に展開する（ステップＳ８２）。これにより、例えば複数の計算機に共通化された記述が、複数のスクリプトに対応する記述に展開される。
【０２３５】
操作抽出部３００３は、展開部２８０１により展開された内部構造から、各計算機の処理に関して、該当する操作（ＨＡ状態テーブルの操作、ディスク操作、ネットワーク操作、アプリケーション操作など）を探索し、抽出する（ステップＳ８３）。
【０２３６】
引数判定部３００５は、操作抽出部３００３により抽出された、各計算機の処理に関する各操作について、その引数が正当なものであるか否かを、基準引数値データベース３００４を参照することで判定する（ステップＳ８４）。
【０２３７】
エラー出力部３００６は、引数判定部３００５により、ＨＡ状態テーブルの操作、ディスク操作、ネットワーク操作、アプリケーション操作などで正当でない引数の使用が判定された場合、エラーメッセージを出力し、ＨＡシナリオコンパイラでの動作を停止する（ステップＳ８５）。
【０２３８】
このように本実施形態においては、ＨＡシナリオの記述内容の正しさの確認を、ＨＡ状態テーブルの操作、ディスク操作、ネットワーク操作、アプリケーション操作などで使用される引数について行うことで、ＨＡシナリオにおけるデバイス名の書き間違い、オプションの書き間違いなどの不具合が、実際のシステムを構築しなくても、ＨＡシナリオのコンパイルの段階で検出できる。
【０２３９】
［第１２の実施形態］
次に、ＨＡシナリオの正当性を、ＨＡ状態テーブルを利用して検査するようにした実施形態について、図３２を参照して説明する。
【０２４０】
まず、ＨＡスクリプトが実行時に処理を変化させる要因はＨＡ状態テーブルの内容のみである。そのため、ＨＡシナリオからＨＡ状態テーブルの操作に関係する部分のみを抽出して、当該ＨＡシナリオの制御の戦略の正当性を、ＨＡ状態テーブルの観点から検査することが可能である。
【０２４１】
そこで本実施形態におけるＨＡシナリオコンパイラ内には、図３２に示すように、（図３０中の構文解析部３００１及び展開部３００２に相当する）構文解析部３２０１及び展開部３２０２に加えて、ＨＡ状態テーブルの操作に関係する処理のみを抽出する抽出部（ＨＡ状態テーブル操作関連処理抽出部）３２０３、抽出されたＨＡ状態テーブルの操作が各計算機で同一であるか否かを判定する同一操作判定部３２０４、抽出されたＨＡ状態テーブルの操作が指定された条件（インタロック）を保つか否かを判定するインタロック判定部３２０５、及び判定部３２０４，３２０５の判定結果をもとにエラーメッセージを出力するエラー出力部３２０６が設けられている。ここでインタロックの条件（ＨＡ状態テーブルが満たすべき条件）はＨＡシナリオに記述されており、例えば同時に複数の計算機で同一のアプリケーションが稼働状態にならないとか、優先度が同じ計算機は存在してはならないなどである。
【０２４２】
次に、図３２の構成のＨＡシナリオコンパイラの動作を、図３３及び図３４のフローチャートを参照して説明する。
【０２４３】
まずＨＡシナリオコンパイラ内の構文解析部３２０１は、ＨＡシナリオを読み込み構文解析を行う（ステップＳ９１）。展開部３２０２は、構文解析部３２００１により構文解析された結果を受けて内部構造に展開する（ステップＳ９２）。これにより、例えば複数の計算機に共通化された記述が、複数のスクリプトに対応する記述に展開される。
【０２４４】
ＨＡ状態テーブル操作関連処理抽出部３２０３は、展開部２８０１により展開された内部構造から、各計算機におけるＨＡ状態テーブルの操作に関係する処理を全て抽出する（ステップＳ９３）。
【０２４５】
同一操作判定部３２０４は、抽出されたＨＡ状態テーブル操作（の内容）が各計算機で同一であるか否かを判定する（ステップＳ９４）。
【０２４６】
もし、抽出された操作が各計算機で同一であるならば、インタロック判定部３２０５に制御が渡される。
【０２４７】
インタロック判定部３２０５は、上記抽出されたＨＡ状態テーブル操作が行われたものとした場合に、各計算機でインタロックを保つか否かを判定する（ステップＳ９５）。このインタロック判定部３２０５でのインタロック判定の詳細を図３４のフローチャートに従って説明する。
【０２４８】
まずインタロック判定部３２０５は、ＨＡ状態テーブルのとり得る内容を各計算機について全て求め、その組み合わせのリストを作成する（ステップＳ１０１）。これにより、例えば４台の計算機からなる複合系計算機システムで、各計算機について、実行中、優先度１、優先度２、優先度３、優先度４、切り離し、障害検出の７つの状態がある場合であれば、合計７×７×７×７＝２４０１通りの状態の組み合わせからなるリストが作成される。
【０２４９】
次にインタロック判定部３２０５は、作成した状態の組み合わせのリストの中から、インタロックに符合していない組み合わせ（複数の計算機で優先度が同一の組み合わせなど）を削除する（ステップＳ１０２）。
【０２５０】
次にインタロック判定部３２０５は、上記リスト中の残されている組み合わせの（各計算機での）各状態に対して、（上記ステップＳ９３で）ＨＡ状態テーブル操作関連処理抽出部３２０３により抽出されたＨＡ状態テーブルの操作を施し、その結果を保存する（ステップＳ１０３）。
【０２５１】
そしてインタロック判定部３２０５は、ＨＡ状態テーブルの操作を施した後の各状態の組み合わせが、上記リスト中の残されている全組み合わせの部分となっているか否かを調べ、部分となっている場合だけ、各計算機でのＨＡ状態テーブルの操作がインタロックを保つものと判定する（ステップＳ１０４）。
【０２５２】
さて、インタロック判定部３２０５にて、各計算機でのＨＡ状態テーブルの操作がインタロックを保たないと判定された場合、或いは同一操作判定部３２０４にて、各計算機でのＨＡ状態テーブルの操作が同一でないと判定された場合には、ＨＡシナリオが正当性に欠けているものとして、エラー出力部３２０６からエラーメッセージが出力されて、ＨＡシナリオコンパイラでの動作が停止される（ステップＳ９６）。
【０２５３】
このように本実施形態においては、ＨＡシナリオの記述内容の意味の確認として、全ての計算機で同じＨＡイベントに対しては同じＨＡ状態テーブルの操作をすることの確認を行うことで、ＨＡ状態テーブルがＨＡグループ内の計算機で同一であることを保証することができる。なお、インタロックは制御の分野で従来からよく使用されているが、本実施形態では実行時にこれを適用するのではなく、コンパイル時に適用し、ＨＡシナリオの正当性を高度に保証するようにしたことに特徴がある。
【０２５４】
ところで、共有装置に対する操作がＨＡシナリオに含まれている場合、複数の計算機から行われる操作の整合性を検査することは重要である。しかし、従来のコンパイラ技術では対処できない。
【０２５５】
［第１３の実施形態］
そこで、共有装置に対する操作の不整合性を検出するようにした実施形態について、図３５を参照して説明する。
【０２５６】
本実施形態におけるＨＡシナリオコンパイラ内には、図３５に示すように、（図３０中の構文解析部３００１及び展開部３００２に相当する）構文解析部３５０１及び展開部３５０２に加えて、共有装置の操作記述を抽出する共有装置操作記述抽出部３５０３、抽出された共有装置装置記述の組に対して操作の整合性を判定する共有装置操作整合性判定部３５０４、及び判定部３５０４の判定結果をもとにエラーメッセージを出力するエラー出力部３５０５が設けられている。
【０２５７】
図３５の構成において、共有装置操作記述抽出部３５０３は、構文解析部３５０１、展開部３５０２を通してＨＡシナリオから得られた内部構造を探索して共有装置（例えば共有ディスク）の操作記述を全て抽出する。この共有装置の操作記述は、ＨＡ状態テーブルの内容によって条件付けられて記述されることが多い。したがって、単にその記述があるか否かだけから判断することはできず、異なる計算機の処理に対して、同時に条件が成立するか否かを判定する必要がある。
【０２５８】
そこで共有装置操作整合性判定部３５０４は、ＨＡ状態テーブルの内容が各計算機上で全て同一であることを利用して、異なる計算機間の条件を比較する。特に、ＨＡシナリオ内に前記第１２の実施形態で述べたようなインタロック（ＨＡ状態テーブルが満たすべき条件）が記述されているならば、これも条件の比較に利用する。即ち共有装置操作整合性判定部３５０４は、共有装置操作記述抽出部３５０３により抽出された共有装置操作記述の中から、同時に成立する可能性のある条件が付けられた共有装置操作記述の組、つまり１つのＨＡイベントに対する各計算機における処理で、同時に実行される可能性のある共有装置操作記述の組を全て洗い出し、その組に対して操作の整合性を判定する。
【０２５９】
もし、共有装置操作整合性判定部３５０４で、同一のアドレスを複数の計算機がネットワークに設定すること（ネットワークアドレスの不整合性）や、共有ディスクを複数の計算機が同時に確保するといったことが検出された結果、整合性なし（不整合）が判定された場合には、エラー出力部３５０５からエラーメッセージが出力されて、ＨＡシナリオコンパイラでの動作が停止される。
【０２６０】
このように本実施形態においては、ＨＡシナリオの記述内容の意味の確認を共有装置の操作について行うことで、当該操作の不整合性の発生を防止することができる。
【０２６１】
図３６に共有装置操作記述の例を示す。
【０２６２】
図３６において、"get s=state(event.cpu)"の記述３６０１は、障害が検出された計算機(event.cpu) について、自系のＨＡ状態テーブル内の状態を変数ｓとして取得することを指示するＨＡ状態テーブル参照コマンドである。
【０２６３】
また、"if(s=="実行中")" から始まる記述３６０２は、変数ｓで示されるＨＡ状態テーブルの状態、即ち障害が検出された計算機(event.cpu) のＨＡ状態テーブルの状態が“実行中”である場合に、各計算機(localcpu)が行うべき処理を記述したものである。
【０２６４】
ここで、ＨＡ状態テーブルの内容は全ての計算機で同一であることから、上記"if(s=="実行中")" で示される条件は、全ての計算機について同時に成立しなければならず、これを整合性判定に利用する。
【０２６５】
また、上記記述３６０２は、自系のＨＡ状態テーブル内の状態を変数(var) ｔとすると、そのｔが“優先度１”であるならば、"mktkdisk"という関数を呼び出して、障害が検出された計算機(event.cpu) につながれていた（vg1 で識別される）共有ディスク（共有装置）を自系（“優先度１”の計算機）に強制的（"-f") につなぐという引き継ぎを指示する記述３６０３を含む。
【０２６６】
ここで、“優先度１”の計算機は１つしかないというインタロックがあるので、変数ｔが“優先度１”という条件は、２つ以上の計算機について同時に成立してはならず、これを整合性判定に利用する。
【０２６７】
以上、ＨＡシナリオコンパイラにＨＡシナリオの正当性を保証するための各種判定機能を持たせた第１０乃至第１３の実施形態につき説明したが、これらの実施形態では、変数で記述されたＨＡイベントや引数、代入文、条件文などに対しては解析が不能になる可能性がある。
【０２６８】
［第１４の実施形態］
そこで、変数で記述されたＨＡイベントや引数、代入文、条件文などに対しても、前記第１０乃至第１３の実施形態で適用した判定機構を有効に機能させるための実施形態について、図３７を参照して説明する。
【０２６９】
まず本実施形態では、前記第１０乃至第１３の実施形態におけるＨＡシナリオコンパイラの展開部（２８０２，３００２，３２０２，３５０２）に、図３７に示すように第１変数−定数置換部３７０１、第２変数−定数置換部３７０２及び定数伝播部３７０３を追加している。
【０２７０】
第１変数−定数置換部３７０１は、計算機に関して共通化された記述を内部的に展開した際に、自系を指す特別な変数を定数に置き換えるものである。この第１変数−定数置換部３７０１の処理を、例えば前記第１の実施形態において切り離しＨＡイベントに対する処理を共通化して記述したＨＡシナリオ中のサービス記述１１３（図６参照）に対して適用するならば、"localcpu"という自系を指す特別な変数は全てcpu1〜cpu4のいずれかに置き換え可能であり、更にそれらの変数は全て“Ａ”〜“Ｄ”の実際の計算機の名前（定数）に置き換え可能である。
【０２７１】
第２変数−定数置換部３７０２は、ＨＡイベントに関して共通化された記述を内部的に展開した際に、ＨＡイベントの部分を指す特別な変数を定数に置き換えるものである。この第２変数−定数置換部３７０２の処理を、上記の変数−定数置換部３７０１と同様に、図６に示した切り離しＨＡイベントに対する処理を共通化して記述したＨＡシナリオ中のサービス記述１１３に対して適用するならば、"event.cpu" というＨＡイベントの部分を指す特別な変数は全てcpu1〜cpu4のいずれかに置き換え可能であり、更にそれらの変数は全て“Ａ”〜“Ｄ”の実際の計算機の名前（定数）に置き換え可能である。
【０２７２】
定数伝播部３７０３は、サービス記述及びシステム記述内で、変数に代入された定数を定数伝播するものである。この定数伝播部３７０３の処理を、例えば前記第２の実施形態においてサービス毎の記述を共通化して記述した図８に示したようなＨＡシナリオに対して適用し、内部的に定数伝播を行うならば、各サービス記述８０１〜８０３の部分８０４-1〜８０４-3（図８中の（１），（２），（３）の部分）で参照されるmaster及びslave という変数は全てcpu1〜cpu4のいずれかに置き換え可能であり、更にそれらの変数は全て“Ａ”〜“Ｄ”の実際の計算機の名前（定数）に置き換え可能である。
【０２７３】
以上のように、計算機に関して共通化された記述、及びＨＡイベントに関して共通化された記述を内部的に展開し、変数を定数に置き換え、またサービス記述及びシステム記述内で代入された変数に定数伝播することで、変数を用いた記述に対しても、前記第１０乃至第１３の実施形態で適用したＨＡシナリオ記述の正当性に対する判定機構を有効に機能させることができる。
【０２７４】
なお、定数伝播は従来のコンパイラで適用されていた手法であるが、もっぱら高速化のために最適化の１つとして用いられているものである。これに対し、本実施形態ではＨＡシナリオコンパイラにおけるエラー解析（ＨＡシナリオの正当性の判定）の精度を向上させる目的で用いており、従来の定数伝播手法とは適用の仕方及び効果が異なる。
【０２７５】
この他、ＨＡシナリオコンパイラにおけるエラー解析の精度向上のために、ループ文で書かれた記述を内部的に展開し、ループ変数を定数に置き換えるためのループ変数−定数置換部（図示せず）をＨＡシナリオコンパイラに追加することも可能である。
【０２７６】
ここで、ループ文で書かれた記述の一例を図３８に示す。この記述は、前記第７の実施形態のように、全てのアプリケーションの開始要求を疑似ＨＡイベントとして発生させる場合のＨＡシナリオ記述であり、ｓは全てのサービス（アプリケーション）の各々を表すループ変数であり、"event.cpu" は組み込まれる計算機である。この図３８のような記述は、サービスが追加されたとしても変わらないので便利であるが、このままでは、ＨＡシナリオ記述の正当性を判定することは難しい。
【０２７７】
そこで、上記したループ変数−定数置換部を、例えば前記第１０の実施形態で適用したＨＡシナリオコンパイラ内（の展開部２８０２）に設け、ループ文で書かれた記述を内部的に展開し、ループ変数をそれぞれの定数（ここではサービス名）に置き換えるようにするならば、（ＨＡシナリオのエラー解析精度としての）ＨＡイベントの無限ループの検出精度を向上することができる。
【０２７８】
また、ＨＡシナリオコンパイラに、ＨＡシナリオの記述内容に従って各種障害発生時の動作を試行する動作シミュレーション機構を設け、ＨＡシナリオをコンパイルして得られる各ＨＡスクリプト（イベント処理スクリプト）を配布する前に、当該動作シミュレーション機構が、ＨＡシナリオに記述された内容を解釈して、シミュレーションし、その際に現れた状態（ＨＡ状態テーブルの内容）もしくは処理に矛盾がないかチェックする構成とすることも可能である。
【０２７９】
ここでは、まず初期状態から始めて、非同期に発生する可能性のあるイベント（障害、ユーザオペレーション）を任意に組み合わせて、各ＨＡスクリプトを解釈する。このとき、例えば（ＨＡグループ内の）各計算機でのＨＡ状態テーブルの内容が同一に保たれているか、共有装置を２つ以上の計算機から同時に使用するようになっていないか、同一のサービス（アプリケーション）を２つ以上の計算機で同時に実行していないか、といった矛盾がないかをチェックする。
【０２８０】
以上のシミュレーションは実際のシステムが構築されていなくても、ＨＡシナリオコンパイラ上で実行できる。
【０２８１】
なお、上記した動作シミュレーション機構の他に、前記第１１実施形態で適用したＨＡシナリオの正当性の判定機構（ＨＡシナリオの記述内容の正しさの確認機構）、及び前記第１０、第１２及び第１３実施形態でそれぞれ適用したＨＡシナリオの正当性の判定機構（ＨＡシナリオの記述内容の意味の確認機構）を全てＨＡシナリオコンパイラに持たせることも可能である。
【０２８２】
なお、前記第１の実施形態では、ＨＡシナリオコンパイラでの成果物がＨＡイベント処理用のＨＡスクリプト（の集合）である場合について説明したが、これに限るものではない。
【０２８３】
［第１５の実施形態］
そこで、ＨＡイベント処理用だけでなく、それ以外の目的で用いられる各種スクリプト、更にはスクリプト以外の成果物がＨＡシナリオコンパイラにより生成される実施形態につき、図３９を参照して説明する。
【０２８４】
図３９において、計算機３９００は、プログラム開発環境を提供するものである。この計算機３９００は、前記第１の実施形態における図１中の計算機１００Ａとは異なって、実システムを構成するものではないものとする。
【０２８５】
計算機３９００中のＨＡシナリオコンパイラ３９０１はＨＡシナリオ３９０２を読み込んでコンパイルすることで、対象となる複合系計算機システム（ここでは、３台の計算機３９１０Ａ〜３９１０Ｃから構成される複合系計算機システム）のシステム構成を定義した設定ファイル３９０３、ＨＡイベント処理用のＨＡスクリプト３９０４（の集合）、これら設定ファイル３９０３、ＨＡスクリプト３９０４（の集合）及び次に述べるチェックスクリプト３９０６を、ＨＡシナリオ３９０２に記述された計算機名（サーバ名）で示される（複合系計算機システムを構成する）各計算機（３９１０Ａ〜３９１０Ｃ）に配布するための配布スクリプト（プログラム）３９０５、オンラインでの新シナリオの適用の可否を決定するためのチェックスクリプト３９０６、及びチェックシート３９０７の各成果物を生成する。チェックシート３９０７は、実際にＨＡシナリオコンパイラに記述された通りにシステムが構成されているか否かを、人がチェックするためのチェック項目の一覧であり、計算機３９００からプリント出力（或いは表示出力）される。なお、設定ファイル３９０３及びＨＡスクリプト３９０４は、複合系計算機システムを構成する各計算機別に生成される。
【０２８６】
計算機３９００上のＨＡシナリオコンパイラ３９０１により生成された上記成果物中の設定ファイル３９０３、ＨＡスクリプト３９０４、配布スクリプト３９０５及びチェックスクリプト３９０６は、例えば磁気テープ等の大容量記憶媒体に格納された後、図３９において符号ａで示すように、複合系計算機システム（実システム）を構成する例えば３台の計算機３９１０Ａ〜３９１０Ｃの１つ（ここでは計算機３９１０Ｂ）に移動され、その計算機（３９１０Ｂ）が持つ同種の大容量記憶装置（ここでは磁気テープ装置）に装着される。なお、各計算機３９１０Ａ〜３９１０ＣはＬＡＮ３９２０に接続されていることから、計算機３９００も当該ＬＡＮ３９２０に接続されているならば、上記各成果物をＬＡＮ３９２０を介して計算機３９１０Ｂ（計算機３９１０Ａ〜３９１０Ｃのいずれか）の大容量記憶装置に転送するようにしても構わない。また、計算機３９００が計算機３９１０Ｂ（計算機３９１０Ａ〜３９１０Ｃのいずれか）の場合には、以上の成果物の移動は不要となる。
【０２８７】
計算機３９１０Ｂは、ＨＡシナリオコンパイラ３９０１により生成された上記各成果物のうちの配布スクリプト３９０５を実行し、残りの成果物である設定ファイル３９０３、ＨＡスクリプト３９０４（の集合）及びチェックスクリプト３９０６を、図３９において符号ｂで示すように、（ＨＡシナリオ３９０２に記述されている複合系計算機システムを構成するサーバ名の）各計算機３９１０Ａ〜３９１０Ｃの、一種のバッファとしての登録ディレクトリ３９１１に配送・コピーする。ここで、配布スクリプト３９０５自体も、ＨＡシナリオ３９０２をコンパイルした結果の成果物であることから、他の成果物である設定ファイル３９０３、ＨＡスクリプト３９０４（の集合）及びチェックスクリプト３９０６の配布先が正しく設定でき、誤った配布先に配布されるのを防止できる。なお、各計算機３９１０Ａ〜３９１０Ｃには、当該計算機３９１０Ａ〜３９１０Ｃ用の設定ファイル３９０３及びＨＡスクリプト３９０４（の集合）だけが配送される。また、計算機３９１０Ｂから計算機３９１０Ａ，３９１０Ｃへの成果物配送は、ＬＡＮ３９２０を介して行われる。
【０２８８】
計算機３９１０Ａ〜３９１０Ｃは、自系の登録ディレクトリ３９１１に配送された上記成果物のうち、設定ファイル３９０３及びＨＡスクリプト３９０４を実使用のために自系の実使用ディレクトリ（実行用のディレクトリ）３９１２にコピーする。
【０２８９】
次に計算機３９１０Ａ〜３９１０Ｃは、自系の登録ディレクトリ３９１１にあるチェックスクリプト（３９０６）を実行し、当該登録ディレクトリ３９１１にある設定ファイル（３９０３）及びＨＡスクリプト（３９０４）と、自系の実使用ディレクトリ３９１２にある（登録ディレクトリ３９１１からコピーされた）設定ファイル（３９０３）及びＨＡスクリプト（３９０４）とを、図３９において符号ｃで示すように比較する。
【０２９０】
そして計算機３９１０Ａ〜３９１０Ｃは、自系の（実使用ディレクトリ３９１２内の）設定ファイル（３９０３）が（登録ディレクトリ３９１１内のものとは）異なっているときは、（システムを一旦停止してから）複合系計算機システムを構成するソフトウェアを再起動する必要がある旨のメッセージを出力（例えば表示出力）する。
【０２９１】
また、自系の（実使用ディレクトリ３９１２内の）ＨＡスクリプト（３９０４）が（登録ディレクトリ３９１１内のものとは）異なっているときは、計算機３９１０Ａ〜３９１０ＣはＨＡスクリプト更新イベントを発行して、該当するＨＡスクリプトを更新する必要がある旨のメッセージを出力（例えば表示出力）する。  一方、設定ファイル（３９０３）及びＨＡスクリプト（３９０４）の各々が異なっていないときは、（新ＨＡシナリオ３９０２に対応する）実使用ディレクトリ３９１２内の設定ファイル（３９０３）及びＨＡスクリプト（３９０４）のオンラインでの使用可が判定される。
【０２９２】
【発明の効果】
以上詳述したように本発明によれば、複合系計算機システムの構成及び制御内容を抽象的且つ統合的に記述したプログラム（シナリオ）が適用できることから、従来のように実行可能なスクリプトとして各計算機毎に記述する必要があった複合系計算機システムと異なって、システム構成及び制御内容の定義が容易に記述できる。また、各計算機が実行すべき処理スクリプト（コマンド列）を上記シナリオ（ＨＡシナリオ）から自動的に生成することで、人がそのコマンド列を記述する場合の各計算機間での不整合等の誤りの発生を防止できる。
【０２９３】
また本発明によれば、上記シナリオの記述内容の正誤確認機能を、当該シナリオの記述内容からその記述内容と同等の作用を与える処理スクリプトを生成するシナリオコンパイル手段に持たせることで、当該シナリオの記述誤りを容易に見つけることができる。
【０２９４】
また本発明によれば、上記シナリオの記述内容の意味の確認機能、或いはデバイス故障など起こり得る各種障害時を想定したシミュレーション機能を上記シナリオコンパイル手段に持たせることで、当該シナリオの意味的に不整合性のある箇所を容易に見つけることができ、実行するまで分かり難い制御アルゴリズムの問題点を実行前に認識することができる。
【０２９５】
また、本発明によれば、シナリオコンパイル手段により生成される処理スクリプト等の成果物を、上記シナリオで定義された複合系計算機システムを構成する各計算機に配布するためのプログラム（配布スクリプト）を、当該シナリオコンパイル手段により自動生成する機能を持たせることで、この種のプログラムを人が各計算機毎に記述する場合と異なって記述誤りをなくすことができ、これにより配布操作の誤りと、計算機間の不整合を防止できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係る複合系計算機システムのブロック構成図。
【図２】図１のシステムにおける主要な構成とデータ変換の流れを示す図。
【図３】図１中のＨＡシナリオ１１０の概略構成を示す図。
【図４】図１中のＨＡシナリオコンパイラ１４０により生成される（ＨＡシナリオ１１０の内容と同等の作用を与える）ＨＡスクリプト集合１２０の一例を示す図。
【図５】ＨＡシナリオ１１０の抽象性を説明するための図。
【図６】ＨＡシナリオ１１０の統合性（共通化）を説明するための図。
【図７】本発明の第２の実施形態に係る複合系計算機システムにおける稼働系と待機系の例を示す図。
【図８】図７のシステムにおけるＨＡシナリオ内のサービス記述の共通化を説明するための図。
【図９】本発明の第３の実施形態に係る複合系計算機システムにおける計算機組み込み／切り離しを説明するための状態遷移図。
【図１０】本発明の第４の実施形態に係る複合系計算機システムにおいて、従来方式のアプリケーション引き継ぎを適用した場合の問題を説明するための図。
【図１１】同実施形態で適用されるＨＡスクリプト実行機構のブロック構成図。
【図１２】同実施形態において、ＨＡグループ内の計算機で新ＨＡグループの作成と計算機の組み込み／切り離し以外のＨＡイベントが入力された場合の動作を説明するためのフローチャートの一部を示す図。
【図１３】同実施形態において、ＨＡグループ内の計算機で新ＨＡグループの作成と計算機の組み込み／切り離し以外のＨＡイベントが入力された場合の動作を説明するためのフローチャートの残りを示す図。
【図１４】同実施形態において、ＨＡグループ内の計算機で新ＨＡグループの作成要求のＨＡイベントが入力された場合の動作を説明するためのフローチャート。
【図１５】同実施形態において、ＨＡグループ内の計算機の組み込み要求のＨＡイベントが入力された場合の動作を説明するためのフローチャート。
【図１６】同実施形態において、ＨＡグループ内の計算機の切り離し要求のＨＡイベントが入力された場合の動作を説明するためのフローチャート。
【図１７】同実施形態における確定状態決定を説明するための図。
【図１８】本発明の第５の実施形態に係る複合系計算機システムにおいて、アプリケーションの引き継ぎ先を、動的に変更可能な優先順位に従って決定する形態を説明するための図。
【図１９】同実施形態で適用されるＨＡ状態テーブル更新記述の一例を示す図。
【図２０】同実施形態で適用されるサービス記述の一例を示す図。
【図２１】同実施形態における複数のＨＡグループ設定を説明するための図。
【図２２】本発明の第６の実施形態に係る複合系計算機システムにおいて、ＨＡイベント発生時の処理のエラーリカバリを可能とした形態を説明するための図。
【図２３】同実施形態における各計算機の基本的な動作を説明するためのフローチャート。
【図２４】本発明の第７の実施形態に係る複合系計算機システムにおいて、ＨＡスクリプトの処理の一部として、疑似的にＨＡイベントを発生させることで、１つのＨＡイベントに起因して複数のＨＡスクリプトを実行可能とした形態を説明するための図。
【図２５】本発明の第８の実施形態に係る複合系計算機システムにおいて、アプリケーションの通常引き継ぎ要求（スイッチオーバ）を、アプリケーションの停止要求と、開始要求の各々の疑似ＨＡイベントとして発生させる場合の形態を説明するための図。
【図２６】本発明の第９の実施形態に係る複合系計算機システムにおいて、エラーリカバリ用のＨＡスクリプトからも疑似ＨＡイベントを発生させることで、エラーリカバリに失敗した場合のエラーリカバリを可能とする形態を説明するための状態遷移図の一部を示す図。
【図２７】本発明の第９の実施形態に係る複合系計算機システムにおいて、エラーリカバリ用のＨＡスクリプトからも疑似ＨＡイベントを発生させることで、エラーリカバリに失敗した場合のエラーリカバリを可能とする形態を説明するための状態遷移図の残りを示す図。
【図２８】本発明の第１０の実施形態に係る複合系計算機システムで適用される、ＨＡイベントの無限ループを検出する機能を持つＨＡシナリオコンパイラのブロック構成図。
【図２９】図２８の構成のＨＡシナリオコンパイラの主要な動作を説明するためのフローチャート。
【図３０】本発明の第１１の実施形態に係る複合系計算機システムで適用される、ＨＡシナリオの記述内容の誤りを検出する機能を持つＨＡシナリオコンパイラのブロック構成図。
【図３１】図３０の構成のＨＡシナリオコンパイラの主要な動作を説明するためのフローチャート。
【図３２】本発明の第１２の実施形態に係る複合系計算機システムで適用される、ＨＡシナリオの正当性をＨＡ状態テーブルを利用して検査する機能を持つＨＡシナリオコンパイラのブロック構成図。
【図３３】図３２の構成のＨＡシナリオコンパイラの主要な動作を説明するためのフローチャート。
【図３４】図３３中のステップＳ９５の処理の詳細な手順を示すフローチャート。
【図３５】本発明の第１３の実施形態に係る複合系計算機システムで適用される、共有装置に対する操作の不整合性を検出する機能を持つＨＡシナリオコンパイラのブロック構成図。
【図３６】同実施形態における共有装置操作記述の一例を示す図。
【図３７】本発明の第１４の実施形態に係る複合系計算機システムで適用される、ＨＡシナリオコンパイラ内の展開部に追加された複数の要素を示す図。
【図３８】ループ文で書かれた記述の一例を示す図。
【図３９】本発明の第１５の実施形態に係る複合系計算機システムのブロック構成図。
【符号の説明】
１００Ａ，１００Ｂ，７００Ａ〜７００Ｄ，９００Ａ〜９００Ｃ，１０００Ａ〜１０００Ｄ，１８００Ａ〜１８００Ｄ，２２００Ａ〜２２００Ｄ，２５００Ａ，２５００Ｂ，２６００Ａ〜２６００Ｄ，３９００，３９１０Ａ〜３９１０Ｃ…計算機、
１０１，３９２０…ＬＡＮ、
１１０，３９０２…ＨＡシナリオ、
１２０，１３０Ａ，１３０Ｂ…ＨＡスクリプト集合（処理スクリプト集合）、
１４０，３９０１…ＨＡシナリオコンパイラ、
１５０…ＨＡスクリプト配布機構、
１６０Ａ，１６０Ｂ，９６０〜９６０Ｃ，１８１０，２２１０…ＨＡスクリプト実行機構、
９０２，２００１，２００２…ＨＡグループ、
１８２０…ＨＡ状態テーブル（状態記憶手段）、
２８０１，３００１，３２０１，３５０１…構文解析部、
２８０２，３００２，３２０２，３５０２…展開部、
２８０５…ループ判定部（無限ループ検出手段、意味確認手段）、
３００５…引数判定部（記述値不適合検出手段、正誤検出手段）、
３２０４…同一操作判定部（状態記憶手段内容不一致検出手段、意味確認手段）、
３２０５…インタロック判定部（インタロック検出手段、意味確認手段）、
３５０４…共有装置操作整合性判定部（共有装置操作不整合性検出手段、意味確認手段）、
３７０１…第１変数−定数置換部、
３７０２…第２変数−定数置換部、
３７０３…定数伝播部、
３９０３…設定ファイル、
３９０４…ＨＡスクリプト（処理スクリプト）、
３９０５…配布スクリプト、
３９０６…チェックスクリプト、
３９０７…チェックシート、
３９１１…登録ディレクトリ、
３９１２…実使用ディレクトリ。
【図１】
0003788832.tif 000002
【図２】
0003788832.tif 000003
【図３】
0003788832.tif 000004
【図４】
0003788832.tif 000005
【図５】
0003788832.tif 000006
【図６】
0003788832.tif 000007
【図７】
0003788832.tif 000008
【図８】
0003788832.tif 000009
【図９】
0003788832.tif 000010
【図１０】
0003788832.tif 000011
【図１１】
0003788832.tif 000012
【図１２】
0003788832.tif 000013
【図１３】
0003788832.tif 000014
【図１４】
0003788832.tif 000015
【図１５】
0003788832.tif 000016
【図１６】
0003788832.tif 000017
【図１７】
0003788832.tif 000018
【図１８】
0003788832.tif 000019
【図１９】
0003788832.tif 000020
【図２０】
0003788832.tif 000021
【図２１】
0003788832.tif 000022
【図２２】
0003788832.tif 000023
【図２３】
0003788832.tif 000024
【図２４】
0003788832.tif 000025
【図２５】
0003788832.tif 000026
【図２６】
0003788832.tif 000027
【図２７】
0003788832.tif 000028
【図２８】
0003788832.tif 000029
【図２９】
0003788832.tif 000030
【図３０】
0003788832.tif 000031
【図３１】
0003788832.tif 000032
【図３２】
0003788832.tif 000033
【図３３】
0003788832.tif 000034
【図３４】
0003788832.tif 000035
【図３５】
0003788832.tif 000036
【図３６】
0003788832.tif 000037
【図３７】
0003788832.tif 000038
【図３８】
0003788832.tif 000039
【図３９】
0003788832.tif 000040