對記錄型訊號量的理解

634828354發表於2017-03-18

轉載自http://blog.chinaunix.net/uid-20740497-id-1879214.html
  記錄型訊號量:需要一個用於代表資源數目的整型變數
value外,還應增加一個程式連結串列L,用於連結等待程式。兩個資料項可描述為:

type semaphore=record

                            value:integer;

                            L:list of process;

                            end

                            1

相應地,wait(S)signal(S)操作可描述為:

procedure wait(S)

           var S:semaphore;

           begin

                 S.value:=S.value-1;

                 if S.value<0 then block(S,L)

           End

procedure signal(S)

           var S:semaphore;

           begin

                 S.value:=S.value+1;

                 if S.value0 then wakeup(S,L);

           end

在記錄型訊號量機制中,S.value的初值表示系統中某類資源的數目,因而又稱為資源訊號量,對它的每次wait操作,意味著程式請求一個單位的該資源,因此描述為S.value:=S.value-1;S.value<0時,表示該類資源已分配完畢,因此程式應呼叫block原語,進行自我阻塞,放棄處理機,並插入到訊號量連結串列S.L中。可見,該機制遵循了“讓權等待”準則。此時S.value的絕對值表示在該訊號量連結串列中已阻塞程式的數目。對訊號量的每次signal操作,表示執行程式釋放一個單位資源,故S.value=S.value+1操作表示資源數目加1.若加1後仍是S.value0,則表示在該訊號量連結串列中,仍有等待該資源的程式被阻塞,故還應該呼叫wakeup原語,將S.L連結串列中的第一個等待程式喚醒。如果S.value的初值為1,表示只允許一個程式訪問臨界資源,此時的訊號量轉化為互斥訊號量。

      以上內容摘之《計算機作業系統》,下面我談談對記錄型訊號量的認識:如上圖1,你看上去是不是很像我們學習過的C語言定義的資料結構,它就是因此而得名的。只不過它是pascal語言書寫的而已,那看下面兩個方框,一個是wait,另一個是signal,是不是很像我們學的C語言啊。每次wait操作就是給程式分配一個單位的資源,每次signal操作就是程式釋放一個單位資源。

      現在我們假設我的電腦有兩臺印表機,所以S.value的初值為2,表示系統印表機的數目,稱為資源訊號量。程式A請求列印,那麼系統對它執行一次wait操作,執行S.value:=S.value-1語句後S.value1S.value的值變為1,表示有一個資源空閒。執行if語句,S.value不小於0,結束。然後又來了一個程式B請求列印,系統對它又執行一次wait操作,執行S.value:=S.value-1語句後S.value1S.value的值變為0,表示沒有空閒的資源。執行if語句,S.value不小於0,結束。又來一個程式C請求列印,系統對它又執行一次wait操作,執行S.value:=S.value-1語句後S.value1S.value的值變為-1,表示有一個程式沒有得到印表機資源。執行if語句,S.value小於0,執行block(S,L),進行自我阻塞,放棄處理機,並插入到訊號量連結串列S.L中。此時S.value的絕對值表示了在該訊號量連結串列中已阻塞程式的數目。所以這個時候阻塞的程式為一個,即是程式C

      系統執行了一段時間後,A程式結束,在結束前執行了signal操作,當執行到S.value:=S.value+1語句時,S.value1,即S.value變為0.然後執行 if 語句,S.value小於等於0,執行wakeup(S,L),S.L連結串列中喚醒C程式。過了一會,B程式結束,同樣執行signal操作,S.value變為1,表示有一個資源空閒緊接著C程式也結束了,S.value變為2S.value最終等於初值,等待其他的程式進行資源請求。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30046312/viewspace-2135599/,如需轉載,請註明出處,否則將追究法律責任。

相關文章