令和6年度 春期 午前 問17
ソフトウェア
デッドロックに関する問題
三つの資源 X 〜 Z を占有して処理を行う四つのプロセス A 〜 D がある。各プロセスは処理の進行に伴い,表中の数値の順に資源を占有し,実行終了時に三つの資源を一括して解放する。プロセス A と同時にもう一つプロセスを動かした場合に,デッドロックを起こす可能性があるプロセスはどれか。
表は次のとおり。
┌──────────┬────────────────────────────┐ │ プロセス │ 資源の占有順序 │ │ ├────────┬────────┬──────────┤ │ │ 資源 X │ 資源 Y │ 資源 Z │ ├──────────┼────────┼────────┼──────────┤ │ A │ 1 │ 2 │ 3 │ ├──────────┼────────┼────────┼──────────┤ │ B │ 1 │ 2 │ 3 │ ├──────────┼────────┼────────┼──────────┤ │ C │ 2 │ 3 │ 1 │ ├──────────┼────────┼────────┼──────────┤ │ D │ 3 │ 2 │ 1 │ └──────────┴────────┴────────┴──────────┘
- アB, C, D
- イC, D
- ウC だけ
- エD だけ
答えと解説を見る
✓ これが正解イC, D
解説
占有の向きが逆になる相手とだけ起こります。
設問は、三つの資源を占有する四つのプロセスの表を読み、プロセス A と同時に動かしたときにデッドロックを起こす可能性がある相手を選ばせています。軸になるのは、表の数値が何番目に取るかを表しているという点です。資源ごとに番号が振ってあるので、表の並びのまま読まず、番号の小さい順に資源名を書き出します。すると A は X、Y、Z の順、B も X、Y、Z の順、C は Z、X、Y の順、D は Z、Y、X の順になります。A と同じ向きで取る相手は、最初の資源を取れなければ何も持たないまま待つことになり、持っていない者は相手を待たせられないので、互いに待ち合う輪ができません。向きが食い違う相手とだけ輪ができるので、答えは C と D です。デッドロックの四条件のうち、この設問が差を付けているのは循環待ちの一つだけです。
ほかの選択肢はなぜ違うのか
- アB, C, D:同じ向きで取る B まで数えた形です。資源を奪い合うかどうかで大づかみに区切ると、この範囲になります。分かれ目は奪い合いの有無ではなく、取る順序がそろっているかどうかです。
- ウC だけ:組合せを一つだけ調べて止めた形です。Z を先に取り、次に Y を取る D も、A が先に Y を押さえれば互いに待ち合います。設問はもう一つ動かした場合と言っているので、三通りすべてを試します。
- エD だけ:こちらも一組だけで打ち切った形です。Z を先に取り、次に X を取る C も、A が X を持ったまま Z を欲しがった時点で互いに待ち合います。もう一組を残したまま答えを決めています。
出典:令和6年度 春期 応用情報技術者試験 午前 問17(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)