デッドロックを起こす可能性のあるプロセス|科目A-1(応用情報技術者) 令和6年 春期午前試験 問17

出典:令和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だけ
解説

デッドロックとは、複数のプロセスがそれぞれ資源を占有したまま、相手が占有している資源の解放を待ち続け、どちらも処理を進められなくなる状態です。

デッドロックダウンロード

まず、プロセスAの資源占有順序は、

X → Y → Z

です。Aと同時に実行したとき、資源の待ち合いが循環するプロセスを調べます。

プロセスBの占有順序は、

X → Y → Z

です。Aと全く同じ順序で資源を取得するので、例えばAがXを占有すればBはXの解放を待ちます。Bは他の資源を占有する前に待つことになるため、互いに資源を持ったまま待ち合う状態にはならず、デッドロックは発生しません。

プロセスCの占有順序は、

Z → X → Y

です。例えば、AがXとYを占有した後にZを待ち、CがZを占有した後にXを待つ状態になる可能性があります。

A:X、Yを占有 → Zを待つ

C:Zを占有 → Xを待つ

AはCが占有するZを待ち、CはAが占有するXを待つため、互いに処理を進められずデッドロックになります。

プロセスDの占有順序は、

Z → Y → X

です。例えば、AがXを占有してYを待ち、DがZとYを占有してXを待つ状態になる可能性があります。

A:Xを占有 → Yを待つ

D:Z、Yを占有 → Xを待つ

AはDが占有するYを待ち、DはAが占有するXを待つため、デッドロックになります。

したがって、プロセスAと同時に動かした場合にデッドロックを起こす可能性があるのはCとDです。

したがって、イが適切です。

TSUNAGARU-ADVICE

まず押さえたいこと

デッドロックは、複数のプロセスが自分の資源を保持したまま、相手が保持している資源の解放を互いに待ち続けることで発生します。この問題では、各プロセスが資源をどの順番で確保するかに注目し、Aとの間に循環待ちが生じるかを確認します。

迷ったときの判断軸

AはX → Y → Zの順で資源を確保します。相手も同じ順序で確保する場合は循環待ちが生じにくい一方、Aとは異なる順序で資源を確保し、互いが相手の保持資源を待つ状態を作れる場合はデッドロックの可能性があります。実際に「Aがここまで保持、相手がここまで保持」と途中状態を書き出すと判断しやすくなります。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、デッドロックを相互排他・保持と待ち・横取り不可・循環待ちの成立条件と結び付けて理解しましょう。複数資源を常に同じ順序で取得させる設計は、循環待ちを防ぐ代表的な対策にもつながります。