blog

デッドロックとは何か?デッドロックの原因と回避

デッドロックとは、複数のプロセスが資源を奪い合うことによって発生する行き詰まりのことで、外力がなければこれらのプロセスは前に進むことができません。例えば、コンピュータシステムにはプリンタと入力デバイス...

Jan 30, 2020 · 4 min. read
シェア

I. デッドロックとは

デッドロックとは、複数のプロセスが資源を奪い合うことによって発生する行き詰まりのことで、これらのプロセスは外力がなければ前に進むことができません。たとえば、コンピュータシステムでは、唯一のプリンタと入力デバイスがあり、プロセスP1は、入力デバイスを占有し、同時に、プリンタを使用する要求が、この時点でプリンタは、プロセスP2によって占有され、P2は、プリンタの非リリースでは、入力デバイスの使用を要求するP1によって占有されています。だから、2つのプロセスが延々とお互いを待っている、実行し続けることはできません、この時点でデッドロックに2つのプロセス。

デッドロックの理由

1.システムリソースの競合

システムリソースの奪い合いは、システムリソースの不足やリソースの割り当てミスを招き、デッドロックにつながります。

2.不適切な工程進行順序

処理中にリソースを要求したり解放したりするプロセスの順序を間違えると、デッドロックが発生する可能性があります。

第三に、デッドロックの4つの必要条件

相互に排他的な条件:リソースは一度に1つのプロセスだけが使用できます。他のプロセスがリソースを要求した場合、要求したプロセスは待つことしかできません。

リクエスト・ホールド条件: プロセスが少なくとも1つのリソースをすでに保持している状態で、他のプロセスによってすでに占有されているリソースを新たにリクエストした場合、リクエストしたプロセスはブロックされますが、獲得したリソースは保持されます。

不可侵条件:あるプロセスが獲得したリソースは、それが使用されるまで他のプロセスによって強制的に奪われることはありません。

循環的待機条件:複数のプロセス間のリソースの頭から尻尾までの循環的待機関係

デッドロックの回避と防止

デッドロックの回避

デッドロック回避の基本的な考え方:システムが、プロセスから発行されたすべての資源申請を動的にチェックし、システムが満足できるかをチェックし、チェック結果に応じて資源を割り当てるかどうかを決定します。割り当て後にシステムでデッドロックが発生する可能性がある場合は、割り当てを行わず、そうでない場合は割り当てを行います。

オペレーティングシステムが、すべてのプロセスが限られた時間内に必要なすべてのリソースを得ることを保証できる場合、システムは安全な状態にあります。

  1. 安全な状態とは、すべてのプロセス{P1, P2, ... Pn}の安全なシーケンスが存在する場合にシステムが安全である状態のことです。各プロセスPi (i >=1 && i <= n)に対して、システムの現在残っている資源と全プロセスPj (j < i)が現在占有する資源の合計よりも多くの資源を将来必要としない場合、システムは安全な状態にあり、デッドロックは発生しません。
  2. 不安定な状態:。両者の対応関係を以下に示します:

安全な状態と安全でない状態をより深く理解するための例を示します。

上記の図に示すように、システムは安全な状態にある、システムの残りの3つのリソースは、P3にそれらの2を割り当てることができます、この時点でP3は、すべてのリソースを得ている、実装の完了後にもシステム4つのリソースに戻ることができます、システムの残りの5つのリソースは、この時点で同じ理由P1は、リソースの独自の必要性を得るためにP2の完了の実装にすることができます満たしているように。

P1は、P1を処理するために割り当てられている残りのリソースから、システムは、この時点で残りの2つのリソースは、新しい状態のチャートは次のとおりです前方のリソースのための別の要求を置く場合:ので、それはまだ安全なシーケンスは、それを分析することです!

現在システムには2つのリソースが残っており、P3に割り当てた後、P3は実行後に4つのリソースをシステムに返しますが、P2は5つのリソースが必要で、P1は6つのリソースが必要です。この時点でシステムは安全でない状態に移行します。

デッドロックの防止

リソース・ミューテックスはリソースの使用に固有のものであり、変更することができないため、デッドロックの発生に必要な4つの条件を破壊することでデッドロックを防ぐことができます。

  1. 不可侵性」条件の解除:必要なリソースをすべて取得できないプロセスは待機状態になり、待機期間中に占有したリソースは暗黙のうちに解放されてシステムのリソースリストに追加され、他のプロセスで使用できるようになります。待機中のプロセスは、元のリソースと新たに要求されたリソースを取り戻した場合にのみ、再起動して実行することができます。が再スタートして実行できるようになります。
  2. リクエスト・アンド・ホールド条件」の打破:1つ目の方法は静的アロケーションで、各プロセスは実行開始時に必要なリソースをすべて要求します。2つ目は動的割り当てで、各プロセスはシステムリソースを占有することなく、必要なリソースを要求します。
  3. 循環待ち」状態の破壊:資源順序割り当てを使用する基本的な考え方は、システム内のすべての資源に順次番号を付け、不足しているもの、希少なものにはより大きな番号を使用することです。そのため、資源を申請する際には、番号順に申請しなければならず、あるプロセスがより小さな番号を与えられた場合にのみ、より大きな番号を申請することができます。
Read next

JS上級シングルトンパターン慣性のアイデア

自己実行関数は、参照データ型であるオブジェクトを実行して返し、外部から受け取りますので、自己実行関数の実行中に形成されたプライベートスコープは破壊されず、内部の変数は保存されます。 このオブジェクトを受け取るために変数が使われ、中のメソッドを呼び出したい場合は直接メンバアクセスで十分です。 自...

Jan 30, 2020 · 3 min read