死角

2769 ワード

プロセス1には、Aという名前のリソースが含まれます.
プロセス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つの方式はオーバーヘッドが大きい.

  • 死はあまり起こらない.
  • 低確率に対応するためには、あまり大きなオーバーヘッドに耐える必要はありません.
    リファレンス
    オペレーティングシステム-梨花女子大学潘孝敬教授