[CS][OS] Semaphore
Semaphore
void wait(s){
while s<= 0;
s--;
}
void signal(s){
s++;
}
1プロセスアクセスs値-バイナリ信号量n個のプロセスアクセスs値-カウント信号量
block and wakeup
readyキュー待機.-Readyqueueに入り、スケジューリングアルゴリズムに従って選択し、臨界セグメントに入る.(コンテキスト切替オーバーヘッドがある)
- deadlock & starvation
Deadlock & Starvation
deadlock
プロセスが互いの信号を待つと、すべてのプロセスは無限に待機します(2つのプロセスは、互いに所有するリソース+保持されたリソースが非線形である+ループが存在する+反発=>デッドロックを待つ)
starvation
block and wakeup方式で準備キューで待機しているプロセスを選択するスケジューリング中に、選択がなければ実行できないプロセスが生成されます(飢餓はLIFOだけでなく(スケールアルゴリズムではなくデータ構造です).スケジューリングアルゴリズムによるスケジューリングアルゴリズム(FIFOはFCFS構造であり、FIFO=Q(データ構造)はPriority(優先キュー)で用いられる).
優先度バージョン(優先度逆転)(以前はヘテロ強調点)
優先度が反転します.優先度の低いプロセスでは、優先度の高いプロセスが失われることはありません(優先度が1、4のプロセスBが実行中にSemaphore 0を返してCSに入ると仮定します).優先度1のプロセスは緊急状態にしようとしますが、while文busywaitingの場合、Bが現れるまでAは入れませんが、中間で優先度2のプロセスに切り替えてもAはCSに入れません.)
細い麻布語やMutexが不適切に使われるとエラーが発生します.ディスプレイはプログラムが提供する機能であり,Javaでは簡単な同期ツールとされている.
次のレッスン...
Reference
この問題について([CS][OS] Semaphore), 我々は、より多くの情報をここで見つけました https://velog.io/@easttwave/CSOS-Semaphoreテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol