pv操作詳細(xì)過程是怎么樣 簡單計算機(jī)操作系統(tǒng)PV操作求步驟
PV操作的詳細(xì)過程是怎么樣?求步驟!操作系統(tǒng),PV操作,PV操作的詳細(xì)資料,簡單計算機(jī)操作系統(tǒng)PV操作求步驟,在操作系統(tǒng)中,P操作和V操作各自的動作是如何定義的?pv操作是什么意思?
本文導(dǎo)航
- PV操作的詳細(xì)過程是怎么樣?
- 求步驟!操作系統(tǒng),PV操作
- PV操作的詳細(xì)資料
- 簡單計算機(jī)操作系統(tǒng)PV操作求步驟
- 在操作系統(tǒng)中,P操作和V操作各自的動作是如何定義的?
- pv操作是什么意思
PV操作的詳細(xì)過程是怎么樣?
在操作系統(tǒng)理論中有一個非常重要的概念叫做P,V原語。在我們研究進(jìn)程間的互斥的時候經(jīng)常會引入這個概念,將P,V操作方法與加鎖的方法相比較,來解決進(jìn)程間的互斥問題。實(shí)際上,他的應(yīng)用范圍很廣,他不但可以解決進(jìn)程管理當(dāng)中的互斥問題,而且我們還可以利用此方法解決進(jìn)程同步與進(jìn)程通信的問題。
[一]P,V原語理論
闡述P,V原語的理論不得不提到的一個人便是赫赫有名的荷蘭科學(xué)家E.W.Dijkstra。如果你對這位科學(xué)家沒有什么印象的話,提起解決圖論中最短路徑問題的Dijkstra算法應(yīng)當(dāng)是我們再熟悉不過的了。P,V原語的概念以及P,V操作當(dāng)中需要使用到的信號量的概念都是由他在1965年提出的。
信號量是最早出現(xiàn)的用來解決進(jìn)程同步與互斥問題的機(jī)制,包括一個稱為信號量的變量及對它進(jìn)行的兩個原語操作。信號量為一個整數(shù),我們設(shè)這個信號量為:sem。很顯然,我們規(guī)定在sem大于等于零的時候代表可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù),sem小于零的時候,表示正在等待使用臨界區(qū)的進(jìn)程的個數(shù)。根據(jù)這個原則,在給信號量附初值的時候,我們顯然就要設(shè)初值大于零。
p操作和v操作是不可中斷的程序段,稱為原語。P,V原語中P是荷蘭語的Passeren,相當(dāng)于英文的pass, V是荷蘭語的Verhoog,相當(dāng)于英文中的incremnet。
P原語操作的動作是:
(1) sem減1;
(2) 若sem減1后仍大于或等于零,則進(jìn)程繼續(xù)執(zhí)行;
(3) 若sem減1后小于零,則該進(jìn)程被阻塞后進(jìn)入與該信號相對應(yīng)的隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。
V原語操作的動作是:
(1) sem加1;
(2) 若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行;
(3) 若相加結(jié)果小于或等于零,則從該信號的等待隊(duì)列中喚醒一等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。
需要提醒大家一點(diǎn)就是P,V操作對于每一個進(jìn)程來說,都只能進(jìn)行一次。而且必須成對使用。且在P,V愿語執(zhí)行期間不允許有中斷的發(fā)生。
對于具體的實(shí)現(xiàn),方法非常多,可以用硬件實(shí)現(xiàn),也可以用軟件實(shí)現(xiàn)。我們采用如下的定義:
procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
其中用到兩個標(biāo)準(zhǔn)過程:
asleep(s.queue);執(zhí)行此操作的進(jìn)程控制塊進(jìn)入s.queue尾部,進(jìn)程變成等待狀態(tài)
wakeup(s.queue);將s.queue頭進(jìn)程喚醒插入就緒隊(duì)列
對于這個過程,s.value初值為1時,用來實(shí)現(xiàn)進(jìn)程的互斥。
雖軟說信號量機(jī)制畢加鎖方法要好得多,但是也不是說它沒有任何的缺陷。由此我們也可以清晰地看到,這種信號量機(jī)制必須有公共內(nèi)存,不能用于分布式操作系統(tǒng),這是它最大的弱點(diǎn)。
[二]P,V原語的應(yīng)用
正如我們在文中最開始的時候提到的,P,V原語不但可以解決進(jìn)程管理當(dāng)中的互斥問題,而且我們還可以利用此方法解決進(jìn)程同步與進(jìn)程通信的問題。
(1)用P V原語實(shí)現(xiàn)進(jìn)程互斥
把臨界區(qū)置于P(sem) 和V(sem)之間。當(dāng)一個進(jìn)程想要進(jìn)入臨界區(qū)時,它必須先執(zhí)行P原語操作以將信號量sem減1,在進(jìn)程完成對臨界區(qū)的操作后,它必須執(zhí)行V原語操作以釋放它所占用的臨界區(qū)。從而就實(shí)現(xiàn)了進(jìn)程的互斥:
具體的過程我們可以簡單的描述如下:
PA:
P(sem)
<S>;
V(sem)
PB:
P(sem)
<S>;
V(sem)
(2) 用P V原語實(shí)現(xiàn)進(jìn)程同步
進(jìn)程同步問題的解決同樣可以采用這種操作來解決,我們假設(shè)兩個進(jìn)程需要同步進(jìn)行,一個進(jìn)程是計算進(jìn)程,另一個進(jìn)程是打印進(jìn)程,那么這個時候兩個進(jìn)程的定義可以表示為:
PC(表示計算進(jìn)程)
A: local buf
repeat
buf=buf
until buf=空
計算
得到計算結(jié)果
buf=計算結(jié)果
goto A
PP:(表示打印進(jìn)程)
B: local pri
repeat
pri=buf
until pri!=空
打印buf中的數(shù)據(jù)
清除buf中的數(shù)據(jù)
goto B
相應(yīng)用P,V原語的實(shí)現(xiàn)過程為:
PA: deposit(data)
Begin local x
P(bufempty)
按FIFO方式選擇一個空緩沖區(qū)buf(x)
buf(x)=data
buf(x)置滿標(biāo)記
V(buffull)
end
PB:remove(data)
Begin local x
P(buffull)
按FIFO方式選擇一個裝滿
數(shù)據(jù)的緩沖區(qū)buf(x)
data=buf(x)
buf(x)置空標(biāo)記
V(bufempty)
end
(3)用P V原語實(shí)現(xiàn)進(jìn)程通信
我們以郵箱通信為例說明問題:
郵箱通信滿足的條件是:
<1>;發(fā)送進(jìn)程發(fā)送消息的時候,郵箱中至少要有一個空格能存放該消息。
<2>;接收進(jìn)程接收消息時,郵箱中至少要有一個消息存在。
發(fā)送進(jìn)程和接收進(jìn)程我們可以進(jìn)行如下的描述:
Deposit(m)為發(fā)送進(jìn)程,接收進(jìn)程是remove(m). Fromnum為發(fā)送進(jìn)程的私用信號量,信箱空格數(shù)n。mesnum為接收進(jìn)程的私用信號量,初值為0.
Deposit(m):
Begin local x
P(fromnum)
選擇空格x
將消息m放入空格x中
置格x的標(biāo)志為滿
V(mesnum)
end
Remove(m)
Begin local x
P(mesnum)
選擇滿格x
把滿格x中的消息取出放m中
置格x標(biāo)志為空
V(fromnum)
end
求步驟!操作系統(tǒng),PV操作
在計算機(jī)操作系統(tǒng)中,PV操作是進(jìn)程管理中的難點(diǎn)。
首先應(yīng)弄清PV操作的含義:PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進(jìn)行操作,具體定義如下:
P(S):①將信號量S的值減1,即S=S-1;
②如果S?,則該進(jìn)程繼續(xù)執(zhí)行;否則該進(jìn)程置為等待狀態(tài),排入等待隊(duì)列。
V(S):①將信號量S的值加1,即S=S+1;
②如果S>0,則該進(jìn)程繼續(xù)執(zhí)行;否則釋放隊(duì)列中第一個等待信號量的進(jìn)程。
PV操作的意義:我們用信號量及PV操作來實(shí)現(xiàn)進(jìn)程的同步和互斥。PV操作屬于進(jìn)程的低級通信。
什么是信號量?信號量(semaphore)的數(shù)據(jù)結(jié)構(gòu)為一個值和一個指針,指針指向等待該信號量的下一個進(jìn)程。信號量的值與相應(yīng)資源的使用情況有關(guān)。當(dāng)它的值大于0時,表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時,其絕對值表示等待使用該資源的進(jìn)程個數(shù)。注意,信號量的值僅能由PV操作來改變。
一般來說,信號量S?時,S表示可用資源的數(shù)量。執(zhí)行一次P操作意味著請求分配一個單位資源,因此S的值減1;當(dāng)S<0時,表示已經(jīng)沒有可用資源,請求者必須等待別的進(jìn)程釋放該類資源,它才能運(yùn)行下去。而執(zhí)行一個V操作意味著釋放一個單位資源,因此S的值加1;若S?,表示有某些進(jìn)程正在等待該資源,因此要喚醒一個等待狀態(tài)的進(jìn)程,使之運(yùn)行下去。
PV操作的詳細(xì)資料
THE 是艾恩德霍芬技術(shù)大學(xué)的荷蘭文Tchnische Hoogeschool Eindhov –en的詞 頭縮寫。狄克斯特拉在THE這個系統(tǒng)中所提 出的一系統(tǒng)方法和技術(shù)奠定了計算機(jī)現(xiàn)代操作系統(tǒng)的基礎(chǔ),尤其是關(guān)于多層體系結(jié)構(gòu),順序進(jìn)程之間的同步和互斥機(jī)制這樣一些重要的思想和概念都是狄克斯特拉在THE中首先提出并為以后的操作系統(tǒng)如UNⅨ等所采用的。為了在單處理機(jī)的情況下確定進(jìn)程(process)能否占有處理機(jī),狄克斯特拉將每個進(jìn)程分為“就緒”(ready)、“運(yùn)行”(running)和“阻塞”(blocking)三個工作 狀態(tài)。由于在任一時刻最多只有一個進(jìn)程可以使用處理機(jī),正占用著處理機(jī)的進(jìn)程稱為“運(yùn)行”進(jìn)程。當(dāng)某進(jìn)程已具備了使用處理機(jī)的條 件,而當(dāng)前又沒有處理機(jī)供其使用,則使該進(jìn)程處于“就緒”狀態(tài)。當(dāng)運(yùn)行進(jìn)程由于某種原因無法繼續(xù)運(yùn)行下去時,就停止其占用處理機(jī),使之進(jìn)入“阻塞”狀態(tài),待造成其退出運(yùn)行的條件解除,再進(jìn)入“就緒”狀態(tài)。而對系統(tǒng)中所有同時運(yùn)行的進(jìn)程之間所存在的相互制約的同步(synchronization,指為了避免錯誤,在一個進(jìn)程訪問共享數(shù)據(jù)時,另一個進(jìn)程不訪問該數(shù)據(jù))和互斥(mutually-exclusive,指兩個進(jìn)程不能同時在一個臨界區(qū)中使用同一個可重復(fù)使用的資源,諸如讀寫緩沖區(qū))兩個關(guān)系,狄克斯特拉巧妙地利用火車運(yùn)行控制系統(tǒng)中的“信號燈”(semaphore,或叫“信號量”)概念加以解決。所謂信號燈,實(shí)際上就是用來控制進(jìn)程狀態(tài)的一個代表某一資源的存儲單元。例如,P1和P2是分別將數(shù)據(jù)送入緩沖B和從緩沖B讀出數(shù)據(jù)的兩個進(jìn)程,為了防止這兩個進(jìn)程并發(fā)時產(chǎn)生錯誤,狄克斯特拉設(shè)計了一種同步機(jī)制叫“PV操作”,P操作和V操作是執(zhí)行時不被打斷的兩個操作系統(tǒng)原語。執(zhí)行P操作P(S)時信號量S的值減1,若結(jié)果不為負(fù)則P(S)執(zhí)行完畢,否則執(zhí)行P操作的進(jìn)程暫停以等待釋 放。執(zhí)行V操作V(S)時,S的值加1,若結(jié)果不大于0則釋放一個因執(zhí)行P(S)而等待的進(jìn)程。對P1和P2可定義兩 個信號量S1和S2,初 值分別為1和0。進(jìn)程P1在向緩沖B送入數(shù)據(jù)前執(zhí)行P操 作P(S1),在送入數(shù)據(jù)后執(zhí)行V操 作V(S2)。進(jìn)程P2在從緩沖B讀取數(shù) 據(jù)前先執(zhí)行P操作P(S2),在讀出數(shù)據(jù) 后執(zhí)行V操作V(S1)。當(dāng)P 1往緩沖B送入一數(shù)據(jù)后信號量S1之值變?yōu)?,在該數(shù)據(jù)讀出后S1之值才又變?yōu)?,因此在前一數(shù)未讀出前 后一數(shù)不會送入,從而保 證了P1和P2之間的同步。中國讀者常常不明白這一同步機(jī)制為什么叫PV操作,原 來這是狄克斯特拉用荷蘭文定義的,因?yàn)樵诤?蘭文中,通過叫passeren,釋放叫vrijgeven,PV操 作因此得名。這是在計算機(jī)術(shù)語中不是用英 語表達(dá)的極少數(shù)的例子之一。
簡單計算機(jī)操作系統(tǒng)PV操作求步驟
這個只能夠參考計算機(jī)操作系統(tǒng)的關(guān)于 P、V 操作的章節(jié)了。即:P 操作為申請一個系統(tǒng)資源,信號量 sem 減 1;V 操作為釋放一個系統(tǒng)資源,信號量 sem 加 1。
在操作系統(tǒng)中,P操作和V操作各自的動作是如何定義的?
①信號量的值減1,即S=S-1;②如果S≥0,則該進(jìn)程繼續(xù)執(zhí)行;如果S<0,則把該進(jìn)程的狀態(tài)置為阻塞態(tài),把相應(yīng)的PCB連入該信號量隊(duì)列的末尾,并放棄處理機(jī),進(jìn)行等待(直至其它進(jìn)程在S上執(zhí)行V操作,把它釋放出來為止)。V操作順序執(zhí)行下述兩個動作:①S值加1,即S=S+1;②如果S>0,則該進(jìn)程繼續(xù)運(yùn)行;如果S≤0,則釋放信號量隊(duì)列上的第一個PCB(即信號量指量指針項(xiàng)所指向的PCB)所對應(yīng)的進(jìn)程(把阻塞態(tài)改為就緒態(tài)),執(zhí)行V操作的進(jìn)程繼續(xù)運(yùn)行。
1.PV操作的含義:PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進(jìn)行操作,具體定義如下:P(S):①將信號量S的值減1,即S=S-1;②如果S30,則該進(jìn)程繼續(xù)執(zhí)行;否則該進(jìn)程置為等待狀態(tài),排入等待隊(duì)列。V(S):①將信號量S的值加1,即S=S+1;②如果S>0,則該進(jìn)程繼續(xù)執(zhí)行;否則釋放隊(duì)列中第一個等待信號量的進(jìn)程。2.PV操作的意義:我們用信號量及PV操作來實(shí)現(xiàn)進(jìn)程的同步和互斥。PV操作屬于進(jìn)程的低級通信。什么是信號量?信號量(semaphore)的數(shù)據(jù)結(jié)構(gòu)為一個值和一個指針,指針指向等待該信號量的下一個進(jìn)程。信號量的值與相應(yīng)資源的使用情況有關(guān)。當(dāng)它的值大于0時,表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時,其絕對值表示等待使用該資源的進(jìn)程個數(shù)。注意,信號量的值僅能由PV操作來改變。3, ;一般來說,信號量S30時,S表示可用資源的數(shù)量。執(zhí)行一次P操作意味著請求分配一個單位資源,因此S的值減1;當(dāng)S<0時,表示已經(jīng)沒有可用資源,請求者必須等待別的進(jìn)程釋放該類資源,它才能運(yùn)行下去。而執(zhí)行一個V操作意味著釋放一個單位資源,因此S的值加1;若S£0,表示有某些進(jìn)程正在等待該資源,因此要喚醒一個等待狀態(tài)的進(jìn)程,使之運(yùn)行下去。
pv操作是什么意思
PV操作是一種實(shí)現(xiàn)進(jìn)程互斥與同步的有效方法。PV操作是典型的同步機(jī)制之一。用一個信號量與一個消息聯(lián)系起來,當(dāng)信號量的值為0時,表示期望的消息尚未產(chǎn)生。當(dāng)信號量的值非0時,表示期望的消息已經(jīng)存在。用PV操作實(shí)現(xiàn)進(jìn)程同步時,調(diào)用P操作測試消息是否到達(dá),調(diào)用V操作發(fā)送消息。
用PV操作來管理共享資源時,首先要確保PV操作自身執(zhí)行的正確性。由于P(S)和V(S)都是在同一個信號量S上操作,為了使得它們在執(zhí)行時不發(fā)生因交叉訪問信號量S而可能出現(xiàn)的錯誤,約定P(S)和V(S)必須是兩個不可被中斷的過程,即讓它們在屏蔽中斷下執(zhí)行。把不可被中斷的過程稱為原語。于是,P操作和V操作實(shí)際上應(yīng)該是P操作原語和V操作原語。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由尚恩教育網(wǎng)發(fā)布,如需轉(zhuǎn)載請注明出處。