令和7年度 秋期 エンベデッドシステムスペシャリスト試験 午前II 問題 問6
この問題は2025(R7)秋 エンベデッドシステムスペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて,入力装置及び出力装置にアクセスする二つのタスクX,Yがある。XはYより優先度が低く,Xが資源待ち状態でない場合にYが資源待ち状態に遷移するとXが実行状態に遷移する。入力装置及び出力装置へのアクセスを排他制御するために,入力装置及び出力装置にそれぞれバイナリセマフォi及びoを用意し,X,Yを図のように実装した。このとき,デッドロックが発生するのはXの処理A,B,C,Dのうち,どの処理中にプリエンプションが発生してYが実行されたときか。ここで,Yの実行はαから行うものとし,Xの処理A,B,C,Dでは,入力装置及び出力装置へのアクセス並びにバイナリセマフォの操作は行わないものとする。

図の説明テキスト
タスクXとタスクYの処理フローを示すフローチャート。
タスクXのフロー:
- 出力データの準備
- 処理A
- セマフォi取得
- 処理B
- セマフォo取得
- 処理C
- 入力装置及び出力装置へのアクセス
- 処理D
- セマフォo解放
- セマフォi解放
- 入力データの加工
タスクYのフロー:
- α (開始位置)
- 出力データの準備
- セマフォo取得
- セマフォi取得
- 入力装置及び出力装置へのアクセス
- セマフォi解放
- セマフォo解放
- 入力データの加工
解答・解説を読む
正解: 選択肢イ
デッドロックとは、2つ以上のタスクが互いに相手の確保している資源の解放を待ち合い、処理が完全に停止してしまう状態のことです。
本問では、低優先度のタスクXと高優先度のタスクYが、2つの資源(入力装置のバイナリセマフォ 、出力装置のバイナリセマフォ )を排他的に使用します。デッドロックは「複数のタスクが複数の資源を異なる順序で確保しようとする」場合に発生しやすくなります。
タスクXがセマフォ を獲得した直後(次のセマフォ を獲得する前)にプリエンプションが発生し、タスクYが実行された場合の動作を考えます。
- タスクXがセマフォ を獲得する。
- タスクXの処理Bの最中にプリエンプションが発生し、タスクYが実行状態になる。
- タスクYがセマフォ を獲得する。
- タスクYがセマフォ を獲得しようとするが、タスクXが保持しているため、タスクYは資源待ち状態となる。
- 実行権がタスクXに戻り、タスクXがセマフォ を獲得しようとするが、タスクYが保持しているため、タスクXも資源待ち状態となる。
この結果、互いに相手の資源解放を待つ状態となり、デッドロックが発生します。したがって、プリエンプションが発生するタイミングは処理Bです。
各選択肢の解説
- ア 処理A:誤り。タスクXが資源を一つも獲得していない状態です。ここでタスクYが実行されても、タスクYは必要な資源をすべて獲得して処理を完了できるため、デッドロックは発生しません。
- イ 処理B:正解。タスクXがセマフォ を獲得し、セマフォ を獲得する前の状態です。ここでタスクYが実行されセマフォ を獲得すると、相互待ち状態に陥りデッドロックとなります。
- ウ 処理C:誤り。タスクXが両方の資源を獲得した状態です。ここでタスクYが実行されても、タスクYは資源を獲得できずに待ち状態となり、タスクXが処理を継続して資源を解放するため、デッドロックは発生しません。
- エ 処理D:誤り。タスクXが片方または両方の資源を解放した後の状態です。資源の競合によるデッドロックは発生しません。