デッドロック

デッドロックとは、各コンピュータープロセスが、別のプロセスに割り当てられたリソースを待機している状態です。この状況では、必要なリソースが、別のリソースの解放を待機している別のプロセスによって占有されているため、どのプロセスも実行されません。デッドロックが発生しないように回避することが重要です。デッドロックの発生はリソーススケジューラーによって検出できます。これにより、オペレーティングシステムは、異なるプロセスに割り当てられたすべてのリソースを追跡できます。次の4つの条件が同時に該当する場合は、デッドロックが発生する可能性があります。

プリエンプティブアクションがない - プロセスがタスクを完了した後に、リソースを占有しているプロセスが自発的にリソースを解放できます。

相互排他 - 共有リソースへのアクセスを制御するために使用される特殊なタイプのバイナリセマフォ。これにより、現在の優先度の高いタスクをブロックし続ける時間を可能なかぎり短くすることができます。

占有して待機 - この状態では、1つ以上の他のリソースを同時に待機している間に、プロセスが1つ以上のリソースの占有を停止する必要があります。

循環待機 - すべてのリソースタイプの合計順序を課します。循環待機では、すべてのプロセスが列挙の昇順でリソースを要求する必要もあります。

 

デッドロックを処理するには、次の3つの方法があります。

システムをデッドロック状態にしません。

デッドロックを発生させます。デッドロックが発生したときには、プリエンプションを実行してデッドロックを処理します。

デッドロックが発生した場合は、システムを再起動します。