SkillStack
テクノロジ系6 / 25問

エンベデッドシステムスペシャリスト試験 令和5年度 秋期 午前II 問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年度 秋期 午前II 問6の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】イ

図では、タスクXはセマフォi、oの順に取得し、タスクYは反対にo、iの順に取得します。処理Bを実行中のXは、入力装置用のiを取得済みですが、出力装置用のoはまだ取得していません。この時点でプリエンプションが発生すると、優先度の高いYはoを取得した後、Xが保持するiを取得できずに資源待ち状態になります。するとXが再び実行されますが、今度はYが保持するoを取得できず、Xも資源待ち状態になります。Xはiを保持したままoを待ち、Yはoを保持したままiを待つため、互いに相手の解放を待ち続けるデッドロックになります。

アの処理Aは誤りです。この時点ではXがどちらのセマフォも取得していないので、Yはoとiを順に取得し、処理後に両方を解放できます。

ウの処理Cは誤りです。この時点ではXがiとoの両方を取得済みです。Yは最初のo取得で待ち状態となり、Xが処理を続けてoを解放できるため、循環待ちは生じません。

エの処理Dは誤りです。処理D中もXが両方のセマフォを保持しているので、Yはoの取得時点で待たされます。Xはその後o、iを順に解放でき、処理が進みます。

【ポイント】 デッドロックは、複数のタスクが資源を異なる順序で取得すると発生しやすくなります。 全タスクでセマフォの取得順序を統一すれば、循環待ちを防止できます。 各処理時点で「どの資源を保持し、次に何を待つか」を図に書くと判断しやすくなります。

出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前II 問6
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める