セマフォとは?せまふぉ
セマフォとは、利用できる資源の個数を表すカウンタと待ち行列からなる同期機構。獲得(P操作/wait)でカウンタを減らし、0なら待ち状態に入る。返却(V操作/signal)で増やし、待っているタスクがあれば1つを実行可能にする。初期値1の2値セマフォは相互排他に、計数セマフォはバッファ面数などの資源管理に使う。
最終更新:2026-10-06
この語が出る過去問を解く →背景
割込みとタスクが同じ変数や周辺レジスタを触る構成では、読んで書き戻す途中で横取りされると値が壊れる。割込み禁止で囲めば確実だが、禁止区間が伸びるほど他の締切を巻き添えにする。資源の空き個数という一つの数を原子的に増減させる約束事へ置き換えることで、待たせる相手をその資源を要るタスクだけに限定したのがセマフォである。
具体例
TOPPERS/ASPのwai_sem/sig_sem、FreeRTOSのxSemaphoreTake/xSemaphoreGiveが該当する。DMA転送用のバッファを3面持つなら、初期値3の計数セマフォで空き面を管理し、面が尽きたときだけ生産側を待たせる。
試験での引っ掛け
P操作が獲得、V操作が解放。役割を逆にした選択肢が定番。相互排他が目的ならミューテックスを使うのが原則で、2値セマフォには所有者の概念が無く優先度継承が効かない——優先度逆転を扱う設問では、この違いが解答の分かれ目になる。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問7(IPA)解説で登場
リアルタイムシステムにおいて、アプリケーションタスクの要求によって入出力を行うデバイスドライバのタスク部が、要求された処理が完了したときに行う通知処理はどれか。
正解:イベントフラグを使って入出力要求元のタスクに入出力完了を通知する。
要点:完了通知はOSでなく要求元タスクへ同期機能で行う
デバイスドライバのタスク部は、割込みハンドラから処理完了を受け取ったあと、その事実を要求元のアプリケーションタスクへ知らせる必要がある。リアルタイムOSではイベントフラグやセマフォといった同期機能を使い、完了を待って待ち状態になっているタスクを実行可能状態へ戻す。通知の相手はOSやハードウェアではなく、あくまで待っているタスクである。
出典:平成30年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問8(IPA)
セマフォに関する記述のうち、適切なものはどれか。
正解:V操作は、待ち状態のプロセスがあれば、そのプロセスを一つ実行可能状態へ移す。
要点:V操作は資源を解放し待ちプロセスを1つ実行可能にする
セマフォは資源の利用可能数を表すカウンタで、P操作(獲得)でカウンタを減らし、0以下なら要求したプロセスを待ち行列に入れる。V操作(解放)ではカウンタを増やし、待ち行列にプロセスがあればその1つを実行可能状態へ移す。P操作とV操作は対で使うが、実行順序や個数に「先にV操作が必要」といった制約はない。
出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問8(IPA)
セマフォの基本操作であるP操作、V操作に関する記述のうち、適切なものはどれか。ここで、セマフォ変数は事象の数を表すものとし、初期値は1とする。
正解:P操作は資源のロック、V操作は資源のアンロックを実現するのに使用できる。
要点:P操作がロック、V操作がアンロックとして働く
初期値1のセマフォ(二値セマフォ)は、資源が1つだけの排他制御に使える。P操作でカウンタを1減らして資源を確保し、すでに他タスクが確保していれば待ち状態になる。V操作でカウンタを戻して資源を解放するので、P操作=ロック、V操作=アンロックとして機能する。
出典:令和5年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問6(IPA)
優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて、入力装置及び出力装置にアクセスする二つのタスクX,Yがある。X…
正解:処理B
要点:取得順序が逆の2つのセマフォを片方だけ持つ区間が危険
デッドロックはXとYが互いに相手の持つセマフォを待ち合うときに起きる。Xはiを取得した直後、まだoを取得していない状態にあるときプリエンプトされると危険で、これが処理Bの区間である。この状態でYが走るとYはoを取得できるがiが取れずに待ちに入り、実行状態に戻ったXもoが取れずに待つため、双方が永久に進めなくなる。
出典:令和7年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問6(IPA)
優先度に基づくプリエンプティブスケジューリングのリアルタイムOSを使用した組込みシステムにおいて、入力装置及び出力装置にアクセスする二つのタスクX,Yがある。X…
正解:処理B
要点:取得順序が逆のロックを片方だけ持つ区間で詰まる
デッドロックは、XとYが互いに相手の保持するセマフォを待ち合ったときに起きる。Xはiを取得した直後でまだoを取得していない区間、すなわち処理Bでプリエンプトされると危険で、そこでYが動くとYはoを取得できるがiが取れずに待ちに入る。実行状態へ戻ったXもoが取れずに待つため、双方が永久に進めなくなる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。