操作系統之PV操作實例分析

 剛開始學習操作系統的時候,就聽說PV操作,簡單說說PV操作。


  P(S): S=S-

            如果S≥0,則該進程繼續執行;

              S<0進程暫停執行,放入信號量的等待隊列

 

●  V(S): S=S+1

            如果S>0,則該進程繼續執行;

                S≤0 喚醒等待隊列中的一個進程


    到底怎麼分析,下面看看一個具體的問題:


    

首先設信號量S1,S2,其中

S1,表示是否允許司機啓動汽車,其初值爲0,

S2,表示是否允許售票員開車門,初值爲O;


          


● 分析:

    司機進程:

            P:S1=S1-1 得:S1=0-1=-1<0 司機進程暫停執行,放入信號量的等待隊列(售票員進程

 

    售票員進程:

           關車門;

           V:S1=S1+1得:S1=-1+1=0≤ 0  喚醒等待隊列中的一個進程


    (解釋:喚醒司機進程,使司機進程成爲就緒狀態,司機可以啓動車輛,正常行駛,……,直到到V(S2),  S2=S2+1 得:S2=0+1=1>0 ,司機進程在此時往下就沒有操作了;

在喚醒司機進程的同時,售票員可以售票,執行售票進程,到P(S2)。

如果之前司機進程到V(S2),這裏P(S2):S2=S2-1得:S2=1-1=0 ≥ 0,接着往下執行,到最後上下客;

如果之前司機進程未到V(S2),售票員的進程到P(S2),則如下進行


           售票;(同時司機可能,啓動車輛;正常行駛;……

           P:S2=S2-1得:S2=0-1=-1< 0 售票員進程暫停執行,放入信號量的等待隊列(運行司機進程

 

    司機進程:   

         接着上面未完成的繼續往下執行

          啓動車輛;

          正常行駛;

          到站停車;

           S2=S2+1 得:S2=-1+1=0≤ 0 喚醒等待隊列中的一個進程(運行售票員進程

 

    售票員進程:

        開車門;

        上下客;


    以上過程(可以是如下):

          

     在售票員進程進程到V(S1),往下售票的同時司機可以啓動車輛、……


● 使用PV操作實現進程同步時應該注意的是:

    (1)分析進程間的制約關係,確定信號量種類。在保持進程間有正確的同步關係情況下,哪個進程先執行,哪些進程後執行,彼此間通過什麼資源(信號量)進行協調,從而明確要設置哪些信號量。

    (2)信號量的初值與相應資源的數量有關,也與P、V操作在程序代碼中出現的位置有關。

    (3)同一信號量的P、V操作要成對出現,但它們分別在不同的進程代碼中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章