問題:
三つの資源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と同時にもう一つプロセスを動かした際に、
デッドロックを起こす可能性があるプロセスはどれか聞かれている。
表の「1, 2, 3」の数字は資源の実行順。
プロセスA、Bは、X→Y→Zの順番で資源を呼び出しています。
プロセスB:順番が同じ
- プロセスBの要求順: X → Y → Z
-
結果: セーフ
順番が完全に一致しているため、プロセスAが「X」を掴んでいれば、Bはただ後ろで順番待ちをするだけです。
デッドロックは起きません。
プロセスC、D:順番が違う
- プロセスCの要求順: Z → X → Y
- プロセスDの要求順: Z → Y → X
- 結果: アウト(デッドロック発生)
プロセスCでデッドロックが発生する理由
①プロセスAが「X」をロック。
②プロセスCが「Z」をロック。
③プロセスAが「Y」をロック。
④プロセスCは、プロセスAの「X」の開放待ち。
⑤プロセスAも、プロセスCの「Z」の開放待ち。
お互いに「相手が手放すの待ち」になり、
永遠に処理が進まないデッドロックが発生します。
プロセスDでデッドロックが発生する理由
プロセスDもプロセスC同様に順序が交差するため衝突します。
①プロセスAが「X」をロック。
②プロセスDが「Z」をロック。
③プロセスAが「Y」をロック。
④プロセスDは、プロセスAの「Y」の開放待ち。
⑤プロセスAも、プロセスDの「Z」の開放待ち。
よって正解は:イ(C, D)
🍌NanoBanana君による解説漫画