(57)【特許請求の範囲】
【請求項１】
リソースの一貫性を制御するために当該リソースのロックの獲得・解放を管理し、自身が獲得したロックをロック解放依頼が送られるまで保持しているロック獲得・解放機構を備えた複数のノードが階層的に接続された階層構造の階層的分散システムであって、
前記階層構造の最上位層をなし、リソースを利用するクライアントノードと、
前記階層構造の最下位層をなし、リソースを有するサーバノードと、
前記階層構造の前記最上位層以外で且つ前記最下位層以外の階層をなす中継サーバノードであって、自身より１つ上位の階層のノードに対してはサーバとして作用し、自身より１つ下位の階層のノードに対してはクライアントとして作用する中継サーバノードと
を具備し、
前記中継サーバノードの前記ロック獲得・解放機構は、前記中継サーバノードより１つ上位の階層のノードからのロック獲得依頼を前記中継サーバノードより１つ下位の階層のノードに伝達し、前記中継サーバノードより１つ下位の階層のノードからのロック解放依頼を前記中継サーバノードより１つ上位の階層のノードに伝達する
とを特徴とする階層的分散システム。
【請求項２】
前記クライアントノード、前記サーバノード及び前記中継サーバノードは、リソースのロック管理のために、当該リソースのリソース識別名と、当該リソースの状態と、クライアント名と、サーバ情報とを含むグローバルロック管理情報を登録するグローバルロック管理テーブルを備えており、前記リソース状態として、ロック使用状態、ロック保持状態、ロック解放状態、またはロックの獲得依頼もしくはロックの解放依頼を中継している状態を示すロック中継状態のいずれかをとることを特徴とする請求項１記載の階層的分散システム。
【請求項３】
前記中継サーバノードの前記ロック獲得・解放機構は、前記中継サーバノードより１つ上位の階層のノードから、前記中継サーバノード自身が保持している、または前記中継サーバノードより１つ上位の階層の別のノードが保持している、前記中継サーバノードより１つ下位の階層のノードのリソースのロック獲得依頼を受けた場合、当該中継サーバノード自身の持つグローバルロック管理テーブルの示す対象リソースの状態が、それぞれ、ロック保持状態、またはロック中継状態であれば、当該中継サーバノード自身のロック中継状態への変更と前記ロック獲得を依頼したノードへのロック獲得通知、または前記別のノードへのロック解放依頼を行うことを特徴とする請求項２記載の階層的分散システム。
【請求項４】
リソースの一貫性を制御するために当該リソースのロックの獲得・解放を管理し、自身が獲得したロックをロック解放依頼が送られるまで保持している複数のノードが階層的に接続された階層構造の階層的分散システムであって、前記階層構造の最上位層をなし、リソースを利用するクライアントノードと、前記階層構造の最下位層をなし、リソースを有するサーバノードと、前記階層構造の前記最上位層以外で且つ前記最下位層以外の階層をなし、自身より１つ上位の階層のノードに対してはサーバとして作用し、自身より１つ下位の階層のノードに対してはクライアントとして作用する中継サーバノードとを具備する階層的分散システムにおけるリソースのロック方法であって、
前記中継サーバノードより１つ上位の階層のノードから前記中継サーバノードにロック獲得依頼が送られた場合、当該獲得依頼を前記中継サーバノードから前記中継サーバノードより１つ下位の階層のノードに伝達するステップと、
前記中継サーバノードより１つ下位の階層のノードから前記中継サーバノードにロック解放依頼が送られた場合、当該解放依頼を前記中継サーバノードから前記中継サーバノードより１つ上位の階層のノードに伝達するステップと
を具備することを特徴とする階層的分散システムにおけるリソースのロック方法。
【請求項５】
前記クライアントノード、前記サーバノード及び前記中継サーバノードは、ロック管理の対象となるリソースのリソース識別名と、当該リソースの状態であって、ロック使用状態、ロック保持状態、ロック解放状態、またはロックの獲得依頼もしくはロックの解放依頼を中継している状態を示すロック中継状態のいずれかをとるリソースの状態と、クライアント名と、サーバ情報とを含むグローバルロック管理情報によりリソースを管理し、
前記中継サーバノードは、前記中継サーバノードより１つ上位の階層のノードからロック獲得依頼またはロック解放通知を受けた場合、及び前記中継サーバノードより１つ下位の階層のノードからロック解放依頼またはロック獲得通知を受けた場合、自身が管理している前記グローバルロック管理情報のリソース状態に従い状態遷移して対応するロック処理を行うことを特徴とする請求項４記載の階層的分散システムにおけるリソースのロック方法。
【請求項６】
リソースの一貫性を制御するために当該リソースのロックの獲得・解放を管理し、自身が獲得したロックをロック解放依頼が送られるまで保持している複数のノードが階層的に接続された階層構造の階層的分散システムであって、前記階層構造の最上位層をなし、リソースを利用するクライアントノードと、前記階層構造の最下位層をなし、リソースを有するサーバノードと、前記階層構造の前記最上位層以外で且つ前記最下位層以外の階層をなし、自身より１つ上位の階層のノードに対してはサーバとして作用し、自身より１つ下位の階層のノードに対してはクライアントとして作用する中継サーバノードとを具備する階層的分散システムにおいて前記中継サーバノードで実行されるプログラムであって、
前記中継サーバノードに、
前記中継サーバノードより１つ上位の階層のノードから前記中継サーバノードにロック獲得依頼が送られた場合、当該獲得依頼を前記中継サーバノードから前記中継サーバノードより１つ下位の階層のノードに伝達するステップと、
前記中継サーバノードより１つ下位の階層のノードから前記中継サーバノードにロック解放依頼が送られた場合、当該解放依頼を前記中継サーバノードから前記中継サーバノードより１つ上位の階層のノードに伝達するステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、リソースの一貫性を制御するために当該リソースのロックの獲得・解放を管理し、自身が獲得したロックを外部からロック解放依頼が送られるまで保持している複数のノードが階層的に接続された階層的分散システム及び同システムにおけるリソースのロック方法に関する。
【０００２】
【従来の技術】
一般に、クライアント・サーバ方式の分散システムでは、リソースの一貫性を保つためのロック機構（ロック獲得・解放機構）がクライアント及びサーバの双方に用意される。このロック機構では、サーバが提供するリソースをクライアントが獲得するには、クライアントでのロック獲得依頼、サーバでのロック獲得、クライアントへのロック獲得通知という手順が適用される。
【０００３】
このようなロック機構では、直接サーバのリソースの状態を変えると、ロックの獲得や解放の度に一貫性を保つ必要があるため、オーバヘッドが大きい。特に、リソースを獲得したクライアントは、近いうちに（短い時間内に）再度当該リソースを利用する可能性が高いため、ロック解放時に、直接サーバのロックを解放することはオーバヘッドが大きい。
【０００４】
このオーバヘッドを抑えるために従来から、クライアントでのロック解放時に、直接サーバのロックを解放せず、他のクライアントからロック獲得が依頼されるまで、実際の解放を延期するＬａｚｙ  Ｒｅｌｅａｓｅ  Ｃｏｎｓｉｓｔｅｎｃｙ方式が取られている。
【０００５】
Ｌａｚｙ  Ｒｅｌｅａｓｅ  Ｃｏｎｓｉｓｔｅｎｃｙ方式では、各クライアント上にグローバルロック管理テーブルを持ち、サーバ上にはリソースロック管理テーブルを持つ。グローバルロック管理テーブルのリソース状態には、ロック使用、ロック保持、ロック解放の３つの状態がある。リソースロック管理テーブルのリソース状態には、ロック使用、ロック解放の２つの状態がある。
【０００６】
このシステムでは、次の手順でグローバルロックを確保する。
【０００７】
（１）クライアントのプロセスがグローバルロック獲得を依頼する。この場合、クライアントでは、グローバルロック管理テーブルのリソース状態に従って次のように処理する。
【０００８】
・ロック使用の場合、そのロックが解放されるまで待つ。
【０００９】
・ロック保持の場合、ロック使用状態にしてロック獲得を依頼したプロセスヘグローバルロックの獲得を通知する。
【００１０】
・ロック解放の場合、サーバへロック獲得を依頼する。
【００１１】
（２）サーバにロック獲得依頼があると、当該サーバはリソースロック管理テーブルのリソース状態に従い次の処理を行う。
【００１２】
・ロック解放の場合、リソースをロックし、リソースロック管理テーブルにリソース名とクライアント名をロック使用状態で登録し、クライアントヘグローバルロック獲得を通知する。
【００１３】
・ロック使用の場合、リソースロック管理テーブルを検索し、ロックを獲得しているクライアントにロック解放依頼を送り解放を待つ。
【００１４】
ロックが解放されたら、リソースロック管理テーブルヘリソース名とクライアント名をロック使用状態で登録して、クライアントヘグローバルロック獲得を通知する。
【００１５】
（３）ロック解放依頼を受けたクライアントでは、グローバルロック管理テーブルのリソース状態に従い処理を行う。
【００１６】
・ロック使用の場合、そのロックが解放されるまで待つ。
【００１７】
・ロック保持の場合、ロック解放状態にして、サーバへロック解放を通知する。
【００１８】
・ロック解放の場合、ロック解放をサーバヘ通知する。
【００１９】
（４）ロック解放を通知されたサーバでは、リソースロック管理テーブルのリソース状態をロック解放とする。リソースのロック待ちのクライアントがある場合は、リソースロック管理テーブルにリソース名とクライアント名をロック使用状態で登録し、クライアントにグローバルロック獲得を通知する。
【００２０】
（５）グローバルロック獲得通知を受けたクライアントでは、グローバルロック管理テーブルをロック使用状態とし、ロック獲得を依頼したプロセスヘグローバルロック獲得を通知する。
【００２１】
また、クライアントでロックを解放する場合は、次の処理が行われる。
【００２２】
（１）サーバからロック解放依頼がないかチェックする。
【００２３】
・ロック解放依頼がない場合、グローバルロック管理テーブルをロック保持状態とする。
【００２４】
・ロック解放依頼がある場合、グローバルロック管理テーブルをロック解放状態とし、ロック解放をサーバへ通知する。
【００２５】
【発明が解決しようとする課題】
一方、近時は、クライアントが他のクライアントのサーバとなると共に他のサーバのクライアントとなる階層的な分散システムが提案されている。この階層的な分散システムでは、１つのクライアントから利用可能なリソースが飛躍的に増大するという利点がある。ここでは、階層構造の最上位層をサーバにはならないクライアントと定義し、階層構造の最下位層をクライアントにはならないサーバと定義する。
【００２６】
しかし、上記した階層的な分散システムにＬａｚｙ  Ｒｅｌｅａｓｅ  Ｃｏｎｓｉｓｔｅｎｃｙ方式を適用した場合、次のような問題がある。
まず、Ｌａｚｙ  Ｒｅｌｅａｓｅ  Ｃｏｎｓｉｓｔｅｎｃｙ方式では、クライアントの持つロック保持状態が、当該クライアントのサーバ上ではロック使用状態となる。このサーバ上では、クライアントのロック保持状態は見えない。一方、階層的な分散システムでは、ロック使用状態にあるサーバに対して、当該サーバより更に下位層のサーバからのロック解放依頼が発生する可能性がある。しかしロック使用状態にあるサーバは、クライアントのロック保持状態は見えないため、更に下位層のサーバからのロック解放依頼に対応することができない。
【００２７】
本発明は上記事情を考慮してなされたものでその目的は、サーバからのロック解放依頼処理を更に上位のクライアントに通知していく仕組みを作ることで、階層的に構成された分散システム上でのグローバルロックの獲得と解放を行うことができ、階層的な分散システムのリソースを一貫性制御する機能を実現する階層的分散システム及び同システムにおけるリソースのロック方法を提供することにある。
【００２８】
【課題を解決するための手段】
本発明は、リソースの一貫性を制御するために当該リソースのロックの獲得・解放を管理し、自身が獲得したロックを外部からロック解放依頼が送られるまで保持しているロック獲得・解放機構を備えた複数のノードが階層的に接続された階層的分散システムであって、リソースを利用するクライアントノードと、
リソースを有するサーバノードと、上記クライアントノードと上記サーバノードとの間に配置され、クライアントノードに対してはサーバとして作用し、サーバノードに対してはクライアントとして作用する中継サーバノードとを備え、この中継サーバノードのロック獲得・解放機構に、クライアントノードからのロック獲得依頼をサーバノードに伝達する機能と、サーバノードからのロック解放依頼をクライアントに伝達する機能とを持たせたことを特徴とする。
【００２９】
このような構成においては、クライアントとサーバとの間に両者をつなぐロックの中継サーバを配置したことにより、リソースを持っているサーバからのロック解放要求を実際にロックを保持しているクライアントに伝達することが可能となり、階層的分散システムにおけるグローバルロックの獲得と解放を実現できる。
【００３０】
ここで、クライアント、サーバ及び中継サーバの各ノードに、リソースのロック管理のために、当該リソースのリソース識別名と、当該リソースの状態であって、ロック使用状態、ロック保持状態、ロック解放状態、またはロックの獲得依頼もしくはロックの解放依頼を中継している状態を示すロック中継状態のいずれかをとるリソース状態と、クライアント名と、サーバ情報とを含むグローバルロック管理情報を登録するグローバルロック管理テーブルを設けるとよい。
【００３１】
このように、クライアント、サーバ及び中継サーバの各ノードが同一データ構造のグローバルロック管理情報を持つことにより、クライアント、サーバ及び中継サーバの処理が統一され、システムの実現と管理が容易にできる。しかも、リソース状態の１つとしてロック中継状態という新たなリソース状態を適用したことにより、クライアントからサーバへのロック獲得依頼の中継とサーバからクライアントへのロック解放依頼の中継が容易に実現できる。
【００３２】
また本発明は、中継サーバがクライアントからのロック獲得依頼を受けた場合、当該中継サーバ自身の持つグローバルロック管理情報の示す対象リソースの状態が、ロック使用状態、ロック保持状態、またはロック中継状態のいずれかであるときは、当該中継サーバ（がクライアントとして作用する場合の当該中継サーバ）にとってのサーバに解放依頼を出さずに、当該中継サーバ自身のロック解放またはロックを保持しているクライアントノードへのロック解放依頼を送出するようにしたことをも特徴とする。
【００３３】
このように、中継サーバがクライアントからのロック獲得依頼を受けた場合、当該中継サーバ自身の持つグローバルロック管理情報の示す対象リソースの状態が、ロック使用状態、ロック保持状態、またはロック中継状態のいずれかであるのは、ロックの獲得・解放が中継サーバで接続されているノード間で行われる場合である。この場合、即ちリソース状態が特定の条件を満たす場合には、中継サーバが自身にとってのサーバ（いわゆる下位のサーバ）へ通信することなく、グローバルロックの獲得・解放が実現できるため、効率よくロックの管理が行える。
【００３４】
以上の構成の階層的分散システムに係る本発明は、当該システムにおけるリソースのロック方法に係る発明としても成立し、また当該システムにおいて中継サーバで実行されるプログラムに係る発明としても成立する。
【００３５】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
【００３６】
図１は本発明の一実施形態に係る階層的な分散システムのシステム構成を示す。
図１において、最下位層のサーバＳ１は実際のリソースを持つサーバであり、クライアントにはならないものとする。サーバＳＣ１及びＳＣ２はサーバＳ１の上位層に位置し、当該サーバＳ１のリソースをクライアントとしてリモートアクセスする。また、サーバＳＣ１及びＳＣ２は、自身がクライアントとしてアクセスしたサーバＳ１のリソースまたは自身が有するリソースを、それぞれ上位のクライアントＣ１，Ｃ２及びＣ３，Ｃ４に提供する。このサーバＳＣ１及びＳＣ２を中継サーバＳＣ１及びＳＣ２と呼ぶ。
【００３７】
クライアントＣ１，Ｃ２とクライアントＣ３，Ｃ４とは、それぞれサーバＳＣ１とサーバＳＣ２のクライアントである。また、クライアントＣ１〜Ｃ４のうちのクライアントＣ１は、上位のクライアントＣＣ１のサーバともなる。つまりクライアントＣ１は、自身がクライアントとしてアクセスしたサーバＳＣ１またはＳ１のリソースを、上位のクライアントＣＣ１に提供する。そこで、このクライアントＣ１を中継サーバＣ１と呼ぶこともある。
【００３８】
図１のシステム内の各ノードＳ１，ＳＣ１，ＳＣ２，Ｃ１，Ｃ２，Ｃ３，Ｃ４，ＣＣ１は、それぞれ、リソースの一貫性を保つためのグローバルロック機構としてのロック獲得・解放機構１１と、このロック獲得・解放機構１１により利用される改良されたグローバルロック管理テーブル１２とを備えている。
【００３９】
図２はグローバルロック管理テーブル１２のデータ構造例を示す。
図２に示すように、グローバルロック管理テーブル１２の各エントリは、管理の対象となるリソースを表すリソース名と、当該リソースの状態を表すリソース状態と、クライアント名と、サーバ情報とがそれぞれ登録されるフィールドを有する。このテーブル１２の特徴は、リソース状態（ＲＳ）として、ロック使用、ロック保持、ロック解放の各状態（ＲＳ１，ＲＳ３，ＲＳ４）の他に、ロック中継と呼ぶ状態（ＲＳ２）が存在する点にある。このロック中継とは、クライアントからのロック獲得要求をサーバに対して中継している状態、またはサーバからのロック解放依頼をクライアントに中継している状態を表す。
【００４０】
図３にロック獲得・解放機構１１によるグローバルロックの獲得・解放処理で適用されるリソース状態の状態遷移図を示す。
【００４１】
次に、図１の階層的な分散システムにおけるグローバルロックの獲得・解放処理について、クライアントＣ３が確保しているサーバＳ１のリソースのグローバルロックをクライアントＣ１が獲得する場合を例に、図４乃至図７のフローチャートを適宜参照して説明する。
【００４２】
（１）クライアントＣ１は自身のグローバルロック管理テーブル１２を検索し、目的とするリソース（サーバＳ１のリソース）のリソース状態（ＲＳ）に従い、次の処理を行う。ここで、テーブル１２のサーバ情報欄のサーバ名には、クライアントＣ１から直接見えるサーバＳＣ１、即ちクライアントＣ１の１つ下位のサーバＳＣ１のサーバ名ＳＣ１が登録されている。
【００４３】
・リソース状態がロック使用の場合（ステップＡ６）、クライアントＣ１は、そのロックが解放されるまで待つ（ステップＡ７）。
【００４４】
・リソース状態がロック保持の場合（ステップＡ１）、この例のようにクライアントＣ１内部のプロセスからのロック獲得依頼ならば、つまり他のクライアントからのロック獲得依頼でないならば（ステップＡ２）、クライアントＣ１はグローバルロック管理テーブル１２に目的リソースのリソース名をロック使用状態で登録する（ステップＡ３）。このとき、クライアントＣ１自身が目的リソースのクライアントであることからクライアント名は空欄となる。
【００４５】
・リソース状態がロック解放の場合、つまりロック保持、ロック使用、及びロック中継のいずれでもない場合（ステップＡ１，Ａ６，Ａ８）、この例のように目的のリソースが自身のリソースでないならば（ステップＡ１０）、クライアントＣ１は自身の直接のサーバ、つまり中継サーバＳＣ１に対し、サーバ情報のリソース名でロック獲得を依頼する（ステップＡ１５）。中継サーバＳＣ１より獲得通知があると、クライアントＣ１はグローバルロック管理テーブル１２にロック使用で登録する。
【００４６】
・リソース状態がロック中継の場合（ステップＡ８）、クライアントＣ１はグローバルロック管理テーブル１２でロックを獲得しているクライアントを検索し、そのクライアントへロック解放依頼を送り解放されるまで待つ（ステップＡ９）。ロックが解放されたなら（ステップＣ７）、クライアントＣ１はグローバルロック管理テーブル１２にリソース名をロック使用状態で登録する（ステップＣ８）。このとき、クライアント名は空欄となる。
【００４７】
（２）クライアントＣ１から中継サーバＳＣ１にロック獲得依頼があると、当該中継サーバＳＣ１は自身のグローバルロック管理テーブル１２を依頼されたリソース名で検索し、そのリソース状態に従い、次の処理を行う。ここで、依頼されたリソース名のテーブル１２内エントリ中のサーバ情報のサーバ名には、中継サーバＳＣ１から直接見えるサーバＳ１、即ち中継サーバＳＣ１の１つ下位のサーバＳ１のサーバ名Ｓ１が登録されている。
【００４８】
・リソース状態がロック使用の場合（ステップＡ６）、中継サーバＳＣ１は、そのロックが解放されるまで待つ（ステップＡ７）。ロックが解放されたなら（ステップＣ４）、中継サーバＳＣ１はグローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（Ｃ１）のクライアント名をロック中継状態で登録し（ステップＣ５）、クライアントＣ１へロック獲得を通知する（ステップＣ６）。
【００４９】
・リソース状態がロック保持の場合（ステップＡ１）、この例のようにクライアント（Ｃ１）からのロック獲得依頼ならば（ステップＡ２）、中継サーバＳＣ１はグローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（Ｃ１）のクライアント名とをロック中継状態で登録し（ステップＡ４）、依頼元のクライアントＣ１へロック獲得を通知する（ステップＡ５）。
【００５０】
・リソース状態がロック解放の場合（ステップＡ１，Ａ６，Ａ８）、ロック獲得依頼されたリソースがこの例のように自身のリソースでないならば（ステップＡ１０）、中継サーバＳＣ１は自身の直接のサーバ、つまりサーバＳ１に対し、サーバ情報のリソース名でロック獲得を依頼する（ステップＡ１５）。
【００５１】
・リソース状態がロック中継の場合（ステップＡ８）、中継サーバＳＣ１はグローバルロック管理テーブル１２を参照して依頼されたリソースのロックを獲得しているクライアントを検索し、そのクライアントへロック解放依頼を送って解放されるまで待つ（ステップＡ９）。ロックが解放されたなら（ステップＣ４）、中継サーバＳＣ１は、グローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（Ｃ１）のクライアント名をロック中継状態で登録し（ステップＣ５）、クライアントＣ１へロック獲得を通知する（ステップＣ６）。
【００５２】
（３）中継サーバＳＣ１からサーバＳ１にロック獲得依頼があると、当該サーバＳ１は自身のグローバルロック管理テーブル１２を依頼されたリソース名で検索し、そのリソース状態に従い、次の処理を行う。ここで、依頼されたリソース名のテーブル１２内エントリ中のサーバ情報は空欄である。そのためサーバＳ１は、自分が依頼されたリソースのサーバであることを判別できる。
【００５３】
・リソース状態がロック使用の場合（ステップＡ１）、サーバＳ１は、そのロックが解放されるまで待つ（ステップＡ７）。ロックが解放されたなら（ステップＣ４）、サーバＳ１はグローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（中継サーバＳＣ１）のクライアント名をロック中継状態で登録し（ステップＣ５）、中継サーバＳＣ１へロック獲得を通知する（ステップＣ６）。
【００５４】
・リソース状態がロック保持の場合（ステップＡ１）、この例のようにクライアント（中継サーバＳＣ１）からのロック獲得依頼ならば（ステップＡ２）、サーバＳ１は次のロック解放状態と同様に、グローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（中継サーバＳＣ１）のクライアント名とをロック中継状態で登録し（ステップＡ４）、依頼元クライアントである中継サーバＳＣ１へロック獲得を通知する（ステップＡ５）。
【００５５】
・リソース状態がロック解放の場合（ステップＡ１，Ａ６，Ａ８）、ロック獲得依頼されたリソースがこの例のように自身のリソースであり（ステップＡ１０）、且つクライアント（中継サーバＳＣ１）からのロック獲得依頼であるならば（ステップＡ１１）、サーバＳ１はグローバルロック管理テーブルに１２に対し、依頼されたリソース名と依頼元クライアント（中継サーバＳＣ１）のクライアント名とをロック中継状態で登録し（ステップＡ１３）、依頼元クライアントである中継サーバＳＣ１へロック獲得を通知する（ステップＡ１４）。
【００５６】
・リソース状態がロック中継の場合（ステップＡ８）、サーバＳ１はグローバルロック管理テーブル１２を参照して依頼されたリソースのロックを獲得しているクライアント（中継サーバＳＣ２）を検索し、そのクライアントへロック解放依頼を送って解放されるまで待つ（ステップＡ９）。ロックが解放されたなら（ステップＣ４）、サーバＳ１はグローバルロック管理テーブル１２に対し、依頼されたリソース名と依頼元クライアント（中継サーバＳＣ１）のクライアント名をロック中継状態で登録し（ステップＣ５）、依頼元のクライアントである中継サーバＳＣ１へロック獲得を通知する（ステップＣ６）。
【００５７】
（４）ロック解放依頼を受けた中継サーバＳＣ２は、自身のグローバルロック管理テーブル１２を依頼されたリソース名で検索し、そのリソース状態に従い、次の処理を行う。
【００５８】
・リソース状態がロック使用の場合（ステップＢ４）、中継サーバＳＣ２は、そのロックが解放されるまで待つ（ステップＢ５）。ロックが解放されたなら（ステップＣ４）、この例のようにサーバ（Ｓ１）からのロック解放依頼のときは（ステップＣ１）、中継サーバＳＣ２はグローバルロック管理テーブル１２のリソース状態をロック使用からロック解放に変更し（ステップＣ２）、依頼元のサーバＳ１にロック解放を通知する（ステップＣ３）。
【００５９】
・リソース状態がロック保持の場合（ステップＢ１）は、中継サーバＳＣ２はグローバルロック管理テーブル１２のリソース状態をロック保持からロック解放に変更し（ステップＢ２）、サーバＳ１へロック解放を通知する（ステップＢ３）。
【００６０】
・リソース状態がロック解放の場合（ステップＢ１，Ｂ４，Ｂ６）、ロック解放を依頼されたリソースがこの例のように自身のリソースでないならば（ステップＢ８）、中継サーバＳＣ２はロック解放をサーバＳ１ヘ通知する（ステップＢ１０）。
【００６１】
・リソース状態がロック中継の場合（ステップＢ６）、中継サーバＳＣ２はグローバルロック管理テーブル１２を参照して依頼されたリソースのロックを獲得しているクライアント（Ｃ３）を検索し、そのクライアント（Ｃ３）へロック解放依頼を送って解放されるまで待つ（ステップＢ７）。ロックが解放されたなら（ステップＣ１）、中継サーバＳＣ２はグローバルロック管理テーブル１２のリソース状態をロック中継からロック解放に変更し（ステップＣ２）、依頼元のサーバＳ１にロック解放を通知する（ステップＣ３）。
【００６２】
（５）ロック解放依頼を受けたクライアントＣ３は、自身のグローバルロック管理テーブル１２を依頼されたリソース名で検索し、そのリソース状態に従って上記（４）の中継サーバＳＣ２と同様の処理を行い、ロック解放を中継サーバＳＣ２へ通知する（ステップＣ２，Ｃ３）。
【００６３】
（６）ロック解放を通知された中継サーバＳＣ２は（ステップＣ１）、自身のグローバルロック管理テーブル１２のリソース状態をロック解放に変更し（ステップＣ２）、ロック解放をサーバＳ１へ通知する（ステップＣ３）。
【００６４】
（７）ロック解放を通知されたサーバＳ１は、リソースのロック待ちがないかチェックする。
【００６５】
・リソースロック待ちがない場合、グローバルロック管理テーブルのリソース状態をロック保持にする（ステップＣ９）。
【００６６】
・リソースロック待ちのクライアントがある場合（ステップＣ４）、サーバＳ１はグローバルロック管理テーブル１２にリソース名とクライアント名をロック中継状態で登録し（ステップＣ５）、クライアント（ＳＣ１）にグローバルロック獲得を通知する（ステップＣ６）。
【００６７】
・サーバＳ１自身がリソース待ちの場合（ステップＣ７）、サーバＳ１はグローバルロック管理テーブル１２にリソース名をロック使用状態で登録する（ステップＣ８）。このとき、クライアント名は空欄となる。
【００６８】
（８）サーバＳ１からグローバルロツク獲得を通知された中継サーバＳＣ１は、上記（７）のサーバＳ１と同様の処理をして、クライアントＣ１にグローバルロック獲得を通知する（ステップＣ５，Ｃ６）。
【００６９】
（９）中継サーバＳＣ１からグローバルロック獲得通知を受けたクライアントＣ１は（ステップＤ１）、自身のグローバルロック管理テーブル１２をロック使用状態とし（ステップＤ４）、ロックを依頼したクライアントＣ１上のプロセスヘグローバルロック獲得を通知する（ステップＤ３）。
【００７０】
また、クライアントＣ１でグローバルロックを解放する場合は、次の処理（１）が行われる。
【００７１】
（１）中継サーバＳＣ１からロック解放依頼がないかチェックする（ステップＣ１）。
【００７２】
・ロック解放依頼がない場合、グローバルロック管理テーブル１２をロック保持状態とする（ステップＣ９）。
【００７３】
・ロック解放依頼がある場合、グローバルロック管理テーブル１２をロック解放状態とし、ロック解放をＳＣ１へ通知する（ステップＣ２，Ｃ３）。
【００７４】
以上に述べた、クライアントＣ３が保持しているサーバＳ１のリソースを中継サーバＣ１がグローバルロックするまでの手順を、図８のシーケンスチャートに示す。
【００７５】
図８において、クライアントＣ１で、目的とするサーバＳ１のリソースのグローバルロックを獲得しようとした場合、Ｃ１→ＳＣ１→Ｓ１のようにロック獲得依頼が流れる。ロック獲得依頼がサーバＳ１で受け取られると、当該サーバＳ１では、対象としているリソースがクライアントＣ３からリモートロックされているロック中継状態にあることを認識できる。そこで、獲得されているロックの解放依頼がＳ１→ＳＣ２→Ｃ３のように流れ、これによりクライアントＣ３で保持されていたロックが解放される。ロック解放は、Ｃ３→ＳＣ２→Ｓ１と通知され、これによりＳ１→ＳＣ１→Ｃ１のようにグローバルロック獲得が通知される。
【００７６】
この例により、間接的に接続されているクライアントＣ１，Ｃ３間で、確実にロックの獲得・解放が行えることが分かる。
【００７７】
他の例として、中継サーバＳＣ１が保持しているサーバＳ１のリソースをクライアントＣ１がグローバルロックするまでの手順を、図９（ａ）のシーケンスチャートに示す。
【００７８】
また、クライアントＣ２が保持しているサーバＳ１のリソースをクライアントＣ１がグローバルロックするまでの手順を、図９（ｂ）のシーケンスチャートに示す。
【００７９】
この図９（ａ）及び（ｂ）の例から、中継サーバＳＣ１で接続されている隣接クライアント間（図９（ａ）ではクライアントＣ１と中継サーバＳＣ１自身、図９（ｂ）ではクライアントＣ１とクライアントＣ２）では、サーバＳ１、中継サーバＳＣ２への通信を行うことなく、効率よくロックの解放・獲得が行われていることが分かる。このようにロックの獲得・解放が中継サーバで接続されている隣接クライアント（ノード）間で行われる場合（一方のノードが中継サーバ自身となる場合を含む）、中継サーバがクライアントからのロック獲得依頼を受けた際の当該中継サーバ自身の持つグローバルロック管理情報の示す対象リソースの状態は、ロック使用状態、ロック保持状態、またはロック中継状態のいずれかとなる。
【００８０】
このように本実施形態においては、階層的に構成された分散システムで間接的に接続されたクライアント間で、確実にロックの解放・獲得が行える上に、中継サーバで接続されている隣接するクライアント間では、サーバとの通信を抑え、効率よくロックの解放・獲得が可能となる。
【００８１】
また、階層的に構成された分散システムでは、クライアントと直接または間接的に接続されるサーバを中継サーバを含めて複数とすることができることから、サーバ１台当たりのリソース数には制限があっても、クライアントからアクセス（利用）可能なリソース数を容易に拡張することが可能になる。
【００８２】
このような階層的な分散システムとしては、例えば直接通信することが不可能な複数のネットワーク、例えばＬＡＮ（ローカル・エリア・ネットワーク）とＳＡＮ（ストレージ・エリア・ネットワーク）をゲートウェイ等の接続装置で接続して構築される階層的なネットワークシステムがこれにあたる。この階層的な分散システムで共有される例えば分散ファイルシステムを実現する際に、各ノード（クライアント、中継サーバ、サーバ）にロック獲得・解放機構１１を持たせることで、ファイルシステム管理データの一貫性制御のためのロック機構として利用可能である。こうすることで、１台に接続可能なディスク等のリソース数（容量）に制限されていたグローバルファイルシステムの容量を無制限に拡大することが可能となる。
【００８３】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００８４】
【発明の効果】
以上詳述したように本発明によれば、クライアントとサーバとの間に両者をつなぐロックの中継サーバを配置して、クライアントからのロック獲得依頼をサーバに伝達し、サーバからのロック解放依頼をクライアントに伝達するようにしたので、リソースを持っているサーバからのロック解放要求を実際にロックを保持しているクライアントに伝達することが可能となり、階層的分散システムにおけるグローバルロックの獲得と解放を実現できる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る階層的な分散システムのシステム構成を示す図。
【図２】図１中のグローバルロック管理テーブル１２のデータ構造例を示す図。
【図３】図１中のロック獲得・解放機構１１によるグローバルロックの獲得・解放処理で適用されるリソース状態の状態遷移図。
【図４】ロック獲得依頼受け時の動作を説明するためのフローチャート。
【図５】ロック解放依頼受け時の動作を説明するためのフローチャート。
【図６】ロック解放通知受け時の動作を説明するためのフローチャート。
【図７】ロック獲得通知受け時の動作を説明するためのフローチャート。
【図８】クライアントＣ３が保持しているサーバＳ１のリソースを中継サーバＣ１がグローバルロックするまでの手順を示すシーケンスチャート。
【図９】中継サーバＳＣ１が保持しているサーバＳ１のリソースをクライアントＣ１がグローバルロックするまでの手順と、クライアントＣ２が保持しているサーバＳ１のリソースをクライアントＣ１がグローバルロックするまでの手順とを示すシーケンスチャート。
【符号の説明】
ＣＣ１，Ｃ２，Ｃ３，Ｃ４…クライアント
Ｃ１…クライアント（中継サーバ）
ＳＣ１，ＳＣ２…中継サーバ
Ｓ１…サーバ
１１…ロック獲得・解放機構
１２…グローバルロック管理テーブル
【図１】
0003940563.tif 000002
【図２】
0003940563.tif 000003
【図３】
0003940563.tif 000004
【図４】
0003940563.tif 000005
【図５】
0003940563.tif 000006
【図６】
0003940563.tif 000007
【図７】
0003940563.tif 000008
【図８】
0003940563.tif 000009
【図９】
0003940563.tif 000010