PV訊號量的一些理解

2022-07-23 08:45:12 字數 1203 閱讀 7967

程序通常分為就緒、執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下:

程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作、v操作和訊號量。其中訊號量起到了至關重要的作用。

訊號量訊號量是最早出現的用來解決程序同步與互斥問題的機制。 

訊號量(saphore)由乙個值和乙個指標組成,指標指向等待該訊號量的程序。訊號量的值表示相應資源的使用情況。訊號量s>=0時,s表示可用資源的數量。執行一次p操作意味著請求分配乙個資源,因此s的值減1;當s<0時,表示已經沒有可用資源,s的絕對值表示當前等待該資源的程序數。請求者必須等待其他程序釋放該類資源,才能繼續執行。而執行乙個v操作意味著釋放乙個資源,因此s的值加1;若s<0,表示有某些程序正在等待該資源,因此要喚醒乙個等待狀態的程序,使之執行下去。

注意,訊號量的值只能由pv操作來改變。

關於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時,表示剛好用完。

訊號量,PV操作

它從整型訊號量 記錄型訊號量,進而發展為 訊號量集 機制 訊號量集,就是訊號量的集合 現在要用的是記錄型訊號量 1,訊號量幹嘛用的?訊號量 解決程序間同步與互斥問題 2.訊號量的組成 訊號量 分很多種,在此寫記錄型訊號量 record semaphore 訊號量組成 每個訊號量s除乙個整數值s.va...

訊號量同步 P V 操作

訊號是 e.w.dijkstra 在二十世紀六十年代末設計的一種程式設計架構。dijkstra 的模型與鐵路操作有關 假設某段鐵路是單線的,因此一次只允許一列火車通過。訊號將用於同步通過該軌道的火車。火車在進入單一軌道之前必須等待訊號燈變為允許通行的狀態。火車進入軌道後,會改變訊號狀態,防止其他火車...

PV操作和訊號量

乙個程序被分為了 就緒 ready 執行 running 和 阻塞 blocking 三個工作狀態,當前用處理器的哪個程序是 執行 狀態,當前已經具備了使用處理器的條件而等待處理器的程序是處於就緒狀態的程序,當執行的程序由於某種原因無法繼續使用處理器的時候就停止他使用處理器使他進入 阻塞 狀態,當他...