PV操作 經典問題分析

2021-08-20 20:33:03 字數 2617 閱讀 1093

為了提高在實際問題中分析和思考多個執行緒之間同步互斥問題的能力,接下來將講解

pv操作,這也是作業系統中的重點和難點。本文將會先簡要介紹下

pv操作的**和基本使用方法,然後再通過兩道經典的計算機考研真題——放水果和安全島來示範如何運用

pv操作。

先講講pv操作的起源和用法。

2023年,荷蘭學者dijksrta在參與x8計算機的開發中設計並實現了具有多道程式執行能力的作業系統——the multiprogramming system。為了解決這個作業系統中程序(執行緒)的同步與互斥問題,他巧妙地利用火車執行控制系統中的「訊號燈」(semaphore,或叫「訊號量」)概念加以解決。訊號量的值大於0時,表示當前可用資源的數量;當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,這個訊號量的值僅能由pv操作來改變。

pv操作由p操作原語和v操作原語組成(原語也叫原子操作atomic operation,是不可中斷的過程),對訊號量(注意不要和windows中的訊號量機制相混淆)進行操作,具體定義如下:

p(s):

①將訊號量s的值減1,即s=s-1;

②如果s>=0,則該程序繼續執行;否則該程序置為等待狀態。

v(s):

①將訊號量s的值加1,即s=s+1;

②該程序繼續執行;如果該訊號的等待佇列中有等待程序就喚醒一等待程序。

用pv操作實現多執行緒的同步與互斥是非常簡單的,只要考慮邏輯處理上合理嚴密而不用考慮具體技術細節,因此與寫偽**較為相似。比如有多個程序p1、p2、 ……pn。它們要互斥的訪問乙個資源。用pv操作來實現就非常方便直觀。下面是pv操作**:

設定訊號量為s,初值為1。各程序的操作流程如下:

程序p1              程序p2           ……          程序pn

p(s);p(s);p(s);

訪問資源;訪問資源;訪問資源;

v(s);v(s);v(s);

。接下來就來幾道簡單的計算機考研真題。

第一題 放水果 南京大學計算機考研真題

桌上有一空盤,允許存放乙隻水果。爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放乙隻水果供吃者取用,請用p、v原語實現爸爸、兒子、女兒三個併發程序的同步。

這個題目涉及的東西非常之多,光人物就有三個再加水果,盤子等等,確實讓人感覺好像無從下手。但不管題目如何變,只要牢牢的抓住同步和互斥來分析問題就必定能迎刃而解。

下面先考慮同步情況即所有「等待」情況:

第一.爸爸要等待盤子為空。

第二.兒子要等待盤中水果是桔子。

第三.女兒要等待盤中水果是蘋果。

接下來來考慮要互斥處理的資源,看起來盤子好像是要作互斥處理的,但由於題目中的爸爸、兒子、女兒均只有乙個,並且他們訪問盤子的條件都不一樣,所以他們根本不會同時去訪問盤子,因此盤子也就不用作互斥處理了。分析至些,這個題目已經沒有難度了,下面用pv原語給出答案:

1.爸爸

p(emptydish)

if (rand()%2==0)

else

2.兒子

p(orange)

取桔子v(emptydish)

3.女兒

取蘋果v(emptydish)

第二題 安全島 南開大學考研真題

在南開大學至天津大學間有一條彎曲的路,每次只允許一輛自行車通過,但中間有小的安全島m(同時允許兩輛車),可供兩輛車在已進入兩端小車錯車,設計演算法並使用p,v實現。

這個問題應該如何考慮了?同樣只要牢牢的抓住同步和互斥來分析問題就必定能迎刃而解。

考慮所有「等待」情況:

進入通道之前都需要等待在島上的位置,有位置才可以進入(同步)

互斥:兩個路段都需要互斥

用訊號量

m來記錄安全島

m上空位個數,初值為

2。每個進入道路前的人都要先預訂安全島上的空位,訂到後再互斥的進入道路。否則就要等待安全島上有空位。訊號量k和

l表示道路,初值均為

1。然後從n到

t的車和從t到

n的車的行駛流程如下:

從n到t的車從t到n的車

p(m)                 p(m)

p(k)                 p(l)

由n到m               由t到m

v(k)                 v(l)

p(l)                 p(k)

v(m)                 v(m)

由m到t               由m到t

v(l)                 v(k)

這種解決方法也是不會造成死鎖的。安全島的解法非常之多,網上還有不少不同的解法,有興趣的童鞋可以搜尋一下。

關於pv操作的總結:

1.在多執行緒程式設計中使用pv操作能忽略**具體的實現細節,這樣確保總體思路的正確性。

2.分析pv操作時緊緊抓住同步和互斥;

同步主要分析:誰在等待?等待什麼?分析清楚了,同步就出來了;

互斥主要分析:那些資源是共享的,共享資源需進一步思考有沒有必要互斥,比如果盤問題中果盤是共享資源,但是果盤操作並不需要互斥;

PV操作 經典問題分析

為了提高在實際問題中分析和思考多個執行緒之間同步互斥問題的能力,接下來將講解 pv操作,這也是作業系統中的重點和難點。本文將會先簡要介紹下 pv操作的 和基本使用方法,然後再通過兩道經典的計算機考研真題 放水果和安全島來示範如何運用 pv操作。先講講pv操作的起源和用法。1962年,荷蘭學者dijk...

P V操作經典問題

1.設有一台計算機,有兩條i o通道,分別接一台卡片輸入機和一台印表機。卡片機把一疊卡片逐一輸入到緩衝區b1中,加工處理後再搬到緩衝區b2中,並在印表機上列印。解 0 分析題意,畫出草圖 1 設定三個程序 i程序 負責把卡片上的資訊輸入緩衝區b1 p程序 負責從緩衝區b1中取到資訊並加工處理,送到緩...

PV操作經典例題 哲學家進餐問題

哲學家進餐問題 五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。分析 放在桌子上的筷子是臨界資源,在一段時間內...