[システムソフトウェア]04-4 Semaphors

1073 ワード

Blocked-Queue Semaphores
待機中のプロセスをFIFOキューに入れ、待機順に起動します.
  • P(S)
  • if(S > 0)
    	S--;
    else 이 프로세스의 실행을 대기시킨다. FIFO 큐의 tail에 넣는다.
  • V(S)
  • if(이 세마포를 대기중인 프로세스가 있다)
    	큐의 head에 있는 프로세스를 깨운다.
    else S++;
    Busy-Wait Semaphores
    これは前の文章で述べた細い麻布です.
  • P(S)またはWait(S)
  • while(S <= 0);
    S--;
  • V(S)または信号(S)
  • S++
    spinlockとも呼ばれ、lockを待つときにコンテキストswitchがなく、短時間でspinlockを実行するのに役立ちます.しかしspinlockはCPUを浪費し,マルチプロセスシステムで有用である.(ロックは共有リソースと見なすことができます.)
    この細胞を解決するには、blocksetと上記のblockd-queueがあります.
    .
    .
    .
    .
    公平性の観点から細胞を分類し,Strongly−Fiir信号量とWeaklyFair信号量があった.

  • Strongly-fair semaphore
    block-queue信号量はstrongly-fair信号量の1つである.公平性が強いという意味は,細い麻布が無限に信号,Vを行えば,すべての待機過程が最終的に終わるということである.また,プロセスが無限に要求されると,最終的には臨界領域に入る.

  • Weakly-fair semaphore
    busy-wait信号量はWeakly-fair信号量の1つである.細い麻布の値が0より大きい場合、最終的には待機中のすべてのプロセスが完了します.また,プロセスが臨界領域に入ることを試み続けると,最終的には入る.