この記事ではタスクの排他制御、セマフォ、デッドロックについてIT初心者にも分かりやすく解説します。
タスクの排他制御
- タスクが共有メモリにアクセスする場合、共有メモリをロックする。これを排他制御と呼ぶ。
- 排他制御することで共有メモリに不整合な値が格納されることを防ぐ。
セマフォ
- セマフォはタスクの排他制御を実現する技術。
デッドロック
- 複数のタスクで共有メモリをロックする順番が逆の場合、お互いのタスクがお互いのタスクのロック解除待ち状態になり、永遠に処理が進まなくなる。この現象をデッドロックと呼ぶ。
- 共有メモリをロックする順番を同じにすることで、デッドロックの発生を防ぐことが出来る。
応用情報ではタスクの排他制御、セマフォ、デッドロックに関する問題が出ます。是非最後までご覧ください。
タスクは主記憶装置にアクセスする
CPUが実行する命令や処理するデータは主記憶装置に保管されています。
主記憶装置には、それぞれのタスク専用の領域と複数のタスクが共用で使う領域があります。
共用の領域を使う場合に色々と考える必要があります。
CPUが命令を実行する流れについて以下の記事で解説しています。
タスクの排他制御
例えば、タスクAとタスクBが共有で使う領域(共有メモリ)には、タスクの実行回数が格納されています。
タスクAとタスクBが共有メモリにアクセスした場合、最終的に格納される値がおかしくなります。
これを防ぐために、先に共有メモリにアクセスするタスクが共有メモリをロックして占有します。これを排他制御と言います。
セマフォ
排他制御をしないといけない理由は分かりましたが、どうやって排他制御の仕組みを実現しているのでしょうか?ここで出てくる技術がセマフォです。
セマフォでは、セマフォ変数を使って共有メモリが占有されているかどうかを表現します。
セマフォ変数が「1」の場合はアクセス可能であることを表し、「0」の場合は他タスクが占有していることを表します。
タスクは共有メモリにアクセスする際、セマフォ変数が1であれば、共有メモリにアクセスし、セマフォ変数を0にします。共有メモリへのアクセスが完了すれば、セマフォ変数を1に戻します。
デッドロック
タスクの排他制御をする上で、処理の順番は凄く重要な要素です。
例えば、タスクAとBがそれぞれ次の順番で共有メモリ1と2にアクセスするとします。
- タスクA:共有メモリ1にアクセス → 共有メモリ2にアクセス
- タスクB:共有メモリ2にアクセス → 共有メモリ1にアクセス
すると、共有メモリ1をロックしているタスクAは共有メモリ2のロック解除待ち状態になり、共有メモリ2をロックしているタスクBは共有メモリ1のロック解除待ち状態になってしまいます。このようにお互いがロックしている共有メモリをお互いが待ってしまい、永遠に処理が進まなくなる状態をデッドロックと呼びます。
共有メモリをロックする順番をタスクAとB共に同じにすれば、デッドロックは発生しません。逆に共有メモリをロックする順番が逆になっていればデッドロックを起こす可能性が出てきます。
応用情報技術者試験での出題例
令和6年度春期問17
応用情報技術者
午前試験 令和6年度春期問17
三つの資源X~Zを占有して処理を行う四つのプロセスA~Dがある。各プロセスは処理の進行に伴い,表中の数値の順に資源を占有し,実行終了時に三つの資源を一括して解放する。プロセスAと同時にもう一つプロセスを動かした場合に,デッドロックを起こす可能性があるプロセスはどれか。
ア B, C, D イ C, D ウ Cだけ エ Dだけ
正解は”イ”
BはAと同じ順番で共有メモリにアクセスしているのでデッドロックは発生しません。
Cは2→1、3→1の箇所がAと逆の順番なのでデッドロックが発生する可能性があります。
Dは完全にAと逆の順番なのでデッドロックが発生する可能性があります。
よって、答えはイです。
令和4年度秋期問16
応用情報技術者
午前試験 令和4年度秋期問16
二つのタスクが共用する二つの資源を排他的に使用するとき,デッドロックが発生するおそれがある。このデッドロックの発生を防ぐ方法はどれか。
ア 一方のタスクの優先度を高くする。
イ 資源獲得の順序を両方のタスクで同じにする。
ウ 資源獲得の順序を両方のタスクで逆にする。
エ 両方のタスクの優先度を同じにする。
正解は”イ”
デッドロックの発生を防ぐには資源獲得の順番を同じにします。よって答えはイです。
令和4年度春期問17
応用情報技術者
午前試験 令和4年度春期問17
一つのI²Cパスに接続された二つのセンサがある。それぞれのセンサ値を読み込む二つのタスクで排他的に制御したい。利用するリアルタイムOSの機能として,適切なものはどれか。
ア キュー
ウ マルチスレッド
イ セマフォ
エ ラウンドロビン
正解は”イ”
セマフォはタスクの排他制御に使われる技術です。よって答えはイです。