作業系統中的PV操作

2022-09-21 16:06:16 字數 2789 閱讀 4198

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操作發現應該 掛起本程序,也就是說司機程序暫時掛起,我們進入到售票員程序。

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:在售票員程序中,開車門,上下客。整個司機與售票員問題結束。

【例3】

桌上有一空盤,允許存放乙隻水果。爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放乙隻水果供吃者取用,請用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的值加...