PV操作示例詳解

2022-08-24 13:39:09 字數 2353 閱讀 4841

**自:

訊號量機制:

2023年,荷蘭學者dijkstra提出的訊號量機制是一種卓有成效的程序同步工具。在長期且廣泛的應用中,訊號量機制又得到了很大的發展。

訊號量的作用:

控制共享資源的使用權(滿足互斥條件)

標誌某事件的發生

使兩個或兩個以上的程序的行為同步

訊號量的實質:

像是一把鑰匙,程序要執行下去,需要先拿到這把鑰匙,通俗點來講就是在允許的訊號量下,程序才能夠執行。

接下來,我們就來看看如何通過操作訊號量,來實現控制程序的執行。

pv的操作:

pv操作:就是來解決互斥與同步的問題的。pv操作是分開來看的。

首先來看p操作(申請資源操作)(等待訊號量):

訊號量有效(值》0)

訊號量值減1

任務繼續執行

訊號量值=0

等待訊號量的程序被列入等待訊號量程序列表。

可以理解為:

if ( (s = s - 1) >= 0 )

繼續執行本程序;

else

掛起本程序/本程序等待;

然後再來看v操作(釋放資源操作):

沒有程序等待訊號量

訊號量的值加1

有程序等待訊號量

訊號量的值加1

等待的其中乙個程序進入就緒狀態

可以理解為:

if ( (s = s + 1) >0 )

不喚醒s的佇列中的等待程序;

else // (s = s + 1) <= 0

喚醒s的佇列中的等待程序;

繼續執行本程序;

我們簡單的記住這個原理,然後我們通過乙個例子來解釋,什麼是pv操作。

公交車司機與售票員的問題:

我在圖上畫了步驟,接下來我們嚴格按照步驟來一步一步走。

首先,我們在司機程序使用p操作(s1=s1-1=-1),現在是s1的值為-1,我們來檢視p操作發現應該 掛起本程序,也就是說司機程序暫時掛起,我們進入到售票員程序。

進入售票員程序後,我們先 關車門,然後我們進行v操作(s1=s1+1=0),發現滿足v操作的else,我們首先喚醒司機程序,然後我們繼續執行售票員程序。

接著售票,售票後我們執行p操作(s2=s2-1=-1),發現滿足p操作的else,我們暫時將售票員程序掛起。

進入到司機程序。

啟動車輛,正常行駛,到站停車,執行v操作(s2=s2+1=0),發現s2滿足v操作的else,喚醒售票員程序,同時繼續執行本程序。

但是,我們可以發現司機程序已經執行完了,但是等待佇列中還有售票員程序,我們就進入到售票員程序

在售票員程序中,開車門,上下客。整個司機與售票員問題結束。

關於pv操作容易產生的一些疑問:

1,s大於0那就表示有臨界資源可供使用,為什麼不喚醒程序?

s大於0的確表示有臨界資源可供使用,也就是說這個時候沒有程序被阻塞在這個資源上,所以不需要喚醒。

2,s小於0應該是說沒有臨界資源可供使用,為什麼還要喚醒程序?

v原語操作的本質在於:乙個程序使用完臨界資源後,釋放臨界資源,使s加1,以通知其它的程序,這個時候如果s<0,表明有程序阻塞在該類資源上,因此要從阻塞佇列裡喚醒乙個程序來「轉手」該類資源。比如,有兩個某類資源,四個程序a、b、c、d要用該類資源,最開始s=2,當a進入,s=1,當b進入s=0,表明該類資源剛好用完, 當c進入時s=-1,表明有乙個程序被阻塞了,d進入,s=-2。當a用完該類資源時,進行v操作,s=-1,釋放該類資源,因為s<0,表明有程序阻塞在該類資源上,於是喚醒乙個。

3,如果是互斥訊號量的話,應該設定訊號量s=1,但是當有5個程序都訪問的話,最後在該訊號量的煉表裡會有4個在等待,也是說s=-4,那麼第乙個程序執行了v操作使s加1,釋放了資源,下乙個應該能夠執行,但喚醒的這個程序在執行p操作時因s<0,也還是執行不了,這是怎麼回事呢?

當乙個程序阻塞了的時候,它已經執行過了p操作,並卡在臨界區那個地方。當喚醒它時就立即進入它自己的臨界區,並不需要執行p操作了,當執行完了臨界區的程式後,就執行v操作。

4,s的絕對值表示等待的程序數,同時又表示臨界資源,這到底是怎麼回事?

當訊號量s小於0時,其絕對值表示系統中因請求該類資源而被阻塞的程序數目.s大於0時表示可用的臨界資源數。注意在不同情況下所表達的含義不一樣。當等於0時,表示剛好用完。

P,V操作理解

程序通常分為就緒 執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下 程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作 v操作和訊號量。其中訊號量起到了至關重要的作用。訊號量 訊號量是最早出現的用來解決程序同步與互斥問題的機制。訊號量 saphore 由...

理解PV操作

程序通常分為就緒 執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下 程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作 v操作和訊號量。其中訊號量起到了至關重要的作用。訊號量 訊號量是最早出現的用來解決程序同步與互斥問題的機制。訊號量 saphore 由...

作業系統 PV操作

1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...