pv操作由p操作原語和v操作原語組成(原語是不可中斷的過程),對訊號量進行操作,具體定義如下:
p(s):
①將訊號量s的值減1,即s=s-1;
②如果s>=0,則該程序繼續執行;否則該程序置為等待狀態,排入等待佇列。
v(s):
①將訊號量s的值加1,即s=s+1;
②如果s>0,則該程序繼續執行;否則釋放佇列中第乙個等待訊號量的程序。
pv操作的意義:我們用訊號量及pv操作來實現程序的同步和互斥。pv操作屬於程序的低階通訊。
互動的併發程序因為他們共享資源,乙個程序執行時,經常會由於自身或外界的原因而被中端,且斷點是不固定的。也就是說程序執行的相對速度不能由程序自己來控制,於是就會導致併發程序在共享資源的時出現與時間有關的錯誤。
臨界區 : 我們把併發程序中與共享變數有關的程式段稱為臨界區。
訊號量s : 訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量;當它的值小於0時,其絕對值表示等待使用該資源的程序個數。
程序的互斥:是指當有若干個程序都要使用某一共享資源時,任何時刻最多隻允許乙個程序去使用該資源,其他要使用它的程序必須等待,直到該資源的占用著釋放了該資源。
程序的同步:是指在併發程序之間存在這一種制約關係,乙個程序依賴另乙個程序的訊息,當乙個程序沒有得到另乙個程序的訊息時應等待,直到訊息到達才被喚醒。
【例1】生產者-消費者問題
在多道程式環境下,程序同步是乙個十分重要又令人感興趣的問題,而生產者-消費者問題是其中乙個有代表性的程序同步問題。下面我們給出了各種情況下的生產者-消費者問題,深入地分析和透徹地理解這個例子,對於全面解決作業系統內的同步、互斥問題將有很大幫助。
①乙個生產者,乙個消費者,公用乙個緩衝區。
empty——表示緩衝區是否為空,初值為1。
full——表示緩衝區中是否為滿,初值為0。
生產者程序:
p(empty);
向buffer放產品;
v(full);
消費者程序:
p(full);
從buffer取產品;
v(empty);
②n個生產者,n個消費者,公用n個緩衝區。
在這個問題中,不僅生產者與消費者之間要同步,而且各個生產者之間、各個消費者之間還必須互斥地訪問緩衝區.
empty——表示緩衝區是否為空,初值為n。
full——表示緩衝區中是否為滿,初值為0。
mutex1——生產者之間的互斥訊號量,初值為1。
mutex2——消費者之間的互斥訊號量,初值為1。
生產者程序:
生產一件產品;
p(empty);
p(mutex1);
產品送往buffer(in);
in=(in+1)mod n;
v(mutex1);
v(full);
消費者程序;
p(full);
p(mutex2);
從buffer(out)中取出產品;
out=(out+1)mod n;
v(mutex2);
v(empty);
消費該產品;
【例2】
公交車司機與售票員的問題:
1:首先,我們在司機程序使用p操作(s1=s1-1=-1),現在是s1的值為-1,我們來檢視p操作發現應該 掛起本程序,也就是說司機程序暫時掛起,我們進入到售票員程序。【例3】2:進入售票員程序後,我們先 關車門,然後我們進行v操作(s1=s1+1=0),發現滿足v操作的else,我們首先喚醒司機程序,然後我們繼續執行售票員程序。
3:接著售票,售票後我們執行p操作(s2=s2-1=-1),發現滿足p操作的else,我們暫時將售票員程序掛起。
4:進入到司機程序。
5:啟動車輛,正常行駛,到站停車,執行v操作(s2=s2+1=0),發現s2滿足v操作的else,喚醒售票員程序,同時繼續執行本程序。
6:但是,我們可以發現司機程序已經執行完了,但是等待佇列中還有售票員程序,我們就進入到售票員程序
7:在售票員程序中,開車門,上下客。整個司機與售票員問題結束。
桌上有一空盤,允許存放乙隻水果。爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放乙隻水果供吃者取用,請用p、v原語實現爸爸、兒子、女兒三個併發程序的同步。
下面先考慮同步情況即所有「等待」情況:
第一.爸爸要等待盤子為空。
第二.兒子要等待盤中水果是桔子。
第三.女兒要等待盤中水果是蘋果。
接下來來考慮要互斥處理的資源,看起來盤子好像是要作互斥處理的,但由於題目中的爸爸、兒子、女兒均只有乙個,並且他們訪問盤子的條件都不一樣,所以他們根本不會同時去訪問盤子,因此盤子也就不用作互斥處理了。分析至些,這個題目已經沒有難度了,下面用pv原語給出答案:
爸爸程序:
p(emptydish)兒子程序:if (rand()%2==0)
else
:
p(orange)女兒程序:取桔子v(emptydish)
取蘋果v(emptydish)
作業系統 PV操作
1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...
作業系統 PV操作
分析 進入書店p sn 與離開書店v sn 操作對應題目中的 該書店最多允許n個購書者進入 因為假如進入書店的人數超過了最大的限制,p操作會被阻塞,知道v操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...
作業系統之PV操作
在計算機作業系統中,pv操作是程序管理中的難點。首先應弄清pv操作的含義 pv操作由p操作原語和v操作原語組成 原語是不可中斷的過程 對訊號量進行操作,具體定義如下 p s 將訊號量s的值減1,即s s 1 如果s 0,則該程序繼續執行 否則該程序置為等待狀態,排入等待佇列。v s 將訊號量s的值加...