死角
2769 ワード
プロセス1には、Aという名前のリソースが含まれます.
プロセス1には、Bというリソースが必要です.
プロセス2には、Bというリソースが含まれます.
プロセス2にはAという名前のリソースが必要です.
この場合、2つのプロセスは永遠に待たなければなりません.
この状態をDeadlockと呼ぶ.
死傷は以下の4つの条件が満たされたときに発生する.
リソースを使用できるのは、一瞬にして1つのプロセスだけです.
プロセスは資源に奪われてはいけない.
プロセスはリソースを待機します.
リソースを待つプロセスの間にループが形成されます.
上記のDedrockの例は、すべての4つの条件を満たしています.
死神を扱う方法は4種類ある.
これは根本的に死を防ぐ方法だ.
死亡は4つの条件が満たされたときに発生する.
つまり、どちらかを満たさなければ、死は起こらないということです.
Mutual Exclusionをキャンセルします.
共有すべきでないリソースがある場合は、これは不可能です.
No Preemonをキャンセルします.
プロセスがリソースを奪うことができるようにします.
HoldとWaitを消去します.
プロセスがリソースを待機している場合は、すべてのリソースを返して待機します.
Circular waitをキャンセルします.
すべてのリソースを所定の順序で取得します.
上記の例では、リソースAは、常に取得されてから取得される.
Circular waitは発生しません.
これは死を避ける方法だ.
ハングアップが発生した場合、リソースは割り当てられません.
ハングアップを避ける方法としてBanker's Algorithmがあります.
Banker'sアルゴリズムは2つの仮定を前提としている.は、すべてのプロセスの最大リソース使用量を知っています. プロセスは、限られた時間内に要求リソースを返却する. この仮定に基づいて、プロセス全体を完了する順序がある場合、リソースが割り当てられます.
p 1~p 5は現在、リソースが割り当てられており、最大使用リソースが知られている.
必要なリソースは、「最大使用リソース-現在割り当てられているリソース」です.
このとき、必要なリソースのプロセスを満たすために、リソースを「残りのリソース」に割り当てます.
次に、割り当てられたリソースを返し、残りのプロセスを繰り返します.
このとき,プロセスの完了順序はp 2,p 4,p 5,p 3,p 1である.
死は起こらないと思います.
この方法は死亡を予防したり避けたりしない.
いつでも死ぬと仮定すると、
これは周期的な検出と回復の方法である.
デッドゾーンを検出する方法はBanker'sアルゴリズムに似ている.
差異には、最大リソース使用量は必要ありません.
現在のリクエストが満たされている場合は、割り当てられたリソースを返すことを前提とします.
アサイメント、リターン、および完了プロセスの順序がある場合は、次の操作を行います.
死は起こらなかったと思います.
プロセスに完了順序が存在しない場合.
デッドロックが発生したと判断し、プロセスを終了します.
最後は死神を無視する方法だ.
「死角に陥って停止するプロセスは、ユーザーが自ら終了する」ことを前提としています.
これは多くの汎用オペレーティングシステムで使用されています.
この方法を使用する理由は次のとおりです.
以上の3つの方式はオーバーヘッドが大きい.
死はあまり起こらない.
低確率に対応するためには、あまり大きなオーバーヘッドに耐える必要はありません.
リファレンス
オペレーティングシステム-梨花女子大学潘孝敬教授
プロセス1には、Bというリソースが必要です.
プロセス2には、Bというリソースが含まれます.
プロセス2にはAという名前のリソースが必要です.
この場合、2つのプロセスは永遠に待たなければなりません.
この状態をDeadlockと呼ぶ.
デッドロック発生条件
死傷は以下の4つの条件が満たされたときに発生する.
Mutual Exclusion
リソースを使用できるのは、一瞬にして1つのプロセスだけです.
No Preemption
プロセスは資源に奪われてはいけない.
Hold and Wait
プロセスはリソースを待機します.
Circular wait
リソースを待つプロセスの間にループが形成されます.
上記のDedrockの例は、すべての4つの条件を満たしています.
デッドブロック処理方法
死神を扱う方法は4種類ある.
Prevention
これは根本的に死を防ぐ方法だ.
死亡は4つの条件が満たされたときに発生する.
つまり、どちらかを満たさなければ、死は起こらないということです.
Mutual Exclusionをキャンセルします.
共有すべきでないリソースがある場合は、これは不可能です.
No Preemonをキャンセルします.
プロセスがリソースを奪うことができるようにします.
HoldとWaitを消去します.
プロセスがリソースを待機している場合は、すべてのリソースを返して待機します.
Circular waitをキャンセルします.
すべてのリソースを所定の順序で取得します.
上記の例では、リソースAは、常に取得されてから取得される.
Circular waitは発生しません.
Avoidance
これは死を避ける方法だ.
ハングアップが発生した場合、リソースは割り当てられません.
ハングアップを避ける方法としてBanker's Algorithmがあります.
Banker'sアルゴリズムは2つの仮定を前提としている.
현재 할당된 자원 최대 사용할 자원 현재 남아 있는 자원 필요로 하는 자원
A B C A B C A B C A B C
p1 0 1 0 7 5 3 3 3 2 7 4 3
p2 2 0 0 3 2 2 1 2 2
p3 3 0 2 9 0 2 6 0 0
p4 2 1 1 2 2 2 0 1 1
p5 0 0 2 4 3 3 4 3 1
例えば、上記の場合があります.p 1~p 5は現在、リソースが割り当てられており、最大使用リソースが知られている.
必要なリソースは、「最大使用リソース-現在割り当てられているリソース」です.
このとき、必要なリソースのプロセスを満たすために、リソースを「残りのリソース」に割り当てます.
次に、割り当てられたリソースを返し、残りのプロセスを繰り返します.
このとき,プロセスの完了順序はp 2,p 4,p 5,p 3,p 1である.
死は起こらないと思います.
Detection and Recovery
この方法は死亡を予防したり避けたりしない.
いつでも死ぬと仮定すると、
これは周期的な検出と回復の方法である.
デッドゾーンを検出する方法はBanker'sアルゴリズムに似ている.
差異には、最大リソース使用量は必要ありません.
現在のリクエストが満たされている場合は、割り当てられたリソースを返すことを前提とします.
アサイメント、リターン、および完了プロセスの順序がある場合は、次の操作を行います.
死は起こらなかったと思います.
プロセスに完了順序が存在しない場合.
デッドロックが発生したと判断し、プロセスを終了します.
Ignorance
最後は死神を無視する方法だ.
「死角に陥って停止するプロセスは、ユーザーが自ら終了する」ことを前提としています.
これは多くの汎用オペレーティングシステムで使用されています.
この方法を使用する理由は次のとおりです.
以上の3つの方式はオーバーヘッドが大きい.
死はあまり起こらない.
リファレンス
オペレーティングシステム-梨花女子大学潘孝敬教授
Reference
この問題について(死角), 我々は、より多くの情報をここで見つけました https://velog.io/@imtaebari/데드락テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol