(57)【特許請求の範囲】
【請求項１】
マルチタスク処理を行うオペレーティングシステムをサポートする少なくとも１個のプロセッサユニットと、プロセッサユニットにより共有使用され、タスクの処理の実体であるプロセスを高信頼性化するミドルウエアをオペレーティングシステムと共に有する記憶装置とを備え、
前記ミドルウエアは、
前記プロセス毎のライブラリに構成され、このプロセス自体、もしくは割り込み等によりチェックポイント採取の要求があったとき、プロセッサによるデータ処理途中で記憶装置上に定期的にチェックポイントを作成し、その時点におけるプロセスの状態情報を保存するチェックポイント採取機構と、
プロセスがオペレーティングシステムに対して処理を委ねる際、その前後において制御権を獲得し、その前段階において上記チェックポイント採取を含む非同期サービス要求に対する処理を禁止し、後段階においてそれを解除するとともに、オペレーティングシステムから受けるサービスに関する提供情報を、オペレーティングシステムからサービスを受ける時点より以前に作成された前記チェックポイントに基くプロセス状態情報と共に前記記憶装置に記録するプログラム制御機構と、
プロセスから状態復帰後再開の要求があったとき、上記オペレーティングシステムから受けるサービスに関する提供情報と保存されたプロセスの状態情報を復元し、その時点から処理を再開する状態復元機構と
を具備することを特徴とする状態記録再現機能を有する計算機システム。
【請求項２】
状態復元機構は、オペレーティングシステムによるサービスを受けた結果として得られるプロパティ識別子と、処理を再開したとき上記オペレーティングシステムから受けるサービスに関する提供情報に基づき再獲得して得られるプロパティ識別子を組とする識別子変換表を備え、識別子が変更されている場合には上記識別子変換表を参照し、変換された識別子を用いてオペレーティングシステムによるサービスの提供を受けることを特徴とする請求項１記載の状態記録再現機能を有する計算機システム。
【請求項３】
オペレーティングシステムによるサービスは、プロセス間の同期をとるため、プロセス間でデータと制御情報を交換して排他制御を行う同期制御機構によるサービスであり、プログラム制御機構は、あるプロセスが上記同期制御機構を獲得する前に制御権を奪い、チェックポイント採取要求に対する処理を禁止し、同期制御機構を獲得した後、獲得した同期制御機構に関する情報をサービス提供情報として記録し、上記チェックポイント採取要求に対する処理の禁止を解除することを特徴とする請求項１又は請求項２記載の状態記録再現機能を有する計算機システム。
【請求項４】
オペレーティングシステムによるサービスは、プロセスによって共有使用される共有メモリのサービスであり、プログラム制御機構は、あるプロセスが共有メモリを獲得する前に制御権を奪い、チェックポイント採取要求に対する処理を禁止し、共有メモリを獲得した後、獲得した共有メモリに関する情報を上記サービス提供情報として記録し、上記チェックポイント採取要求に対する処理の禁止を解除することを特徴とする請求項１又は請求項２記載の状態記録再現機能を有する計算機システム。
【請求項５】
プログラム制御機構は、チェックポイント採取機構によるチェックポイント採取後意識的にプロセスの実行を停止し、後に停止直前の状態からプロセスの実行を継続することを特徴とすることを特徴とする請求項１乃至請求項４のいずれかに記載の状態記録再現機能を有する計算機システム。
【請求項６】
マルチタスク処理を行うオペレーティングシステムをサポートする少なくとも１個のプロセッサユニットと、プロセッサユニットにより共有使用され、タスクの処理の実体であるプロセスを高信頼性化するミドルウエアをオペレーティングシステムと共に有する記憶装置とを備えた計算機システムにおいて、チェックポイントの採取要求があった場合、前記ミドルウエア上のチェックポイント採取機構によりプロセスの状態情報を保存させ、ロールバック/ リスタート要求があった場合に、前記ミドルウエア上の状態復元機構により保存されたプロセスの状態情報を用いて、プロセスの状態を復元させることにより、実行中プロセスのチェックポイントを採取しながらデータ処理を行い、障害発生時、最後に採取したチェックポイントを用いてプロセスの状態を復元し、そこから処理を再開して障害回復機能を実現する状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体であって、
プロセスがオペレーティングシステムによるサービスを受けるためにシステムコールを発行する際、前記ミドルウエア上のプログラム制御機構により、そのシステムコールの発行の前後においてシステムの制御権を強制的に獲得するステップと、システムコール発行の前段階において上記チェックポイント採取を含む非同期に発生するサービス要求に対する処理を禁止し、後段階においてそれを解除するステップと、解除前にオペレーティングシステムから受けるサービスに関する提供情報を記録するステップと、障害発生時、前記ミドルウエア上の状態復元機構により、上記オペレーティングシステムから受けるサービスに関する提供情報と保存されたプロセスの状態情報を復元し、保存されたチェックポイントに加えて、記録されたオペレーティングシステムから受けているサービスに関する情報を用い、オペレーティングシステムから受けているサービスも再現するステップとを有する状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
オペレーティングシステムから受けるサービスは、プロセス間の同期をとるため、プロセス間でデータと制御情報を交換して排他制御を行う同期制御機構、共有メモリ、ファイル入出力のうち、少なくとも一つであることを特徴とする請求項６記載の状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、状態記録再現機能を有する計算機システム、及び状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
計算機システムの信頼性を高める技術として、フォールトトレラントシステムが知られている。フォールトトレラントシステムには、  計算機全体を高信頼化するタイプと、  特定のプロセスに限って高信頼化するタイプとがある。前者はフォールトトレラントコンピュータとして知られた技術で、一般に多重化モジュール機構等を採用した専用ハードウェア、あるいはプロセスペア機構等を採用した専用オペレーティングシステム（ＯＳ）によって、コンピュータシステムの下位層で実現される。後者はフォールトトレラントミドルウェアとして知られた技術で、
デーモンプロセスとライブラリ等を用い、コンピュータシステムの上位層で実現される。具体的に、前者は米国TANDEM社やSTRATUS 社の無停止型コンピュータ、後者はSTRATUS 社のISIS等として有名である。
【０００３】
しかしなから前者の場合、専用のハードウェアなりＯＳが必要となり、システム構成が割高となる欠点を有する。一方、後者の場合、専用のアプリケーションインタフェースを必要とし、アプリケーションプログラムが、フォールトトレランスを実現するために定義した特殊なサブルーチンを呼び出す必要があり、既存のアプリケーションプログラムを、そのまま手直しすることなく利用することはできなかった。
【０００４】
【発明が解決しようとする課題】
上述したように従来例に従えば、フォールトトレランスを実現するには、高価になるか、あるいはプログラマに負担をかけるか、いずれか一方を選択する以外になかった。本発明は後者を選択しながらもプログラマにかかる負担を低減するものであり、デーモンプロセスとライブラリ等を用いて、コンピュータシステムの上位層で実現されるフォールトトレラントミドルウェアに、後述する仕掛けを組み込むものである。アプリケーションをフォールトトレラント化するために、フォールトトレランスを実現するために定義した特殊なサブルーチンを呼び出さなければならなかった（既存のアプリケーションプログラムに変更を要す）従来の不都合を解消するものであり、アプリケーションプログラムがシステムコールを発行する前に制御権を獲得し、プロセスのチェックポイント採取のために必要な情報を記録した上で、ＯＳに処理を委ねる構成とすることにより、アプリケーションプログラムが特殊なサブルーチンを呼び出す必要を無くし、また、アプリケーションプログラムに一切の手直しを施すことなくフォールトトレランス化を実現する、状態記録再現機能を有する計算機システム及び状態記録再現プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【０００５】
チェックポイントは任意のタイミングで採られるため、上記の情報を記録している最中にチェックポイントが採られてしまうと、障害発生時に、そのチェックポイントからプロセスを再実行させることができないが、本発明を適用することにより、上記の情報を記録している最中にチェックポイントが採られる事を抑止し、障害発生時に、任意のチェックポイントから、プロセスを再実行させることができるようになる。ここでチェックポイントとは、プロセスの処理をその時点から再実行させるための情報で、プロセスのアドレス空間の値やプロセッサコンテクストの値等を含んでいる。
【０００６】
【課題を解決するための手段】
本発明の状態記録再現機能を有する計算機システムは、マルチタスク処理を行うオペレーティングシステムをサポートする少なくとも１個のプロセッサユニットと、プロセッサユニットにより共有使用され、タスクの処理の実体であるプロセスを高信頼性化するミドルウエアをオペレーティングシステムと共に有する記憶装置とを備え、前記ミドルウエアは、前記プロセス毎のライブラリに構成され、このプロセス自体、もしくは割り込み等によりチェックポイント採取の要求があったとき、プロセッサによるデータ処理途中で記憶装置上に定期的にチェックポイントを作成し、その時点におけるプロセスの状態情報を保存するチェックポイント採取機構と、プロセスがオペレーティングシステムに対して処理を委ねる際、その前後において制御権を獲得し、その前段階において上記チェックポイント採取を含む非同期サービス要求に対する処理を禁止し、後段階においてそれを解除するとともに、オペレーティングシステムから受けるサービスに関する提供情報を、オペレーティングシステムからサービスを受ける時点より以前に作成された前記チェックポイントに基くプロセス状態情報と共に前記記憶装置に記録するプログラム制御機構と、プロセスから状態復帰後再開の要求があったとき、上記オペレーティングシステムから受けるサービスに関する提供情報と保存されたプロセスの状態情報を復元し、その時点から処理を再開する状態復元機構とを具備することを特徴とする。
【０００７】
本発明のコンピュータ読み取り可能な記録媒体に記録されている状態記録再現プログラムは、マルチタスク処理を行うオペレーティングシステムをサポートする少なくとも１個のプロセッサユニットと、プロセッサユニットにより共有使用され、タスクの処理の実体であるプロセスを高信頼性化するミドルウエアをオペレーティングシステムと共に有する記憶装置とを備えた計算機システムにおいて、チェックポイントの採取要求があった場合、前記ミドルウエア上のチェックポイント採取機構によりプロセスの状態情報を保存させ、ロールバック/ リスタート要求があった場合に、前記ミドルウエア上の状態復元機構により保存されたプロセスの状態情報を用いて、プロセスの状態を復元させることにより、実行中プロセスのチェックポイントを採取しながらデータ処理を行い、障害発生時、最後に採取したチェックポイントを用いてプロセスの状態を復元し、そこから処理を再開して障害回復機能を実現する状態記録再現プログラムであって、プロセスがオペレーティングシステムによるサービスを受けるためにシステムコールを発行する際、前記ミドルウエア上のプログラム制御機構により、そのシステムコールの発行の前後においてシステムの制御権を強制的に獲得するステップと、システムコール発行の前段階において上記チェックポイント採取を含む非同期に発生するサービス要求に対する処理を禁止し、後段階においてそれを解除するステップと、解除前にオペレーティングシステムから受けるサービスに関する提供情報を記録するステップと、障害発生時、前記ミドルウエア上の状態復元機構により、上記オペレーティングシステムから受けるサービスに関する提供情報と保存されたプロセスの状態情報を復元し、保存されたチェックポイントに加えて、記録されたオペレーティングシステムから受けているサービスに関する情報を用い、オペレーティングシステムから受けているサービスも再現するステップとを有することを特徴とする。
【０００９】
本発明により、アプリケーションプログラムが特殊なサブルーチンを呼び出す必要を無くし、また、アプリケーションプログラムに一切の手直しを施すことなくフォールトトレランス化を実現する。このことにより、プログラマに対する負担が大幅に軽減される。また、多重化モジュールの採用、あるいはプロセスペア機構等専用ＯＳを使用することなく、マルチタスク処理を実現するＯＳを搭載したパーソナルコンピュータ程度の設備にて実現できるため、廉価構成で高い信頼性を得るシステム構築が可能となる。
【００１０】
【発明の実施の形態】
以下、図面を使用して本発明の実施例について詳細に説明する。
【００１１】
図１は本発明が採用される計算機システムの構成例を示すブロック図である。図からわかるように、 ｎ個のプロセッサ１〜１ｎによりマルチプロセッサシステムが構築され、プロセッサ１〜１ｎには、プロセッサ個々に対応するキャッシュメモリ２〜２ｎが設けられている。キャッシュメモリ２〜２ｎは、メモリ制御部４とバス５を介して接続される。メモリ制御部４には、主記憶装置３及び主記憶装置３に割り付けられるバッファが接続されている。メモリ制御部４は、バスインタフェース制御部６、主記憶アクセス制御部７を有している。バスインタフェース制御部６は、常時バス５を監視しており、バス５に発行されたトランザクションに応じて動作する。主記憶アクセス制御部７は、主記憶装置３と接続され、主記憶もしくはバッファに対するアクセスを制御する。主記憶装置３は複数のプロセッサ１〜１ｎにより共有使用されるため共有メモリと呼ばれる。以降は共有メモリ３と称し説明を行う。
【００１２】
プロセッサ１〜１ｎはマルチタスクＯＳをサポートするマイクロプロセッサであり、共有メモリ３には、ワークステーションやパーソナルコンピュータの分野で標準的に使用されているＵＮＩＸもしくはＷＩＮＤＯＷＳ等商用ＯＳがオペレーティングシステムとして搭載されている。共有メモリ３には、上述したＯＳが常駐される他、本発明がインプリメントされるミドルウエア（ＦＴＭ）ならびにアプリケーションプログラム（ＡＰＬ）が割り付けられ必要に応じて起動され、格納される。図示していないが、計算機システムには、他に、ＰＣＩ等高速入出力バスを介して光ディスク装置あるいは大容量磁気ファイル装置等不揮発性メモリが接続されるのが一般的である。
【００１３】
尚、図１に示す実施例は複数のプロセッサで構成されるマルチプロセッサシステムを例示したが本発明を実施するうえで必須ではなく、唯一個のプロセッサで構成されるシングルプロセッサシステムであっても構わない。
ここで、本発明実施例の動作を説明するにあたり前提となるチェックポイントリカバリ方式について簡単に説明する。計算機システムの信頼性を高めるために使用される方式の一つであり、通常のデータ処理の途中で定期的にチェックポイントを主記憶装置３上に作成しておき、計算機に何らかの障害が発生したときに、直前のチェックポイントに戻って処理を再開するための仕掛けが存在する。その仕掛けは、共有メモリ３にローディングされ記憶されるミドルウェア（ＦＴＭ）に展開される。
【００１４】
図２は、デーモンプロセスとライブラリ等を用いて、コンピュータシステムの上位層で実現される本発明が実現されるフォールトトレラントミドルウェア（ＦＴＭ）をＯＳとともに共有メモリ３０上に展開して示した概念図である。
【００１５】
図において、１１乃至１２はプロセス（＃０，＃１）である。マルチプロセッサにおいて並列処理の対称となるあるまとまった仕事はプロセス（ｐｒｏｃｅｓｓ）と呼ばれ、並列に実行可能な処理単位である。プロセスはプログラムによって制御される動的な概念であり、プロセッサとは区別して使用される。また、このプロセス１１，１２は、本発明によりフォールトトレラント化されるプロセスであり、プロセス毎設けられるライブラリ中にそれぞれチェックポイント採取機構１３，１４を持っている。デーモンプロセス１５は、ライブラリと通信しながら裏処理（プロセス＃０と＃１が並行して実行される処理）を実行する。２６はセマフォ（ｓｅｍａｐｈｏｒｅ）である。セマフォ２６は、プロセス間の同期をとるため、プロセス間でデータと制御情報を交換して排他制御を行う同期制御機構であり、そのメカニズムはＯＳ中に存在する。
【００１６】
尚、２７，２８はプロセッサ、２９は不揮発性のディスク装置、３０は共有メモリであり、これらはバス３１を介して共通接続される。計算機システムは、セマフォ２６、共有メモリ３０、ファィル操作等ＯＳからのサービスを受けながらプログラムを実行するものとする。
【００１７】
図３は、本発明実施例の動作を主記憶上に展開して示した動作概念図である。
【００１８】
図示した計算機およびＯＳは図１，図２に示すものと同様である。フォールトトレラント化するプロセス３１のチェックポイントを採るためにプロセス３１に対して、特定のタイミング、例えば一定時間間隔で、チェックポイント採取要求３２を送る。プロセス３１が、このチェックポイント採取要求３２を受けると、チェックポイント採取ステップ３３によって、このプロセス３１の状態３４（アドレス空間、コンテクスト等）を採取する。このチェックポイント採取要求によって採取されたプロセスの状態３４は、障害発生時の回復処理に利用される。
【００１９】
プロセス３１もしくは他のプロセス等に障害が発生し異常終了を起こした場合には、ＯＳあるいはデーモン等がそれを検出し、ロールバック/ リスタート要求３５を、ロールバック/ リスタートステップ３６に送る。ロールバック/ リスタートステップ３６は、ロールバック/ リスタート要求３５を受けると、チェックポイント採取要求３２が発生した時に、チェックポイント採取ステップ３３によって採られたプロセスの状態３４を用いて、異常終了したプロセス３１を、チェックポイント採取時点から、再起動させる。
【００２０】
但し、これだけではこのプロセス３１がＯＳからサービス（システムコール）を受けていた場合、それを復元することができない。そこで本発明では、プロセス３１がＯＳのサービスを受けるために、システムコール３７を発行した際にそれをフックし、プロセス３１がＯＳから受けるサービスに関する情報を、システムコールサービス提供情報４１として記録し、障害発生時にプロセス３１を、チェックポイント時に保存された状態３４を用いて再起動させる際に、記録されたシステムコールサービス提供情報４１を基に、ＯＳから受けているサービスの状態を復元するものである。
【００２１】
但し、ＯＳから受けるサービスに関する情報を記録している最中にチェックポイントが採られては、障害発生時にＯＳから受けているサービスを復元することが困難となるため、システムコールサービス提供情報４１を記録している最中は、チェックポイントが採られないようにする必要がある。即ち、３９はシステムコール呼び出し前後に制御権を強制獲得するステップ（以降、単に制御獲得ステップと称する）であり、プロセス３１がシステムコール３７を発行してＯＳに処理を委ねる直前、および、直後に制御を奪うものである。制御獲得ステップ３９は、システムコールの呼び出し前で制御を奪った際に、チェックポイント採取要求ブロックステップ２３に、以降、チェックポイント採取要求の受け付けを禁止（ブロック）させる。その後、制御獲得ステップ３９は、システムコールサービス提供情報記録ステップ４０に依頼して、システムコールサービス提供情報４１を記録する。この後プロセス３１は、ＯＳから本来のシステムコールのサービス提供を受ける。
【００２２】
その後、制御獲得ステップ３９は、再び制御権を獲得し、システムコールサービス提供情報記録ステップ４０に依頼して、システムコールサービス提供情報４１を記録する。そしてこの後、チェックポイント採取要求ブロック解除ステップ４２に、チェックポイント採取要求のブロック解除を依頼する。チェックポイント採取要求ブロック解除ステップ４２は、チェックポイント採取要求ブロックステップ２３に、チェックポイント採取要求のブロック解除を依頼する。これにより、プロセスがシステムコールサービスの提供を受ける際に、そのシステムコールサービス提供情報を記録し、かつ、その情報を記録している最中にチェックポイントが採られることはなくなるので、チェックポイント採取時には、プロセスの状態３４が保存され、かつ、システムコールサービス提供情報４１が記録されているので障害発生時には、保存されたプロセスの状態３４を用いて、プロセス３１のアドレス空間とコンテクストを復元するとともに、システムコールサービス提供情報４１を用いて、ＯＳから受けているサービスを復元することも可能となる。
【００２３】
図４乃至図６は、本発明実施例の動作を説明するために引用したフローチャートである。図４には、プロセスがシステムコールを発行し、ＯＳからサービスの提供を受ける際に、そのシステムコールサービス提供情報を記録するまでの処理の流れが示されている。プロセスがシステムコールを発行した際、実際にシステムコールを実行する前に、その制御を奪い、システムコール呼び出し前処理を実行する。システムコール呼び出し前処理は図５に示されている。この後、ステップＳ２０で実際にシステムコールを実行する。その後ステップＳ３０で実際にシステムコールが実行された後にその制御を奪い、システムコール呼び出し後処理を実行する。システムコール呼び出し後処理は図６に示されている。
【００２４】
図５は、システムコール呼び出し前に制御を奪った際のシステムコール呼び出し前処理の流れを示す図である。ステップＳ４０で、このプロセスがチェックポイント採取要求を受け付けないようにする。これは例えばチェックポイント採取要求が、ＵＮＩＸで言う所のシグナルで送られるのなら、シグナルマスクをセットすることにより可能となる。この後ステップＳ５０でＯＳから受けるサービスに関する情報を、システムコール実行前に記録する必要があるか否かを判定する。
【００２５】
この判定は、システムコール単位で予め設定しておくものとする。もしステップＳ５０で、ＯＳから受けるサービスに関する情報を、システムコール実行前に記録する必要がないと判定した場合には、これでシステムコール呼び出し前処理を終える。もしステップＳ５０で、ＯＳから受けるサービスに関する情報を、システムコール実行前に記録する必要があると判定した場合には、ステップＳ６０で、
ＯＳから受けるサービスに関する情報を記録する。
【００２６】
図６は、システムコール呼び出し後に制御を奪った際のシステムコール呼び出し後処理の流れを示す図である。ステップＳ７０で、ＯＳから受けるサービスに関する情報を、システムコール実行後に記録する必要があるか否かを判定定する。
【００２７】
この判定は、システムコール単位で予め設定しておくものとする。もしステップＳ７０で、ＯＳから受けるサービスに関する情報をシステムコール実行前に記録する必要がないと判定した場合には、これでシステムコール呼び出し後処理のＳ８０の処理をスキップし、ステップＳ９０の処理を実行する。もしステップＳ７０でＯＳから受けるサービスに関する情報を、システムコール実行後に記録する必要があると判定した場合には、ステップＳ８０でＯＳから受けるサービスに関する情報を記録した上で、ステップＳ９０の処理を実行する。そして、最後にステップＳ９０でこのプロセスが再びチェックポイント採取要求を受け付ける状態に戻す。これは、例えばチェックポイント採取要求が、ＵＮＩＸで言う所のシグナルで送られるのなら、シグナルマスクの設定を元の状態に戻すことにより可能となる。
【００２８】
次に、ＯＳの具体的なサービス例として、プロセスがセマフォサービスの提供を受けていた場合について示す。プロセスがセマフォサービスの提供を受け、その情報をチェックポイント採取時に保存しておき、障害発生時にその情報を基に、
プロセスが受けていたセマフォサービスを復元する事について考える。
【００２９】
例えば、ＵＮＩＸシステムでは、セマフォサービスとして、
（１）セマフォアロケーション（ｓｅｍｇｅｔ）
（２）セマフォ操作（ｓｅｍｏｐ）
（３）セマフォ制御（ｓｅｍｃｔｌ）等がある。
【００３０】
ＵＮＩＸでの一般的なセマフォの使用方法としては、最初にｓｅｍｇｅｔでセマフォをアロケーションし、次にｓｅｍｃｔｌでセマフォの値を初期化し、以降、ｓｅｍｏｐでセマフォの獲得／解放を行う。
【００３１】
本発明実施例では、プロセスがセマフォをアロケーションする前に、システムコール呼び出し前後制御獲得ステップが制御を奪い、チェックポイント採取要求ブロックステップを呼び出し、チェックポイントの採取を禁止している。そして、プロセスがセマフォをアロケーションした後に、システムコール呼び出し前後制御獲得ステップが再び制御を奪い、アロケーションしたセマフォに関する情報を、システムコールサービス提供情報として記録し、チェックポイント採取要求ブロック解除ステップを呼び出し、再びチェックポイントの採取を可能にする。チェックポイント採取時には、システムコールサービス提供情報に記録されているセマフォの値を読み出し、その情報をシステムコールサービス提供情報に追加する。
【００３２】
障害発生時に、システムコールサービス提供情報に記録されている情報に基づいて、セマフォを再アロケーションしても、アロケーションされたセマフォの識別子が、障害発生前の識別子と異なる場合がある。一般にＵＮＩＸのプログラムは、アロケーションしたセマフォに識別子を用いてアクセスするので、これでは問題である。そこで、障害発生時に、システムコールサービス提供情報に記録されている情報に基づいて、セマフォを再アロケーションし、アロケーションされたセマフォの識別子が変更された場合、図７に示す様なセマフォ識別子変換表を用意する。そしてプログラムが、セマフォ操作を行う前に、システムコール呼び出し前後制御獲得ステップが制御を奪い、図７の変換表を用いて、セマフォ識別子の変換を行う。これにより、障害発生時に再アロケーションされたセマフォの識別子が、障害発生前の識別子と異なっていたとしても、プログラムはそのことを意識することなく、障害発生前の識別子で、セマフォにアクセスすることができる。
【００３３】
次に、プロセスが共有メモリサービスの提供を受けていた場合について示す。
【００３４】
プロセスが共有メモリサービスの提供を受け、その情報をチェックポイント採取時に保存しておき、障害発生時にその情報を基に、プロセスが受けていた共有メモリサービスを復元する事について考える。
【００３５】
例えばＵＮＩＸシステムでは、共有メモリサービスとして、
（１）共有メモリアロケーション（ｓｈｍｇｅｔ）
（２）共有メモリアタッチ（ｓｈｍａｔ）
（３）共有メモリデタッチ（ｓｈｍｄｔ）等がある。
【００３６】
ＵＮＩＸでの一般的な共有メモリの使用方法としては、最初にｓｈｍｇｅｔで共有メモリをアロケーションし、次に、ｓｈｍａｔで共有メモリをアドレス空間にマッピングし、以降ｌｏａｄ／ｓｔｏｒｅ命令でアクセスを行う。
【００３７】
本発明実施例では、プロセスが共有メモリをアロケーションする前に、システムコール呼び出し前後制御獲得ステップが制御を奪い、チェックポイント採取要求ブロックステップを呼び出し、チェックポイントの採取を禁止する。そしてプロセスが共有メモリをアロケーションした後に、システムコール呼び出し前後制御獲得ステップが再び制御を奪い、獲得した共有メモリに関する情報を、システムコールサービス提供情報として記録し、チェックポイント採取要求ブロック解除ステップを呼び出し、再びチェックポイントの採取を可能にする。チェックポイント採取時には、システムコールサービス提供情報に記録されている共有メモリの値を読み出し、その情報をシステムコールサービス提供情報に追加する。
【００３８】
障害発生時に、システムコールサービス提供情報に記録されている情報に基づいて、共有メモリを再アロケーションしても、獲得された共有メモリの識別子が、障害発生前の識別子と異なる場合がある。一般にＵＮＩＸのプログラムは、アロケーションした共有メモリを、識別子を用いてマッピングするので、ｓｈｍｇｅｔとｓｈｍａｔの間で障害が発生すると問題がある。そこで障害発生時に、システムコールサービス提供情報に記録されている情報に基づいて、共有メモリを再アロケーションし、アロケーションされた共有メモリの識別子が変更された場合、図８に示す様な共有メモリ識別子変換表を用意する。そしてプログラムが、共有メモリのマッピングを行う前に、システムコール呼び出し前後制御獲得ステップが制御を奪い、図８の変換表を用いて、共有メモリ識別子の変換を行う。これにより、障害発生時に再獲得された共有メモリの識別子が、障害発生前の識別子と異なっていたとしても、プログラムはそのことを意識することなく、障害発生前の識別子で、共有メモリをマッピングすることができる。
【００３９】
ところで、図３に示す例では、プロセスがＯＳのサービスを受けるために、システムコールを呼び出す際に、システムコールの呼び出し前後で制御を奪い、システムコール呼び出し前後制御獲得ステップが、システムコールの呼び出し前後で制御を奪った時に、システムコール呼び出し前後制御獲得ステップの指示により、チェックポイント採取要求をブロックしていたが、更にＵＮＩＸシステムで言うところのシグナルの様な、非同期サービス要求もブロックする必要がある。
【００４０】
この部分だけを図９に示す動作概念図を用いて説明する。
【００４１】
図９は、本発明の他の実施例による動作を共有メモリ上に展開して示した動作概念図である。計算機、ＯＳは上述したとおりであり、ＵＮＩＸもしくはＷＩＮＤＯＷＳ搭載の一般的な商用計算機である。７１はプロセスであり、計算機およびそれを制御するＯＳ上で実行される。このプロセス７１は本発明によってフォールトトレラント化されるプロセスである。プロセス９１がＯＳのサービスを受けるために、システムコール８１を発行した際にそれをフックし、プロセス７１がＯＳ７９から受けるサービスに関する情報を、システムコールサービス提供情報７８として記録する。７６はシステムコール呼び出し前後制御獲得ステップであり、プロセス７１がシステムコール８１を呼び出す直前、および、直後に制御を奪うものである。システムコール呼び出し前後制御獲得ステップ７６は、システムコールの呼び出し前で制御を奪った際に、非同期サービス要求ブロックステップ７４に、以降、非同期サービス要求の受け付けをブロックさせる。
【００４２】
その後、システムコール呼び出し前後制御獲得ステップ７６は、システムコールサービス提供情報記録ステップ７７に依頼して、システムコールサービス提供情報７８を記録する。この後プロセス７１は、ＯＳから本来のシステムコールのサービス提供を受ける。その後、システムコール呼び出し前後制御獲得ステップ７６は、再び制御を獲得し、システムコールサービス提供情報記録ステップ７７に依頼して、システムコールサービス提供情報７８を記録する。そしてこの後、非同期サービス要求ブロック解除ステップ７５に、非同期サービス要求のブロック解除を依頼する。非同期サービス要求ブロック解除ステップ７５は、非同期サービス要求ブロックステップ７４に、非同期サービス要求のブロック解除を依頼する。これにより、プロセスがシステムコールサービスの提供を受ける際に、そのシステムコールサービス提供情報を記録し、かつ、その情報を記録している最中に非同期サービスが処理されることもなくなる。
【００４３】
尚、上記チェックポイント採取後に、プロセスの実行を意識的に停止させ、後でチェックポイントから処理を再開させる事により、リジューム機能を実現することもできる。更に、上記チェックポイントを図２に示すディスク装置２９等不揮発性記憶装置に保存しておくことにより、障害等による不意のシステム再ブート後、あるいはユーザによる意識的な再ブート後に、上記ディスク装置２９に保存されたチェックポイントから、プロセスの実行を再開することも可能となる。
【００４４】
以上説明のように本発明は、特殊なハードウェア、特殊なＯＳ、及びアプリケーションでの特殊なコーディングを必要とせず、オープン環境に適したフォールトトレラントシステムを提供するものであるが、ここに示された方法を応用することにより、フォールトトレランス以外の機能を提供することも可能である。図９に示した例がその様な場合の実施例にもなっている。即ち、プロセスがシステムコールサービスの提供を受ける際に、そのシステムコールサービス提供情報を記録し、かつ、その情報を記録している最中に非同期サービスが処理されることがなくなるため、プロセスの実行状態の記録が可能になり、デバッガやエミュレータ等、様々な分野に本発明を応用することが可能になる。
【００４５】
【発明の効果】
以上説明のように本発明は、デーモンプロセスとライブラリ等を用いて、コンピュータシステムの上位層で実現されるフォールトトレラントミドルウェアに、上述した仕掛けを組み込んだものであり、アプリケーションをフォールトトレラント化するために、フォールトトレランスを実現するために定義した特殊なサブルーチンを呼び出さなければならなかった（既存のアプリケーションプログラムに変更を要す）従来の不都合を解消したものであり、アプリケーションプログラムがシステムコールを発行する前に制御権を獲得し、プロセスのチェックポイント採取のために必要な情報を記録した上で、ＯＳに処理を委ねる構成とすることにより、アプリケーションプログラムが特殊なサブルーチンを呼び出す必要を無くし、また、アプリケーションプログラムに一切の手直しを施すことなくフォールトトレランス化を実現する。このことにより、プログラマに対する負担が大幅に軽減される。また、多重化モジュールの採用、あるいはプロセスペア機構等専用ＯＳを使用することなく、マルチタスク処理を実現するＯＳを搭載したパーソナルコンピュータ程度の設備にて実現できるため、廉価構成で高い信頼性を得るシステム構築が可能である。
【図面の簡単な説明】
【図１】本発明が採用される計算機システムの構成例を示すブロック図、
【図２】本発明が実現されるフォールトトレラントミドルウェア（ＦＴＭ）をＯＳとともに主記憶上に展開して示した概念図、
【図３】本発明実施例の動作を共有メモリ上に展開して示した動作概念図、
【図４】図３に示す本発明実施例の動作の流れを示すフローチャート、
【図５】図３に示す本発明実施例の動作の流れを示すフローチャート、
【図６】図３に示す本発明実施例の動作の流れを示すフローチャート、
【図７】本発明実施例にて使用されるセマフォ識別子変換表の構成を示す図、
【図８】本発明実施例にて使用される共有メモリ識別子変換表の構成を示す図、
【図９】本発明の他の実施例の動作を共有メモリ上に展開して示した動作概念図、
【符号の説明】
１〜１ｎ…プロセッサ、２〜２ｎ…キャッシュ、３…主記憶装置（共有メモリ）、４…メモリ制御装置、４１…バスインタフェース制御部、４２…状態保存制御部、４３…主記憶アクセス制御部、４４…バッファアクセス制御部、１１（１２）、３１…プロセス、１３（１４）…チェックポイント採取機構、１５…デーモンプロセス、２６…セマフォ、２９…ディスク装置。
【図１】
0003919274.tif 000002
【図２】
0003919274.tif 000003
【図３】
0003919274.tif 000004
【図４】
0003919274.tif 000005
【図５】
0003919274.tif 000006
【図６】
0003919274.tif 000007
【図７】
0003919274.tif 000008
【図８】
0003919274.tif 000009
【図９】
0003919274.tif 000010