軟考(五)PV操作

在計算機操作系統中,PV操作是進程管理中的難點,在軟考中,PV操作同樣是一個難點,下面就讓我們來啃啃這塊硬骨頭吧!
(一)PV操作的含義:PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進行操作,具體定義如下:
    P(S):①將信號量S的值減1,即S=S-1;
           ②如果S>=0,則該進程繼續執行;否則該進程置爲等待狀態,排入等待隊列。
    V(S):①將信號量S的值加1,即S=S+1;

           ②如果S>0,則該進程繼續執行;否則釋放隊列中第一個等待信號量的進程。


(二)PV操作的意義:我們用信號量及PV操作來實現進程的同步和互斥。PV操作屬於進程的低級通信。


什麼是信號量?信號量(semaphore)的數據結構爲一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量;當它的值小於0時,其絕對值表示等待使用該資源的進程個數。注意,信號量的值僅能由PV操作來改變。

    一般來說,信號量S>=0時,S表示可用資源的數量。執行一次P操作意味着請求分配一個單位資源,因此S的值減1;當S<0時,表示已經沒有可用資源,請求者必須等待別的進程釋放該類資源,它才能運行下去。而執行一個V操作意味着釋放一個單位資源,因此S的值加1;若S=<0,表示有某些進程正在等待該資源,因此要喚醒一個等待狀態的進程,使之運行下去。


    利用信號量和PV操作實現進程互斥的一般模型是:
進程P1              進程P2           ……          進程Pn
……                  ……                           ……
P(S);              P(S);                         P(S);
臨界區;             臨界區;                        臨界區;
V(S);              V(S);                        V(S);
……                  ……            ……           ……

    其中信號量S用於互斥,初值爲1。


    使用PV操作實現進程互斥時應該注意的是:
    (1)每個程序中用戶實現互斥的P、V操作必須成對出現,先做P操作,進臨界區,後做V操作,出臨界區。若有多個分支,要認真檢查其成對性。
    (2)P、V操作應分別緊靠臨界區的頭尾部,臨界區的代碼應儘可能短,不能有死循環。
(3)互斥信號量的初值一般爲1。
    利用信號量和PV操作實現進程同步
PV操作是典型的同步機制之一。用一個信號量與一個消息聯繫起來,當信號量的值爲0時,表示期望的消息尚未產生;當信號量的值非0時,表示期望的消息已經存在。用PV操作實現進程同步時,調用P操作測試消息是否到達,調用V操作發送消息。
    使用PV操作實現進程同步時應該注意的是:
   (1)分析進程間的制約關係,確定信號量種類。在保持進程間有正確的同步關係情況下,哪個進程先執行,哪些進程後執行,彼此間通過什麼資源(信號量)進行協調,從而明確要設置哪些信號量。
    (2)信號量的初值與相應資源的數量有關,也與P、V操作在程序代碼中出現的位置有關。

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


後記軟考系列知識總結博客就寫到這裏,接下來會發表一篇軟考回顧博客:主要是根據我自己複習軟考的實際經歷,講講怎樣複習軟考,怎樣時間管理,以及軟考中需要注意的事項。


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