備戰軟考的日子其實一點也不輕松,而且還經常遇到一些小小的困難,PV操作不僅僅是我們軟考的一個難點,而且還是一個常考點,它會出現在軟考的很多科目中,讓我們抖擻抖擻精神來看看它到底是何方神圣,一起揭開它神秘的面紗。
1.PV操作的相關概念
| 臨界資源
雖然多個進程可以共享系統中的各種資源,但其中許多資源一次只能為一個進程所使用,我們把一次僅允許一個進程使用的資源稱為臨界資源。許多物理設備都屬于臨界資源,如打印機等。此外,還有許多變量、數據等都可以被若干進程共享,也屬于臨界資源。
| 臨界區
對臨界資源的訪問,必須互斥地進行,在每個進程中,訪問臨界資源的那段代碼稱為臨界區。
| 信號量機制
信號量的數據結構為一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應資源的使用情況有關。
| 信號量的物理含義
S>0 表示有S個資源可用
S=0 表示無資源可用
S<0 則 |S| 表示S等待隊列中的進程個數
| PV操作
用于處理進程互斥問題,協調資源的作用。
P操作,代表需要、申請、鎖定、占用資源。信號量 S - 1;
如果減 1 后大于等于 0,即 S - 1 >= 0,即 S >= 1 ,則往下執行,
有些題目里,如果進程需要開啟,那信號量往往就要滿足這個條件,起碼要 S = 1。
V操作,代表釋放資源,信號量 S + 1;
如果加 1 后大于 0,即 S + 1 > 0 ,則往下執行
V操作之后,信號量如果還是為零甚至為負,說明資源釋放得還不夠,程序還要繼續進行釋放,不能進行下一步。
| 總結:
P操作,占用資源,滿足條件就結束本操作,流向下一步,否則掛起,等待資源的到來;
V操作,釋放資源,滿足條件就結束本操作,流向下一步,否則等待釋放更多的資源;
P(S):
①將信號量S的值減1,即S=S-1;
②如果S>=0,則該進程繼續執行;否則該進程置為等待狀態,排入等待隊列。
V(S):
③將信號量S的值加1,即S=S+1;
④如果S>0,則該進程繼續執行;否則釋放隊列中第一個等待信號量的進程。
P、V操作必須成對出現,有一個P操作就一定有一個V操作
2. PV操作圖解
3. 真題小練
進程P1、P2、P3、P4和P5的前趨圖如下圖所示:
若用PV操作控制進程P1、P2、P3、P4和P5的并發執行過程,則需要設置5個信號量S1、S2、S3、S4和S5,且信號量S1~S5的初值都等于零。下圖中a和b處應分別填入___;c和d處應分別填入___;e和f處應分別填入___。
解答:
根據前趨圖,P1進程執行完需要通知P2和P3進程,所以需要利用V(S1)和V(S2)操作通知P2和P3進程,所以空a應該填V(S1)和V(S2),P2進程執行完要通知P4進程,所以空b應該填V(S3)。
P3進程運行前需要等待P1進程的結果,所以執行程序前要先利用1個P操作,所以空c應該填P(S2),而P3進程運行結束需要利用一個V操作通知P5進程,所以空d應該填V(S4)。
P4進程執行結束需要利用一個V操作通知P5進程,所以空e應該填V(S5),P5進程執行前需要等待P3和P4進程的結果,所以空f處需要兩個P操作,則f應該填P(S4)和P(S5)。