Operating-system-os-semaphores-qa1
提供:Dev Guides
OSセマフォQ&A#1
- 質問:*セマフォについて説明し、短いメモを書きます。
- 回答:*ダイケストラは、複雑な相互排除問題の並行プロセスを管理する重要な手法を提案しました。 彼はセマフォと呼ばれる新しい同期ツールを導入しました。
セマフォは2種類あります-
- バイナリセマフォ
- セマフォのカウント
バイナリセマフォは、値0と1のみを取ることができます。 カウントセマフォは、負でない整数値をとることができます。
セマフォには、待機とシグナルという2つの標準操作が定義されています。 クリティカルセクションへの入り口は待機操作によって制御され、クリティカル領域からの出口はシグナル操作によって処理されます。 待機信号操作は、PおよびV操作とも呼ばれます。 セマフォ(S)の操作は次のように行われます。
- 待機コマンドP(S)は、セマフォの値を1減らします。 結果の値が負になると、条件が満たされるまでPコマンドが遅延します。
- V(S)、つまり シグナル操作は、セマフォ値を1増やします。
セマフォの相互排除は、P(S)およびV(S)内で実施されます。 多数のプロセスが同時にP(S)を試みる場合、1つのプロセスのみが続行でき、他のプロセスは待機します。これらの操作は以下のように定義されます-
P(S) or wait(S):
If S > 0 then
Set S to S-1
Else
Block the calling process (i.e. Wait on S)
V(S) or signal(S):
If any processes are waiting on S
Start one of these processes
Else
Set S to S+1
セマフォ操作はオペレーティングシステムサービスとして実装されるため、待機とシグナルは本質的にアトミックです。 一度開始すると、これらの操作の実行を中断することはできません。
したがって、セマフォは、並行プロセス間で相互排除を保証するためのシンプルかつ強力なメカニズムです。