P,V操作執行個體分析

來源:互聯網
上載者:User

標籤:alt   關係   注意   問題:   zh-cn   使用   upload   title   .net   

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

 

 

●  P(S): S=S-1 

            如果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操作要成對出現,但它們分別在不同的進程代碼中。

P,V操作執行個體分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.