戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2020年 秋期 午前2 問17


問題文

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

選択肢

ア:B, C, D
イ:C, D(正解)
ウ:Cだけ
エ:Dだけ

🔒 解説は解答すると表示されます

資源占有順序のデッドロック【午前2解説】

正解の理由

表の数値は各プロセスが資源を占有する順序を示しています。プロセスAは順にX→Y→Zの順で資源を取得します。一方、CはZ→X→Y、DはZ→Y→Xの順です。AとC、AとDをそれぞれ同時に動かすと、次のように「互いに相手が持つ資源を待つ」循環待ち(サイクル)が作られ得ます。したがって、Aと同時に動かすとデッドロックを起こす可能性があるプロセスはCとDであり、選択肢は イ になります。

解法ステップ

  1. 数値を「1→2→3の順に資源を取得する」と読み替える(小さい数が先に取得)。
  2. 対象をAと他プロセスの組み合わせにして、初期に取る資源(1番目)を確認する。
  3. 各プロセスが1番目を取得した後の次の要求(2番目)を追い、相手が持っている資源を要求しているかを確認する。
  4. 互いに「自分が持っている資源を相手が要求し、相手が持っている資源を自分が要求する」循環があればデッドロック成立。
具体的な追い方(Aと各プロセス):
  • AとB:
    • 両者とも最初にX(1)を要求するため、どちらか一方がXを取得し、もう一方はXを待つだけ。循環待ちにならない。
  • AとC:
    • A: 1:Xを取得 → 次にYを要求
    • C: 1:Zを取得 → 次にXを要求(XはAが保持)
    • その後AがYを取得できると、さらにAはZを要求(ZはCが保持)
    • 結果、AはZを待ち、CはXを待つ循環待ちが成立する → デッドロック
  • AとD:
    • A: 1:Xを取得 → 次にYを要求(仮にAがYを得られない場合を考慮)
    • D: 1:Zを取得 → 次にYを要求
    • もしDが先にYを取得すると、Dは次にXを要求するがXはAが保持している
    • 結果、AはYを待ち(Dが保持)、DはXを待ち(Aが保持)で循環待ちが成立する → デッドロック

選択肢別の誤答解説

  • ア: B, C, D
    • 誤り。BはAと全く同じ順序(X→Y→Z)なので、同時に開始しても両者が互いに別々の資源を取り合って循環する状況にはならない。片方がXを取って先に進み、もう片方はXを待つのみになる。
  • イ: C, D
    • 正しい(上記参照)。AとC、AとDそれぞれで循環待ちが成立し得る。
  • ウ: Cだけ
    • 誤り。Cは確かにデッドロックを起こす可能性があるが、Dとも同様に循環待ちが成立するためDも含める必要がある。
  • エ: Dだけ
    • 誤り。Dはデッドロックを起こす可能性があるが、CもAと組むと循環待ちが成立するためCも含める必要がある。

よくある誤解

  • 数字を優先度や重みと読み違える:この問題では「1,2,3は取得の順序」を表す。順序と解放タイミングを正確に把握すること。
  • 同じ最初資源を要求する=デッドロックと考える:同じ資源を先に要求するだけでは単純競合(待ち)であって、循環待ちが発生しなければデッドロックにはならない。
  • 全ての組み合わせで資源数が等しければ必ずデッドロックと誤認:実際には「相互排他、保持と待ち、非事前取得、循環待ち」の全てが満たされたときにデッドロックとなる(循環待ちの有無が鍵)。

補足コラム

  • モデル化すると分かりやすいです。各プロセスをノード、資源をノードとする資源割当グラフ(プロセス→要求辺、資源→割当辺)で見ると、サイクルが存在すればデッドロックの可能性があります。
  • 予防策の一つに「資源のグローバルな順序付け」を導入し、すべてのプロセスがその順序に従って資源を取得する方法があります(今回の問題ではA/BはX→Y→Zの順序に従っており、C/Dはこれと異なるため問題が発生します)。
  • 検出と回復の戦略もあり、実際のOSではタイムアウトや検出アルゴリズムでサイクルを見つけ、プロセスの中断や資源の剥奪で回復することがあります。

FAQ

Q: なぜAとCは直接XとZを交換しているだけではなくYも関係するのですか?
A: AはXを持ったまま次にYを取得し、最終的にZを要求します。一方CはZを保持したまま次にXを要求します。AがYを取得してさらにZを要求したとき、ZはCが保持しているためAは待ち、CはXを待つため循環が完成します。ここで重要なのは「最終的に互いが相手の持つ資源を要求する」点です。
Q: もしプロセスが中間で資源を解放してくれればデッドロックは避けられますか?
A: はい。今回の問題では「実行終了時に三つの資源を一括で解放する」と明記されているため、途中解放がなく循環待ちが維持されればデッドロックとなります。途中で解放がある設計なら循環が切れる可能性があります。

関連キーワード: デッドロック、循環待ち、資源割当グラフ、相互排他、資源順位法、保持と待ち、検出と回復
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について