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

出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問6
- ア処理 A
- イ処理 B
- ウ処理 C
- エ処理 D
正解:イ
解説
図のタスク X は「セマフォ i 取得 → 処理 B → セマフォ o 取得」の順に二つのセマフォを取得し,タスク Y は α から「セマフォ o 取得 → セマフォ i 取得」の順に取得します。取得順序が逆であるため,一方が i だけ,他方が o だけを保持した状態になるとデッドロックします。処理 B の実行中は X が i だけを保持している状態なので,ここでプリエンプションが起こって Y が実行されると,Y は o を取得した後 i を待って資源待ちになり,実行状態に戻った X は o を待つことになって相互待ちが成立します。
選択肢ごとの解説
- ア誤り。処理 A の時点では X はまだセマフォを一つも取得していません。プリエンプトされた Y は o と i の両方を取得して最後まで実行でき,解放後に X が動くのでデッドロックは発生しません。
- イ正しい。処理 B の実行中は X がセマフォ i だけを保持しています。ここで Y が実行されると Y は o を取得してから i を待ち,再開した X は o を待つため,互いに相手の保持するセマフォを待つデッドロックとなります。
- ウ誤り。処理 C の実行中は X が i と o の両方を保持しています。Y は最初の o 取得で資源待ちになり,X が処理を進めて両方のセマフォを解放してから Y が動くので,デッドロックにはなりません。
- エ誤り。処理 D も入力装置及び出力装置へのアクセスの後であり,X が i と o の両方を保持している区間です。処理 C の場合と同様に,Y は o 取得で待たされるだけでデッドロックは発生しません。