p.v.

PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進行操作。利用PV操作實現進程的同步和互斥。

PV操作

闡述P,V原語的理論不得不提到的一個人便是赫赫有名的荷蘭科學家 E.W.Dijkstra。如果你對這位科學家沒有什麼印象的話,提起解決圖論中最短路徑問題的Dijkstra算法應當是我們再熟悉不過的了。P,V原語的概念以及P,V操作當中需要使用到的信號量的概念都是由他在1965年提出的。

信號量是最早出現的用來解決進程同步與互斥問題的機制(也可實現進程通信),包括一個稱為信號量的變數及對它進行的兩個原語操作。信號量為一個整數,我們設這個信號量為:sem。很顯然,我們規定在sem大於等於零的時候代表可供並發進程使用的資源實體數,sem小於零的時候,表示正在等待使用臨界區的進程的個數。根據這個原則,在給信號量附初值的時候,我們顯然就要設初值大於零。

p操作和v操作是不可中斷的程式段,稱為原語。P,V原語中P是荷蘭語的Proberen(測試), V是荷蘭語的Verhogen(增加)。

且在P,V原語執行期間不允許有中斷的發生。

對於具體的實現,方法非常多,可以用硬體實現,也可以用軟體實現。這種信號量機制必須有公共記憶體,不能用於分散式作業系統,這是它最大的弱點。

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

相關詞條

熱門詞條

聯絡我們