優先度に基づくプリエンプティブなスケジューリングを行うリアルタイムOSにおいて、入力装置、出力装置にアクセスする二つのタスクX、Yがある。
XはYより優先度が低く、Xが資源待ち状態でない場合にYが資源待ち状態に遷移するとXが実行状態に遷移する。
入力装置及び出力装置へのアクセスを排他制御するために、入力装置及び出力装置にそれぞれバイナリセマフォi及びoを用意し、X、Yを図のように実装したとき、デッドロックが発生するのはXの処理A、B、C又はDのうち、どの処理中にプリエンプティブが発生してYが実行されたときか。
ここで、Yの実行はαから行うものとし、Xの処理A、B、C及びDでは入力装置及び出力装置へのアクセスおよびバイナリセマフォの操作は行わないものとする。
答え イ
【解説】
デッドロックが発生するのは2つのタスクが、異なる資源を占有(ロック)した状態で、互いに相手が占有している資源の占有を行うときなので、タスクXの処理としては、セマフォiかoのどちらかを取得し、他方のセマフォを取得する間になるので、セマフォiを取得してからセマフォoを取得する間の処理B(イ)になる。
タスクXが処理Bを実行中にプリエンプティブが発生しタスクYがαから処理を開始すると、セマフォoの取得はできるが、セマフォiの取得はすでにタスクXが行っているのでセマフォの開放待ちになり、タスクXの処理が再開するが、処理Bのあとのセマフォoの取得がすでにタスクXで取得済みなのでできずに、デッドロック状態になる。
これを防ぐにはタスクXとYでセマフォの取得する順番をi→oかo→iに合わせることである。
【キーワード】
・セマフォ
【キーワードの解説】
- セマフォ(semaphore)
セマフォは複数のタスク(プロセス)が共有で使用する資源の排他制御をするのに使用する。
ここでの資源とはシステムがアクセスする周辺機器である。
もっと、「セマフォ」について調べてみよう。
戻る
一覧へ
次へ
|