セマフォ(せまふぉ)

複数のタスクやプロセスが並行して動作する環境において、主記憶や入出力バスなどの共有資源に対する同時アクセスを防ぎ、排他制御やタスク同士の待ち合わせ(同期)に使うためにOSが提供する制御変数およびその仕組み。利用可能な資源の数を整数値で保持し、獲得と解放の操作によってアクセス権を管理する。

詳細解説

タスクは共有資源を使用する前に獲得操作(P操作またはwait操作)を行い、セマフォの値が正であれば1減算して処理を進めますが、0以下の場合は資源が解放されるまで待ち状態へ遷移します。使用後に解放操作(V操作またはsignal操作)を行うと値が1増やされ、その資源を待っていたタスクがあれば実行可能状態に移ります。同じ種類の資源が複数あるときに0から資源数までの値をとるカウンティングセマフォ(計数セマフォ)と、0か1の2値だけをとって単一資源の排他制御に用いられるバイナリセマフォがあります。

タスク間でデータを送受信するキューとは役割が異なり、セマフォ自体はデータの受け渡しを行いません。また、P操作とV操作は、値の検査と更新の途中に別のタスクが割り込めない不可分な操作としてOSが実装します。複数のセマフォを組み合わせて使う場合は、すべてのタスクで獲得する順序をそろえておくことがデッドロックの予防になります。

セマフォが問われた過去問

  • 2023(R5)秋 午前II 問6優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて,入力装置及び出力装置にアクセスする二つのタ
  • 2025(R7)秋 午前II 問6優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて,入力装置及び出力装置にアクセスする二つのタ

セマフォが登場する過去問

  • 2025(R7)秋 午前 問16一つのI²Cバスに接続された二つのセンサーがある。それぞれのセンサー値を読み込む二つのタスクを排他的に制御したい。利用するリアルタイムOSの
  • 2022(R4)春 午前I 問6一つの I2C バスに接続された二つのセンサがある。それぞれのセンサ値を読み込む二つのタスクで排他的に制御したい。利用するリアルタイムOSの
  • 2022(R4)春 午前 問17一つの I²Cバスに接続された二つのセンサがある。それぞれのセンサ値を読み込む二つのタスクで排他的に制御したい。利用するリアルタイムOSの機

関連する分野

OS・ソフトウェア タスク管理・排他制御

用語集の一覧へ