"deadlock"に関する質問

  

Computer Store News

1.なぜデッドロックがあるのですか?

1.1。簡単な例

文書をスキャンしてCDに記録する準備ができているプロセスは2つあります。プロセスAがスキャナーを要求して取得し、プロセスBが最初にCDライターを要求して取得します。プロセスAはCDバーナーを要求しますが、プロセスBはすでにCDバーナーを持っていて解放しようとしないため失敗し、スキャナーにも作業の完了を要求します。その結果、2つのプロセスのうち誰も作業を完了できず、デッドロックが発生します。

1.2、リソースについて

スキャナーは一種のリソースであり、上記からわかるように、リソースのリクエストはデッドロックの根底にあります。実際には、リソースはハードウェアデバイス(CDバーナーなど)または一連の情報(データベース内のロックされたレコードなど)のいずれかです。簡単に言えば、リソースは使用後に取得、使用、解放できるものです。

リソースは、プリエンプティブとプリエンプション不可の2つのカテゴリに分類されます。プリエンプティブとは、副作用のないリソースを所有しているプロセスからリソースが優先使用されることを意味し、プリエンプティブリソースの使用がデッドロックされるとリソースの再割り当てが解決されることがわかります。

実際には、リソースによるものではないデッドロックがいくつかありますので、ここでは説明しません。

2、デッドロックモデリング

2.1、デッドロック仕様定義

プロセスコレクション内の各プロセスがプロセスコレクションによってのみ待機している場合他のプロセスが発生する可能性があるイベント、そしてプロセスコレクションはデッドロックされます。

すべてのプロセスが待機しているため、各プロセスは他のプロセスを満たすイベントを発生させることができず、すべてのプロセスが待機します。リソース使用の場合、各プロセスは継続するために追加のリソースを必要とし、それらのリソースを所有するプロセスは十分なリソースがないためそれらが継続するのでそれらを解放しません。

2.2、リソースのデッドロック条件と対処方法

2.2.1、リソースのデッドロックには4つの必要条件があります。1つは相互に排他的な条件です。つまり、リソースを複数のプロセスで同時に使用することはできません。 2所持と待ち合わせ条件すでにリソースを取得しているプロセスは、引き続き追加のリソースを要求できます。 3は条件を横取りすることはできません。前述のように、リソースが横取りされると、副作用が発生する可能性があり、リソースを所有するプロセスによってのみ明示的に解放される可能性があります。 4ループ待ち状態チェーン内の各プロセスによって獲得されたリソースが次のプロセスによって同時に要求されるプロセスループのチェーンがあります。

2.2.2、デッドロックに対処するための戦略は4つあります。1は問題を無視します。 2デッドロックを検出して再開します。 3デッドロックを回避するために慎重にリソースを割り当てます。 4デッドロックを引き起こす4つの必要条件のうちの1つを破壊することによって、デッドロックが発生するのを防ぎます。これらの戦略については、以下で個別に説明します。

3、ダチョウのアルゴリズム

アルゴリズムは上記の最初の戦略に対応します:無視します。いわゆるダチョウのアルゴリズムは、民間伝承によるものです。ダチョウは、問題が発生したときに頭を砂に埋め、問題が発生していないことを装うものは何もありません。多分あなたは非常にもつれたと感じるでしょう:どうしてそのようなナンセンスなアルゴリズムがあるのでしょうか?数学者にとって、彼らの考えはあなたと同じであり、彼らは何もしないという戦略を容認してはいけません。しかしエンジニアにとっては、ダチョウのアルゴリズムを真剣に検討するでしょう。デッドロックの可能性がますます低く、そして解決されるのを待っている他の多くの問題があるとき、彼らはデッドロック問題のためにダチョウアルゴリズムを採用するでしょう。

4、デッドロックの検出とデッドロックの回復

デッドロックの検出は、前述のループに基づいています。つまり、検出プロセスでは、リソースと要求を所有しているループがあります。側面はデッドラッチを示しています。この記事は「簡略化」されており、検出アルゴリズムについては具体的に説明していません。

デッドロックから回復する方法は3つあります。1プリエンプション回復を使用します。 2ロールバックリカバリを使用します。以前の状態に戻します。 3プロセスを殺して回復する。実際、これらの方法は良い方法ではなく、多くの欠点があります。

5、デッドロック回避

デッドロックを回避するための主なアルゴリズムは、セキュリティ状態の概念に基づいています。セキュリティ状態とは、デッドロックが発生しない場合、およびすべてのプロセスが突然リソースの最大要求を要求した場合でも、各プロセスの実行を終了させることを可能にするある種のスケジューリング順序が依然として存在することです。

デッドロックを回避するための最も有名なアルゴリズムは、各要求をチェックし、それがまだ安全であればそれを満たすバンカーアルゴリズムです。それ以外の場合は、要求は延期されます。

6、デッドロック防止

デッドロック防止は、デッドロックを引き起こすために必要な4つの条件のうちの1つを破壊することです。 1は相互に排他的な条件を破壊します。スプーリングテクノロジを使用して、一度に1つのリソースを占有する複数のプロセスをシミュレートします。 2居住状況や待機状況を破壊する。実行を開始する前に、すべてのプロセスが必要なすべてのリソースを要求して取得するように指定します。 3破壊は条件を横取りすることはできません。スプーリング技術も使用しています。 4ループ待ち状態を解除します。すべてのリソースには一様に番号が付けられ、複数のリソースが要求されると、プロセスは順番に要求を出します。

7、まとめ

デッドロックに対処するための完璧な方法はなく、普遍的に適用可能な方法もありません。さまざまな状況でのみ、さまざまな戦略を包括的に検討し、ある程度要件を満たすアルゴリズムを策定します。

Copyright © Windowsの知識 All Rights Reserved