1. 程式人生 > >作業系統的訊號量 程序互斥 同步等概念

作業系統的訊號量 程序互斥 同步等概念

Var s:semaphore:=1;
 /*設定訊號量 s 的初值為 1*/
begin
 parbegin /*併發開始*/
 process1:
 begin
repeat
 P(s) ;
 critical section
 V(s) ;
 remainder section
 until false;
 end 
process2:
 begin
 repeat
 P(s) ;
 critical section
 V(s) ;
 remainder section
 until false;
 end
 parend
end

   以 上 描 述 的 是 並 發 執 行 的 兩 個 進 程 process1 process2這兩個程序的臨界區
(critical section)對應的是一個臨界資源,為了保證這兩個程序能夠互斥地使用臨界資源,在每個程序的臨界區前後分別加上對同一個訊號量的P操作和 V操作,就好象分別是關鎖和開鎖操作一樣。我們將該訊號量的初值設為1,無論哪一個程序先獲得處理機,在進入臨界區之前都要進行P 操作,執行 P操作後,訊號量 s 的值為 0,該程序可以繼續執行;若該程序在臨界區內失去處理機,而由另一個程序獲得處理機執行時,執行的程序在進入臨界區之前執行P 操作時,訊號量 s的值就為-1此時該程序就得阻塞,進入到訊號量s 的等待隊列當中等待;當在臨界區內的程序再次獲得處理機繼續執行後,退出臨界區時,執行V
操作,訊號量 s的值為 0,此時它要去喚醒阻塞程序,然後繼續執行或轉程序排程。需要注意的是,使該訊號量 的值增加的程序會將該阻塞程序喚醒,該阻塞程序一旦獲得處理機,就可以直接進入臨界區,無需再執行 P(S)操作。
  用訊號量實現程序互斥的特點:
   (1)要找對臨界區,範圍小了會出錯,範圍大了會影響程序執行。
   (2) PV 操作位於臨界區前後,在一個程序裡成對出現。
   (3) 2 個程序對 1 個臨界資源互斥使用時訊號量初值為 1,取值範圍為-101
   (4) n 個程序要互斥使用 m 個同類臨界資源時(n>m),用訊號量實現互斥時,訊號量的初值應為m,即該類可用資源的數       目。訊號量的取值範圍為-(n-m)~m
   (5) 當訊號量
s<0時, |s|為等待該資源的程序的個數;即因該資源而阻塞的阻塞佇列中程序個數
   (6) 當訊號量 s>0時, s表示還允許進入臨界區的程序數,即剩下的臨界資源個數)
   (7) 執行一次 P(s)操作,表示請求一個臨界資源,s-1後,當s<0 時,表示可用資源沒有了,程序阻塞。


3利用訊號量實現程序同步