応用情報技術者 2020年 秋期 午前2 問17
問題文
三つの資源X〜Zを占有して処理を行う四つのプロセスA〜Dがある。各プロセスは処理の進行に伴い、表中の数値の順に資源を占有し、実行終了時に三つの資源を一括して解放する。プロセスAと同時にもう一つプロセスを動かした場合に、デッドロックを起こす可能性があるプロセスはどれか。

選択肢
ア:B, C, D
イ:C, D(正解)
ウ:Cだけ
エ:Dだけ
三つの資源X〜Zを占有して処理を行う四つのプロセスのデッドロック判定【午前2 解説】
要点まとめ
- 結論:プロセスAと同時に動かすとデッドロックを起こす可能性があるのはプロセスイ(CとD)です。
- 根拠:デッドロックは資源の占有順序が循環依存を生む場合に発生し、AはX→Y→Zの順で占有するため、これと循環関係にあるCとDが該当します。
- 差がつくポイント:資源の占有順序の数値を比較し、循環待ち状態を正確に見抜くことが重要です。単純な資源の共有だけで判断しないことが鍵です。
正解の理由
プロセスAは資源X→Y→Zの順に占有します。
- プロセスCはY→Z→X(2→3→1)、プロセスDはY→Z→X(2→3→1)と、Aとは異なる順序で資源を要求します。
- このため、AがXを占有中にCやDがZを占有していると、互いに相手の資源解放を待つ状態(循環待ち)が発生し、デッドロックの可能性が生じます。
- 一方、BはAと同じ順序(X→Y→Z)なので、資源の要求順序が一致し、デッドロックは起きません。
よって、デッドロックの可能性があるのはプロセスCとD、すなわち選択肢イが正解です。
よくある誤解
資源を共有しているだけでデッドロックが起きると誤解しがちですが、重要なのは資源の占有順序の循環依存です。
また、同じ順序で資源を要求するプロセス間ではデッドロックは基本的に発生しません。
また、同じ順序で資源を要求するプロセス間ではデッドロックは基本的に発生しません。
解法ステップ
- 各プロセスの資源占有順序を確認する。
- プロセスAの占有順序(X→Y→Z)を基準にする。
- 他のプロセスの占有順序と比較し、循環依存が生じるか検討する。
- 循環依存があるプロセスを特定する。
- そのプロセスがデッドロックの可能性があると判断する。
選択肢別の誤答解説
- ア(B, C, D):BはAと同じ順序なのでデッドロックは起きません。
- イ(C, D):正解。CとDはAと異なる順序で資源を要求し、循環待ちが発生します。
- ウ(Cだけ):Dも同様に循環依存があるため誤りです。
- エ(Dだけ):Cも同様に循環依存があるため誤りです。
補足コラム
デッドロックは「相互排他」「保持と待ち」「非奪取」「循環待ち」の4条件が同時に成立した場合に発生します。
資源の占有順序を統一することはデッドロック回避の基本的な手法の一つです。
また、資源を一括解放するタイミングもデッドロック発生に影響します。
資源の占有順序を統一することはデッドロック回避の基本的な手法の一つです。
また、資源を一括解放するタイミングもデッドロック発生に影響します。
FAQ
Q: なぜ同じ順序で資源を要求するプロセス間ではデッドロックが起きないのですか?
A: 同じ順序で資源を要求すると、循環待ちが発生しにくく、資源の奪い合いが順序良く解消されるためです。
A: 同じ順序で資源を要求すると、循環待ちが発生しにくく、資源の奪い合いが順序良く解消されるためです。
Q: 資源の占有順序が異なるだけで必ずデッドロックが起きるのですか?
A: 必ずではありませんが、循環依存が生じる可能性が高くなります。実際の発生はタイミングにも依存します。
A: 必ずではありませんが、循環依存が生じる可能性が高くなります。実際の発生はタイミングにも依存します。
関連キーワード: デッドロック、資源占有順序、循環待ち、プロセス同期、資源管理

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

