(57)【特許請求の範囲】
【請求項１】
プライマリコンピュータで実行されているプロセスのチェックポイント情報を適宜バックアップコンピュータに転送することにより、プライマリコンピュータの障害発生時には、このチェックポイント情報をもとにしてプロセスをバックアップコンピュータで復元することが可能な高信頼計算機システムにおける前記プライマリコンピュータで適用されるスタック保存方法であって、
最初のチェックポイント採取時にスタック領域上のスタック情報全体を保存するステップと、
２回目以降のチェックポイント採取時毎に、前記スタック領域上の前回のチェックポイント採取時以降に更新されたページを差分情報として保存するステップと、
前記スタック情報全体または前記更新ページを保存した際、前記スタック領域上のカレントスタックが存在するページを更新ページとして記録すると共に、前記スタック領域上の残りのページにライトプロテクトをかけるステップと、
前記スタック領域上の前記ライトプロテクトがかかっているページへの書き込みが発生した場合に、ライトエクセプション処理により当該ページを更新ページとして記録すると共に当該ページのライトプロテクトを外すステップと
を具備することを特徴とするスタック保存方法。
【請求項２】
前記カレントスタックが切り替わった場合に、切り替え後の新たなカレントスタックが存在するページのうち、ライトプロテクトがかかっているページのライトプロテクトを外すと共に、当該ページを更新ページとして記録するためのカレントスタック管理ルーチンを実行するステップを更に具備することを特徴とする請求項１記載のスタック保存方法。
【請求項３】
前記スタック情報全体または前記更新ページを保存した際、前記スタック領域上の各スタックフレームに設定されている、カレントスタックが切り替わったときに実行されるインストラクションアドレスを指す各第１のインストラクションポインタを前記カレントスタック管理ルーチンの実行アドレスを指す第２のインストラクションポインタに変更して、元の前記各第１のインストラクションポインタを保存するステップと、
前記カレントスタックが切り替わった直後に、切り替え前のカレントスタック上の前記第２のインストラクションポインタの指すアドレスにジャンプするステップと
前記カレントスタック管理ルーチンの実行終了時に、前記切り替え前のカレントスタック上の前記保存されているインストラクションポインタの指すアドレスにジャンプするステップと
を更に具備することを特徴とする請求項２記載のスタック保存方法。
【請求項４】
２回目以降のチェックポイント採取時毎に、今回のチェックポイント採取時のスタックサイズと前回のチェックポイント採取時のスタックサイズとを比較するステップとを更に具備し、
前記更新されたページを保存するステップでは、今回のチェックポイント採取時のスタックサイズの方が小さい場合には、記録されている更新ページのうち、今回のチェックポイント採取時のスタック領域に含まれているページのみを保存対象更新ページとして保存し、今回のチェックポイント採取時のスタックサイズの方が大きい場合には、記録されている更新ページと、前回のチェックポイント採取時から増加したページとを保存対象更新ページとして保存する
ことを特徴とする請求項２記載のスタック保存方法。
【請求項５】
プライマリコンピュータで実行されているプロセスのチェックポイント情報を適宜バックアップコンピュータに転送することにより、プライマリコンピュータの障害発生時には、このチェックポイント情報をもとにしてプロセスをバックアップコンピュータで復元することが可能な高信頼計算機システムにおける前記プライマリコンピュータで実行されるスタック保存プログラムであって、
前記プライマリコンピュータに、
最初のチェックポイント採取時にスタック領域上のスタック情報全体を保存するステップと、
２回目以降のチェックポイント採取時毎に、スタック領域上の前回のチェックポイント採取時以降に更新されたページを差分情報として保存するステップと、
前記スタック情報全体または前記更新ページを保存した際、前記スタック領域上のカレントスタックが存在するページを更新ページとして記録すると共に、前記スタック領域上の残りのページにライトプロテクトをかけるステップと、
前記スタック領域上の前記ライトプロテクトがかかっているページへの書き込みが発生した場合に、ライトエクセプション処理により当該ページを更新ページとして記録すると共に当該ページのライトプロテクトを外すステップと
を実行させるためのスタック保存プログラム。
【請求項６】
プライマリコンピュータで実行されているプロセスのチェックポイント情報を適宜バックアップコンピュータに転送することにより、プライマリコンピュータの障害発生時には、このチェックポイント情報をもとにしてプロセスをバックアップコンピュータで復元することが可能な高信頼計算機システムにおいて、
前記プライマリコンピュータは、
スタック領域上のスタック情報をページ単位で管理するスタック情報管理手段であって、最初のチェックポイント採取時には前記スタック領域上のスタック情報全体を保存し、２回目以降のチェックポイント採取時には、前記スタック領域上の前回のチェックポイント採取時以降に更新されたページを差分情報として保存するスタック情報管理手段と、
前回のチェックポイント採取時から更新されたページを記録する更新ページ管理手段であって、前記スタック情報管理手段により前記スタック情報全体または前記更新ページが保存された際に、前記スタック領域上のカレントスタックが存在するページを更新ページとして記録すると共に、前記スタック領域上の残りのページにライトプロテクトをかける更新ページ管理手段と、
前記スタック領域上の前記ライトプロテクトがかかっているページへの書き込みが発生した場合に起動されて、前記更新ページ管理手段により当該ページを更新ページとして記録すると共に当該ページのライトプロテクトを外すエクセプションハンドラと
を具備することを特徴とする高信頼計算機システム。
【請求項７】
前記プライマリコンピュータは、
前記カレントスタックが切り替わった場合に起動されて、前記更新ページ管理手段により、切り替え後の新たなカレントスタックが存在するページのうち、ライトプロテクトがかかっているページのライトプロテクトを外すと共に、当該ページを更新ページとして記録するカレントスタック管理手段と、
前記スタック情報管理手段により前記スタック情報全体または前記更新ページが保存された際に、前記スタック領域上の各スタックフレームに設定されている、カレントスタックが切り替わったときに実行されるインストラクションアドレスを指す各第１のインストラクションポインタを前記カレントスタック管理手段を起動するための実行アドレスを指す第２のインストラクションポインタに変更するインストラクションポインタ変更手段と、
前記インストラクションポインタ変更手段による変更前の元の前記各第１のインストラクションポインタを対応するスタックフレームと対応付けて保存して、カレントスタックが切り替わった際に切り替え前のカレントスタック上の前記第２のインストラクションポインタの指定により起動された前記カレントスタック管理手段の実行終了時に、当該カレントスタック上の前記保存されているインストラクションポインタの指すアドレスにジャンプさせるインストラクションポインタ管理手段と
を更に具備することを特徴とする請求項６記載の高信頼計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プライマリコンピュータとバックアップコンピュータの２台のコンピュータで構成され、プライマリコンピュータで実行されるプロセスのチェックポイント情報を適宜バックアップコンピュータに転送することにより、プライマリコンピュータの障害発生時には、このチェックポイント情報をもとにプライマリコンピュータで実行されていたプロセスの処理をバックアップコンピュータに引き継ぐことを可能とした高信頼計算機システムに係り、特にスタック情報が効率的に保存可能なスタック保存方法及び、スタック保存プログラム及び高信頼計算機システムに関する。
【０００２】
【従来の技術】
従来から、プライマリコンピュータとバックアップコンピュータの２台のコンピュータで構成され、プライマリコンピュータで実行されるプロセスのチェックポイント情報を適宜バックアップコンピュータに転送する高信頼計算機システムが知られている。この種のシステムでは、プライマリコンピュータの障害発生時には、当該プライマリコンピュータからバックアップコンピュータに転送されていたチェックポイント情報をもとにして、プロセスをバックアップコンピュータで復元することにより、プライマリコンピュータで実行されていたプロセスの処理を即座にバックアップコンピュータに引き継ぐことを可能としている。
【０００３】
さて、米国特許“Checkpointing Computer System Having Duplicated Files for Executing Process and Method for Managing the Duplicated Files for Restoring the Process”（ＵＳＰ５９０７６７３）や、論文「分散チェックポイント方式との組合せによりフォールトトレラントシステムを実現する分散レプリケーション方式」（電子情報通信学会論文誌 D-1 Vol.J82-D-1 No3 pp.496-507 1999年3月）で記述されているような高信頼計算機システムにおいてプロセスのチェックポイント情報を採取する場合、メモリ及びデータセクション情報は、一般にそのサイズが大きくなるため、領域全体を保存すると性能劣化を引き起こすことになる。そこで、この種の高信頼計算機システムでは、前回のチェックポイント採取時から更新されたページのみを新しいチェックポイント情報として保存する差分保存方式を採用するのが一般的である。
【０００４】
差分保存方式とは、最初のチェックポイント採取時のみ保存対象領域全体を保存し、以降のチェックポイントでは、前回のチェックポイント採取時からの更新ページのみを保存する方法である。この方法は、領域全体を保存する方法に比べて、一般にはるかに保存する情報を少なくすることができる。
【０００５】
差分保存方式を実現するためには、保存対象領域全体にライトプロテクトをかけ、書き込みによりエクセプション（ｅｘｃｅｐｔｉｏｎ：例外処理）を発生したページ情報を記録しておく必要がある。
【０００６】
差分保存されたチェックポイント情報から領域全体の情報を復元するためには、最初のチェックポイントで保存した全体情報に対して、以降のチェックポイントで保存した差分情報をマージしていけばよい。
【０００７】
スタック（スタック情報）の保存に際しても、チェックポイント採取時の性能劣化を防ぐためには、差分保存することが望ましい。しかしスタックに対して差分保存方式を適用するためにスタック全体にライトプロテクトをかけた場合、エクセプション発生時にエクセプションハンドラに跳ぶための準備として、カレントスタックにアクセス（書き込みアクセス）するときに更にエクセプションが発生してしまう。つまり、ダブルフォールトとなってしまう。この場合、正常なエクセプション処理を行えなくなってしまう。
【０００８】
このため従来は、スタックに対してはメモリやデータセクションと同じような差分保存方式を適用することができず、スタック全体を保存せざるを得なかった。
【０００９】
【発明が解決しようとする課題】
上記したように、プライマリコンピュータで実行されるプロセスのチェックポイント情報を差分保存方式により採取して適宜バックアップコンピュータに転送する従来の高信頼計算機システムでは、スタックの保存についてはメモリやデータセクションと同じような差分保存方式を適用することができないことから、スタック全体を保存するのが一般的であった。
【００１０】
通常、スタックサイズは余り大きくならないため、差分保存方式を適用せずにスタック全体の保存を行っても性能に対する影響は少ないとされていた。
【００１１】
ところが、プログラマが、例えば“ａｌｌｏｃａ（  ）”等のＡＰＩ（Application Program Interface）を使用してスタック領域上に大きなメモリ領域を割り当てた場合、スタックサイズは割り当てられたメモリサイズに依存して大きくなるため、チェックポイント採取毎にスタック領域全体を保存していては大きな性能劣化につながることになる。なお、“ａｌｌｏｃａ（  ）”で表されるフォーマットの関数の例として、“ｖｏｉｄ  *ａｌｌｏｃａ（ｓｉｚｅ  ｔ  ｓｉｚｅ）”のように表現される関数がある。この関数は、ｓｉｚｅで示されるサイズのメモリ領域を、呼び出した関数のスタックフレーム上に割り当て、そのアドレスを返すというものである。ここで割り当てられたメモリ領域は、呼び出した関数が終了するときに自動的に解放される。
【００１２】
このように従来は、スタックの保存について差分保存方式を適用せずにスタック領域全体を保存していたため、スタック領域上に大きなメモリ領域を割り当てた場合には、大きな性能劣化を招くという問題があった。
【００１３】
本発明は上記事情を考慮してなされたものでその目的は、スタック保存に際し、前回のチェックポイント採取時からの差分情報のみを保存することを可能にすることにより、スタックサイズが大きくなった場合におけるチェックポイント処理の性能劣化を防ぐことができるスタック保存方法及び、スタック保存プログラム及び高信頼計算機システムを提供することにある。
【００１４】
【課題を解決するための手段】
本発明は、プライマリコンピュータで実行されているプロセスのチェックポイント情報を適宜バックアップコンピュータに転送することにより、プライマリコンピュータの障害発生時には、このチェックポイント情報をもとにしてプロセスをバックアップコンピュータで復元することが可能な高信頼計算機システムにおけるプライマリコンピュータで適用されるスタック保存方法であって、最初のチェックポイント採取時にスタック領域上のスタック情報全体を保存するステップと、２回目以降のチェックポイント採取時毎に、スタック領域上の前回のチェックポイント採取時以降に更新されたページを差分情報として保存するステップと、スタック情報全体または更新ページを保存した際、スタック領域上のカレントスタックが存在するページを更新ページとして記録すると共に、スタック領域上の残りのページにライトプロテクトをかけるステップと、スタック領域上のライトプロテクトがかかっているページへの書き込みが発生した場合に、ライトエクセプション処理により当該ページを更新ページとして記録すると共に当該ページのライトプロテクトを外すステップとを備えたことを特徴とする。
【００１５】
このような構成においては、カレントスタックには常にライトプロテクトがかかっていない状態を保持しつつ、その他のスタックフレームにはライトプロテクトがかけられる。このため、エクセプション発生時にカレントスタックにアクセス（書き込みアクセス）するときに更にエクセプションが発生するというダブルフォールトの恐れはない。また、ライトプロテクトがかかったページへの書き込みが発生した場合には、（エクセプションハンドラの）ライトエクセプション処理により当該ページが更新ページとして記録され、しかもライトエクセプション処理が発生しないカレントスタックが存在するページは、残りのページにライトプロテクトをかける際に、無条件で更新ページとして記録されるため、前回のチェックポイントから更新されたページを識別でき、これによりチェックポイント採取時には、スタック情報に関して、当該前回のチェックポイントから更新されたページ（記録されている更新ページ）のみを保存する差分保存が可能となる。
【００１６】
ここで、カレントスタックが切り替わった場合には、切り替え後の新たなカレントスタックが存在するページのうち、ライトプロテクトがかかっているページのライトプロテクトを外すと共に、当該ページを更新ページとして記録するためのカレントスタック管理ルーチンを実行するとよい。
【００１７】
このようにすると、カレントスタックが切り替わってもダブルフォールトの発生を防止でき、前回のチェックポイントから更新されたページのみを保存する差分保存を可能とする。
【００１８】
また、スタック情報全体または更新ページを保存した際には、スタック領域上の各スタックフレームに設定されている、カレントスタックが切り替わったときに実行されるインストラクションアドレスを指す各第１のインストラクションポインタ（ＩＰｉ）をカレントスタック管理ルーチンの実行アドレスを指す第２のインストラクションポインタ（ＩＰｘ）に変更して、元の各第１のインストラクションポインタを保存するとよい。また、カレントスタックが切り替わった直後には、切り替え前のカレントスタック上のＩＰｘの指すアドレスにジャンプし、カレントスタック管理ルーチンの実行終了時には、切り替え前のカレントスタック上の上記保存されているＩＰｉの指すアドレスにジャンプするとよい。
【００１９】
このような構成においては、カレントスタックが切り替わった直後には、変更されたＰｘの指定するカレントスタック管理ルーチンが実行されて、当該ルーチンの実行後に本来のＩＰｉの指すルーチンが実行される。
【００２０】
また本発明は、２回目以降のチェックポイント採取時毎に、今回のチェックポイント採取時のスタックサイズと前回のチェックポイント採取時のスタックサイズとを比較し、今回のチェックポイント採取時のスタックサイズの方が小さい場合には、記録されている更新ページのうち、今回のチェックポイント採取時のスタック領域に含まれているページのみを保存し、今回のチェックポイント採取時のスタックサイズの方が大きい場合には、記録されている更新ページと、前回のチェックポイント採取時から増加したページとを保存するようにしたことを特徴とする。
このような構成においては、不要なページの保存が発生するのを防止できる。
【００２１】
以上のスタック保存方法に係る本発明は、当該方法を適用する高信頼計算機システムにおけるプライマリコンピュータで実行されるプログラム（スタック保存プログラム）に係る発明としても成立し、また高信頼計算機システムに係る発明としても成立する。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
【００２３】
図１は本発明の一実施形態に係る高信頼計算機システムの構成を示すブロック図である。
図１のシステムは、相互接続されたプライマリコンピュータ１０とバックアップコンピュータ２０との２台のコンピュータで構成される。コンピュータ１０，２０は、それぞれ外部記憶装置１８，２８を備えている。プライマリコンピュータ１０は稼動側コンピュータであり、バックアップコンピュータ２０は待機側コンピュータである。
【００２４】
図１のシステムにおいて、プライマリコンピュータ１０は、当該コンピュータ１０で実行されるプロセスのチェックポイント情報を矢印３０で示すように適宜バックアップコンピュータ２０に転送する。バックアップコンピュータ２０は、プライマリコンピュータ１０の障害発生時には、プライマリコンピュータ１０からバックアップコンピュータ２０に転送されていたチェックポイント情報をもとにして、プロセスを復元することにより、プライマリコンピュータ１０で実行されていたプロセスの処理を即座に引き継ぐ。
【００２５】
本実施形態の特徴は、プライマリコンピュータ１０でのチェックポイント採取に、メモリ及びデータセクション情報は勿論、スタック（スタック情報）についても、差分保存方式を適用している点である。
【００２６】
そこでプライマリコンピュータ１０は、スタック（スタック情報）を差分保存方式で保存可能なように、スタック情報管理部１１、更新ページ管理部１２、エクセプションハンドラ１３、カレントスタック管理部１４、ＩＰ変更部１５、ＩＰ管理部１６及びスタックサイズ記録部１７の各機能ブロックを有している。これらの機能ブロックは、プライマリコンピュータ１０（のＣＰＵ）がスタック情報を差分保存方式で保存可能とする所定のプログラム（スタック保存プログラム）を実行することにより実現される。
【００２７】
スタック情報管理部１１は、各チェックポイントでスタック情報を保存すると共に、保存したスタック情報をページ単位で管理する。つまりスタック情報管理部１１は、各チェックポイントで保存したスタックのページ情報を管理する。
【００２８】
更新ページ管理部１２は、現在利用されているスタック、つまりカレントスタックが存在するページ以外のスタック領域にライトプロテクトをかけ、前回のチェックポイント採取時から更新されたページを記録する。
【００２９】
エクセプションハンドラ１３は、スタックへの書き込みによるページ更新に起因して発生するライトエクセプション（書き込み例外処理）を実行する。
カレントスタック管理部１４は、カレントスタックが切り替わった（移動した）ときに、新たなカレントスタックが存在するぺージの属性を調べ、ライトプロテクトがかかっている場合はそれを外す。
【００３０】
ＩＰ変更部１５は、カレントスタックが切り替わったときに実行されるインストラクションアドレス（命令アドレス）を示している各スタックフレーム上のインストラクションポインタ（ＩＰ）を書き換えて、カレントスタック管理部１４の実行アドレス（の指す特定ルーチン）にジャンプさせる。
【００３１】
ＩＰ管理部１６は、ＩＰ変更部１５によって書き換えられた（変更された）ＩＰとそのＩＰに対応するスタックフレームの対応関係を管理し、カレントスタック管理部１４の実行直後に、ＩＰ変更部１５によって書き換えられたＩＰを元の値に戻す。
スタックサイズ記録部１７は、チェックポイント採取時のスタックサイズを記録する。
【００３２】
次に、図１のシステム内のプライマリコンピュータ１０でのチェックポイント採取時におけるスタック保存について、図２乃至図４の動作説明図、並びに図５乃至図８のフローチャートを参照して説明する。なお、以下の説明では、ＣＰ（ｉ）はｉ番目（ｉ＝１，２，３…）のチェックポイントを表しているものとする。
【００３３】
（１）最初のチェックポイントであるＣＰ（１）では、スタック情報管理部１１は、図２（ａ）において矢印２０２で示すようにスタック領域２０１全体を保存する（ステップＳ１）。なお、この時点では、スタック領域２０１には、スタックフレーム＃１，＃２，＃３，＃４…が積まれており、スタックフレーム＃１がカレントスタックになっているものとする。ここで、スタックフレーム＃１，＃２，＃３，＃４…の境界は必ずしもページ境界に一致しない。また、各スタックフレーム＃１，＃２，＃３，＃４…には、それぞれ、そのスタックフレームに対応する関数を実行し終った直後に実行されるコードのインストラクションポインタ（第１のインストラクションポインタ）ＩＰ１，ＩＰ２，ＩＰ３，ＩＰ４…が格納されている。
【００３４】
（２）ＣＰ（１）でスタック領域２０１全体を保存すると、ＩＰ変更部１５によって、各スタックフレーム＃１，＃２，＃３，＃４…上のＩＰ１，ＩＰ２，ＩＰ３，ＩＰ４…を、図２（ｂ）において矢印２０３で示すように、カレントスタック管理部１４の実行アドレスを指す特定インストラクションポインタ（第２のインストラクションポインタ）ＩＰｘに書き換える（変更する）（ステップＳ２）。このとき、変更前のＩＰ１，ＩＰ２，ＩＰ３，ＩＰ４…を、図２（ｂ）において矢印２０４で示すようにＩＰ管理部１６に保存する。
【００３５】
また、カレントスタックが存在するページ（ここではページ＃１）を更新ページとして、図２（ｂ）において矢印２０５で示すように更新ページ管理部１２に記録（登録）する（ステップＳ３）。そしてスタック領域２０１のうち、カレントスタックが存在するページ（＃１）以外のページ領域（ここでは、ページ＃２，＃３，＃４…の領域）には、更新ページ管理部１２により、図２（ｂ）において矢印２０６で示すようにライトプロテクト（ハッチングが施されている部分）をかける（ステップＳ４）。また更新ページ管理部１２により、ライトエクセプションをハンドルするためのエクセプションハンドラ１３を、図２（ｂ）において矢印２０７で示すように設定する（ステップＳ５）。このときのスタック全体のサイズを、図２（ｂ）において矢印２０８で示すようにスタックサイズ記録部１７に記録する。
【００３６】
（３）ここで、スタック領域２０１上でライトプロテクトがかけられている領域内のぺージ＃Ｐ、例えばページ＃４への書き込み要求が、図３（ａ）において矢印３０１で示すように発生したものとする（ステップＳ１１）。この場合、ライトエクセプションが発生して、図３（ａ）において矢印３０２で示すようにエクセプションハンドラ１３が起動される（ステップＳ１２）。すると、エクセプションハンドラ１３により、図３（ａ）において矢印３０３で示すように更新ページ管理部１２が起動される。更新ページ管理部１２は、書き込み要求が発生したページ＃４の情報を更新ページの情報として図３（ａ）において矢印３０４で示すように登録し、当該ページ＃４のライトプロテクトを図３（ａ）において矢印３０５で示すように外す（ステップＳ１３）。
【００３７】
（４）次に、実行中の関数が終了して、図３（ｂ）において矢印３０６で示すようにカレントスタックがスタックフレーム＃１から直前のスタックフレーム＃２に切り替わった（移動した）ものとする（ステップＳ２１）。この場合、カレントスタック切り替え直後に、元のカレントスタック（スタックフレーム＃１）上のＩＰｘの指すアドレス、即ちカレントスタック管理部１４の実行アドレスに、図３（ｂ）において矢印２０７で示すようにジャンプする（ステップＳ２２）。
【００３８】
するとカレントスタック管理部１４では、新しいカレントスタックが存在するスタック領域２０１上のページ、即ち新しいカレントスタックになるスタックフレーム＃２が存在する３つのページ＃１，＃２，＃３の属性を調べて、図３（ｂ）において矢印３０８で示すように更新ページ管理部１２に通知し、ライトプロテクトのかかっているページ＃２，＃３を更新ページとして図３（ｂ）において矢印３０９で示すように当該更新ページ管理部１２に記録する（ステップＳ２３）。このステップＳ２３ではまた、更新ページ管理部１２に記録したスタック領域２０１上のページ＃２，＃３のライトプロテクトを、図３（ｂ）において矢印３１０で示すように外す。その後、カレントスタック管理部１４は、図３（ｂ）において矢印３１１で示すようにＩＰ管理部１６に保存された元のカレントスタック＃１上の本来のＩＰ（ＩＰ１）を参照し、図３（ｂ）において矢印３１２で示すように当該ＩＰ（ＩＰ１）の指すアドレスにジャンプする（ステップＳ２４）。
【００３９】
（５）次のＣＰ（２）では基本的に、更新ページ管理部１２に登録（記録）されているページを直前のＣＰ（１）からの差分情報として、スタック情報管理部１１により保存する。但し、そのときのスタックサイズが、ＣＰ（１）でスタックサイズ記録部１７に記録したスタックサイズよりも大きいか否かで、以下に述べるように保存対象が異なる。
【００４０】
まず、上記（４）の直後にＣＰ（２）が採取された場合、スタックサイズは図４（ａ）に示すように、図２に示したＣＰ（１）のスタックサイズ以下になる（ステップＳ３１）。ここでは、図４（ａ）に示す領域４０１に対応するスタックフレーム＃１、つまり元のカレントスタックのサイズ分が、前回のＣＰ（１）からの減少分となる。このときは、更新ページ管理部１２に記録されている更新ページ（ページ＃１，＃４，＃２，＃３）のうち、今回のＣＰ（２）のスタック領域に含まれるぺージ、即ちページ＃２，＃３，＃４のみを、図４（ａ）において符号４０２で示すようにチェックポイント情報として保存する（ステップＳ３２）。つまり、ＣＰ（２）のスタック領域から外れるページ＃１は、図４（ａ）において矢印４０３で示すように保存対象外となる。
【００４１】
一方、上記（４）以降、幾つかの関数コールが実行されて、例えば図４（ｂ）に示すように、スタックフレーム＃２の上に新たにスタックフレーム＃５，＃６が積まれた後にＣＰ（２）が採取された場合、スタックサイズは図２に示したＣＰ（１）よりも大きくなる（ステップＳ３１）。ここでは、図４（ｂ）に示す領域４０４に対応するスタックフレーム＃６、つまり新たなカレントスタックのサイズ分が、前回のＣＰ（１）からの増加分となる。また、領域４０５に対応するスタックフレーム＃５及び＃６が、上記（４）以降、つまり図３（ｂ）の状態以降にスタック領域に積まれた分となる。このときは、更新ページ管理部１２に記録されているページ＃１，＃２，＃３，＃４、及びＣＰ（１）から増加したページ＃６を、図４（ｂ）において矢印４０６で示すようにチェックポイント情報として保存する（ステップＳ３３）。
【００４２】
（６）この後、上記ステップＳ２〜Ｓ４と同様のステップＳ３４〜Ｓ３６が、上記（２）に相当する処理として行われ、更に上記（３），（４）の処理が行われる。
【００４３】
（７）ＣＰ（３）以降は、上記（５），（６），（３），（４）が繰り返される。
【００４４】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００４５】
【発明の効果】
以上詳述したように本発明によれば、カレントスタックには常にライトプロテクトがかかっていない状態を保持しつつ、その他のスタックフレームにはライトプロテクトをかけることにより、更新されたページの識別を可能にし、これによりチェックポイント採取時には、前回のチェックポイントから更新されたページのみを保存する差分保存が適用可能となる。よって、本発明によれば、スタックサイズが大きくなった場合でも、性能劣化を引き起こさずにスタック情報を保存することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る高信頼計算機システムの構成を示すブロック図。
【図２】同実施形態における最初のチェックポイント採取時のスタック保存の動作説明図。
【図３】同実施形態においてスタック上のライトプロテクトがかかっているページへの書き込み要求が発生した場合と、カレントスタックが移動した場合の動作説明図。
【図４】同実施形態における２回目以降のチェックポイント採取時のスタックの差分保存の動作説明図。
【図５】最初のチェックポイント採取時のスタック保存の処理手順を説明するためのフローチャート。
【図６】スタック上のライトプロテクトがかかっているページへの書き込み要求が発生した場合の処理手順を説明するためのフローチャート。
【図７】カレントスタックが移動する際の処理手順を説明するためのフローチャート。
【図８】２回目以降のチェックポイント採取時のスタックの差分保存の手順を説明するためのフローチャート。
【符号の説明】
１０…プライマリコンピュータ
２０…バックアップコンピュータ
１１…スタック情報管理部
１２…更新ページ管理部
１３…エクセプションハンドラ
１４…カレントスタック管理部
１５…ＩＰ変更部
１６…ＩＰ管理部
１７…スタックサイズ記録部
【図１】
0003822449.tif 000002
【図２】
0003822449.tif 000003
【図３】
0003822449.tif 000004
【図４】
0003822449.tif 000005
【図５】
0003822449.tif 000006
【図６】
0003822449.tif 000007
【図７】
0003822449.tif 000008
【図８】
0003822449.tif 000009