デッドロックとスターベーションの違いとは?

スポンサーリンク
スポンサーリンク


デッドロックとスターベーションの主な違いは、デッドロックは各プロセスが資源を保持し、他のプロセスが保持する資源を取得するために待機する場合に発生し、スターベーションはプロセスが必要な資源を得るために不定時間待機する場合に発生することである

コンピュータシステムは、複数のプロセスを同時に実行する。

プロセスは実行時にメモリにロードされる。

プロセスは連続的に生成され、終了する。

オペレーティングシステムは、各プロセスのプロセス制御ブロック(PCB)を保持する。

PCBは、プロセスID、プログラムカウンタ、メモリ管理情報など多くの情報を含んでいます。

オペレーティングシステムは、プロセスが終了した後、PCBを削除します。

デッドロックとスターベーションは、プロセスに関連する2つの状況です。

スポンサーリンク

デッドロックとは

プロセスとは、実行中のプログラムのことです。


実行中にさまざまな資源を必要とする

まず、プロセスは資源を要求する。

資源を取得した後、その資源を使用し、資源を解放する。

例えば、あるプロセスの集合があるとする。

各プロセスは資源を保有し、他のプロセスが保有する資源を取得するために待機しています。

このような状態をデッドロックと呼びます。

デッドロックは、以下の条件が同時に発生した場合に発生する。

相互排他 – 一度に1つのプロセスだけが資源を使用できる。

Hold and Wait – 少なくとも1つのリソースを保持しているプロセスが、他のプロセスによって保持されている追加のリソースを取得するために待機している状態。

先取りなし – タスク完了後、資源を保持しているプロセスによって解放されます。

循環待ち – P1、P2、P3、P4という4つのプロセスがあると仮定します。

P1はP2が保持する資源を待っている。

P2はP3が持っている資源を待っている。

P3はP4が持つ資源を待ち、P4はP1が持つプロセスを待っている。

このような状況を循環待ちと呼びます。

デッドロックが発生した後、それを解消するための機構を以下に示します。

先取り – あるプロセスから資源を取得し、それを別のプロセスに割り当てる。

ロールバック – デッドロックが発生した場合、すべてを最後の安全な状態に戻し、別のリソースを割り当てることでデッドロックの状態を回避する。

さらに、単一または複数のプロセスを終了させることも可能である

しかし、これは高価な方法です。

飢餓とは何か

スターベーションとは、あるプロセスがリソースを待つ時間が長くなったときに起こる状況です。

プロセスには優先順位があります。

優先順位の高いプロセスは、必要な資源を最短時間で手に入れることができます

  しかし、これによって優先順位の低いプロセスは、タスクを完了するために必要なプロセスを待つことになる

これらのプロセスが無限に待ち続けることを、資源の飢餓状態と呼びます。

さらに、飢餓を克服するための解決策として、エージングがあります。

これは、システムで長時間待機しているプロセスの優先度を徐々に上げていく手法です。

優先度が上がると、そのプロセスは必要な資源を得ることができるようになります

デッドロックとスターベーションの違い

定義

デッドロックとは、あるプロセスの集合において、その集合内の他のプロセスによってのみ引き起こされる事象を、すべてのプロセスが待ち続けている状態のことである

一方、スターベーションとは、あるプロセスがその仕事を処理するために必要な資源を永久に拒否される状況である

このように、デッドロックとスターベーションの主な違いは、ここにある。

発生状況

デッドロックは、各プロセスが資源を保持したまま他のプロセスが保持する資源を待つ場合に発生し、スターベーションは、あるプロセスが長時間資源を待つ場合に発生します。

進行状況

デッドロックでは、関連するすべてのプロセスが進行不能になる。

しかし、スターベーションでは、一部のプロセスだけが資源を待ち、他のプロセスは進行することができます。

したがって、この点もデッドロックとスターベーションの違いです。

結論

オペレーティングシステムでは、複数のプロセスが動作しています。

プロセスが存在する場合、デッドロックとスターベーションという2つの状況が発生することがあります。

デッドロックとスターベーションの主な違いは、デッドロックは各プロセスが資源を保有し、他のプロセスが保有する資源の取得を待つ場合に発生し、スターベーションはプロセスが必要な資源を得るために不定時間待機する場合に発生することである

タイトルとURLをコピーしました