以下、本発明の一実施形態による排他制御システムを図面を参照して説明する。図1は、本発明の一実施形態の構成を示す排他制御システム40の構成例を示すブロック図である。排他制御システム40は、複数台の排他制御装置200と、1台以上のホストコンピュータ10と、複数の共有資源20とが、ネットワーク30で接続された疎結合コンピュータシステムである。共有資源20はホストコンピュータ10により共有される資源である。共有資源20として、ディスク装置内のファイル、データベース、または磁気テープ装置などが挙げられる。以下の説明では、ホストコンピュータ10を単に「ホスト」と表現することがある。
ホストが共有資源20を使用する場合、複数の排他制御装置200の何れかにロック要求(使用許可)を求め、排他制御装置200が使用の可否を応答する。各共有資源20は、管理対象として排他制御装置200に予め割り当てられている。また、1つの共有資源20が複数の排他制御装置200に管理されることはない。
図2は排他制御装置200の概略構成例を示す図である。排他制御装置200はネットワーク30で接続され相互に通信が行える。排他制御装置200は大きく分けて、資源管理部201とデッドロック監視部301で構成される。資源管理部201は全ての排他制御装置200で動作するが、デッドロック監視部301は予め定められた1台の排他制御装置200(例えば1番最初に起動した装置)でのみ動作する。図2において、動作していないデッドロック監視部301は、破線で記載されている。資源管理部201はホストからの要求に対し排他制御などを実施する。デッドロック監視部301は全排他制御装置200の情報を総合してデッドロックチェックなどを行う。
上記資源管理部201は、管理装置の一例である。デッドロック監視部301は、監視装置の一例である。したがって、資源管理部201とデッドロック監視部301が動作する排他制御装置200は、管理装置と監視部のいずれの機能を有する装置である。
図3は排他制御装置200の詳細構成例を示す図である。資源管理部201は、排他制御部210、排他制御テーブル220、およびスポットデータ制御部230を備える。デッドロック監視部301は、デッドロックチェック部310、およびデッドロックチェックテーブル320を備える。通信部400は、排他制御装置200とネットワーク30との通信インタフェースである。
このうち、資源管理部201の排他制御部210は、ホストから共有資源20に対する要求を受け付ける。この要求として、ロック要求とアンロック要求がある。ロック要求は、ある共有資源20へのアクセス権を要求するメッセージで、ロック対象の共有資源20を特定する識別子、ロック種別、およびチェック指定を含む。ロック種別は2種類あり、資源を排他的にロックする排他ロックか、共有資源としてロックする共有ロックかのいずれかを示す。チェック指定も2種類あり、デッドロックのチェックを不要とするチェック不要か、後述する遅延デッドロックチェックを行う遅延チェックかのいずれかを示す。なお、排他ロックは、ホストによりデータの書き換え等が生じる場合に指定され、共有ロックは、ホストによるデータの参照のみなどの場合に指定される。本実施形態では、特に断らない限り、「ロック」は排他ロックを示すものとする。
排他制御部210は、ロック要求を受信すると、ロック種別が排他ロックを示す場合には、識別子で特定される共有資源20が他のタスクからもロックされていないときにロック可能とし、そうでない場合にはロック待ちとする。また、ロック種別が共有ロックの場合には、他のタスクによるロックの有無にかかわらず、ロック可能とする。アンロック要求は、アクセス権の解放を要求するメッセージである。
ロック待ちとなった場合、排他制御部210は、チェック指定がチェック不要のときはデッドロックチェックを行わないでホストに結果(ロック可能、ロック待ち)を通知する。チェック指定が遅延チェックのときは、ホストに結果(ロック可能、ロック待ち)を通知し、ロック待ちの場合には、一定時間経過後に後述するデッドロックチェック要求(REQ1)をデッドロック監視部301に送信する。排他制御部210は、ロック待ちとなったタスクに該当する複数フラグ(後述)がオンの場合には、チェック指定がいずれであっても、後述するスポットデッドロックチェック要求(REQ4)をデッドロック監視部301に送信する。
スポットデータ制御部230は、デッドロック監視部301との間でデッドロックに関する処理を行う。処理の詳細については後述する。デッドロック監視部301のデッドロックチェック部310は、デッドロックのチェック等の処理を行う。処理の詳細については後述する。
次に、排他制御テーブル220、デッドロックチェックテーブル320、およびメッセージ等について説明する。図4は、排他制御情報を管理する排他制御テーブル220の一例を示す図である。排他制御テーブル220は、3つのテーブル(複数フラグテーブル、資源ロックテーブル、登録フラグテーブル)で構成される。図4(A)は、複数フラグテーブルを示す図である。複数フラグは、該当するタスクが複数の共有資源20をロックしているか否かを示すフラグである。該当するタスクが複数の共有資源20をロックしている場合にオンとなり、そうでない場合にオフとなる。以下の説明では、図4に示されるように、複数フラグがオンであることを略して複数オンと表現し、複数フラグがオフであることを略して複数オフと表現することがある。図4では、例えばタスクT1は、後述するように複数の共有資源20(B1、B2、B4)をロックしていることから、複数オンとなっている。上記B1などは、資源を特定するための識別子である。以下の説明では、共有資源20を単に資源と表現することがある。
図4(B)は、資源ロックテーブルを示す図である。資源ロックテーブルは、該当するタスクが、資源をロックしているか、ロック待ちか、ロックもロック待ちもしていないかのいずれかを示す資源ロック情報を有するテーブルである。該当するタスクがある資源をロックしている場合には「L」で示され、該当するタスクがある資源のロックを待っている場合には「W」で示される。また、ロックもロック待ちもしていない場合にはハイフン「−」で示される。図4(B)では、資源B1をタスクT1がロックしているため、タスクT1と資源B1に該当する資源ロック情報は「L」で示され、タスクT2は資源B1のロックを待っているため、タスクT2と資源B1に該当する資源ロック情報は「W」で示されている。
図4(C)は、登録フラグテーブルを示す図である。登録フラグは、該当する資源ロック情報がデッドロックチェックテーブル320に登録されているか否かを示すフラグである。該当する資源ロック情報がデッドロックチェックテーブル320に登録されている場合にオンとなり、そうでない場合にオフとなる。以下の説明では、図4(C)に示されるように、登録フラグがオンであることを略して登録オンと表現し、登録フラグがオフであることを略して登録オフと表現することがある。図4(C)では、タスクT1と資源B1に該当する資源ロック情報がデッドロックチェックテーブル320に登録されているものとしているため、登録オンとなっている。図4(C)におけるハイフン「−」は、登録フラグ自体が存在しないことを示している。
以上説明した排他制御テーブル220(複数フラグテーブル、資源ロックテーブル、登録フラグテーブル)は、資源管理部201に設けられるテーブルであることから、全ての排他制御装置200に設けられる。なお、図4では、排他制御テーブル220を3つのテーブルで構成されることを示したが、3つのテーブルを1つのテーブルにまとめて管理してもよい。
次に、デッドロックチェックテーブル320について説明する。デッドロックチェックテーブル320は、2つのテーブル(スポットフラグテーブル、登録資源ロックテーブル)で構成される。図5(A)は、スポットフラグテーブルを示す図である。スポットフラグは、後述するスポットデータ要求を行ったか否かを示すフラグであり、スポットデータ要求を行った場合にオンとなり、そうでない場合にオフとなる。以下の説明では、図5に示されるように、スポットフラグがオンであることを略してスポットオンと表現し、スポットフラグがオフであることを略してスポットオフと表現することがある。図5では、例えばタスクT1は、スポットオンとなっている。
図5(B)は、登録資源ロックテーブルを示す図である。登録資源ロックテーブルは、該当するタスクが、資源をロックしているか、ロック待ちか、ロックもロック待ちもしていないかのいずれかを示す登録資源ロック情報を有するテーブルである。該当するタスクがある資源をロックしている場合には「L」で示され、該当するタスクがある資源のロックを待っている場合には「W」で示される。また、ロックもロック待ちもしていない場合にはハイフン「−」で示される。図5(B)では、資源B1をタスクT1がロックしているため、タスクT1と資源B1に該当する登録資源ロック情報は「L」で示され、タスクT3は資源B2のロックを待っているため、タスクT3と資源B2に該当する登録資源ロック情報は「W」で示されている。以下の説明では、スポットフラグと登録資源ロック情報をまとめてスポットロック情報を表現することがある。また、ある資源をロックしているタスクをロックタスクと表現し、ある資源のロックを待っているタスクを待ちタスクと表現することがある。さらに、ロックタスクの識別子をロックタスク識別子と表現し、待ちタスクの識別子を待ちタスク識別子と表現することがある。
次に、資源管理部201からデッドロック監視部301に送信されるメッセージ(以下、「監視部宛メッセージ」ともいう)について説明する。図6は、監視部宛メッセージのメッセージフォーマットおよびメッセージの詳細を示す図である。
図6(A)は、メッセージフォーマットを示す図である。図6(A)に示されるように、監視部宛メッセージは、種別、排他制御装置番号、資源識別子、1つ以上のタスク識別子、および待ちタスク識別子で構成される。このうち、種別は、メッセージの種別を示す。排他制御装置番号は、宛先のデッドロック監視部301を有する排他制御装置200を特定するための番号である。資源識別子は、本メッセージの対象となる共有資源20を識別するための識別子(上記B1、B2等)である。タスク識別子および待ちタスク識別子は、本メッセージの対象となるタスクを識別するための識別子(上記T1、T2等)である。なお、待ちタスク識別子は、メッセージに含まれないこともある。
図6(B)は、各種メッセージの詳細を示す図である。監視部宛メッセージには、5つの種別がある。まず、デッドロックチェック要求(REQ1)は、デッドロックのチェックを目的とするメッセージである。REQ1には、デッドロックのチェック対象となる資源を識別する資源識別子と、当該資源をロックしているタスクのタスク識別子と、当該資源のロック待ちとなったタスクのタスク識別子が含まれる。このREQ1は、後述する遅延デッドロックチェックを行う場合に用いられるメッセージである。
更新要求(REQ2)は、デッドロックチェックテーブル320の登録資源ロック情報を「L」に更新することを目的とするメッセージである。REQ2には、更新する登録資源ロック情報に該当する資源を識別する資源識別子と、更新する登録資源ロック情報に該当するタスクのタスク識別子が含まれる。
削除要求(REQ3)は、デッドロックチェックテーブル320のスポットロック情報を削除することを目的とするメッセージである。REQ3には、削除するスポットロック情報に該当する資源を識別する資源識別子と、削除するスポットロック情報に該当するタスクのタスク識別子が含まれる。
スポットデッドロックチェック要求(REQ4)は、デッドロックのチェックを目的とするメッセージである。REQ1と異なる点は、複数フラグがオンとなっているタスクが待ちタスクとなったか否かという点である。REQ4には、デッドロックのチェック対象となる資源を識別する資源識別子と、当該資源をロックしているタスクのタスク識別子と、当該資源のロック待ちとなったタスクのタスク識別子が含まれる。
スポットデータ転送(REPL5)は、REQ5に対する回答メッセージである。REQ5は、デッドロック監視部301から送信されるメッセージであり、ある資源に対するデッドロックチェックを行うために必要となる情報を要求するメッセージである。REPL5には、REQ5で送信された資源を特定する資源識別子と、当該資源をロックしているタスクのタスク識別子と、当該資源のロックを待っている待ちタスクの待ちタスク識別子が含まれる。
次に、デッドロック監視部301から資源管理部201に送信されるメッセージ(以下、「管理部宛メッセージ」ともいう)について説明する。図7は、管理部宛メッセージのメッセージフォーマットおよびメッセージの詳細を示す図である。
図7(A)は、メッセージフォーマットを示す図である。図7(A)に示されるように、管理部宛メッセージは、種別、タスク識別子、および資源識別子で構成される。このうち、種別は、メッセージの種別を示す。タスク識別子は、本メッセージの対象となるタスクを識別するための識別子(上記T1、T2等)である。資源識別子は、本メッセージの対象となる共有資源20を識別するための識別子(上記B1、B2等)である。なお、タスク識別子、および資源識別子は、メッセージに含まれないこともある。
図7(B)は、各種メッセージの詳細を示す図である。監視部宛メッセージには、7つの種別がある。まず、スポットデータ要求(REQ5)は、上述したように、ある資源に対するデッドロックチェックを行うために必要となる情報を要求することを目的とするメッセージである。REQ5にはタスク識別子のみが含まれ、全ての排他制御装置200の資源管理部201に送信される。
プッシュアウト通知(REQ6)は、上述したスポットデッドロックチェック要求(REQ4)を受信し、デッドロックチェックを行った結果、デッドロックが発生していることを応答することを目的とするメッセージである。
複数フラグ解除要求(REQ7)は、排他制御装置200の排他制御テーブル220の複数フラグテーブルをリセットすることを目的とするメッセージである。REQ7には、資源識別子は含まれない。
デッドロックなし応答(REPL1−1)は、デッドロックチェック要求(REQ1)を受信し、デッドロックチェックを行った結果、デッドロックが発生していないことを応答することを目的とするメッセージである。REPL1−1には、デッドロックチェック要求(REQ1)で受信したタスク識別子、および資源識別子が含まれる。
デッドロックあり応答(REPL1−2)は、デッドロックチェック要求(REQ1)を受信し、デッドロックチェックを行った結果、デッドロックが発生していることを応答することを目的とするメッセージである。REPL1−2には、デッドロックチェック要求(REQ1)で受信したタスク識別子、および資源識別子が含まれる。
更新応答(REPL2)は、更新要求(REQ2)に対する応答メッセージである。REPL2には、タスク識別子、および資源識別子は含まれない。削除応答(REPL3)は、削除要求(REQ3)に対する応答メッセージである。REPL2には、タスク識別子、および資源識別子は含まれない。
以上を踏まえ、排他制御部210がアンロック要求を受信したときの処理と、スポットデータ制御部230の処理と、デッドロックチェック部310の処理の詳細について説明する。
排他制御部210は、アンロック要求を受信すると、資源ロックテーブルにおいて、アンロック要求に示されるタスクと資源に該当する資源ロック情報を削除する。また、排他制御部210は、登録フラグテーブルにおいて、アンロック要求に示されるタスクと資源に該当する登録フラグを削除する。このとき、登録フラグがオンの場合には、排他制御部210は、削除要求(REQ3)をデッドロック監視部301に送信する。
また、資源ロック情報の削除により、タスクの資源ロック情報が0となった場合には、当該タスクに用意されている資源ロック情報を記憶する領域も削除される。例えば、図4(B)でタスクT2の資源ロック情報が0となった場合には、資源ロックテーブルからタスクT2の列ごと削除される。同様に、資源ロック情報の削除により、資源ロック情報が0となった場合には、当該資源に用意されている資源ロック情報を記憶する領域も削除される。例えば、図4(B)で資源B2の資源ロック情報が0となった場合には、資源ロックテーブルから資源B2の行ごと削除される。
さらに、資源のアンロックにより、当該資源の空きを待っていた待ちタスクが資源をロックすることも可能となる。空きを待っていた待ちタスクとロックする資源に該当する登録フラグがオンの場合、排他制御部210は、更新要求(REQ2)をデッドロック監視部301に送信する。
さらに、排他制御部210は、プッシュアウト通知(REQ6)を受信すると、デッドロックが発生する原因となったタスクが待ちをとなっていることを示す資源ロック情報を削除し、デッドロックが発生したことをホストに送信する。排他制御部210は、複数フラグ解除要求(REQ7)を受信し、REQ7に示されるタスクに該当する複数フラグがオンの場合には、複数フラグをオフにする。
次に、スポットデータ制御部230について説明する。スポットデータ制御部230は、デッドロックチェック部310からスポットデータ要求(REQ5)を受信すると、スポットデータ要求に示されるタスクがロックしている資源またはタスクが待っている資源を示す識別子をスポットデータ転送(REPL5)として送信する。また、スポットデータ制御部230は、REQ5を受信すると、REQ5に示されるタスクに該当する複数フラグをオンとする。
次に、デッドロックチェック部310について説明する。デッドロックチェック部310は、排他制御部210からデッドロックチェック要求(REQ1)を受信すると、登録ロック資源情報として登録資源ロックテーブルに登録し、デッドロックチェックを行う。デッドロックチェックの結果、デッドロックが発生している場合には、デッドロック発生応答(REPL1−2)を送信する。デッドロックが発生していない場合には、デッドロックなし応答(REPL1−1)を送信する。
デッドロックチェック部310は、排他制御部210から削除要求(REQ3)を受信すると、登録資源ロックテーブルにおいて登録されている登録資源ロック情報を削除し、削除応答(REPL3)を送信する。また、登録資源ロック情報を削除した結果、該当するタスクの登録ロック資源情報が0となり、かつスポットフラグがオンとなっている場合には、複数フラグ解除要求(REQ7)を排他制御部210へ送信する。
デッドロックチェック部310は、排他制御部210から更新要求(REQ2)を受信すると、登録資源ロックテーブルにおいて登録されている登録資源ロック情報を「L」に更新する。この結果、タスクが複数の資源をロックした場合には、デッドロックチェック部310は、スポットデータ要求(REQ5)を送信する。デッドロックチェック部310は、スポットデータ転送(REPL5)を受信し、受信したREPL5を登録資源ロックテーブルに反映する。デッドロックチェック部310は、REPL5で受信した内容を反映させた登録資源ロックテーブルにおいて、デッドロックをチェックする。チェックの後、デッドロック検出の有無に関わらず、登録資源ロックテーブルにおいて反映された分は削除される。
デッドロックチェック部310は、排他制御部210からスポットデッドロックチェック要求(REQ1)を受信すると、登録ロック資源情報として登録資源ロックテーブルに登録し、デッドロックチェックを行う。デッドロックチェックの結果、デッドロックが発生している場合には、デッドロック発生応答(REPL1−2)を送信する。デッドロックが発生していない場合には、デッドロックなし応答(REPL1−1)を送信する。
次に、デッドロックと遅延デッドロックチェックについて説明する。図8は、デッドロックと遅延デッドロックチェックを説明するための図である。まず、図8(A)に示されるように、資源B1と資源B2を管理する排他制御装置200は、それぞれ異なる装置であり、便宜的に排他制御装置X、Yとする。また、タスクT1が資源B1をロック中とする。また、タスクT1は、資源B2をロックしようとしたが、タスクT2がロック中であることから、排他制御装置Bは、タスクT1をロック待ちとする。登録資源ロックテーブルにおけるタスクT1と資源B2に該当する登録資源ロック情報は「W」となり、タスクT2と資源B2に該当する登録資源ロック情報は「L」となる。
このとき、排他制御装置Xは、遅延デッドロックチェックを行うための遅延タイマをセットする。このタイマがタイムアウトとなり、排他制御装置Xは、図8(A)に示される状態のままでデッドロックチェック要求(REQ1)を送信する。ここでの送信先は、デッドロック監視部301となるが、このデッドロック監視部301は排他制御装置X、Y、および他の排他制御装置のいずれに設けられていてもよい。ここでは、他の排他制御装置にデッドロック監視部301が設けられているものとする。REQ1の受信により、デッドロックチェック部310は、デッドロックチェックを行い、デッドロックは発生してないため、デッドロックなし応答(REPL1−1)を送信する。
その後、タスクT2が資源B1をロックしようとしたが、タスクT1がロック中であることから、図8(B)に示されるように、排他制御装置Xは、タスクT2をロック待ちとする。
このとき、デッドロックはチェックされないため、デッドロックは発生していることは検出されていないが、遅延デッドロックチェックを行うためのタイマがセットされる。このタイマがタイムアウトとなり、図8(B)に示される状態のままでデッドロックチェック要求(REQ1)が送信され、デッドロックチェックが行われると、デッドロックが発生しているため、デッドロックあり応答(REPL1−2)が送信される。
具体的に、図8(B)の登録資源ロックテーブルにおけるタスクT1と資源B2に該当する登録資源ロック情報は「W」であり、タスクT2と資源B2に該当する登録資源ロック情報は「L」である。さらに、登録資源ロックテーブルにおけるタスクT1と資源B1に該当する登録資源ロック情報は「L」となり、タスクT2と資源B1に該当する登録資源ロック情報は「W」となる。よって、デッドロックチェック部310は、デッドロックが発生していることを検出できる。
次に、資源をB0〜B3の4つとし、タスクをT1〜T4の4つとしたときの、資源のロックおよび登録資源ロックテーブルの一例について図9を用いて説明する。図9に示されるように、排他制御装置Xは、資源B1、B3を管理し、排他制御装置Yは、資源B0、B2を管理する。また、図8と同様に、デッドロック監視部301は排他制御装置X、Y、および他の排他制御装置のいずれに設けられていてもよいが、ここでは、他の排他制御装置にデッドロック監視部301が設けられているものとする。
図9(A)に示されるように、資源B0は、タスクT3がロックしている。資源B1は、タスクT1がロックし、タスクT4が待ちとなっている。資源B2は、タスクT1がロックし、タスクT3が待ちとなっている。資源B3は、タスクT1がロックし、タスクT4が待ちタスクとなっている。また、デッドロック監視部301の登録資源ロックテーブルには、タスクT1が資源B1、B2をロックしていること、タスクT3が資源B2の待ちとなっていること、タスクT4が資源B1の待ちとなっていることが登録されている。
この状態において、排他制御装置Xは、遅延タイマをセットしているものとする。また、デッドロックチェック部310は、排他制御装置X、YにタスクT1のスポットデータ要求(REQ5)を送信したものとする。このとき、デッドロックチェック部310は、タスクT1に該当するスポットフラグをオンとする。また、REQ5を受信した排他制御装置X、Yは、タスクT1に該当する複数フラグをオンとする。
そして、排他制御装置Xは、REQ5の応答として、資源B1はタスクT1にロックされ、タスクT4が待ちタスクとなっていること、および資源B3はタスクT1にロックされ、タスクT4が待ちタスクとなっていることを示すスポットデータ転送(REPL5)をデッドロックチェック部310に送信する。一方、排他制御装置Yは、REQ5の応答として、資源B2はタスクT1にロックされ、タスクT3が待ちタスクとなっていることを示すREPL5をデッドロックチェック部310に送信する。なお、資源B0に待ちタスクは存在しないため、資源B0に関するREPL5は送信されない。
排他制御装置X、YからREPL5を受信したデッドロックチェック部310は、受信したREPL5を登録資源ロックテーブルに反映する。図9(B)は、反映された登録資源ロックテーブルを示す図である。図9(B)に示されるように、登録資源ロックテーブルは、資源B3について、タスクT1がロックしていること、タスクT4が待ちタスクとなっていることが反映されている。
デッドロックチェック部310は、REPL5で受信した内容を反映させた登録資源ロックテーブルにおいて、デッドロックをチェックするが、デッドロックは検出されない。デッドロック検出の有無に関わらず、登録資源ロックテーブルにおいて反映された分は削除される。すなわち、図9(A)に示される登録資源ロックテーブルとなる。
次いで、資源B0をタスクT1がロックしようとするが、資源B0は、タスクT3により既にロックされているため、タスクT1は待ちタスクとなる。上述したように、排他制御装置YにおけるタスクT1の複数フラグはオンのため、排他制御装置Yは、デッドロックチェック部310にスポットデッドロックチェック要求(REQ4)を送信する。
デッドロックチェック部310は、REQ4を受信したため、スポットデータ要求(REQ5)を送信する。排他制御装置Yは、REQ5の応答として、資源B0はタスクT3にロックされ、タスクT1が待ちタスクとなっていること、および資源B2はタスクT1にロックされ、タスクT3が待ちタスクとなっていることを示すREPL5をデッドロックチェック部310に送信する。排他制御装置XもREPL5を送信するが、その詳細は省略する。
排他制御装置YからREPL5を受信したデッドロックチェック部310は、受信したREPL5を登録資源ロックテーブルに反映する。図9(C)は、反映された登録資源ロックテーブルを示す図である。図9(C)に示されるように、登録資源ロックテーブルは、資源B0について、タスクT3がロックしていること、タスクT1が待ちタスクとなっていることが反映されている。
デッドロックチェック部310は、REPL5で受信した内容を反映させた登録資源ロックテーブルにおいて、デッドロックをチェックする。デッドロックチェック部310は、資源B0について、タスクT3がロックし、タスクT1が待ちタスクとなっており、さらに資源B2において、タスクT1がロックし、タスクT3が待ちタスクとなっているため、デッドロックが発生していることを検出する。そこで、デッドロックチェック部310は、REQ4の応答として、タスクT1と資源B0を示すプッシュアウト通知(REQ6)を排他制御装置Yに送信する。
以上説明した処理を、フローチャートを用いて説明する。図10、図11は、排他制御部210の処理の流れを示すフローチャートである。排他制御部210は、ホストから要求を受信すると、要求の種別で分岐する(ステップS101)。ホストからの要求がロック要求の場合には、ロック可能か否かを判定する(ステップS102)。ロック可能な場合には(ステップS102:YES)、排他制御部210は、ホストにロック成功を通知し(ステップS103)、処理を終了する。
ロック可能ではない場合には(ステップS102:NO)、排他制御部210は、ホストにロック待ちを通知する(ステップS104)。排他制御部210は、複数フラグがオンか否かを判定する(ステップS105)。複数フラグがオンの場合には(ステップS105:YES)、排他制御部210は、REQ4をデッドロックチェック部310に送信し(ステップS106)、ステップS107に進む。複数フラグがオフの場合には(ステップS105:NO)、ロック要求のチェック指定が遅延チェックか否かを判定する(ステップS107)。チェック指定がチェック不要の場合には(ステップS107:NO)、処理を終了する。
チェック指定が遅延チェックの場合には(ステップS107:YES)、排他制御部210は、タイマをセットする(ステップS108)。タイムアウトとなると(ステップS109:YES)、排他制御部210は、遅延デッドロックチェック対象のタスクが未だにロック待ちタスクのままか否かを判定する(ステップS110)。ロック待ちではない場合には(ステップS110:NO)、処理を終了する。ロック待ちの場合には(ステップS110:YES)、排他制御部210は、REQ1をデッドロックチェック部310に送信し(ステップS111)、登録フラグをオンにする(ステップS112)。
排他制御部210は、デッドロックチェック部310からREPL1_1を受信したか否かを判定する(ステップS113)。REPL1_1を受信した場合には(ステップS113:YES)、デッドロックが発生していないため、処理を終了する。REPL1_2を受信した場合には(ステップS113:YES)、排他制御部210は、資源ロック情報を削除して(ステップS114)、ホストにデッドロックを発生を通知して(ステップS115)、処理を終了する。
上記ステップS101でアンロック要求を受信した場合の処理について、図11を用いて説明する。ステップS101でアンロック要求を受信すると、排他制御部210は、登録フラグがオンか否かを判定する(ステップS201)。登録フラグがオンではない場合には(ステップS201:NO)、ステップS204に進む。登録フラグがオンの場合には(ステップS201:YES)、排他制御部210は、REQ3をデッドロックチェック部310に送信する(ステップS202)。
デッドロックチェック部310からREPL3を受信すると(ステップS203:YES)、排他制御部210は、アンロックに伴い、各種情報を削除する(ステップS204)。ここでの各種情報等とは、排他制御テーブル220におけるアンロックしたタスクやアンロックされた資源に関する情報、およびそれらを記憶する領域である。
排他制御部210は、アンロックされた資源の待ちタスクがあるか否かを判定する(ステップS205)。待ちタスクがない場合には(ステップS205:NO)、処理を終了する。待ちタスクがある場合には(ステップS205:YES)、排他制御部210は、REQ2をデッドロックチェック部310に送信する(ステップS206)。排他制御部210は、REPL2を受信すると(ステップS207:YES)、ロック成功をホストに通知して(ステップS208)、処理を終了する。
図12は、排他制御部210の処理の流れを示すフローチャートである。排他制御部210は、デッドロックチェック部310からメッセージを受信すると、メッセージの種別で分岐する(ステップS301)。REQ6を受信した場合には、排他制御部210は、デッドロックが発生する原因となったタスクが待ちをとなっていることを示す資源ロック情報を削除し(ステップS302)、デッドロックが発生したことをホストに通知して(ステップS303)、処理を終了する。
ステップS301において、REQ7を受信した場合には、排他制御部210は、REQ7で複数フラグの解除が指定されたタスクに該当する複数フラグがオンとなっているか否かを判定する(ステップS304)。複数フラグがオンではない場合には(ステップS304:NO)、処理を終了する。複数フラグがオンの場合には(ステップS304:YES)、排他制御部210は、複数フラグをオフにして、処理を終了する。
ステップS301において、REQ5を受信した場合には、排他制御部210は、REQ5に示されるタスクがロックしている資源またはタスクが待っている資源を示す識別子(該当識別子)があるか否かを判定する(ステップS306)。該当識別子がない場合には(ステップS306:NO)、ステップS308に進む。該当識別子がある場合には(ステップS306:YES)、排他制御部210は、複数フラグをオンとし(ステップS307)、REPL5を排他制御部210に送信して(ステップS308)、処理を終了する。なお、ステップS306で否定判定された場合には、資源識別子がないREPL5が送信される。
図13、図14、図15は、デッドロックチェック部310の処理の流れを示すフローチャートである。図13において、デッドロックチェック部310は、排他制御部210からメッセージを受信すると、メッセージの種別で分岐する(ステップS401)。REQ1またはREQ4を受信した場合には、再びメッセージの種別で分岐する(ステップS402)。REQ4を受信した場合には、ステップS409に進む。
REQ4を受信した場合には、デッドロックチェック部310は、登録資源ロックテーブルに資源ロック情報を登録する(ステップS403)。デッドロックチェック部310は、デッドロックのチェック等を行うデッドロック関連処理Aを行う(ステップS404)。デッドロックチェック部310は、複数の資源をロックするタスクが新たに出現したか否かを判定する(ステップS405)。複数の資源をロックするタスクが新たに出現していない場合には(ステップS405:NO)、処理を終了する。
複数の資源をロックするタスクが新たに出現した場合には(ステップS405:YES)、デッドロックチェック部310は、全てのスポットデータ制御部230にREQ5を送信し(ステップS406)、スポットフラグをオンとする(ステップS407)。全てのスポットデータ制御部230からREPL5を受信すると(ステップS408:YES)、デッドロックチェック部310は、REPL5またはREQ5に示される登録資源ロック情報を登録資源ロックテーブルに仮登録する(ステップS409)。デッドロックチェック部310は、デッドロックのチェック等を行うデッドロック関連処理Bを行う(ステップS410)。デッドロックチェック部310は、仮登録した登録資源ロック情報を登録資源ロックテーブルから削除し(ステップS411)、処理を終了する。
次に、上記ステップS404のデッドロック関連処理AおよびステップS410のデッドロック関連処理Bについて説明する。図14(A)は、デッドロック関連処理Aの処理の流れを示すフローチャートである。デッドロックチェック部310は、登録資源ロックテーブルを用いて、デッドロックチェックを実行し(ステップS501)、デッドロックが発生しているか否かを判定する(ステップS502)。
デッドロックが発生している場合には(ステップS502:YES)、デッドロックチェック部310は、REPL1−2を送信し(ステップS503)、デッドロックが発生する原因となったタスクが待ちをとなっていることを示す登録資源ロック情報を削除し(ステップS504)、処理を終了する。デッドロックが発生していない場合には(ステップS502:NO)、デッドロックチェック部310は、REPL1−1を送信し(ステップS505)、処理を終了する。
図14(B)は、デッドロック関連処理Bの処理の流れを示すフローチャートである。デッドロックチェック部310は、登録資源ロックテーブルを用いて、デッドロックチェックを実行し(ステップS601)、デッドロックが発生しているか否かを判定する(ステップS602)。
デッドロックが発生している場合には(ステップS602:YES)、デッドロックチェック部310は、REQ6を送信し(ステップS603)、デッドロックが発生する原因となったタスクが待ちをとなっていることを示す登録資源ロック情報を削除し(ステップS604)、処理を終了する。デッドロックが発生していない場合には(ステップS602:NO)、処理を終了する。
次に、上述した図13のステップS401で、REQ2またはREQ3を受信した場合の処理について、図15を用いて説明する。図13において、REQ2またはREQ3を受信した場合には、図15において、再びメッセージの種別で分岐する(ステップS701)。REQ2を受信した場合には、デッドロックチェック部310は、デッドロックチェックテーブル320の登録資源ロック情報を「L」に更新し(ステップS702)、ステップS707に進む。
ステップS701において、REQ3を受信した場合には、デッドロックチェック部310は、REQ3に示される削除対象の登録資源ロック情報を削除する(ステップS703)。デッドロックチェック部310は、削除した登録資源ロック情報がロック待ちかロックを示す登録資源ロック情報であったか否か(WかL)で分岐する(ステップS704)。
削除対象がロック待ちを示す登録資源ロック情報の場合には、デッドロックチェック部310は、削除された登録資源ロック情報に該当するタスクまたはある資源において、ロック待ちを示す登録資源ロック情報がなくなったか否かを判定する(ステップS705)。ロック待ちを示す登録資源ロック情報がなくなっていない場合には(ステップS705:NO)、ステップS709に進む。デッドロックチェック部310は、REPL2またはREPL3を送信し(ステップS709)、処理を終了する。なお、ステップS709では、REQ2を受信している場合にはREPL2が送信され、REQ3を受信している場合にはREPL3が送信される。
上記ステップS705において、ロック待ちを示す登録資源ロック情報がなくなった場合には(ステップS705:YES)、デッドロックチェック部310は、削除に伴い各種情報を削除する(ステップS706)。ここでの各種情報とは、削除された登録資源ロック情報に該当するタスクと資源の登録資源ロック情報およびそれらを記憶する領域である。
デッドロックチェック部310は、削除された登録資源ロック情報に該当するタスクのスポットフラグがオンか否かを判定する(ステップS707)。スポットフラグがオンの場合には(ステップS708:YES)、デッドロックチェック部310は、REQ7を送信し(ステップS708)、上記ステップS709に進む。
ステップS704において、削除対象がロックを示す登録資源ロック情報の場合には、デッドロックチェック部310は、削除に伴い各種情報等を削除し(ステップS710)、上記ステップS707に進む。ここでの各種情報とは、削除された登録資源ロック情報に該当するタスクと資源の登録資源ロック情報およびそれらを記憶する領域である。
次に、上述したフローチャートを用いて、処理の一例について説明する。この例では、排他制御装置X、Yがそれぞれ排他制御テーブルX、Yを持つものとする。図16は、排他制御テーブルXを示し、図17は排他制御テーブルYを示す。また、図16、図17のいずれも(A)は複数フラグテーブルを示し、(B)は資源ロックテーブルを示し、(C)は登録フラグテーブルを示す。
図16に示されるように、排他制御テーブルXでは、複数フラグは全てオフとなっている。タスクT1は資源B2をロックし、タスクT3は資源B2の待ちタスクであり、タスクT4は、資源B1をロックしている。また、タスクT1と資源B2に該当する登録フラグはオンであり、タスクT3と資源B2に該当する登録フラグはオンであり、タスクT4と資源B1に該当する登録フラグはオフである。
図17を用いて、排他制御テーブルYについて説明する。なお、図17に示される網掛け部分は後で追加される情報である。そのため、最初は網掛け部分がないものとして説明する。図17に示されるように、排他制御テーブルYでは、複数フラグは全てオフとなっている。タスクT1は資源B4をロックし、タスクT2は資源B3をロックし、タスクT5は資源B3の待ちタスクである。また、タスクT1と資源B4に該当する登録フラグはオンであり、タスクT2と資源B3に該当する登録フラグはオンであり、タスクT5と資源B3に該当する登録フラグはオンである。
図18を用いて、デッドロックチェックテーブルについて説明する。なお、図18に示される網掛け部分も後で追加される情報である。そのため、最初は網掛け部分がないものとして説明する。図18に示されるデッドロックチェックテーブル(網掛け部分を除く)は、図16の排他制御テーブルX、図17の排他制御テーブルY(網掛け部分を除く)に対応するテーブルである。
デッドロックチェックテーブルにおけるスポットフラグは、全てオフとなっている。また、排他制御テーブルXにおけるタスクT1と資源B2に該当する登録フラグがオンであることに対応して、タスクT1と資源B2に該当する登録資源ロック情報は「L」となっている。排他制御テーブルXにおけるタスクT3と資源B2に該当する登録フラグがオンであることに対応して、タスクT3と資源B2に該当する登録資源ロック情報は「W」となっている。
排他制御テーブルYにおけるタスクT2と資源B3に該当する登録フラグがオンであることに対応して、タスクT2と資源B3に該当する登録資源ロック情報は「L」となっている。排他制御テーブルYにおけるタスクT5と資源B3に該当する登録フラグがオンであることに対応して、タスクT3と資源B2に該当する登録資源ロック情報は「W」となっている。
この状態で、タスクT4が資源B4のロック要求を排他制御装置Yに通知したとする。このロック要求のロック種別は排他ロックであり、チェック指定は、遅延チェックとする。
排他制御装置Yの排他制御部210は、ロック要求を受信したため、ステップS101からステップS102に分岐する。資源B4は、タスクT1がロックしているため、排他制御部210は、ロック不可能と判定し(ステップS102:NO)、ロック待ちをホストに通知する(ステップS104)。また、複数フラグがオフであり(ステップS105:NO)、遅延チェックであるので(ステップS107:YES)、タイマがセットされる(ステップS108)。この時点での排他制御テーブルYが、図17の網掛け部分を含むものとなる。
タイムアウト後(ステップS109:YES)、タスクT4はロック待ちタスクのままとすると(ステップS110:YES)、排他制御部210は、REQ1を送信し(ステップS111)、登録フラグをオンとする(ステップS112)。その後、排他制御部210は、デッドロックチェック部310からの応答を待つ。
デッドロックチェック部310は、REQ1を受信したため(ステップS401、ステップS402)、資源ロック情報を登録する(ステップS403)。これにより、図18に示した網掛け部分であるタスクT4と資源B4に該当する資源ロック情報(W)と、タスクT1と資源B4に該当する資源ロック情報(L)が登録される。デッドロックチェック部310は、デッドロックチェックを行うが(ステップS501)、デッドロックは発生していないため(ステップS502:NO)、REPL1−1を送信する(ステップS505)。排他制御部210は、REPL1−1を受信すると(ステップS113:YES)、処理を終了する。
一方、デッドロックチェック部310は、複数の資源をロックするタスクT1が新たに出現したため(ステップS405:YES)、排他制御装置X、Yに、タスクT1についてREQ5を送信し(ステップS406)、タスクT1に該当するスポットフラグをオンにする(ステップS407)。
REQ5を受信した排他制御装置Xのスポットデータ制御部230は、タスクT1が資源B2をロックしているので(ステップS306:YES)、タスクT1に該当する複数フラグをオンにし(ステップS307)、REPL5を送信する(ステップS308)。また、REQ5を受信した排他制御装置Yのスポットデータ制御部230は、タスクT1が資源B4をロックしているので(ステップS306:YES)、タスクT1に該当する複数フラグをオンにし(ステップS307)、REPL5を送信する(ステップS308)。
全てのスポットデータ制御部230からREPL5を受信すると(ステップS408:YES)、デッドロックチェック部310は、REPL5に示される登録資源ロック情報を登録資源ロックテーブルに仮登録する(ステップS409)。なお、この例の場合は新たに登録される登録資源ロック情報はない。そして、デッドロックチェック部310は、デッドロックチェックを行うが(ステップS601)、デッドロックは発生していないため(ステップS602:NO)、仮登録した登録資源ロック情報を削除し(ステップS411)、処理を終了する。上述したように、新たに登録された登録資源ロック情報はないため、削除される登録資源ロック情報もない。
以上の時点で、排他制御テーブルXは、図16に示される各テーブルの状態から、タスクT1に該当する複数フラグがオンとなったものとなる。排他制御テーブルYは、図17に示される各テーブルの状態から、網掛け部分を含み、かつタスクT1に該当する複数フラグがオンとなったものとなる。デッドロックチェックテーブルは、図18に示される各テーブルの状態から、網掛け部分を含み、かつタスクT1に該当するスポットフラグがオンとなったものとなる。
この状態で、タスクT1が資源B1のロック要求を排他制御装置Xに通知したとする。このロック要求のロック種別は排他ロックであり、チェック指定は、チェックなしとする。
排他制御装置Xの排他制御部210は、ロック要求を受信したため、ステップS101からステップS102に分岐する。資源B1は、タスクT4がロックしているため、排他制御部210は、ロック不可能と判定し(ステップS102:NO)、ロック待ちをホストに通知する(ステップS104)。また、複数フラグがオンであるので(ステップS105:YES)、排他制御部210は、REQ4を送信する(ステップS106)。次いで、排他制御部210は、チェック指定がチェックなしであることから(ステップS107:NO)、処理を終了する。
デッドロックチェック部310は、REQ4を受信したため(ステップS401、ステップS402)、資源ロック情報を仮登録する(ステップS408)。図19は、このときのデッドロックチェックテーブルを示す図である。REQ4の受信により、資源B1とタスクT1に該当する登録資源ロック情報として「W」が登録され、資源B1とタスクT4に該当する登録資源ロック情報として「L」が登録される。
デッドロックチェック部310は、デッドロックチェックを行う(ステップS601)。図19に示される例では、デッドロックが検出される。具体的には、図19に示されるように、タスクT1は、資源B1の待ちタスクであり、資源B4のロックタスクである。一方、タスクT4は、資源B1のロックタスクであり、資源B4の待ちタスクである。このように、タスクT1とタスクT4が相互に待たせているため、デッドロックが発生している。
デッドロックチェック部310は、デッドロックが発生してることから(ステップS602:YES)、REQ6を送信する(ステップS603)。デッドロックチェック部310は、デッドロックが発生する原因となったタスクT1が待ちをとなっていることを示す登録資源ロック情報(資源B1とタスクT1に該当する登録資源ロック情報)を削除する(ステップS604)。
REQ6を受信した排他制御装置Xの排他制御部210は、排他制御テーブルXから、デッドロックが発生する原因となったタスクT1が待ちをとなっていることを示す資源ロック情報(資源B1とタスクT1に該当する資源ロック情報)を削除する(ステップS302)。また、排他制御部210は、デッドロックの発生をホストに通知する(ステップS303)。これにより、デッドロックを適切に検出可能となっている。
なお、デッドロックが発生する原因となった、タスクT1による資源B1のロック要求のチェック指定が遅延チェックであっても、REQ4は送信されるので、デッドロックは検出される。また、遅延チェックの場合は、タイマがセットされ、タイムアウト後のステップS110でロック待ちタスクのままか判定され、デッドロックが検出された場合には、ステップS302で資源ロック情報が削除されているため、ステップS110で否定判定される。
以上説明したように、資源管理部201は、管理対象として当該排他制御装置200に割り当てられた資源をロックしているタスク、および割り当てられた資源のロックを待っているタスクを示す第1情報(排他制御テーブル220)を記憶する。また、資源管理部201は、第1情報を用いて、複数の資源をロックしているタスクが、新たに他の資源のロックを待つタスクとなったことを検出する(ステップS105)。
また、デッドロック監視部301は、一の資源をロックしているタスク、または当該一の資源のロックを待つタスクを示す資源情報を前記管理装置から取得する(REQ1、REQ2、REQ3、REQ4、REPL2の受信)。デッドロック監視部301は、取得された資源情報にもとづいて、資源をロックしているタスク、および資源のロックを待っているタスクを示す第2情報(デッドロックチェックテーブル320)を記憶する。
デッドロック監視部301は、一のタスクが複数の資源をロックしていることを検出する(ステップS405)。デッドロック監視部301は、複数の資源をロックしているタスクが、新たに他の資源のロックを待つタスクとなったことが検出された場合(REQ4受信)、または一のタスクが複数の資源をロックしていることが検出された場合(ステップS405:YES)に、第2情報を用いて複数のタスクによるデッドロックが発生しているか否かを判定する(ステップS410)。
このように、本実施形態では、複数の資源をロックしているタスクが、新たに他の資源のロックを待つタスクとなったことが検出された場合、または一のタスクが複数の資源をロックしていることが検出された場合にデッドロックが発生しているか否かを判定するので、デッドロックを適切に検出可能となる。
また、資源管理部201は、一のタスクが複数の資源をロックしていることが検出されると、一のタスクがロックしている資源と、当該資源のロックを待っているタスクとを示す第1チェック用情報(REQ4:スポットデッドロックチェック要求)をデッドロック監視部301に送信する。
デッドロック監視部301は、受信した第1チェック用情報を第2情報に反映させ(ステップS408)、反映された第2情報を用いて複数のタスクによるデッドロックが発生しているか否かを判定する(ステップS410)。
デッドロック監視部301は、反映された第2情報を用いて複数のタスクによるデッドロックが発生しているか否かを判定すると、デッドロックの発生有無に関わらず、第2情報から前記第1チェック用情報が反映された情報を削除する(ステップS411)。
デッドロック監視部301は、一のタスクが複数の資源をロックしていることが検出されると(ステップS405:YES)、一のタスクがロックしている資源と、当該資源のロックを待っているタスクとを示す第2チェック用情報(REPL5:スポットデータ転送)を資源管理部201のスポットデータ制御部230に要求(REQ5:スポットデータ要求)する。
デッドロック監視部301は、受信した第2チェック用情報を第2情報に反映させ(ステップS409)、反映された第2情報を用いて複数のタスクによるデッドロックが発生しているか否かを判定する(ステップS410)。
図20は本実施形態による排他制御システム800の最小構成を示す図である。本実施形態による排他制御システム800は少なくとも複数のタスクが使用する資源を管理する複数の管理装置500と、資源を使用する複数のタスクによるデッドロックを監視する監視装置600とを有していればよい。また、管理装置500と監視装置600は、例えばネットワークで接続され、互いに通信可能となっている。
管理装置500は第1記憶手段501、第1検出手段502の構成を備えればよい。
第1記憶手段501は管理対象として当該管理装置に割り当てられた資源をロックしているタスク、および割り当てられた資源のロックを待っているタスクを示す第1情報を記憶する。
第1検出手段502は第1情報を用いて、複数の資源をロックしているタスクが、新たに他の資源のロックを待つタスクとなったことを検出する。
監視装置600は資源情報取得手段601、第2記憶手段602、第2検出手段603、判定手段604の構成を備えればよい。
資源情報取得手段601は、一の資源をロックしているタスク、または当該一の資源のロックを待つタスクを示す資源情報を管理装置500から取得する。
第2記憶手段602は、資源情報取得手段により取得された資源情報にもとづいて、資源をロックしているタスク、および資源のロックを待っているタスクを示す第2情報を記憶する。
第2検出手段603は、第2情報にもとづき、一のタスクが複数の資源をロックしていることを検出する。
判定手段604は、第1検出手段502により複数の資源をロックしているタスクが、新たに他の資源のロックを待つタスクとなったことが検出された場合、または第2検出手段603により一のタスクが複数の資源をロックしていることが検出された場合に、前記第2情報を用いて複数のタスクによるデッドロックが発生しているか否かを判定する。
上述の排他制御装置200は内部に、コンピュータシステムを有している。そして、上述した図10−図15に示される処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することで、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、CD−ROM、DVD−ROM、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線を用いてコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
なお、図1における排他制御装置200の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより図10−図15に示される処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。