戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

エンベデッドシステムスペシャリスト 2023年 午前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では入力装置及び出力装置へのアクセス及びバイナリセマフォの操作は行わないものとする。
エンベデッドシステムスペシャリスト 2023年 午前2 問06の問題画像

選択肢

ア:処理A
イ:処理B(正解)
ウ:処理C
エ:処理D

🔒 解説は解答すると表示されます

セマフォの取得順序とデッドロック【午前2解説】

正解の理由

デッドロックが発生するのは、Xが入力装置用セマフォiを取得した後、出力装置用セマフォoを取得する前に、Yへ実行が切り替わった場合です。該当するのはイの処理B中です。
この時点では、Xがiを保持しています。Yはαから実行され、先にoを取得した後、iを取得しようとします。しかし、iはXが保持しているため、Yは資源待ち状態になります。
Yが資源待ちになったことでXが実行状態に戻りますが、Xは次にoを取得しようとします。今度はoをYが保持しているため、Xも資源待ち状態になります。つまり、XはYが持つoを待ち、YはXが持つiを待つ状態となり、デッドロックが発生します。

解法ステップ

  1. タスクごとのセマフォ取得順序を確認します。
    • X:iを取得してからoを取得
    • Y:oを取得してからiを取得
  2. 取得順序が逆なので、片方がi、もう片方がoを保持する状況があると、互いに相手のセマフォを待つ可能性があります。
  3. Xがiを取得した後、oを取得する前にYへ切り替わる位置を探します。
  4. その位置に当たるのが処理Bです。Yがoを取得してからiを待ち、Xがoを待つことでデッドロックになります。

選択肢別の誤答解説

  • ア:処理A
    Xはまだiもoも取得していません。Yはoとiを取得して処理し、解放できます。Xが保持するセマフォをYが待つ状況にはならないため、デッドロックは発生しません。
  • イ:処理B
    Xはiを保持していますが、oはまだ取得していません。Yがoを保持したままiを待ち、Xがiを保持したままoを待つため、デッドロックが発生します。
  • ウ:処理C
    Xはすでにiとoの両方を取得しています。Yはoを取得できず待ち状態になりますが、Xは資源待ちではないので処理を続け、セマフォを解放できます。したがってデッドロックにはなりません。
  • エ:処理D
    Xは装置へのアクセス後、セマフォを解放する処理へ進みます。Yがoを待っていても、Xはoを解放できるため、待ち状態の連鎖は解消されます。

よくある誤解

  • セマフォの取得順序が異なるだけで、必ずデッドロックするわけではありません。互いに相手の保持するセマフォを待つ状態が成立するかがポイントです。
  • 優先度の高いYが実行された時点で、Xが永久に実行されないと考えるのは誤りです。問題文の条件では、Yが資源待ちになるとXが実行状態に戻ります。
  • Xがセマフォを一つだけ保持している場合だけでなく、Yが別のセマフォを保持していることも確認します。デッドロックには、相互待ちの状態が必要です。

補足コラム

デッドロックの代表的な成立条件の一つが「循環待ち」です。この問題では、Xがiを保持してoを待ち、Yがoを保持してiを待つため、待ち関係が輪になります。
予防策の一例は、すべてのタスクでセマフォを同じ順序で取得することです。たとえば、XもYもiの後にoを取得するよう統一すれば、この問題のような逆順取得による循環待ちは避けやすくなります。

FAQ

Q. Yがiの取得で待った時点で、デッドロックと判断できますか?
A. まだ判断できません。その後Xがoを取得できるかを確認します。処理B中ではoをYが保持しているため、Xも待ち状態になり、デッドロックが成立します。
Q. 処理Cでは、Yが待つのにデッドロックにならないのはなぜですか?
A. Xはすでに必要なセマフォを両方取得しており、追加の資源を待っていません。処理を続けてセマフォを解放できるためです。

関連キーワード: バイナリセマフォ、デッドロック、プリエンプティブスケジューリング、相互排他、資源待ち
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について