エンベデッドシステムスペシャリスト 2011年 午前2 問09
問題文
優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムで、入力装置及び出力装置にアクセスする二つのタスクX、Yがある。XはYより優先度が低く、Yが待ち状態となったときにXに処理が戻る。X、Yのアクセスを排他制御するために、入力装置及び出力装置それぞれに資源数1のセマフォを用意し、X、Yを図のように実装したとき、デッドロックが発生するのはXが処理中のどのタイミングでYが起床したときか。ここで、Yは起床するとαから処理を行うこととする。

選択肢
ア:A
イ:B(正解)
ウ:C
エ:D
🔒 解説は解答すると表示されます
資源順序とデッドロック【午前2解説】
正解の理由
デッドロックが発生するのは、Xが入力装置用セマフォを取得した後、出力装置用セマフォを取得する前です。このタイミングはイのBです。
BでYが起床すると、Xより優先度の高いYが先に実行されます。Yはまず出力装置用セマフォを取得しますが、次に取得しようとする入力装置用セマフォはXが保持しているため、待ち状態になります。
その後、Xに処理が戻ります。しかし、Xが取得しようとする出力装置用セマフォはYが保持しています。つまり、XはYを、YはXを待つ状態となり、どちらも処理を進められません。これがデッドロックです。
解法ステップ
- Xがどの資源を保持しているかを、A〜Dの各タイミングで確認します。
- Yが起床したときの取得順序を確認します。Yは「出力装置用セマフォ」から取得し、その後「入力装置用セマフォ」を取得します。
- Xが入力装置を保持し、出力装置をまだ取得していないタイミングでYが起床すると、Yは出力装置を取得した後、入力装置の取得待ちになります。
- Xが再開して出力装置を取得しようとしても、Yが保持中なので取得できません。互いに相手の保持する資源を待つため、デッドロックになります。
選択肢別の誤答解説
- ア:Aの時点では、Xはまだ入力装置用セマフォを取得していません。Yが起床しても、両タスクが互いの資源を待つ状態にはなりません。
- イ:Xは入力装置用セマフォを保持していますが、出力装置用セマフォはまだ取得していません。Yが起床すると、互いに相手の保持するセマフォを待つため、デッドロックになります。
- ウ:Cの時点では、Xは入力装置用・出力装置用の両方のセマフォを取得済みです。Yは出力装置用セマフォの取得待ちになりますが、Xは処理を続けてセマフォを解放できるため、デッドロックにはなりません。
- エ:Dの時点でも、Xは両方のセマフォを保持しています。Yは待ち状態になりますが、Xがセマフォを解放すればYが処理を再開できるため、デッドロックにはなりません。
よくある誤解
- Yが待ち状態になれば、必ずデッドロックになると思う
単に待ち状態になることとデッドロックは異なります。相手が資源を解放できるなら、待ち状態は解消されます。 - 優先度が高いYは、資源を待たずに処理できると思う
優先度は実行順を決めるものであり、他のタスクが保持するセマフォを使えるようにするものではありません。 - セマフォを使えばデッドロックを防止できると思う
セマフォは資源への同時アクセスを防ぎますが、複数の資源を異なる順序で取得すると、デッドロックが発生することがあります。
補足コラム
Xは「入力装置 → 出力装置」の順に、Yは「出力装置 → 入力装置」の順にセマフォを取得します。このように取得順序が異なると、互いに相手の資源を待つ状況が起こり得ます。
対策としては、両タスクで資源の取得順序を統一する方法があります。例えば、どちらのタスクも「入力装置 → 出力装置」の順に取得すれば、この問題のような循環待ちを防ぎやすくなります。
FAQ
Q. Yが起床した時点で出力装置用セマフォを取得できるのはなぜですか?
A. Bの時点では、Xはまだ出力装置用セマフォを取得していないためです。
A. Bの時点では、Xはまだ出力装置用セマフォを取得していないためです。
Q. Xが出力装置用セマフォを取得できないと、なぜデッドロックなのですか?
A. XはYが保持する出力装置用セマフォを待ち、YはXが保持する入力装置用セマフォを待っています。どちらも相手が資源を解放するまで進めず、相手も処理を進められないためです。
A. XはYが保持する出力装置用セマフォを待ち、YはXが保持する入力装置用セマフォを待っています。どちらも相手が資源を解放するまで進めず、相手も処理を進められないためです。
Q. Yが待ち状態になった後、Xが処理を再開できるなら問題は解決しませんか?
A. Xが再開しても、取得しようとする出力装置用セマフォをYが保持しています。そのためXも待ち状態となり、デッドロックが成立します。
A. Xが再開しても、取得しようとする出力装置用セマフォをYが保持しています。そのためXも待ち状態となり、デッドロックが成立します。
関連キーワード: デッドロック、セマフォ、プリエンプティブスケジューリング、資源割当、循環待ち

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

