軟考學習 PV操作二 PV應用

2021-06-18 18:53:35 字數 4317 閱讀 9864

pv原語的應用

pv原語可以解決程序管理當中的互斥問題,以及同步問題,還有通訊問題.

我覺得我只要明白互斥和同步問題就好了,通訊就…

(1)用pv原語實現程序互斥

把臨界區置於p(sem) 和v(sem)之間。(ps:訊號量的英文是semaphore)

當乙個程序想要進入臨界區時,它必須先執行p操作以將訊號量sem減1,在程序完成對臨界區的操作後,它必須執行v操作以釋放它所占用的臨界區。從而就實現了程序的互斥:

我的理解:

互斥的概念就我自己的理解就是,2個程序或多個程序要使用同乙個資源,而且他們同時都想使用,但是這個資源他們誰都能用,但是一次只能給乙個程序用,那麼這些個程序之間的關係就是互斥的.你用了資源,我就用不了.(理解不對,歡迎指教)

還有臨界區的概念,在我看來,就是下面這段**.進去先p,出來就v,中間執行.

(理解不對,歡迎指教)

理解錯誤

臨界區指的是上圖中p(sem)和v(sem)中間的.進入臨界區之前需要p操作,出來需要v操作.

還有就是互斥,不是指的程序之間的關係是互斥,而是對臨界資源來說,是互斥的,這個概念我自己也沒有太理解,就這樣吧.

然後上面提到的具體的過程我們可以簡單的描述如下:

pa:p(sem)

; v(sem)

pb:p(sem)

; v(sem)

解析:

由於互斥,只有乙個資源,所以sem訊號量就只有乙個

pa,pb各是乙個程序,他們是互斥的關係.要麼pa佔著資源,pb用不了,pb只能等著pa釋放資源;要麼pb佔著資源,pa用不了,pa等著pb釋放資源.

sem的初值為1,表示有乙個資源.pa和pb是可以同時操作的,但是資源只有乙個,看系統把資源分配給誰了.這裡假設pa運氣好,系統看它人品好,把資源給了他.

pa,p(sem),sem=sem-1=1-1=0,然後pa就開始咔咔咔工作.

與此同時,程序pb 也跟系統說,給乙個資源吧,但是系統偏心,資源已經給了pa了.它p(sem)一下,發現sem=sem-1=0-1=-1,木有資源了,只能等著了.

然後pa咔咔咔工作完了之後,v(sem)一下,釋放資源,sem=sem+1=-1+1=0,<=0,所以喚醒乙個在等著的程序,pb就被喚醒了.

然後由於pb之前已經p(sem)過了,不用再p(sem)了,直接開始咔咔咔工作,工作完了走的時候也釋放了資源,v(sem),sem=sem+1=0+1=1,又有乙個資源了.

至此互斥整完了,整同步.

(2)用pv原語實現程序同步

假設兩個程序需要同步進行,乙個程序是計算程序,另乙個程序是列印程序,那麼這個時候兩個程序的定義可以表示為:

我的理解:

同步就是2個程序協同完成乙個工作.(某人說也可以是多個程序,不能理解啊)比如小a 和小b,要他倆同時到達乙個地方拿東西,他倆都到了,東西才能給他們.但是他倆不一定要同時從同乙個地方出發,他們可以在任意時間,任意地點出發,而且他們的速度還不要求一致,但是或許在路上,或許在終點,先到的得等著後到的,才能完成這個工作.

或者舉消費者和生產者的例子,消費者只會消費東西,生產者只會生產東西,他們有個盛東西的筐,筐是有容量的,生產者生產的比消費者消費的多,那麼筐會滿,滿了,生產者就要停下來等消費者消費.消費者消費的比生產者生產的快,那麼筐會空,空了,消費者就要停下來等生產者生產.

他們的工作就是生產者生產東西,消費者消費東西.他們要協作才能完成這個工作,要不然只有生產者生產東西,筐滿了,這個工作也繼續不下去了,就停了.或者只有消費者消費東西,沒有生產者,消費什麼.

所以,我理解的同步就是程序協作完成工作,他們不用搶乙個資源(互斥).     (理解不對,歡迎指教)

我的理解結束了,繼續結合上面理解同步的pv原語.

這個應該是偽**部分.

主要功能計算程序計算完了結果,列印程序將結果列印出來.

pc(表示計算程序)

a: local buf

repeat

buf=buf

until buf=空

計算 得到計算結果

buf=計算結果

goto a

pp:(表示列印程序)

b: local pri

repeat

pri=buf

until pri!=空

列印buf中的資料

清除buf中的資料

goto b

我的解析:

從pc這邊看,從上到下,意思大概是,有乙個buf(buffer,緩衝區,我覺得在這裡它是乙個變數)用來儲存計算的結果.repeat不知道是什麼,buf=buf,是賦值,但是不明白,untilbuf=空,等著buf變成空的,才開始計算,計算得到了結果,把結果賦給buf,然後再來一次a操作,gotoa.

從pp列印程序這邊看,有乙個pri,也應該是個變數.repeat,是重新整理嗎,依舊不懂.pri=buf,把buf中的結果給pri,until pri !=空,只要pri不是空的,就列印buf中的資料,列印完了清空,然後goto b繼續執行b

總述:能明白大概的意思,部分**不理解.以後理解了,再補.

相應用p,v的實現過程為:

我的理解:

首先對於這裡面的一些東西進行下說明.deposit(data)是計算程序,remove(data)是列印程序.bufempty是計算程序的私用訊號量,空著的緩衝區有n個.buffull是列印程序的私用訊號量,初值是0,表示滿著的緩衝區為0個.

pa:

deposit(data)

begin local x

p(bufempty)

按fifo方式選擇乙個空緩衝區buf(x)

buf(x)=data

buf(x)  置滿標記

v(buffull)

endpb:

remove(data)

begin local x

p(buffull)

按fifo方式選擇乙個裝滿資料的緩衝區buf(x)

data=buf(x)

buf(x)置空標記

v(bufempty)

end

我的解析:

從pa端開始理解,大體和上面一樣,不是很懂,只能說明部分意思.

一開始pa先是儲存有乙個data資料,在計算之前,p(bufempty)一下,給n個空的buf申請資源,要佔乙個地.p(bufempty)=bufempty-1=n-1>0,所以有地.把準備好的資料data放在用fifo(先進先出)的方式選出的乙個空緩衝區中(這說明可用的緩衝區挺多,還要選),然後buf(x)標記下這個緩衝區被佔了,不能再被用了.v(buffull)=buffull+1=0+1=1>0,pb可以開始列印了.

pb p(buffull),申請資源,要列印乙個滿的緩衝區中的資料.p(buffull)=buffull-1=1-1=0>=0,可以列印.列印誰還是用fifo的方式決定,然後把緩衝區中的資料賦給data,buf(x)的資料用完了,緩衝區設定為空,v(bufempty),釋放了這個緩衝區資源了.

(3)用p v實現程序通訊

我們以郵箱通訊為例說明問題:

郵箱通訊滿足的條件是:

<1>傳送程序傳送訊息的時候,郵箱中至少要有乙個空格能存放該訊息。

<2>接收程序接收訊息時,郵箱中至少要有乙個訊息存在。

傳送程序和接收程序我們可以進行如下的描述:

deposit(m)為傳送程序,接收程序是remove(m). fromnum為傳送程序的私用訊號量,信箱空格數n。mesnum為接收程序的私用訊號量,初值為0.

deposit(m):

begin local x

p(fromnum)

選擇空格x

將訊息m放入空格x中

置格x的標誌為滿

v(mesnum)

endremove(m)

begin local x

p(mesnum)

選擇滿格x

把滿格x中的訊息取出放m中

置格x標誌為空

v(fromnum)

end

ps:這個的挺好懂的,就不分析了.

軟測試綜述 PV操作

在作業系統中,程序之間常常會存在相互排斥 都須要共享獨占性資源時 和同步 完畢非同步的兩個程序的協作 兩種關係。而訊號量和 pv操作完美有效的處理了這兩種情況。相互排斥 就好比過獨木橋,一次僅僅能執行乙個程序。同步 好比乙個人騎車乙個人步行,兩方協作完畢一件事情,速度快的每過一段時間就停下來等等速度...

作業系統實驗 P V原語應用分析

1 windows作業系統中p操作對應的函式是 waitforsingleobject 了解此函式的功能 2 windows作業系統中v操作對應的函式是 releasesemaphore 了解此函式的功能 3 實現p v操作。有兩個執行緒hthread1和hthread2共同使用乙個緩衝區資源buf...

效能測試學習之二 效能測試模型(PV計算模型)

pv計算模型 現有的pv計算公式是 每台伺服器每秒平均pv量 總pv 80 24 60 60 40 伺服器數量 2 總pv 24 60 60 伺服器數量 通過定積分求整個分布圖的面積,然後求出最高值附近範圍內的定積分,可以求得佔據了80 的pv量的總時間。根據這個資料,得出計算pv的公式變成 每台伺...