セマフォ獲得順序の逆転によるデッドロック発生箇所の特定

タスクXはセマフォ $o$(出力装置)を獲得した後に処理Bを実行し、続いてセマフォ $i$(入力装置)を獲得しようとします。一方、高優先度タスクYは初めにセマフォ $i$ を獲得し、次いでセマフォ $o$ を要求します。したがって、タスクXが処理Bの実行中(セマフォ $o$ を保持した状態)でプリエンプションされ、Yがセマフォ $i$ を獲得した後にセマフォ $o$ を要求すると、相互に相手のセマフォ解放を待つデッドロックが発生します。 処理Aの時点ではタスクXはいずれのセマフォも獲得していないため、デッドロックは生じません。 処理Cの時点ではタスクXはすでに両方のセマフォ $o$ と $i$ を保持しているため、Yはセマフォ $i$ の獲得待ちとなりデッドロック(相互待ち)にはなりません。 処理Dの時点ではタスクXはセマフォ $i$ を解放済みであるため、循環待ちデッドロックは発生しません。

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

問題画像
出典令和7年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問6
ア
処理A
イ
処理B
ウ
処理C
エ
処理D