エンベデッドシステムスペシャリスト 2025年 午前2 問06
問題文
優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて、入力装置及び出力装置にアクセスする二つのタスクX、Yがある。XはYより優先度が低く、Xが資源待ち状態でない場合にYが資源待ち状態に遷移するとXが実行状態に遷移する。入力装置及び出力装置へのアクセスを排他制御するために、入力装置及び出力装置にそれぞれバイナリセマフォi及びoを用意し、X、Yを図のように実装した。このとき、デッドロックが発生するのはXの処理A、B、C、Dのうち、どの処理中にプリエンプションが発生してYが実行されたときか。ここで、Yの実行はαから行うものとし、Xの処理A、B、C、Dでは、入力装置及び出力装置へのアクセス並びにバイナリセマフォの操作は行わないものとする。

選択肢
ア:処理A
イ:処理B(正解)
ウ:処理C
エ:処理D
🔒 解説は解答すると表示されます
セマフォ取得順序とデッドロック【午前2解説】
正解の理由
デッドロックが発生するのは、Xがセマフォiを取得した後、セマフォoを取得する前の状態でYに切り替わる場合です。該当するのはイの処理B中です。
この時点でXはセマフォiを保持しています。Yが実行されると、先にセマフォoを取得し、続いてセマフォiを取得しようとします。しかし、セマフォiはXが保持しているため、Yは待ち状態になります。
その後Xが再び実行され、セマフォoを取得しようとしますが、今度はYが保持しているため、Xも待ち状態になります。つまり、XはYが保持するoを待ち、YはXが保持するiを待つ状態となり、互いに処理を進められません。
解法ステップ
- XとYがセマフォを取得する順番を確認します。
- X:i → o
- Y:o → i
- 取得順序が逆なので、互いに一方のセマフォを保持したまま、もう一方を待つ可能性があります。
- Xの処理位置ごとに、Xが保持しているセマフォを確認します。
- 処理A中:まだiを取得していません。
- 処理B中:iを取得済みで、oは未取得です。
- 処理C中・処理D中:iとoの両方を取得済みです。
- 処理B中にYへ切り替わると、Yはoを取得してからiを待ちます。Xが再開するとoを待つため、デッドロックになります。
選択肢別の誤答解説
-
ア:処理A
Xはまだセマフォを取得していません。Yはoとiを取得して処理を進められるため、XとYが互いのセマフォを待つ状態にはなりません。 -
イ:処理B
Xがiを保持し、Yがoを保持したうえで、それぞれ相手が保持するセマフォを待つ状態になります。デッドロックが発生します。 -
ウ:処理C
Xはすでにiとoの両方を取得しています。Yは最初のoの取得で待ち状態になりますが、セマフォを保持していないため、Xが処理を続けてセマフォを解放できます。 -
エ:処理D
処理Cと同様に、Xはiとoの両方を保持しています。Yはoの取得で待ちますが、保持しているセマフォがないため、Xが処理を進めて解放できます。
よくある誤解
-
一方のタスクが待ち状態になれば、必ずデッドロックする
そうではありません。デッドロックには、互いに相手が保持する資源を待つ循環的な状態が必要です。 -
同じセマフォを使っていれば、取得順序は問題にならない
取得順序が逆だと、一方がi、もう一方がoを保持したまま互いに待つ可能性があります。 -
処理CやDでも、Yが切り替わればデッドロックする
この場合、Yはoを取得できずに待つだけです。Yが別のセマフォを保持していないため、Xは処理を続けてセマフォを解放できます。
補足コラム
デッドロックの典型例は、複数のタスクが複数の資源を異なる順序で取得することです。この問題では、Xが「i → o」、Yが「o → i」の順に取得します。タスク間で取得順序を統一することは、デッドロックを防ぐ代表的な方法です。
FAQ
Q. Yがiを待ち始めた時点で、デッドロックですか?
A. まだデッドロックとは限りません。その時点ではXが処理を続けられる可能性があります。Xがoの取得で待ち、互いに相手の保持するセマフォを待つ状態になったときにデッドロックが成立します。
A. まだデッドロックとは限りません。その時点ではXが処理を続けられる可能性があります。Xがoの取得で待ち、互いに相手の保持するセマフォを待つ状態になったときにデッドロックが成立します。
Q. 優先度は、デッドロックの原因ですか?
A. デッドロックの直接の原因は、セマフォの取得順序と保持・待ちの循環です。優先度は、どのタスクが実行されるかに関係します。
A. デッドロックの直接の原因は、セマフォの取得順序と保持・待ちの循環です。優先度は、どのタスクが実行されるかに関係します。
関連キーワード: デッドロック、バイナリセマフォ、排他制御、プリエンプティブスケジューリング、資源待ち状態

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

