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

応用情報技術者 2014年 秋期 午前216


問題文

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

選択肢

B, C, D
C, D(正解)
Cだけ
Dだけ

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

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

正解の理由

本問は、各プロセスが資源を占有する順序から「循環待ち(デッドロック)」が生じ得るかを判断する問題です。正しい選択は (プロセスCとD)です。
表から各プロセスの占有順序を読み替えると次の通りです。
  • A: X → Y → Z
  • B: X → Y → Z
  • C: Z → X → Y (表の数値は X:2, Y:3, Z:1 なので Zが1番目)
  • D: Z → Y → X
A と C の具体的な相互作用を考えると、例えば次のように進行して循環待ちが発生します。
  1. A がまず X を占有(A はその後 Y, Z を順に要求する)。
  2. C がまず Z を占有(C はその後 X を要求する)。
  3. A が Y を占有し、次に Z を要求するが Z は C が保持しているので A は待ち状態。
  4. C は Z を保持したまま次に X を要求するが X は A が保持しているので C も待ち状態。
    このとき A は Z を待ち、C は X を待つため A→Z→C→X→A の循環待ちが成立します。
A と D の場合も同様に循環待ちが起こります。たとえば、
  1. A が X を占有。
  2. D が Z を占有。
  3. A が Y を占有し、次に Z を要求するが Z は D が保持しているので A は待ち。
  4. D は Z を保持したまま次に Y を要求するが Y は A が保持しているので D も待ち。
    このとき A は Z を待ち、D は Y を待つため A→Z→D→Y→A の循環が成立します。
一方 B は A と同じ順序(X→Y→Z)で資源を取得するため、A と B の間では上のような循環待ちは発生しません(同一順序では資源間に逆向きの要求が生じず、循環が形成されないため)。
以上より、A とデッドロックを起こす可能性があるのは C と D、つまり が正解です。

解法ステップ

  1. 表の数値を「占有順」に読み替える(数値1が最初に占有する資源)。
  2. 対象プロセス(ここでは A)と他の各プロセスについて、それぞれの「先に占有する資源」と「後で要求する資源」を整理する。
  3. 循環待ちとなる典型パターンを探す:
    • A が先に占有している資源 R1 を、相手プロセスが後で要求する(相手が R1 を待つ)。
    • かつ相手プロセスが先に占有している資源 R2 を、A が後で要求する(A が R2 を待つ)。
    • このような(A が R2 を待ち、相手が R1 を待つ)互いの待ちが成立すれば循環待ち。
  4. 上記を満たすプロセスをすべて選ぶ。
実務的には「各プロセスの資源順序から有向辺(占有中→要求中)を描き、閉路が存在するかを確認する」方法が抽象化として有効です。

選択肢別の誤答解説

  • ア: B, C, D
    • 誤り。C と D は正しく含まれますが、B は A と同一順序(X→Y→Z)なので A と B の間に循環待ちは発生しません。したがって B を含めるのは誤りです。
  • イ: C, D
    • 正解。上で示したとおり、C(Z→X→Y)も D(Z→Y→X)も A(X→Y→Z)と互いに先に占有する資源と後で要求する資源が逆向きになり、循環待ちを作れます。
  • ウ: Cだけ
    • 誤り。C は確かに A とデッドロックを起こし得ますが、D も同様に起こし得るため D を除外するのは不正確です。
  • エ: Dだけ
    • 誤り。D は A とデッドロックを起こし得ますが、C も同様に起こし得るため C を除外するのは不正確です。

よくある誤解

  • 「数値をそのまま資源名と混同する」
    • 表の数値は「占有順」を示します。例えば C の Z が 1 であれば「C はまず Z を占有する(Z→...)」です。順序の読み間違いで解釈が逆になることが多いので注意してください。
  • 「同じ順序のプロセス同士でもデッドロックになる」
    • 同一の総順序(全プロセスが同じ順で資源を要求)では循環待ちは発生しません。順序が一致する場合、要求の方向が揃うため閉路が作られません。

補足コラム

デッドロック(循環待ち)は一般に以下の4条件(Coffman条件)が同時に成立することで発生します:
  1. 相互排他(資源は同時に1つのプロセスだけが使用)
  2. 保持と待ち(資源を保持したまま他の資源を待つ)
  3. 非奪取(他のプロセスの資源を強制的に奪えない)
  4. 循環待ち(待ち関係が閉路を形成する)
    本問は特に「循環待ち」が成立するかを判定する練習に適しています。実運用では資源に全体順序を設けることでデッドロックを予防することがよく行われます。

FAQ

Q. なぜ「A が X と Y を保持してから Z を要求する」ような中間状態を考えてよいのか?
A. 問題文に「実行終了時に三つの資源を一括して解放する」とあるため、取得した資源は処理の最後まで保持され続け、途中で解放されない前提で考えます。したがって A が X と Y を保持したまま Z を要求する中間状態は実現可能です。
Q. 資源に複数インスタンスがあれば結果は変わるか?
A. はい。複数インスタンスがある場合、同時に要求を満たせる可能性があり、循環待ちが回避される場面が増えます。本問は単一インスタンスを想定した典型問題です。
Q. 実際の判定を自動化する方法は?
A. 資源要求を有向グラフ(プロセス→資源、資源→プロセス)としてモデル化し、待ちグラフ(プロセス間の待ち辺)に閉路があるかどうかを深さ優先探索などで検出します。

関連キーワード: デッドロック、循環待ち、資源割当、占有順序、待ちグラフ、Coffman条件、資源順序化、閉路検出
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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