**自:
訊號量機制:
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小於零...