- システムがDeadlock状態にあるかどうかの検知をする
分散システムにおけるDeadlock detection
- 分散システムがあるとする。: プロセス
- Wait-for graph : プロセス間の待ち状況を表現した有向グラフ
- ここで、
- 有向枝はプロセスがプロセスを待っていることを示す
- dependent set : が待っているプロセスの集合
- 例:
- Deadlock状態: Wait-for graphが有向閉路を含むとすると、はを、はを…はを待つことになり、deadlock
- 要は有向閉路があったらオシマイ(kekeho)
- Deadlock detectionにおいては、有向閉路の存在があるかどうかチェックすればOK Deadlock detection algorithm 1
- 仮定
- 分散システムはある別のシステム上で稼働していると仮定。そのうえで、を管理する、システム上のプロセスはを把握しているとする
- は、とメッセージ交換が可能
- プロセスも通信リンクも故障しないことを仮定
- 各プロセスの持つ入力情報が変化しないStatic problemとして捉える。少なくともアルゴリズム実行中に、が変化しないことを仮定
- initiator : Deadlock detection algorithmを開始したいプロセス
- 擬似コード
- がinitiatorの場合:
- for all do Send(, Request)
- for all do Receive(, )
- Wait-for graphを、とから構築
- に対し、有向閉路発見アルゴリズムを適用
- がinitiatorではない場合:
- Receive(, M);
- if M = Request then Send(, )
- 定理
- このアルゴリズムの始動時にシステムがデッドロック状態にあるならば、それを検知する
- デッドロック状態が勝手に解消されることはないので、Asynchronous Systemを仮定してもこれは言える(kekeho)
- Asynchronous Systemを仮定する。このアルゴリズムはデッドロックを誤検知、すなわちPhantom deadlockを検知することがある。
- 非同期システムにおいては、デッドロックがある⇒検知されるは真でも、その逆は成り立たない(検知されたからといって、本当にデッドロックが起きているとは限らない)
- 各プロセスがレスポンスを返すタイミングはバラバラなので、バラバラな時間における依存関係が重ね合わさってしまう
- Synchronous Systemを仮定する。このアルゴリズムがデッドロックを検知したときは、実際にシステムはデッドロック状態にある。Phantom deadlockを検知しない。
- このアルゴリズムの始動時にシステムがデッドロック状態にあるならば、それを検知する
- 実際の分散システムは、Dynamic problemとして捉えるほうが適切