1. 程式人生 > >【作業系統】訊號量與P、V操作

【作業系統】訊號量與P、V操作

知識點:

訊號量機制主要有整形訊號量、記錄性訊號量、訊號量集機制。

訊號量是一個整形變數,根據控制物件的不同賦不同的值。訊號量可分為公用訊號量和私用訊號量兩類。

公用訊號量:實現程序間的互斥,初值=1或資源的數目

私用訊號量:實現程序間的同步,初值=0或某個整數

訊號量S的物理意義:S>=0時表示某資源的可用數,s<0時其絕對值表示阻塞佇列中等待該資源的程序數。P、V操作是實現程序同步與互斥的常用方法。

P操作表示申請一個資源,V操作表示釋放一個資源。

P操作的定義:S=S-1,若S>=0,則執行P操作的程序繼續執行;若S<0,則置該程序為阻塞狀態,並將其插入阻塞佇列。

Procedure P(Var S:Semaphore);

  Begin

   S:=S-1;

   If S<0 then  w(S)   {執行P操作的程序插入等待佇列}

  End;

V操作定義:S=S+1,若S>0則執行V操作的程序繼續執行;若S<0,則從阻塞狀態喚醒一個程序,並將其插入就緒佇列,執行V操作的程序繼續執行。

  Procedure V(Var S:Semaphore);

     Begin 

S:=S+1

If S<=0 then R(s) {從阻塞佇列中喚醒一個程序}

End;

利用PV操作實現程序的互斥

 令訊號量mutex的初值為1,當進入臨界區時執行P操作,退出臨界區時執行V操作。這樣利用PV操作實現程序互斥的程式碼段如下:

P(mutex)

  臨界區

V(mutex)

討論的習題:

訊號量與P、V操作
 

S1初值為2,題目知道有兩個發貨員我們可以知道用S1表示發貨員的數目;同樣S2表示稽核員的數目。當顧客程序i進入系統,此時為第一個我們有S1=2>0則發貨員開始工作P(s1),顧客提完貨物以後發貨員完成自己的 工作釋放資源V(S1);

顧客提完貨以後需要檢察員進行檢測,確認貨物是否正確,S2=1>0,則稽核員開始工作P(s2) ,

進行檢驗 ,無論結果如何S2釋放資源V(s2)。

所以A,C

第二個問題:

訊號量與P、V操作

訊號量與P、V操作

訊號量與P、V操作
 

當然還有一些知識點需要研究

  1。程序間的相互轉換

  2。同步於互斥、緩衝池

歡迎關注公眾號: