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

選択肢
ア:B, C, D
イ:C, D(正解)
ウ:Cだけ
エ:Dだけ
三つの資源を占有するプロセスのデッドロック判定【午前2 解説】
要点まとめ
- 結論:プロセスAと同時に動かすとデッドロックの可能性があるのはプロセスイ(CとD)です。
- 根拠:デッドロックは資源の占有順序が循環依存を生む場合に発生し、AはX→Y→Zの順に資源を占有します。
- 差がつくポイント:資源の占有順序が異なり、循環待ち状態を作るプロセスを正確に見抜くことが重要です。
正解の理由
プロセスAは資源X→Y→Zの順に占有します。
- プロセスCは資源2(Y)→3(Z)→1(X)
- プロセスDは資源3(Z)→2(Y)→1(X)
このため、AとCまたはDが同時に動くと、AがXを占有しCやDがYやZを占有している状態で互いに次の資源を待つ循環依存が発生し、デッドロックの可能性があります。
一方、BはAと同じ順序(X→Y→Z)なので、同時に動いても資源の奪い合いは起きずデッドロックは発生しません。
よくある誤解
資源の番号だけを見て同じ資源を使うからデッドロックになると誤解しがちですが、重要なのは占有の順序と循環依存の有無です。
解法ステップ
- 各プロセスの資源占有順序を確認する。
- プロセス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: 資源の占有順序を全プロセスで統一するか、資源の事前要求方式を採用することで防止可能です。
関連キーワード: デッドロック、資源占有順序、循環待ち、プロセス同期、資源管理

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

