(57)【要約】      （修正有）【課題】端末と被制御装置が通信できないことがある場合でも、デッドロックを検出する。【解決手段】各々が複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１のノードから第１の端末が制御権を有する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３のノードから第２の端末が制御権を付与されることを待っている第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、第１のリンクおよび第２のリンクに沿ってノード間を転送されるように、複数の被制御装置の間を転送されるデッドロック検出メッセージを受信するネットワーク受信部と、デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定するデッドロック判定部とを含む。【選択図】図１２
2015194886.tif 000002
【特許請求の範囲】
【請求項１】
複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御される複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つである分散データ処理装置であって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信するネットワーク受信部と、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定するデッドロック判定部と、
を含む分散データ処理装置。
【請求項２】
前記デッドロック判定部は、前記デッドロック検出メッセージが複数回、前記複数の被制御装置のうちの一つを訪問した場合に、デッドロックが発生していると判定する、請求項１に記載の分散データ処理装置。
【請求項３】
さらに、
自身が前記第１のリンクの前記終点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記始点に対応する前記複数の被制御装置の別の一つを前ノード、自身が前記第１のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記終点に対応する前記複数の被制御装置の別の一つを次ノード、自身が前記第２のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第２のリンクの前記終点に対応する前記複数の被制御装置の別の一つを待ノードとして、前記前ノード、前記次ノード、および前記待ノードに関する情報を記憶する記憶部を含み、
前記資源循環グラフの前記ノードの各々は、前記記憶部（図８、２１０）に格納されている前記前ノード、前記次ノード、および前記待ノードに関する情報が付与されている、
請求項１または２に記載の分散データ処理装置。
【請求項４】
さらに、
前記デッドロック判定部が、前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送るデッドロック解消部を含む、請求項１乃至３のいずれか一項に記載の分散データ処理装置。
【請求項５】
前記デッドロック検出メッセージは、前記資源循環グラフに含まれる前記複数の被制御装置の優先度に関する情報を含み、
さらに、
前記デッドロック判定部が、前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記デッドロック検出メッセージに含まれる前記優先度に基づいて、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送るデッドロック解消部を含む、請求項１乃至３のいずれか一項に記載の分散データ処理装置。
【請求項６】
コンピュータとして機能する複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御されるコンピュータとして機能する複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つで実行される分散データ処理方法であって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信することと、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定することと、
を含む分散データ処理方法。
【請求項７】
コンピュータとして機能する複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御されるコンピュータとして機能する複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つで実行される分散データ処理プログラムであって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信し、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定する、
処理をコンピュータに実行させることを特徴とする分散データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散データ処理装置、分散データ処理方法および分散データ処理プログラムに関するものである。
【背景技術】
【０００２】
ネットワーク機器の普及とモバイル端末の普及により、モバイル端末からネットワーク制御可能な装置を制御する技術が注目されている。例えば、ネットワークにより電球等のデバイスのスイッチのオン、オフが制御可能な電子基板や、ネットワーク制御可能なプロジェクタ等が普及しつつある。
【０００３】
そしてこれらの機器は、一般に「分散システム」と呼ばれる、モバイル端末からネットワーク制御可能な装置を制御し得るシステムで利用され得る。分散システムでは一般に、被制御装置は状態を持ち、モバイル端末から発せられるメッセージにより、被制御装置の持つ状態を変更する構成を取る。また、複数端末により意図しない状態の変更を防ぐため、被制御装置は制御元のモバイル端末に関する情報を管理し、更にモバイル端末からの制御権要求に基づき、モバイル端末への被制御装置の制御権の発行、または制御権待ちの通知を行う。これらの条件により、モバイル端末は制御先のデバイスを常時監視する必要がなく、モバイル端末のネットワーク負荷を低減することが可能である。また、システム上に多くのモバイル端末、被制御装置が存在することが想定されるため、全ての制御、非制御関係を持つことは非現実的であり、モバイル端末、被制御装置共に、自身が制御する、又は制御されるモバイル端末、被制御装置の情報のみを保有する形態を取り得る。
【０００４】
そのような分散システムにおいて、データベースアクセスなどを行う複数のリソースマネージャーにまたがって発生するトランザクション（グローバルトランザクション）の間でのデッドロックを検出可能とする分散システムが知られている（たとえば、特許文献１）。このような分散システムでは、たとえば、トランザクションを一括して管理するトランザクションマネージャーが、複数のトランザクションの間で、複数のリソースマネージャーにまたがって発生する、ソフトウエア資源の占有に関する待ち関係におけるデッドロックを検出しても良い。
【０００５】
また、複数のタスクを並列実行し、各タスクがどの資源を占有しているかを管理するマルチタスクシステムにおいて、デッドロックを効率良く検出する方法が知られている（たとえば、特許文献２）。このようなマルチタスクシステムでは、待ち管理テーブルを設けて、各タスクの「待ち関係」を登録し、この待ち関係からデッドロックを検出し得る。
【０００６】
また、処理内の個別ロックに基づいてデッドロックを検出、分解する分散システムが知られている（たとえば、特許文献３）。このようなシステムでは、分散処理マネージャーが、処理を表すノードと、処理間の依存性を表すエッジとを有する待ちグラフを格納し、待ちグラフを通してプローブを伝搬し、デッドロック依存性を示すサイクリック依存性を検出し得る。
【０００７】
デッドロックの検出、解消方法として、被制御装置の占有権待ち時間が一定時間を超えた場合に、被制御装置の占有権を強制的に解放するタイムアウト方式が知られている（たとえば、特許文献２）。タイムアウトによらないデッドロックの検出方式としては、資源循環グラフを用いたデッドロックの解消方式が知られている（たとえば、非特許文献１）。資源循環グラフを用いたデッドロック検出を行う場合、全ての端末と被制御装置の制御関係を保有する必要があるため、分散システム上でそのまま用いることができない。しかし、端末、被制御装置に分散させて情報を保有した場合でも、それぞれの端末、被制御装置が保有する宛先にメッセージを送信し、メッセージが戻ってくるかを検出することで、資源循環グラフと同様にデッドロック検出を行う、Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムが知られている（たとえば、非特許文献２）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平８−１３７７０７号公報
【特許文献２】特開平６−３３７７９８公報
【特許文献３】特開平６−２１４９６７号公報
【非特許文献】
【０００９】
【非特許文献１】R. Holt, “Some dead lock properties of computer systems”, ACM Computing Surveys, vol. 4, pp. 179-196, 1972.
【非特許文献２】K. Chandy, J. Misra, L. Haas, “Distributed deadlock detection”, ACM Trans. Computer Systems, vol. 1, pp. 144-156, 1983.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムでは端末と被制御装置が常時通信できることを仮定しているため、端末と被制御装置が通信できないことがある場合、正常にデッドロックの検出ができないことがあるという問題がある。
【００１１】
よって、一つの側面として、本発明は、端末と被制御装置が通信できないことがある場合でも、デッドロックの検出が可能な分散データ処理装置、分散データ処理方法および分散データ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御される複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つである分散データ処理装置が開示される。装置は、各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信するネットワーク受信部と、前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定するデッドロック判定部と、を含むことを特徴とする。
【発明の効果】
【００１３】
端末と被制御装置が通信できないことがある場合でも、デッドロックを検出することができる。
【図面の簡単な説明】
【００１４】
【図１】端末から被制御機器を操作するシステムの例を示す図である。
【図２】端末間のデッドロックについて説明するための図である。
【図３Ａ】比較例における資源循環グラフの記法の例を示す図である。
【図３Ｂ】比較例における資源循環グラフの記法の別の例を示す図である。
【図４】資源循環グラフによるデッドロック検出について説明するための図である。
【図５】分散システム上でのデッドロック検出について説明するための図である。
【図６】資源循環グラフの例を示す図である。
【図７】Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムでのデッドロック検出の例を示す図である。
【図８】実施形態の分散データ処理装置の機能ブロックの例を示す図である。
【図９Ａ】実施形態の資源循環グラフの記法の例を示す図である。
【図９Ｂ】実施形態の資源循環グラフの記法の別の例を示す図である。
【図１０】ライン型トポロジの資源循環グラフの例を示す図である。
【図１１】スター型トポロジの資源循環グラフの例を示す図である。
【図１２】実施形態における資源循環グラフの例を示す図である。
【図１３】前・次・待ノード情報の例を示す図である。
【図１４】デッドロック検出メッセージの例を示す図である。
【図１５】装置の制御権取得時の資源循環グラフの変形の例を説明するための図である。
【図１６】装置の制御権取得時の資源循環グラフの変形の別の例を説明するための図である。
【図１７】実施形態の資源循環グラフを用いたデッドロック検出の例について説明するための図である。
【図１８】実施形態の資源循環グラフを用いたデッドロック解消の例について説明するための図である。
【図１９】実施形態の資源循環グラフを用いたデッドロック検出と解消の例について説明するための図である。
【図２０】実施形態の分散データ処理装置の構成の例を示す図である。
【図２１】端末側の装置制御権獲得処理における処理の流れの例を示す図である。
【図２２】端末側の次ノード追加・変形処理における処理の流れの例を示す図である。
【図２３】端末側の待ちノード追加処理における処理の流れの例を示す図である。
【図２４】実施形態の資源循環グラフを用いたデッドロック検出処理における処理の流れの例を示す図である。
【図２５】実施形態の資源循環グラフを用いたデッドロック解消処理における処理の流れの例を示す図である。
【図２６】装置側の装置制御権獲得処理における処理の流れの例を示す図である。
【図２７】端末側の装置制御権解放処理における処理の流れの例を示す図である。
【図２８】デッドロック検出メッセージ送信処理における処理の流れの例を示す図である。
【図２９】装置側のデッドロック解消処理における処理の流れの例を示す図である。
【図３０】端末から被制御機器を操作するシステムの別の例を示す図である。
【図３１Ａ】デッドロックの検出、解消の例について説明するための図である（その１）。
【図３１Ｂ】デッドロックの検出、解消の例について説明するための図である（その２）。
【図３１Ｃ】デッドロックの検出、解消の例について説明するための図である（その３）。
【図３１Ｄ】デッドロックの検出、解消の例について説明するための図である（その４）。
【図３１Ｅ】デッドロックの検出、解消の例について説明するための図である（その５）。
【図３１Ｆ】デッドロックの検出、解消の例について説明するための図である（その６）。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、実施形態の分散データ処理装置、分散データ処理方法および分散データ処理プログラムについて説明する。
【００１６】
図１は、端末から被制御機器を操作するシステムの例を示す図である。ネットワーク機器の普及とモバイル端末の普及により、モバイル端末からネットワーク制御可能な装置を制御する技術が注目されている。例えば、ネットワークにより電球等のデバイスのスイッチのオン／オフの制御可能な電子基板や、ネットワーク制御可能なプロジェクタ等が知られている。
【００１７】
ネットワーク制御可能な装置を制御するモバイル端末、タブレット端末等のモバイルコンピュータを、単に「端末」と呼ぶことがある。また、ネットワーク制御可能な機器を、「被制御機器」や「被制御装置」と呼ぶことがある。また、端末および被制御装置を単に、「装置」と呼ぶことがある。
【００１８】
また、ある端末が、ある被制御装置をネットワーク制御可能なとき、端末は被制御装置の制御権を有する、と言うことがある。また、このことを、端末は被制御装置を占有する占有権を有する、と言うこともある。これらは互いに、交換可能な表現である。ここで、制御権または占有権は、端末から被制御装置への要求に応答して、被制御装置から端末に与えられるものとしても良い。そして、端末が、被制御装置から制御権または占有権を与えられるのを待っている状態を、「制御権待ち」状態、または「占有権待ち」状態と呼ぶことがある。
【００１９】
以下では、「制御権」と「占有権」は互いに交換可能な用語である。
図１には、オペレータＡ、Ｂが有するモバイル端末、タブレット端末等のモバイルコンピュータ１０２、１０４を用いて、会議室など、決まった場所に設置された電子機器１０６、１０８、１１０を操作するシステム１０を示している。図１では、オペレータＡは、所有するモバイル端末１０２を用いて、カメラ１０６、プロジェクタ１０８を同時に操作し、カメラ１０６で撮像した映像を、プロジェクタ１０８から出力し得る。また、オペレータＢは、所有するタブレット１０４を用いて、タブレット１０４に記憶された曲の中から決まった曲がオーディオ機器１１０から繰り返し流れるようにしても良い。
【００２０】
これら、モバイルコンピュータ１０２、１０４からネットワーク制御可能な装置、カメラ１０６、プロジェクタ１０８、オーディオ機器１１０等を制御するようなシステム１０においては、一般に被制御装置は状態を持つ。例えばプロジェクタ１０８においては、投影中状態、非投影状態、などの状態があっても良い。また、オーディオ機器１１０においては、音量の大きさなど、連続的な状態があっても良い。
【００２１】
図１に示されているシステム１０では、端末から発せられるメッセージにより、被制御装置の持つ状態を変更する構成を取る。例えば、図１においては、オペレータＡのスマートフォン等のモバイルコンピュータ１０２の操作により、プロジェクタ１０８がカメラ１０６で撮像された映像を出力するか、それともカメラ１０６との接続を切って設定画面を出すかの操作が可能である。また、オペレータＢの操作により、スピーカ等のオーディオ機器１１０から流す曲の種類を変更することが可能である。
【００２２】
また、複数の端末により意図しない状態の変更を防ぐため、被制御装置は制御元の端末の情報を管理する。更に被制御装置は、端末からの制御権要求に基づき、端末への被制御装置の制御権の発行、または制御権待ちの通知を行う。例えば、図１においては、カメラ１０６、プロジェクタ１０８はオペレータＡが所有する端末１０２に操作されているが、新たにオペレータＡがスピーカ１１０の操作をしようとした場合は、スピーカ１１０から制御権待ちのメッセージを受け取り、オペレータＢがオーディオ機器１１０の制御権を解放するまで、オーディオ機器１１０の制御権待ちをすることになる。
【００２３】
このような構成により端末は制御先の被制御装置を常時監視する必要がなく、端末のネットワーク負荷を低減することが可能である。例えば、オペレータＢの端末１０４は常時、オーディオ機器１１０と通信する必要はなく、曲の切り替え操作を行う場合にのみ、オーディオ機器と通信すればよい。
【００２４】
また、システム上に多くの端末、被制御装置が存在することが想定されるため、全ての制御、非制御関係を持つことは非現実的であり、端末・被制御装置共に、自身が制御する、又は制御される端末・被制御装置の情報のみを保有する形態を取っても良い。例えば、オペレータＡの端末１０２はプロジェクタ１０８、カメラ１０６の制御権情報を保持しているが、オーディオ機器１１０がオペレータＢに操作されているという情報は持たない。
このようなシステム１０は、一般に「分散システム」と呼ばれることもある。
【００２５】
図２は、端末間のデッドロックについて説明するための図である。
ネットワーク制御可能な機器をモバイル端末から制御しようとする場合、端末間のデッドロックの解消は、アプリケーションの安定した操作の実現には不可欠である。デッドロックは、端末間で生じる制御の競合であり、複数の端末が、複数の機器を制御する場合に生じる。
【００２６】
例えば図２に示されているように、端末Ａ（１０２）、端末Ｂ（１０４）で、プロジェクタ１０８とオーディオ機器１１０の両者が必要なアプリケーションが実行されている状況を考える。このとき、端末Ａ（１０２）ではまずプロジェクタ１０８の制御権を、端末Ｂ（１０４）では、まずはオーディオ機器１１０の制御権を取得する。次に端末Ａ（１０２）はオーディオ機器１１０、端末Ｂ（１０４）はプロジェクタ１０８の制御権を取得しようとした場合、はオーディオ機器１１０もプロジェクタ１０８も既に占有されているため、端末Ａ、端末Ｂともに制御権待ちの状態になる。しかし、端末Ａ（１０２）、端末Ｂ（１０４）ともにお互いに必要な機器の制御権を保有したまま制御権待ちをしているために処理が先に進むことがなく、時間が経過しても競合が解消されることはない。このような、処理同士が競合を起こし、処理が先に進めなくなってしまう状態がデッドロックである。
【００２７】
デッドロックは自動的には解消することはないため、何らかの手段でデッドロックを検出し、解消することが必要である。
【００２８】
デッドロックの単純な検出、解消手段の一つは、被制御装置の占有権待ち時間が一定時間を超えた場合に、被制御装置の占有権を強制的に解放するタイムアウト方式である。しかし、タイムアウト方式では、制御権の誤解放や長時間の制御権待ちを防ぐためのタイムアウト時間の設定が困難である。また、制御権の解放を検出するために端末と被制御装置の間でポーリングが必要である。そのため、電力消費が大きくなる、といった問題から、特にモバイル端末上での実行には適さない。
【００２９】
タイムアウトによらないデッドロックの検出方式としては、資源循環グラフを用いたデッドロックの解消方式が知られている。
【００３０】
デッドロックの検出技法としては、待ちグラフによる手法も知られている。待ちグラフでも処理をノードとするグラフ上の循環路を検出することでデッドロックの検出を行っているため、資源循環グラフと同原理でデッドロックの検出を行っている。
【００３１】
図３Ａは、比較例における資源循環グラフの記法の例を示す図であり、図３Ｂは比較例における資源循環グラフの記法の別の例を示す図である。
【００３２】
図３Ａ、３Ｂでは、端末、被制御装置をノードとして表し、丸で囲まれた装置は端末を、四角で囲まれた装置は被制御装置を表すこととする。更にグラフ上のリンクにより、端末と被制御装置の制御関係、制御待ち関係を表すものである。
【００３３】
図３Ａに示されている例では、装置１から端末Ａに向けて矢印が伸びている。このように、被制御装置から端末に伸びるリンクによって、端末が被制御装置を制御していることを示すことがある。
【００３４】
図３Ｂに示されている例では、端末Ａから装置１に向けて矢印が伸びている。このように、端末から被制御装置に伸びるリンクによって、端末Ａは、被制御装置１の制御権待ち状態にあることを示すことがある。
【００３５】
このとき、端末間のデッドロック発生時には資源循環グラフ上で循環路が生じることが知られており、資源循環グラフ上で循環路が生じているかを検査することにより、デッドロックの検出が可能である。このことを図４を参照しながら説明する。
【００３６】
図４は、資源循環グラフによるデッドロック検出について説明するための図である。
例えば、図４に示されている例では、「端末Ａ→装置１→端末Ｂ→装置２→端末Ａ」という循環路が生じている。このため、デッドロックが発生していることを検出することができる。
【００３７】
資源循環グラフを用いたデッドロック検出を行う場合、全ての端末と被制御装置の制御関係を保有する必要があるため、分散システム上でそのまま用いることができない。しかし、端末、被制御装置に分散させて情報を保有した場合でも、それぞれの端末、被制御装置が保有する宛先にメッセージを送信し、メッセージが戻ってくるかを検出することで、資源循環グラフと同様にデッドロック検出を行う方法、たとえばＣｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムが知られている。
【００３８】
図５は、分散システム上でのデッドロック検出について説明するための図である。
図５に示されている例では、端末は自身が制御権待ちをしている被制御装置（装置１）の情報を、被制御装置（装置１）は自身の制御権を持つ端末の情報を記憶しておく。デッドロック検出時、端末はメッセージを送出し、またメッセージを受信した端末・被制御装置は、自身が記憶している端末、被制御装置にメッセージを伝送し、更に同一のメッセージが再度同じ端末・被制御装置に到達していないかを監視する。このとき、同一のメッセージが再度端末、又はデバイスに到達する場合は循環路が生じていることと等しいため、同一のメッセージが到達しているかを監視することにより、デッドロックの検出が可能となる。
【００３９】
図６は、資源循環グラフの例を示す図である。
図６に示されている例では、装置２と装置３は端末Ａに制御されている。また、装置１は、端末Ｂに制御されている。そして、端末Ａは装置１の制御権待ちの状態にあり、端末Ｂは装置２の制御権待ちの状態にある。
【００４０】
図７は、Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムでのデッドロック検出の例を示す図である。
【００４１】
Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムは端末と被制御装置が常時通信できることを仮定しているため、端末と被制御装置が通信できないことがある場合、正常にデッドロックの検出ができないことがある。
【００４２】
図７に示されている例で占有関係の状況で端末Ｂがスリープしている場合、端末Ａから発せられたメッセージは、端末２から先には転送されないため、メッセージが端末Ａに戻ってくることはない。従って、実際にはデッドロックが発生しているが、端末との通信ができないことがある場合、Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムではデッドロックを正しく検出できない場合がある。更に、デッドロックが検出されない場合は解消もされないため、端末間の競合が解消されず、システムの動作が妨げられる場合が生じうる。特に、モバイル端末では、スリープや移動などで一時的に通信できないことが多発するため、Ｃｈａｎｄｙ−Ｍｉｓｒａ−Ｈａａｓアルゴリズムの仮定が成立しない場合が多く存在し得る。
【００４３】
一般に、被制御装置は、端末に比べ通信できない場合が少ない。そこで、循環路に被制御装置のみを含むように構成された資源循環グラフを用いて、デッドロックを検出する。このような構成によって、端末と被制御装置が通信できないことがある場合でも、デッドロックの検出が可能な分散データ処理装置、分散データ処理方法および分散データ処理プログラムについて説明する。
【００４４】
以下で開示される分散データ処理装置、分散データ処理方法および分散データ処理プログラムでは、
（Ｃ１）被制御装置のみを循環路に含む資源循環グラフを構成する、
（Ｃ２）被制御装置のみを循環路に含む資源循環グラフを用いた、端末と一時的に通信できない場合でもデッドロックを検出する、
（Ｃ３）被制御装置のみを循環路に含む資源循環グラフを用いた、端末と一時的に通信できない場合でもデッドロックを解消する、
（Ｃ４）デッドロックの検出と解消を同時に行う、
という特徴を有する。
【００４５】
＜分散データ処理装置＞
図８は、実施形態の分散データ処理装置２０の機能ブロックの例を示す図である。分散データ処理装置２０は、端末、被制御装置の一部であっても良い。
【００４６】
分散データ処理装置２０は、デッドロック検出部２００、通信部２０２、デッドロック解消部２０４、資源循環グラフ更新部２０６、優先度決定情報データベース（ＤＢ）２０８、資源循環グラフＤＢ２１０、占有元情報ＤＢ２１２を含み得る。優先度決定情報データベース（ＤＢ）２０８、資源循環グラフＤＢ２１０、占有元情報ＤＢ２１２はまとめて単に記憶部と呼ぶこともある。
【００４７】
デッドロック検出部２００は、デッドロック判定部２０００、転送メッセージ生成部２００２を含む。デッドロック判定部２０００は、メッセージの循環を検出し、デッドロックが発生しているか否かを判定しても良い。転送メッセージ生成部２００２は、分散データ処理装置２０のユニフォーム リソース アイデンティファイア（ＵＲＩ）、保存する優先度等に関する情報を含むメッセージを生成しても良い。
【００４８】
通信部２０２は、ネットワーク受信部２０２０、ネットワーク送信部２０２２を含む。ネットワーク送信部２０２２は、たとえば、デッドロック検出部２００の転送メッセージ生成部２００２で生成されたメッセージを送信しても良い。ネットワーク受信部２０２０は、ネットワークからメッセージを受信し、デッドロック検出部２００のデッドロック判定部２０００に送っても良い。
【００４９】
資源循環グラフ更新部２０６は、占有元端末管理部２０６０、資源追加・更新部２０６２、資源解放部２０６４を含み得る。占有元端末管理部２０６０は、分散データ処理装置２０を占有している端末に関する情報を管理する。その際、占有元端末管理部２０６０は、占有元情報ＤＢ２１２を用いても良い。資源追加・更新部２０６２、は、資源が確保された時に、資源循環グラフで前・次・待ノードを追加、更新しても良い。資源解放部２０６４は、資源が解放された時に、資源循環グラフで前・次・待ノードを更新しても良い。
【００５０】
優先度決定情報ＤＢ２０８は、被制御装置の占有を解除する際の優先度を決定するための情報が格納されていても良い。優先度決定情報ＤＢ２０８に格納されているデータは、転送メッセージ生成部２００２で、メッセージを生成する際に使用され得る。
【００５１】
資源循環グラフＤＢ２１０は、資源循環グラフ上、分散データ処理装置２０を含んでいる被制御装置に付与される前ノード、次ノード、待ノードに関する情報が格納されていても良い。資源循環グラフＤＢ２１０に格納されているデータは、転送メッセージ生成部２００２で、メッセージを生成する際に使用され得る。
【００５２】
デッドロック解消部２０４は、占有を解除する端末を決定して、デッドロック解消のための占有強制解除メッセージを生成し、ネットワーク送信部２０１１に送信させても良い。
【００５３】
たとえば、占有強制解除メッセージは、占有強制解除メッセージを受信した装置が、端末からの制御権要求に応答して占有権を与える通知を中止するような命令を含んでいても良い。
【００５４】
このように分散データ処理装置２０は、複数の端末と、各々が、複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御される複数の被制御装置を含むシステムの複数の端末の一つまたは複数の被制御装置の一つである。
【００５５】
分散データ処理装置２０のネットワーク受信部２０２２は、各々が複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、第１のリンクおよび第２のリンクに沿ってノード間を転送されるように、複数の被制御装置の間を転送されるデッドロック検出メッセージを受信しても良い。
【００５６】
分散データ処理装置２０のデッドロック判定部２０００は、デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定しても良い。
【００５７】
また、分散データ処理装置２０のデッドロック判定部２０００は、デッドロック検出メッセージが複数回、複数の被制御装置のうちの一つを訪問した場合に、デッドロックが発生していると判定しても良い。
【００５８】
分散データ処理装置２０は、さらに、自身が第１のリンクの終点に対応する複数の被制御装置の一つである場合、第１のリンクの始点に対応する複数の被制御装置の別の一つを「前ノード」、自身が第１のリンクの始点に対応する複数の被制御装置の一つである場合、第１のリンクの終点に対応する複数の被制御装置の別の一つを「次ノード」、自身が第２のリンクの始点に対応する前記複数の被制御装置の一つである場合、前記第２のリンクの前記終点に対応する複数の被制御装置の別の一つを「待ノード」として、前ノード、次ノード、および待ノードに関する情報を記憶する記憶部２１０を含み得る。
【００５９】
資源循環グラフのノードの各々は、記憶部２１０に格納されている前ノード、次ノード、および待ノードに関する情報が付与されていても良い。
【００６０】
分散データ処理装置２０は、さらに、デッドロック判定部２０００が、デッドロックが発生していると判定したとき、デッドロックを解消するために、資源循環グラフに含まれる複数の被制御装置の一つの制御権を有する複数の端末の一つに、制御権を解消させるための通知を送るデッドロック解消部２０４を含み得る。
【００６１】
また、デッドロック検出メッセージは、資源循環グラフに含まれる複数の被制御装置の優先度に関する情報を含み、デッドロック判定部２０００が、デッドロックが発生していると判定したとき、デッドロックを解消するために、デッドロック検出メッセージに含まれる優先度に基づいて、資源循環グラフに含まれる複数の被制御装置の一つの制御権を有する複数の端末の一つに、制御権を解消させるための通知を送るデッドロック解消部２０４を含み得る。
【００６２】
＜＜資源循環グラフ＞＞
図９Ａは、実施形態の資源循環グラフの記法の例を示す図であり、図９Ｂは、実施形態の資源循環グラフの記法の別の例を示す図である。
【００６３】
図９Ａに示されているように、装置が実線の矢印で結ばれている場合、同一の端末で制御されていることを示すものとする。
【００６４】
図９Ｂに示されているように、装置が点線の矢印で結ばれている場合、矢印の根っこのノード（根ノード）によって表される装置を制御している端末は、矢印の先のノードで表される装置に対する制御権待ちの状態にあることを示すものとする。
【００６５】
このように、図９Ａ、図９Ｂに示されている資源循環グラフにおいては、端末、被制御装置のたとえば資源循環グラフＤＢ２１０に、以下の２種の情報を記憶させる。
（Ｇ１）同一の端末により制御されている端末・被制御装置を示す、双方向リンクリスト状のリンク（以下、前方リンクを「次ノード」、後方リンクを「前ノード」と呼ぶ）、
（Ｇ２）制御元の端末が制御権待ちをしている被制御装置を示すリンク（以下、「待ノード」と呼ぶ）。
【００６６】
よって、資源循環グラフでは、前・次ノードで連結された端末・被制御装置は同一端末によりリンク（第１のリンク）によって連結されていることを示し、更に前・次ノードで連結された部分グラフの根ノードは、必ず装置を制御する端末となるように構成する。また、待ノードによるリンク（第２のリンク）が伸ばされている被制御装置は、待ノードを保有している装置を制御している端末、すなわち、前ノードで辿ったノード（根ノードとも呼ぶ）が制御権待ちの状態であることを示す。
【００６７】
図１０は、ライン型トポロジの資源循環グラフの例を示す図であり、図１１は、スター型トポロジの資源循環グラフの例を示す図である。
【００６８】
ライン型トポロジは、子がないノード（葉ノード）のみに待ノードを持たせ、また前、次ノードで連結されるノードは直線状に連結する構成である。図１０では、装置１、装置２が待ノードである。前、次ノードで連結されるノード、つまり装置２と装置３は直線状に連結されている。
【００６９】
一方、スター型トポロジは端末の子ノードのみに待ノード、複数の次ノードを持たせる構成である。端末Ａを親ノードとすると、装置２が子ノード、端末Ｂを親ノードとすると、装置１が子ノードである。
【００７０】
図１２は、実施形態における資源循環グラフの例を示す図である。
図１２では、端末Ａは装置２と装置３の制御権を有し、装置１の制御権待ちをしており、端末Ｂは装置１の制御権を有し、装置２の制御権待ちをしている。
【００７１】
図１２に示されているように、端末Ａのたとえば資源循環グラフＤＢ２１０には、「前ノード：なし、次ノード：装置２：待ノード：なし」の情報が格納されている。
【００７２】
また、装置２には、「前ノード：端末Ａ、次ノード：装置３、待ノード：なし」の情報が格納されていても良い。この情報は、装置２の資源循環グラフＤＢ２１０に格納されていても良い。また、装置２の占有元情報ＤＢ２１２には、装置２の制御権を有する「端末Ａ」の情報が格納されていても良い。
【００７３】
また、装置３には、「前ノード：装置２、次ノード：なし、待ノード：装置１」の情報が格納されていても良い。この情報は、装置３の資源循環グラフＤＢ２１０に格納されていても良い。
【００７４】
図１３は、前・次・待ノード情報の例を示す図である。この情報は、資源循環グラフＤＢ２１０に格納されていても良い。図１３に示されているように、資源循環グラフＤＢ２１０に格納される前・次・待ノード情報は、前ノードＵＲＩ、次ノードＵＲＩ、待ノードＵＲＩの３つのフィールドを有し、各フィールドに「ｄｅｖｉｃｅ００１」等、被制御装置を特定する情報が格納され得る。また、待ノードＵＲＩのフィールドには、複数の装置のＵＲＩが格納されても良い。
【００７５】
また、装置３の占有元情報ＤＢ２１２には、装置３の制御権を有する「端末Ａ」の情報が格納されていても良い。
【００７６】
前・次ノードで連結されたノードは２つの装置が同一端末により制御されていることを示す。図１２の例では、装置２と装置３はともに端末Ａによって制御されている。
【００７７】
また、待ノードで連結されたノードは、その装置を制御する端末が制御権待ち状態にある装置である。図１２の例では、装置３の待ノードである装置１は、装置３を制御する端末Ａが端末１の制御権待ち状態にあることを意味する。
【００７８】
このように、被制御装置のみを循環路に含む資源循環グラフは、制御、制御待ち関係を表現することが可能であり、循環路に被制御装置のみを含むため、端末との通信が一時的にできない場合でもデッドロックの検出が可能である。
【００７９】
デッドロックは、ある被制御装置のデッドロック検出部２００の転送メッセージ生成部２００２で生成され、通信部２０２のネットワーク送信部２０２２から送信されたメッセージが、その被制御装置の通信部２０２のネットワーク受信部２０２０で受信され、デッドロック検出部２００のデットロック判定部２０００で、自身が以前に生成したメッセージであると判定されたときに、発生していると判定され得る。
【００８０】
図１４は、デッドロック検出メッセージの例を示す図である。
図１４に示されているメッセージは、「メッセージ発行元ＵＲＩ」、「メッセージ送信元ＵＲＩ」、「メッセージ送信先ＵＲＩ」、「既訪ノードフィールド・優先度情報」の５つのフィールドを含む。しかしながら、メッセージは、デッドロック解消のアルゴリズムに依存して、「既訪ノードフィールド・優先度情報」に優先度情報を含まなくても良い。
【００８１】
「メッセージ発行元ＵＲＩ」フィールドには、デッドロック検出メッセージが生成された被制御装置を特定するＵＲＩが格納され得る。「メッセージ送信元ＵＲＩ」フィールドには、このメッセージを直線に送信した被制御装置を特定するＵＲＩが格納され得る。「メッセージ送信先ＵＲＩ」フィールドには、これからこのメッセージが送信される被制御装置を特定するＵＲＩが格納され得る。「既訪ノードフィールド・優先度情報」フィールドには、このメッセージが既に訪問した被制御装置と、優先度に関する情報が格納され得る。優先度は先に制御権要求を発信した被制御装置ほど高いとすれば、訪問した被制御装置の通信部２０２のネットワーク受信部２０２０が端末から制御権要求を発信した時刻であっても良い。図１４に示されている例では、「既訪ノードフィールド・優先度情報」フィールドに、「（ｄｅｖｉｃｅ００２，ａｐｐＡ，２０１３／１１／２２  １０：２０：３０）」と格納されている。これは、端末「ａｐｐＡ」によって制御される被制御装置「ｄｅｖｉｃｅ００２」に２０１３年１１月２２日１０時２０分３０秒に制御権要求を受信したことを示しても良い。
【００８２】
ライン型トポロジは、次、待ノードにメッセージ送信を行えばデッドロックの検出が可能である。一方、スター型トポロジでは、デッドロック検出のためには次、待ノードの他にメッセージを受信していない前ノードにもメッセージを送信する必要があり、煩雑な操作が必要となる。他方、装置の占有を行う際、ライン型トポロジでは、直線状に連結する構成を保持するためには、葉ノードに占有した装置を加える必要があり、端末がＫ個（Ｋは整数とする）の装置を占有しているときＫのオーダー（Ｏ（Ｋ））の通信が必要となる。他方、スター型トポロジでは端末の子ノードに新たに占有した装置を加えればよいので、１のオーダー（Ｏ（１））の通信で済む。
【００８３】
資源循環グラフは、端末が被制御装置の制御権の要求を行った際、制御権を解放した際に、資源循環グラフ更新部２０６の資源解放部２０６４によって更新され得る。
【００８４】
図１５〜１６を参照して、装置の制御権取得時の資源循環グラフの変形について説明する。図１５は、装置の制御権取得時の資源循環グラフの変形の例を説明するための図であり、図１６は装置の制御権取得時の資源循環グラフの変形の別の例を説明するための図である。ここで、装置とは、被制御装置であっても良い。
【００８５】
図１５は端末が被制御装置を占有する場合の資源循環グラフの変形の例を示す図である。
【００８６】
端末が制御権要求を行った際の資源循環グラフの更新の様子を、図１５に示す。端末はまず被制御装置に制御権要求を行い、制御権が獲得できた場合は次ノード追加処理を、制御権待ちとなった場合は待ノード追加処理を行う。次ノード追加処理、待ノード追加処理では、それぞれライン型・スター型などの資源循環グラフのトポロジを保存するように変形操作を行う。
【００８７】
図１５（ａ）に示されているように、端末Ａは装置２の制御権を有している。また、端末Ｂは装置１の制御権を有し、装置２に制御権を要求し、制御権待ち状態にある。このとき、端末Ａが装置３に占有権（制御権）を要求するとする。このとき図１５（ｂ）に示されているように、装置３はどの端末にも占有権（制御権）を与えていないので、装置３は端末Ａからの要求に応答して、端末Ａに占有権（制御権）を与える。そして、図１５（ｃ）に示されているように、端末Ａは、葉ノードである装置２の資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「次ノード」のフィールドに装置３を加える。つまり、葉ノードの次ノードに、新しく占有した装置を加える。資源循環グラフでは、装置２から装置３に、実線の矢印（第１のリンク）が引かれる。
【００８８】
図１６は、端末が装置の制御権待ちを行う場合の資源循環グラフの変形の例を示す図である。
【００８９】
図１６（ａ）に示されているように、端末Ａは装置２と装置３の制御権を有しているとする。また、端末Ｂは装置１の制御権を有し、さらに装置２に対して制御権を要求し、制御権待ち状態にあるとする。このとき図１６（ａ）に示されているように、端末Ａは、装置１の制御権を要求するとする。すると図１６（ｂ）に示されているように、装置１は、端末Ａに制御権（占有権）待ちを通知する。次に図１６（ｃ）に示されているように、端末Ａは、（子を持たない）葉ノードである装置３の資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「待ノード」のフィールドに占有待装置である装置１を加える。
【００９０】
＜＜デッドロック検出＞＞
図１７は、実施形態の資源循環グラフを用いたデッドロック検出の例について説明するための図である。図１７に示されている例は、端末Ａは装置２と装置３の制御権を有しており、端末Ｂは装置１の制御権を有し、さらに装置２に対して制御権を要求し、制御権待ち状態である。
【００９１】
端末が被制御装置の制御権待ちとなった際、資源循環グラフ更新部２０６で図１６に示される資源循環グラフの更新処理を行った後、デッドロック検出部２００の転送メッセージ生成部２００２でメッセージを生成する。そして、通信部２０２のネットワーク送信部２０２２からメッセージを送信する。もしネットワーク受信部２０２０でメッセージを受信したら、デッドロック検出部２００のデッドロック判定部２０００で、デッドロックが発生しているか否かを判定する。
【００９２】
たとえば、端末Ａがメッセージを生成、送信するとする。端末Ａの資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「次ノード」のフィールドは「装置２」なので、メッセージは装置２に送信される。装置２の資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「次ノード」のフィールドは「装置３」である。よって、メッセージは、装置２から装置３に転送される。このとき、メッセージの「既訪ノードフィールド・優先度情報」フィールドには、メッセージが装置２にメッセージが到達した時間に関する情報、装置２の制御権を有する端末に関する情報等が格納されても良い。装置３の資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「待ノード」のフィールドは「装置１」である。よって、メッセージは、装置３から装置１に転送される。このとき、メッセージの「既訪ノードフィールド・優先度情報」フィールドには、メッセージが装置３にメッセージが到達した時間に関する情報、装置３の制御権を有する端末に関する情報等が格納されても良い。装置１の資源循環グラフＤＢ２１０に格納される前・次・待ノード情報の「待ノード」のフィールドは「装置２」である。よって、メッセージは、装置１から装置２に転送される。
【００９３】
装置２の通信部２０２のネットワーク受信部２０２０はメッセージを受け取ると、デッドロック検出部２００のデッドロック判定部２０００にメッセージを送る。装置２のデッドロック判定部２０００は、受信したメッセージの「既訪ノードフィールド・優先度情報」フィールドの中に、このメッセージが既に装置２を訪れたことがあることを見出し、デッドロックが発生していると判定する。
【００９４】
＜＜デッドロック解消＞＞
図１８〜１９を参照して、資源循環グラフを用いたデッドロック解消について説明する。
【００９５】
図１８は、実施形態の資源循環グラフを用いたデッドロック解消の例について説明するための図である。デッドロックの解消時、占有権の解除を行う端末の決定に用いる情報としては、占有開始時間、デバイス占有時の優先度、前・次ノードの連結個数、待ノード個数、端末との通信可否等が含まれ得る。図１８に示されている例では、デッドロック検出後、デッドロック解消時に再度装置に問い合わせを行う。この場合、図１４に示されているメッセージは、「メッセージ発行元ＵＲＩ」、「メッセージ送信元ＵＲＩ」、「メッセージ送信先ＵＲＩ」のみを含んでも良い。
【００９６】
図１８に示されているように、端末Ａは装置２と装置３の制御権を有しているとする。また、端末Ｂは装置１の制御権を有し、さらに装置２に対して制御権を要求し、制御権待ち状態にあるとする。
【００９７】
そして、装置３は、端末Ａから制御権要求を受信し、０８時１５分２０秒に占有されたものとする。図１７の場合と同様に、装置２の通信部２０２のネットワーク受信部２０２０はメッセージを受け取ると、デッドロック検出部２００のデッドロック判定部２０００にメッセージを送る。装置２のデッドロック判定部２０００は、受信したメッセージの「既訪ノードフィールド・優先度情報」フィールドの中に、このメッセージが既に装置２を訪れたことがあることを見出し、デッドロックが発生していると判定する。
【００９８】
デッドロックが発生していると判定した装置２のデッドロック解消部２０４は、受信したメッセージに含まれる情報を用いて、循環路に含まれる各装置に、優先度決定のための情報を得るための通知を作成し、ネットワーク送信部２０２２から送信させる。
【００９９】
装置２のネットワーク受信部２０２０は、優先度決定のための情報を得るための通知に対する応答を循環路に含まれる各装置から受信し、応答に含まれる情報を、優先度決定情報ＤＢ２０８に格納する。
【０１００】
装置２のデッドロック解消部２０４は、優先度決定情報ＤＢ２０８に格納された優先度決定のための情報を得るための通知に対する応答に含まれる情報を用いて、被制御装置の占有権を取り消す（アボートする）端末を決定する。
【０１０１】
装置２のデッドロック解消部２０４は、アボートする端末に通知（メッセージ）を送り、被制御装置の占有権を取り消す（アボートする）処理を行わせる。その通知（メッセージ）を受信した端末は、端末が占有していたデバイスにメッセージを送り、デバイスの占有権を解除する。
【０１０２】
図１８に示されている例では、優先度決定のための情報を得るための通知に対する応答に基づいて、装置２の優先度決定情報ＤＢ２０８には、制御権要求の発信時刻について、「装置１：端末Ｂ、７時３０分３１秒」、「装置２：端末Ａ、９時３０分２５秒」、「装置３：端末Ａ、８時１５分２０秒」等の情報が含まれているとする。今の場合、装置２のデッドロック解消部２０４は、装置２のデッドロック解消部２０４は、制御権要求の受信が最も早い装置１の優先度を最も高い装置と判定し、装置１を占有している端末Ｂに通知（メッセージ）を送り、装置１の占有権を取り消す（アボートする）処理を行わせる。
【０１０３】
このように、端末と被制御装置が通信できないことがある場合でも、デッドロックの検出、解消をすることができる。
【０１０４】
図１９は、実施形態の資源循環グラフを用いたデッドロック検出と解消の例について説明するための図である。
【０１０５】
本例では、分散データ処理装置２０は、デッドロック検出のために送るメッセージに、デッドロック解消時に占有権を解消する端末の情報を追記することにより、デッドロックの検出と解消を同時に行うこともできる。この場合、図１４に示されているメッセージは、「メッセージ発行元ＵＲＩ」、「メッセージ送信元ＵＲＩ」、「メッセージ送信先ＵＲＩ」、「既訪ノードフィールド・優先度情報」の５つのフィールドを含む。
【０１０６】
図１９に示されているように、端末Ａは装置２と装置３の制御権を有しているとする。また、端末Ｂは装置１の制御権を有し、さらに装置２に対して制御権を要求し、制御権待ち状態にあるとする。
【０１０７】
そして、装置３は、端末Ａから制御権要求を受信し、０８時１５分２０秒に占有されたものとする。図１７の場合と同様に、装置２の通信部２０２のネットワーク受信部２０２０はメッセージを受け取ると、デッドロック検出部２００のデッドロック判定部２０００にメッセージを送る。装置２のデッドロック判定部２０００は、受信したメッセージの「既訪ノードフィールド・優先度情報」フィールドの中に、このメッセージが既に装置２を訪れたことがあることを見出し、デッドロックが発生していると判定する。
【０１０８】
装置２のデッドロック解消部２０４は、メッセージの「既訪ノードフィールド・優先度情報」フィールドから、占有強制解除の優先度情報を抽出する。たとえば、図１９に示されている例では、メッセージの「既訪ノードフィールド・優先度情報」フィールドには、メッセージが訪れた被制御装置、その被制御装置の占有権（制御権）を有する端末、制御権要求の発信時刻について、「装置１：端末Ｂ、７時３０分３１秒」、「装置２：端末Ａ、９時３０分２５秒」、「装置３：端末Ａ、８時１５分２０秒」等の情報が含まれているとする。装置２のデッドロック解消部２０４は、制御権要求の受信が最も早い装置１の優先度を最も高い装置と判定し、装置１を占有している端末Ｂに通知（メッセージ）を送り、装置１の占有権を取り消す（アボートする）処理を行わせる。
【０１０９】
このように、端末と被制御装置が通信できないことがある場合でも、デッドロックの検出、解消をすることができる。
【０１１０】
図２０は、分散データ処理装置の構成の例を示す図である。
このコンピュータ３００は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）３０２、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）３０４、及びＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）３０６を備えている。コンピュータ３００は、さらに、ハードディスク装置３０８、入力装置３１０、表示装置３１２、インターフェース装置３１４、及び記録媒体駆動装置３１６を備えている。なお、これらの構成要素はバスライン３１８を介して接続されており、ＣＰＵ３０２の管理の下で各種のデータを相互に授受することができる。
【０１１１】
Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）３０２は、このコンピュータ３００全体の動作を制御する演算処理装置であり、コンピュータ３００の制御処理部として機能する。
【０１１２】
Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）３０４は、所定の基本制御プログラムが予め記録されている読み出し専用半導体メモリである。ＣＰＵ３０２は、この基本制御プログラムをコンピュータ３００の起動時に読み出して実行することにより、このコンピュータ３００の各構成要素の動作制御が可能になる。
【０１１３】
Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）３０６は、ＣＰＵ３０２が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。
【０１１４】
ハードディスク装置３０８は、ＣＰＵ３０２によって実行される各種の制御プログラムや各種のデータを記憶しておく記憶装置である。ＣＰＵ３０２は、ハードディスク装置３０８に記憶されている所定の制御プログラムを読み出して実行することにより、後述する各種の制御処理を行えるようになる。
【０１１５】
入力装置３１０は、例えばマウス装置やキーボード装置であり、情報処理装置のユーザにより操作されると、その操作内容に対応付けられている各種情報の入力を取得し、取得した入力情報をＣＰＵ３０２に送付する。
【０１１６】
表示装置３１２は例えば液晶ディスプレイであり、ＣＰＵ３０２から送付される表示データに応じて各種のテキストや画像を表示する。
【０１１７】
インターフェース装置３１４は、このコンピュータ３００に接続される各種機器との間での各種情報の授受の管理を行う。
【０１１８】
記録媒体駆動装置３１６は、可搬型記録媒体３２０に記録されている各種の制御プログラムやデータの読み出しを行う装置である。ＣＰＵ３０２は、可搬型記録媒体３２０に記録されている所定の制御プログラムを、記録媒体駆動装置３１６を介して読み出して実行することによって、後述する各種の制御処理を行うようにすることもできる。なお、可搬型記録媒体３２０としては、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格のコネクタが備えられているフラッシュメモリ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などがある。
【０１１９】
このようなコンピュータ３００を用いて連携機器選択装置を構成するには、例えば、上述の各処理部における処理をＣＰＵ３０２に行わせるための制御プログラム（分散データ処理プログラム）を作成する。作成された制御プログラムはハードディスク装置３０８若しくは可搬型記録媒体３２０に予め格納しておく。そして、ＣＰＵ３０２に所定の指示を与えてこの制御プログラム（分散データ処理プログラム）を読み出させて実行させる。こうすることで、分散データ処理装置が備えている機能がＣＰＵ３０２により提供される。
【０１２０】
＜分散データ処理＞
図２１〜２９を参照して、分散データ処理について説明する。
【０１２１】
図２１は、端末側の装置制御権獲得処理における処理の流れの例を示す図である。
また、分散データ処理装置が図２０に示されているような汎用コンピュータ３００である場合には、下記の説明は、そのような処理を行う制御プログラム（分散データ処理プログラム）を定義する。すなわち、以下では、下記に説明する処理を汎用コンピュータに行わせる制御プログラム（分散データ処理プログラム）の説明でもある。
【０１２２】
処理が開始されると、Ｓ１００で端末Ａのネットワーク送信部２０２２は、制御権を確保したい装置Ｄ（被制御装置）に制御権要求を行う。制御権要求を行うことは、制御権要求命令を送信することであり得る。本ステップの処理が終了すると、処理はＳ１０２に進む。
【０１２３】
Ｓ１０２で端末Ａの占有元端末管理部２０６０は、制御権を確保したい装置Ｄ（被制御装置）から制御権を許可する通知を受信したか、すなわち装置Ｄの制御権が得られたか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち装置Ｄの制御権が得られた場合には、処理はＳ１０４に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち装置Ｄの制御権が得られない場合には、処理はＳ１０６に進む。
【０１２４】
Ｓ１０４端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、資源循環グラフの変形を行う。
【０１２５】
Ｓ１０４の次ノード追加・変形処理について、図２２を参照して説明する。
図２２は、端末側の次ノード追加・変形処理における処理の流れの例を示す図である。
【０１２６】
次ノード追加・変形処理が開始されると、端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている情報のうち、次ノードフィールドＮが空か否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち端末Ａの次ノードフィールドＮが空である場合には、処理はＳ２１０に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち端末Ａの次ノードフィールドＮが空でない場合には、処理はＳ２０２に進む。
【０１２７】
Ｓ２０２で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、資源循環グラフのトポロジがライン型かスター型かを判定する。ライン型トポロジを有する資源循環グラフの例は、図１０に示されている。スター型トポロジを有する資源循環グラフの例は、図１１に示されている。本ステップでの判定の結果が“ライン型”、すなわち資源循環グラフのトポロジがライン型である場合には、処理はＳ２０４に進む。また、本ステップでの判定の結果が“スター型”、すなわち端資源循環グラフのトポロジがスター型である場合には、処理はＳ２０６に進む。
【０１２８】
Ｓ２０４で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、次ノードフィールドＮから次ノードを辿り、終端にあるノードに制御権を獲得した装置Ｄ（被制御装置）を追加する。本ステップの処理が終了すると、処理はＳ２０８に進む。
【０１２９】
Ｓ２０６で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、次ノードフィールドＮに制御権を獲得した装置Ｄ（被制御装置）を追加する。本ステップの処理が終了すると、処理はＳ２０８に進む。
【０１３０】
Ｓ２１０で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの次ノードフィールドＮに、新しく制御権を獲得した装置Ｄ（被制御装置）をセットする。本ステップの処理が終了すると、処理はＳ２１２に進む。
【０１３１】
Ｓ２１２で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの待ノードフィールドＷが空か否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち端末Ａの待ノードフィールドＷが空である場合には、処理はＳ２０８に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち端末Ａの待ノードフィールドＷが空でない場合には、処理はＳ２１４に進む。
【０１３２】
Ｓ２１４で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、装置Ｄ（被制御装置）の待ノードフィールドに端末Ａの待ノードフィールドＷの値をセットする。本ステップの処理が終了すると、処理はＳ２１６に進む。
【０１３３】
Ｓ２１６で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの待ノードフィールドＷをクリアする。本ステップの処理が終了すると、処理はＳ２０８に進む。
【０１３４】
Ｓ２０８で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、制御権を獲得した装置Ｄに、装置Ｄを次ノードとしてセットした装置の情報を、通信部２０２のネットワーク送信部２０２２から送信させる。本ステップの処理が終了すると、処理は図２１のＳ１０４に戻る。
【０１３５】
図２１に戻って、Ｓ１０４の処理が終了すると、端末Ａの処理は終了する。
図２１のＳ１０６で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、待ノード追加処理を行う。
【０１３６】
端末Ａの待ノード追加処理について、図２３を参照して説明する。
図２３は、端末側の待ちノード追加処理における処理の流れの例を示す図である。
【０１３７】
処理が開始されると、Ｓ３００で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの次ノードフィールドＮが空か否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち端末Ａの次ノードフィールドＮが空である場合には、処理はＳ３０２に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち端末Ａの次ノードフィールドＮが空でない場合には、処理はＳ３０４に進む。
【０１３８】
Ｓ３０２で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの待ノードフィールドに、新しく制御権待ちをする装置Ｄ（被制御装置）を加える。本ステップの処理が終了すると、待ノード追加処理は終了する。
【０１３９】
Ｓ３０４で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、資源循環グラフＤＢ２１０に格納されている資源循環グラフはライン型トポロジであるか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち資源循環グラフはライン型トポロジである場合には、処理はＳ３０６に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち資源循環グラフはライン型トポロジではない場合には、処理はＳ３０８に進む。
【０１４０】
Ｓ３０６で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａの次ノードを辿り、終端にあるノードに制御権待ちをする装置Ｄ（被制御装置）を加える。本ステップの処理が終了すると、待ノード追加処理は終了する。
【０１４１】
Ｓ３０８で端末Ａの資源循環グラフ更新部２０６の資源追加・変更部２０６２は、端末Ａの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、装置Ｎの待ノードフィールドに、新しく制御権待ちをする装置Ｄ（被制御装置）を加える。本ステップの処理が終了すると、待ノード追加処理は終了する。
【０１４２】
図２１のＳ１０６の処理が終了すると、処理はＳ１０８に進む。
Ｓ１０８で装置Ａのデッドロック検出部２００は、デッドロック検出処置を行う。
【０１４３】
デッドロック検出処理について、図２４を参照して説明する。
図２４は、実施形態の資源循環グラフを用いたデッドロック検出処理における処理の流れの例を示す図である。
【０１４４】
デッドロック検出処置が開始されると、Ｓ４００で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、端末Ａの次ノードフィールドＮが空か否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち端末Ａの次ノードフィールドＮが空である場合には、処理はＳ４０２に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち端末Ａの次ノードフィールドＮが空ではない場合には、処理はＳ４０４に進む。
【０１４５】
Ｓ４０２で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、デッドロック検出メッセージを生成し、通信部２０２のネットワーク送信部２０２２を介して、自身の次ノードＮに送出する。次ノードＮを特定するために、資源循環グラフＤＢに格納されている情報を参照しても良い。本ステップの処理が終了すると、処理はＳ４０４に進む。
【０１４６】
Ｓ４０４で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、デッドロック検出メッセージを生成し、通信部２０２のネットワーク送信部２０２２を介して、自身の待ノードＷの全てに送出する。待ノードＷを特定するために、資源循環グラフＤＢに格納されている情報を参照しても良い。本ステップの処理が終了すると、処理はＳ４０４に進む。
【０１４７】
Ｓ４０４で装置Ａのデッドロック検出部２００のデッドロック判定部２０００は、ノードの識別子と、ネットワーク受信部２０２０で受信したメッセージの発行主が一致するかを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわちノードの識別子とメッセージの発行主が一致する場合には、処理はＳ４０６に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわちノードの識別子とメッセージの発行主が一致しない場合には、処理はＳ４０８に進む。
【０１４８】
Ｓ４０６で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、デッドロック検出を通知するためのメッセージを生成し、通信部２０２のネットワーク送信部２０２２から送信することで、デッドロック検出を通知する。本ステップの処理が終了すると、デッドロック検出処置は終了する。
【０１４９】
Ｓ４０８で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、メッセージの既訪フィールドに自身のＵＲＩを追加する。本ステップの処理が終了すると、処理はＳ４１０に進む。
【０１５０】
Ｓ４１０で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、資源循環グラフＤＢ２１０を参照して、本ノード（装置Ａ）は次・待ノードを持つか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち本ノード（装置Ａ）は次・待ノードを持つ場合には、処理はＳ４１２に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち本ノード（装置Ａ）は次・待ノードを持たない場合には、デッドロック検出処置は終了する。
【０１５１】
Ｓ４１２で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、通信部２０２のネットワーク送信部２０２２を介して、次・待ノード全てにメッセージを送信する。本ステップの処理が終了すると、処理はＳ４１４に進む。
【０１５２】
Ｓ４１４で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、資源循環グラフＤＢ２１０を参照して、資源循環グラフはスター型トポロジか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち資源循環グラフはスター型トポロジである場合には、処理はＳ４１６に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち資源循環グラフはスター型トポロジではない場合には、処理はＳ４０４に戻る。
【０１５３】
Ｓ４１６で装置Ａのデッドロック検出部２００の転送メッセージ生成部２００２は、通信部２０２のネットワーク送信部２０２２を介して、既訪ノードフィールドに記されていない前ノード全てにメッセージを送信する。本ステップの処理が終了すると、処理はＳ４０４に戻る。
【０１５４】
デッドロック検出処置が終了すると、図２１のＳ１１０に進む。
図２１のＳ１１０で装置Ａのデッドロック検出部２００のデッドロック検出部２０００は、デッドロックしていたか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわちデッドロックしていた場合には、処理はＳ１１２に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわちデッドロックしていない場合には、処理はＳ１１４に戻る。
【０１５５】
Ｓ１１４で装置Ａのデッドロック検出部２００のデッドロック検出部２０００は、待機をし、外部から被制御装置に制御権を確保するための入力を受けると、Ｓ１００に戻る。
【０１５６】
Ｓ１１２で装置Ａのデッドロック解消部２０４は、デッドロック解消処理を行う。
デッドロック解消処理について、図２５を参照して説明する。図２５に示されている処理は、図１８に示されているような場合に相当する。
【０１５７】
図２５は、実施形態の資源循環グラフを用いたデッドロック解消処理における処理の流れの例を示す図である。
【０１５８】
デッドロック解消処理が開始されると、Ｓ５００で装置Ａのデッドロック解消部２０４は、通信部２０２のネットワーク送信部２０２２を介して、循環路に含まれる装置（被制御装置）に優先度決定のための情報を問い合わせる。本ステップの処理が終了すると、処理はＳ５０２に進む。
【０１５９】
Ｓ５０２で装置Ａのデッドロック解消部２０４は、問合せへの返事に含まれる情報（問い合せ情報）から被制御装置の占有権を取り消す（アボートする）端末を決定する。本ステップの処理が終了すると、処理はＳ５０４に進む。
【０１６０】
Ｓ５０４で装置Ａのデッドロック解消部２０４は、通信部２０２のネットワーク送信部２０２２を介して、アボートする端末に通知（メッセージ）を送り、被制御装置の占有権を取り消す（アボートする）処理を行わせる。本ステップの処理が終了すると、処理はＳ５０６に進む。
【０１６１】
Ｓ５０６でその通知（メッセージ）を受信した端末は、端末が占有していたデバイスにメッセージを送り、デバイスの占有権を解除する。本ステップの処理が終了すると、デッドロック解消処理は終了する。
【０１６２】
図２６は、装置側の装置制御権獲得処理における処理の流れの例を示す図である。
装置制御権獲得処理が開始されると、Ｓ６００で装置Ｄの通信部２０２のネットワーク受信部２０２０は、端末Ａから制御権要求命令を受信し、資源循環グラフ更新部２０６の占有元端末管理部２０６０に送る。本ステップの処理が終了すると、処理はＳ６０２に進む。
【０１６３】
Ｓ６０２で装置Ｄの資源循環グラフ更新部２０６の占有元端末管理部２０６０は、装置Ｄを制御している端末があるか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち装置Ｄを制御している端末がある場合には、処理はＳ６０６に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち装置Ｄを制御している端末がない場合には、処理はＳ６０４に戻る。
【０１６４】
Ｓ６０４で装置Ｄの資源循環グラフ更新部２０６の占有元端末管理部２０６０は、通信部２０２のネットワーク送信部２０２２を介して、制御権要求を送った端末Ａに制御権取得失敗を通知する。本ステップの処理が終了すると、処理はＳ６０６に進む。
【０１６５】
Ｓ６０６で装置Ｄのデッドロック検出部２００の転送メッセージ生成部２００２は、装置Ｄの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、装置Ｄの前ノードフィールドに制御権要求した端末の情報を追加する。本ステップの処理が終了すると、処理はＳ６０８に進む。
【０１６６】
Ｓ６０８で装置Ｄの通信部２０２のネットワーク送信部２０２２は、制御権要求を送った端末Ａに制御権取得成功を通知する。本ステップの処理が終了すると、処理はＳ６１０に進む。
【０１６７】
Ｓ６１０で装置Ｄの資源循環グラフ更新部２０６の占有元端末管理部２０６０は、装置Ｄの資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、端末Ａから、本装置Ｄを次ノードとしてセットした装置（又は端末）を受け取り、本装置Ｄの前ノードフィールドにセットする。本ステップの処理が終了すると、装置制御権獲得処理は終了する。
【０１６８】
図２７は、端末側の装置制御権解放処理における処理の流れの例を示す図である。
処理が開始されると、Ｓ７００で端末では、ノード変数Ｎを空にする。本ステップの処理が終了すると、処理はＳ７０２に進む。
【０１６９】
Ｓ７０２で端末は、制御権を解放する装置Ｄ１に保有する前・次・待ノードを問い合わせる。本ステップの処理が終了すると、処理はＳ７０４に進む。
【０１７０】
Ｓ７０４で端末は、装置Ｄ１が次ノードを持つか否かを判定する。本ステップでの判定の結果が“Ｙｅｓ”、すなわち装置Ｄ１が次ノードを持つ場合には、処理はＳ７０６に進む。また、本ステップでの判定の結果が“Ｎｏ”、すなわち装置Ｄ１が次ノードを持たない場合には、処理はＳ７１０に進む。
【０１７１】
Ｓ７０６で端末は、端末の資源循環グラフＤＢ２１０に格納されている資源循環グラフにおいて、装置Ｄ１の次ノードからノードを一つ選び（以下、装置Ｄ２とする）、装置Ｄ２に装置Ｄ１の前ノード、装置Ｄ２以外の次ノード、装置Ｄ１の待ノードを移動する。本ステップの処理が終了すると、処理はＳ７０８に進む。
【０１７２】
Ｓ７０８で端末は、「ノード変数Ｎ＝装置Ｄ２の次ノード」と設定する。本ステップの処理が終了すると、処理はＳ７１０に進む。
【０１７３】
Ｓ７１０で端末は、「ノード変数Ｎ＝装置Ｄ１の前ノード」と設定する。本ステップの処理が終了すると、処理はＳ７１２に進む。
【０１７４】
Ｓ７１２で端末は、装置Ｄ１に制御権解放メッセージを送信し、装置Ｄ１において、前・次・待ノードフィールドをクリアする。本ステップの処理が終了すると、端末側の装置制御権解放処理は終了する。
【０１７５】
デッドロック解消処理の別の例について、図２８〜２９を参照して説明する。図２８〜２９に示されている処理は、図１９に示されているような場合に相当する。
【０１７６】
図２８は、デッドロック検出メッセージ送信処理における処理の流れの例を示す図である。
【０１７７】
図２８に示されている例では、処理が開始されると、Ｓ８００で端末または被制御装置のデッドロック検出部２００の転送メッセージ生成部２００２は、送信するメッセージの最後尾に装置（被制御装置）が保持する優先度情報を追記する。本例でのデッドロック検出メッセージの例は、図１４に示されている。本ステップの処理が終了すると、処理はＳ８０２に進む。
【０１７８】
Ｓ８０２で端末または被制御装置の通信部２０２のネットワーク送信部２０２２は、メッセージを送信する。本ステップの処理が終了すると、デッドロック検出メッセージ送信処理は終了する。
【０１７９】
図２９は、装置側のデッドロック解消処理における処理の流れの例を示す図である。
処理が開始されると、Ｓ９００でデッドロック解消部２０４は、デッドロック検出メッセージ中の優先度情報からアボートする端末を決定する。たとえば、デッドロック解消部２０４は、メッセージの「既訪ノードフィールド・優先度情報」フィールドから、占有強制解除の優先度情報を抽出する。たとえば、図１９に示されている例では、メッセージの「既訪ノードフィールド・優先度情報」フィールドには、メッセージが訪れた被制御装置、その被制御装置の占有権（制御権）を有する端末、制御権要求の発信時刻について、「装置１：端末Ｂ、７時３０分３１秒」、「装置２：端末Ａ、９時３０分２５秒」、「装置３：端末Ａ、８時１５分２０秒」等の情報が含まれているとする。装置２のデッドロック解消部２０４は、制御権要求の受信が最も早い装置１の優先度を最も高い装置と判定する。本ステップの処理が終了すると、処理はＳ９０２に進む。
【０１８０】
Ｓ９０２でデッドロック解消部２０４は、アボートする端末にメッセージを送り、アボートさせる。図１９に示されている例では、制御権要求の受信が最も早い装置１の優先度を最も高い装置と判定し、装置１を占有している端末Ｂに通知（メッセージ）を送り、装置１の占有権を取り消す（アボートする）処理を行わせる。本ステップの処理が終了すると、処理はＳ９０４に進む。
【０１８１】
Ｓ９０４でアボートする端末は、占有していた装置にメッセージを送り、装置の占有権を解除する。本ステップの処理が終了すると、デッドロック解消処理は終了する。
【０１８２】
＜実施例＞
図３０〜３１Ｆを参照して、実施例のシステム３０を説明する。システム３０は、各ブースに複数のマイク付カメラが設置されている展示会場にて、人が集まっているブースの様子を１台ずつ設置された大音響スピーカ、大画面ディスプレイで映し出すためのシステムである。
【０１８３】
図３０に示されているシステム３０では、会議室内で、オペレータＣは端末Ａ（３０２）を所有し、オペレータＤは端末Ｂ（３０４）を所有している。会議室内には、他にカメラ１（３０６）、カメラ２（３０８）、スピーカ３１０、ディスプレイ３１２が設置されている。
【０１８４】
上の各端末、装置は、図８に示されているような分散データ処理装置を含んでいる。
システム３０のオペレータＣ、Ｄ（例えば展示会場の運営者）はそれぞれ携帯端末Ａ（３０２）、端末Ｂ（３０４）を持ち、予め定められたカメラの検出範囲に入ったとき、自動的に端末が最も近くのマイク付カメラ３０６、３０８と、ディスプレイ３１２、スピーカ３１０を占有し、マイク付カメラ３０６、３０８からの映像・音声をそれぞれディスプレイ３１２とスピーカ３１０に出力する。システム３０は、ユーザ位置に従って自動的に機器連携を行う機器連携アプリケーションによって動作するシステムであっても良い。
【０１８５】
機器連携アプリケーションが動作する端末は複数に及ぶ場合があるが、その場合でも、映し出されるカメラ映像が短時間で切り替わることを避けるため、カメラ１（３０６）、カメラ２（３０８）と、スピーカ３１０と、ディスプレイ３１２はそれぞれ一定時間、端末Ａ（３０２）、端末Ｂ（３０４）に操作占有権を与え、端末は占有権が得られた後で、スピーカ３１０と、ディスプレイ３１２に対してカメラ３０６、３０８の連携動作を行う。則ち、端末Ａ（３０２）、端末Ｂ（３０４）は、カメラ３０６、３０８と、スピーカ３１０と、ディスプレイ３１２に対し、各１個ずつ占有を完了したとき、スピーカ３１０とディスプレイ３１２に情報を伝達するカメラを切り替える。また、機器の利用効率を上げるため、カメラ１（３０６）、カメラ２（３０８）、ディスプレイ３１２等の装置の占有権確保は逐次的に行うのではなく、必要な機器全てに対し、同時に占有権確保のためのメッセージを送信する構成を取る。従って、端末Ａ（３０２）と端末Ｂ（３０４）の間で装置の占有権のデッドロックが生じうる構成である。
【０１８６】
また、端末Ａ（３０２）、端末Ｂ（３０４）は、バッテリー消費を抑えるため、スリープ状態になることがある。スリープ状態である場合は、例えばデッドロック検出メッセージの送信のような操作は行うことができない。このように、システム３０は、端末Ａ（３０２）、端末Ｂ（３０４）がスリープ状態になる場合があり、かつデッドロックが生じうる構成である。
【０１８７】
以下、図３０に示すような状況において、デッドロック検出・解消方法の動作例を説明する。なお、本例でのデッドロック解消ポリシーは、最も早く機器の占有をした端末がアボートされない、則ち、「最も遅く機器の占有を行った端末の占有権を取り上げる」こととする。
【０１８８】
図３１Ａ〜Ｆは、デッドロックの検出、解消の例について説明するための図である。
図３１Ａに示されているように、端末Ａ（３０２）、端末Ｂ（３０４）のオペレータはそれぞれカメラ１（３０６）、カメラ２（３０８）の機器連携範囲内に入り、機器連携を開始する。このとき、端末Ａ（３０２）はカメラ１（３０６）、スピーカ３１０、ディスプレイ３１２に対して占有権要求メッセージを送り、端末Ｂ（３０４）はカメラ２（３０８）、スピーカ３１０、ディスプレイ３１２に対して占有権要求メッセージを送る。
【０１８９】
図３１Ｂに示されているように、まず端末Ａ（３０２）はカメラ１（３０６）、端末Ｂ（３０４）はカメラ２（３０８）から占有権許可メッセージを受領し、端末Ａ（３０２）、端末Ｂ（３０４）の資源循環グラフ更新部２０６の資源追加・更新部２０６２は、それぞれの資源循環グラフＤＢ２１０に格納されている前／次ノードに関する情報を更新する。そして、端末Ａ（３０２）はカメラ１（３０６）の占有権を持ち、端末Ｂ（３０４）はカメラ２（３０８）の占有権を持つようになる。
【０１９０】
次に図３１Ｃに示されているように、端末Ａ（３０２）は端末Ａ（３０２）、端末Ｂ（３０４）はディスプレイ３１２から占有権許可メッセージを受領し、端末Ａ（３０２）、端末Ｂ（３０４）の資源循環グラフ更新部２０６の資源追加・更新部２０６２は、それぞれの資源循環グラフＤＢ２１０に格納されている前／次ノードに関する情報を更新する。このとき、端末Ａ（３０２）はカメラ１（３０６）、スピーカ３１０の占有権を、端末Ｂ（３０４）はカメラ２（３０８）、ディスプレイ３１２の占有権を持つようになる。
【０１９１】
更に図３１Ｄに示されているように、スピーカ３１０は端末Ｂ（３０４）に対して制御権待ちのメッセージを送り、端末Ｂ（３０４）はスピーカ３１０の制御権待ちの状態になる。
【０１９２】
ここで、端末Ｂ（３０４）はデッドロック検出メッセージをカメラ２に対して送付する。デッドロック検出メッセージはカメラ２（３０８）、ディスプレイ３１２、スピーカ３１０と伝わるが、資源循環グラフに循環路が生じていないため、デッドロックは検出されない。
【０１９３】
次に図３１Ｅに示されているように、ディスプレイ３１２が端末Ａに対して制御権待ちのメッセージを送り、端末Ａ（３０２）はディスプレイ３１２の制御権待ちの状態になる。
【０１９４】
このとき、端末Ｂ（３０４）はバッテリー残量が少なくなり、スリープ状態になったとする。このとき、端末Ａ（３０２）はデッドロック検出メッセージを送付するが、デッドロック検出メッセージはカメラ１（３０６）、スピーカ３１０、ディスプレイ３１２、スピーカ３１０の順で流れるため、スピーカ３１０のデッドロック検出部２００がデッドロックを検出する。このとき、デッドロック検出メッセージに記載された資源の確保時刻から、スピーカ３１０のデッドロック解消部２０４は、制御権解放を行うべき装置がディスプレイ３１２であると判定し、スピーカ３１０からディスプレイ３１２に制御権解放メッセージを送付させる。
【０１９５】
最終的に図３１Ｆに示されているように、端末Ａ（３０２）はディスプレイ３１２の制御権を獲得し、デッドロックは解消される。
【０１９６】
このように、端末と被制御装置が通信できないことがある場合でも、デッドロックを検出することができる。
【０１９７】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御される複数の被制御装置を含むシステムの分散データ処理装置であって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信するネットワーク受信部と、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定するデッドロック判定部と、
を含む分散データ処理装置。
（付記２）
前記デッドロック判定部は、前記デッドロック検出メッセージが複数回、前記複数の被制御装置のうちの一つを訪問した場合に、デッドロックが発生していると判定する、付記１に記載の分散データ処理装置。
（付記３）
さらに、
自身が前記第１のリンクの前記終点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記始点に対応する前記複数の被制御装置の別の一つを前ノード、自身が前記第１のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記終点に対応する前記複数の被制御装置の別の一つを次ノード、自身が前記第２のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第２のリンクの前記終点に対応する前記複数の被制御装置の別の一つを待ノードとして、前記前ノード、前記次ノード、および前記待ノードに関する情報を記憶する記憶部を含み、
前記資源循環グラフの前記ノードの各々は、前記記憶部（図８、２１０）に格納されている前記前ノード、前記次ノード、および前記待ノードに関する情報が付与されている、
付記１または２に記載の分散データ処理装置。
（付記４）
さらに、
前記デッドロック判定部が、前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送るデッドロック解消部を含む、付記１乃至３のいずれか一項に記載の分散データ処理装置。
（付記５）
前記デッドロック検出メッセージは、前記資源循環グラフに含まれる前記複数の被制御装置の優先度に関する情報を含み、
さらに、
前記デッドロック判定部が、前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記デッドロック検出メッセージに含まれる前記優先度に基づいて、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送るデッドロック解消部を含む、付記１乃至３のいずれか一項に記載の分散データ処理装置。
（付記６）
コンピュータとして機能する複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御されるコンピュータとして機能する複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つで実行される分散データ処理方法であって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信することと、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定することと、
を含む分散データ処理方法。
（付記７）
前記デッドロックが発生しているか否かを判定することは、前記デッドロック検出メッセージが複数回、前記複数の被制御装置のうちの一つを訪問した場合に、デッドロックが発生していると判定する、付記６に記載の分散データ処理方法。
（付記８）
さらに、
自身が前記第１のリンクの前記終点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記始点に対応する前記複数の被制御装置の別の一つを前ノード、自身が前記第１のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記終点に対応する前記複数の被制御装置の別の一つを次ノード、自身が前記第２のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第２のリンクの前記終点に対応する前記複数の被制御装置の別の一つを待ノードとして、前記前ノード、前記次ノード、および前記待ノードに関する情報を記憶することを含み、
前記資源循環グラフの前記ノードの各々は、前記前ノード、前記次ノード、および前記待ノードに関する情報が付与されている、
付記６または７に記載の分散データ処理方法。
（付記９）
さらに、
前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送ることを含む、付記６乃至８のいずれか一項に記載の分散データ処理装置。
（付記１０）
前記デッドロック検出メッセージは、前記資源循環グラフに含まれる前記複数の被制御装置の優先度に関する情報を含み、
さらに、
前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記デッドロック検出メッセージに含まれる前記優先度に基づいて、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送ることを含む、付記６乃至８のいずれか一項に記載の分散データ処理方法。
（付記１１）
コンピュータとして機能する複数の端末と、各々が、前記複数の端末の一つに自身の動作を制御する制御権を付与することによって、動作が制御されるコンピュータとして機能する複数の被制御装置を含むシステムの前記複数の端末の一つまたは前記複数の被制御装置の一つで実行される分散データ処理プログラムであって、
各々が前記複数の被制御装置の一つに対応する複数のノードが、第１の端末が制御権を有する第１の被制御装置に対応する第１のノードから前記第１の端末が制御権を有する第２の被制御装置に対応する第２のノードに向かって伸びる第１のリンクと、第２の端末が制御権を有する第３の被制御装置に対応する第３のノードから前記第２の端末が制御権を付与されることを待っている第４の被制御装置に対応する第４のノードに向かって伸びる第２のリンクとを用いて結合されることで構成される資源循環グラフにおいて、前記第１のリンクおよび前記第２のリンクに沿ってノード間を転送されるように、前記複数の被制御装置の間を転送されるデッドロック検出メッセージを受信し、
前記デッドロック検出メッセージの履歴に基づいて、デッドロックが発生しているか否かを判定する、
処理をコンピュータに実行させることを特徴とする分散データ処理プログラム。
（付記１２）
前記デッドロックが発生しているか否かを判定することは、前記デッドロック検出メッセージが複数回、前記複数の被制御装置のうちの一つを訪問した場合に、デッドロックが発生していると判定する、付記１１に記載の分散データ処理プログラム。
（付記１３）
さらに、
自身が前記第１のリンクの前記終点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記始点に対応する前記複数の被制御装置の別の一つを前ノード、自身が前記第１のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第１のリンクの前記終点に対応する前記複数の被制御装置の別の一つを次ノード、自身が前記第２のリンクの前記始点に対応する前記複数の被制御装置の一つである場合、前記第２のリンクの前記終点に対応する前記複数の被制御装置の別の一つを待ノードとして、前記前ノード、前記次ノード、および前記待ノードに関する情報を記憶し、
前記資源循環グラフの前記ノードの各々は、前記前ノード、前記次ノード、および前記待ノードに関する情報が付与されている、
付記６または７に記載の分散データ処理プログラム。
（付記１４）
さらに、
前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送る処理をコンピュータに実行させることを特徴とする、付記１１乃至１３のいずれか一項に記載の分散データ処理プログラム。
（付記１５）
前記デッドロック検出メッセージは、前記資源循環グラフに含まれる前記複数の被制御装置の優先度に関する情報を含み、
さらに、
前記デッドロックが発生していると判定したとき、前記デッドロックを解消するために、前記デッドロック検出メッセージに含まれる前記優先度に基づいて、前記資源循環グラフに含まれる前記複数の被制御装置の一つの前記制御権を有する前記複数の端末の一つに、前記制御権を解消させるための通知を送る処理をコンピュータに実行させることを特徴とする、付記１１乃至１３のいずれか一項に記載の分散データ処理プログラム。
【符号の説明】
【０１９８】
２０  分散データ処理装置
２００  デッドロック検出部
２０００  デッドロック判定部
２００２  転送メッセージ生成部
２０２  通信部
２０２０  ネットワーク受信部
２０２２  ネットワーク送信部
２０４  デッドロック解消部
２０６  資源循環グラフ更新部
２０６０  占有元端末管理部
２０６２  資源追加・更新部
２０６４  資源解放部
２０８  優先度決定情報データベース（ＤＢ）
２１０  資源循環グラフデータベース（ＤＢ）
２１２  占有元情報データベース（ＤＢ）
【図３Ａ】
2015194886.tif 000003
【図３Ｂ】
2015194886.tif 000004
【図４】
2015194886.tif 000005
【図５】
2015194886.tif 000006
【図６】
2015194886.tif 000007
【図７】
2015194886.tif 000008
【図８】
2015194886.tif 000009
【図９Ａ】
2015194886.tif 000010
【図９Ｂ】
2015194886.tif 000011
【図１０】
2015194886.tif 000012
【図１１】
2015194886.tif 000013
【図１２】
2015194886.tif 000014
【図１３】
2015194886.tif 000015
【図１４】
2015194886.tif 000016
【図１５】
2015194886.tif 000017
【図１６】
2015194886.tif 000018
【図１７】
2015194886.tif 000019
【図１８】
2015194886.tif 000020
【図１９】
2015194886.tif 000021
【図２０】
2015194886.tif 000022
【図２１】
2015194886.tif 000023
【図２２】
2015194886.tif 000024
【図２３】
2015194886.tif 000025
【図２４】
2015194886.tif 000026
【図２５】
2015194886.tif 000027
【図２６】
2015194886.tif 000028
【図２７】
2015194886.tif 000029
【図２８】
2015194886.tif 000030
【図２９】
2015194886.tif 000031
【図３１Ａ】
2015194886.tif 000032
【図３１Ｂ】
2015194886.tif 000033
【図３１Ｃ】
2015194886.tif 000034
【図３１Ｄ】
2015194886.tif 000035
【図３１Ｅ】
2015194886.tif 000036
【図３１Ｆ】
2015194886.tif 000037
【図１】
2015194886.tif 000038
【図２】
2015194886.tif 000039
【図３０】
2015194886.tif 000040