日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

操作系统中的P-V操作(转)

發(fā)布時(shí)間:2025/4/16 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统中的P-V操作(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

信號(hào)量是最早出現(xiàn)的用來(lái)解決進(jìn)程同步與互斥問(wèn)題的機(jī)制(也可實(shí)現(xiàn)進(jìn)程通信),包括一個(gè)稱(chēng)為信號(hào)量的變量及對(duì)它進(jìn)行的兩個(gè)原語(yǔ)操作。信號(hào)量為一個(gè)整數(shù),我們?cè)O(shè)這個(gè)信號(hào)量為:sem。很顯然,我們規(guī)定在sem大于等于零的時(shí)候代表可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù),sem小于零的時(shí)候,表示正在等待使用臨界區(qū)的進(jìn)程的個(gè)數(shù)。根據(jù)這個(gè)原則,在給信號(hào)量附初值的時(shí)候,我們顯然就要設(shè)初值大于零。

p操作和v操作是不可中斷的程序段,稱(chēng)為原語(yǔ)。P,V原語(yǔ)中P是荷蘭語(yǔ)的Passeren,相當(dāng)于英文的pass, V是荷蘭語(yǔ)的Verhoog,相當(dāng)于英文中的incremnet。

且在P,V原語(yǔ)執(zhí)行期間不允許有中斷的發(fā)生。

對(duì)于具體的實(shí)現(xiàn),方法非常多,可以用硬件實(shí)現(xiàn),也可以用軟件實(shí)現(xiàn)。這種信號(hào)量機(jī)制必須有公共內(nèi)存,不能用于分布式操作系統(tǒng),這是它最大的弱點(diǎn)。

首先應(yīng)弄清PV操作的含義:PV操作由P操作原語(yǔ)和V操作原語(yǔ)組成(原語(yǔ)是不可中斷的過(guò)程),對(duì)信號(hào)量進(jìn)行操作,具體定義如下:

???????????? P(S):①將信號(hào)量S的值減1,即S=S-1;

????????????????????②如果S>=0,則該進(jìn)程繼續(xù)執(zhí)行;否則該進(jìn)程置為等待狀態(tài),排入等待隊(duì)列。

???????????? V(S):①將信號(hào)量S的值加1,即S=S+1;

????????????????????②如果S>0,則該進(jìn)程繼續(xù)執(zhí)行;否則釋放隊(duì)列中第一個(gè)等待信號(hào)量的進(jìn)程。

PV操作的意義:我們用信號(hào)量及PV操作來(lái)實(shí)現(xiàn)進(jìn)程的同步和互斥。PV操作屬于進(jìn)程的低級(jí)通信。

什么是信號(hào)量?信號(hào)量(semaphore)的數(shù)據(jù)結(jié)構(gòu)為一個(gè)值和一個(gè)指針,指針指向等待該信號(hào)量的下一個(gè)進(jìn)程。信號(hào)量的值與相應(yīng)資源的使用情況有關(guān)。當(dāng)它的值大于0時(shí),表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時(shí),其絕對(duì)值表示等待使用該資源的進(jìn)程個(gè)數(shù)。注意,信號(hào)量的值僅能由PV操作來(lái)改變。

一般來(lái)說(shuō),信號(hào)量S>=0時(shí),S表示可用資源的數(shù)量。執(zhí)行一次P操作意味著請(qǐng)求分配一個(gè)單位資源,因此S的值減1;

當(dāng)S<0時(shí),表示已經(jīng)沒(méi)有可用資源,請(qǐng)求者必須等待別的進(jìn)程釋放該類(lèi)資源,它才能運(yùn)行下去。而執(zhí)行一個(gè)V操作意味著釋放一個(gè)單位資源,因此S的值加1;

若S<=0,表示有某些進(jìn)程正在等待該資源,因此要喚醒一個(gè)等待狀態(tài)的進(jìn)程,使之運(yùn)行下去

利用信號(hào)量和PV操作實(shí)現(xiàn)進(jìn)程互斥的一般模型是:

進(jìn)程P1?????????????????? 進(jìn)程P2????????????????……?????????????? 進(jìn)程Pn

……???????????????????? ……??????????????????……

P(S);???????????????? P(S);???????????????????????????????? P(S);

臨界區(qū);???????????????? 臨界區(qū);???????????????????????????????? 臨界區(qū);

V(S);???????????????? V(S);???????????????????????????????? V(S);

……???????????????????? ……??????????????????……?????????????? ……

其中信號(hào)量S用于互斥,初值為1

使用PV操作實(shí)現(xiàn)進(jìn)程互斥時(shí)應(yīng)該注意的是:

(1)每個(gè)程序中用戶(hù)實(shí)現(xiàn)互斥的P、V操作必須成對(duì)出現(xiàn),先做P操作,進(jìn)臨界區(qū),后做V操作,出臨界區(qū)。若有多個(gè)分支,要認(rèn)真檢查其成對(duì)性。

(2)P、V操作應(yīng)分別緊靠臨界區(qū)的頭尾部,臨界區(qū)的代碼應(yīng)盡可能短,不能有死循環(huán)。

(3)互斥信號(hào)量的初值一般為1。

利用信號(hào)量和PV操作實(shí)現(xiàn)進(jìn)程同步

PV操作是典型的同步機(jī)制之一。用一個(gè)信號(hào)量與一個(gè)消息聯(lián)系起來(lái),當(dāng)信號(hào)量的值為0時(shí),表示期望的消息尚未產(chǎn)生;當(dāng)信號(hào)量的值非0時(shí),表示期望的消息已經(jīng)存在。用PV操作實(shí)現(xiàn)進(jìn)程同步時(shí),調(diào)用P操作測(cè)試消息是否到達(dá),調(diào)用V操作發(fā)送消息。

利用信號(hào)量和PV操作實(shí)現(xiàn)進(jìn)程互斥的一般模型是:

進(jìn)程A????????????????????????????進(jìn)程B

??....????????????????????????????....

L: P(信號(hào)量)???????????????????? L2:V(信號(hào)量)

??....????????????????????????????....

使用PV操作實(shí)現(xiàn)進(jìn)程同步時(shí)應(yīng)該注意的是:

(1)分析進(jìn)程間的制約關(guān)系,確定信號(hào)量種類(lèi)。在保持進(jìn)程間有正確的同步關(guān)系情況下,哪個(gè)進(jìn)程先執(zhí)行,哪些進(jìn)程后執(zhí)行,彼此間通過(guò)什么資源(信號(hào)量)進(jìn)行協(xié)調(diào),從而明確要設(shè)置哪些信號(hào)量。

(2)信號(hào)量的初值與相應(yīng)資源的數(shù)量有關(guān),也與P、V操作在程序代碼中出現(xiàn)的位置有關(guān)。

(3)同一信號(hào)量的P、V操作要成對(duì)出現(xiàn),但它們分別在不同的進(jìn)程代碼中。

【例1】生產(chǎn)者-消費(fèi)者問(wèn)題

在多道程序環(huán)境下,進(jìn)程同步是一個(gè)十分重要又令人感興趣的問(wèn)題,而生產(chǎn)者-消費(fèi)者問(wèn)題是其中一個(gè)有代表性的進(jìn)程同步問(wèn)題。下面我們給出了各種情況下的生產(chǎn)者-消費(fèi)者問(wèn)題,深入地分析和透徹地理解這個(gè)例子,對(duì)于全面解決操作系統(tǒng)內(nèi)的同步、互斥問(wèn)題將有很大幫助。

(1)一個(gè)生產(chǎn)者,一個(gè)消費(fèi)者,公用一個(gè)緩沖區(qū)。

定義兩個(gè)同步信號(hào)量:

empty——表示緩沖區(qū)是否為空,初值為1。

full——表示緩沖區(qū)中是否為滿(mǎn),初值為0。

生產(chǎn)者進(jìn)程

while(TRUE){

??????????????生產(chǎn)一個(gè)產(chǎn)品;

??????????????P(empty);

??????????????產(chǎn)品送往Buffer;

??????????????V(full);

??????????????}

消費(fèi)者進(jìn)程

while(TRUE){

??????????????P(full);

??????????????從Buffer取出一個(gè)產(chǎn)品;

??????????????V(empty);

??????????????消費(fèi)該產(chǎn)品;

??????????????}

(2)一個(gè)生產(chǎn)者,一個(gè)消費(fèi)者,公用n個(gè)環(huán)形緩沖區(qū)。

定義兩個(gè)同步信號(hào)量:

empty——表示緩沖區(qū)是否為空,初值為n。

full——表示緩沖區(qū)中是否為滿(mǎn),初值為0。

???????????? 設(shè)緩沖區(qū)的編號(hào)為1~n&61485;1,定義兩個(gè)指針in和out,分別是生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程使用的指針,指向下一個(gè)可用的緩沖區(qū)。

生產(chǎn)者進(jìn)程

while(TRUE){

??????????????生產(chǎn)一個(gè)產(chǎn)品;

??????????????P(empty);

??????????????產(chǎn)品送往buffer(in);

??????????????in=(in+1)mod n;

??????????????V(full);

??????????????}

消費(fèi)者進(jìn)程

while(TRUE){

P(full);

????從buffer(out)中取出產(chǎn)品;

????out=(out+1)mod n;

????V(empty);

????消費(fèi)該產(chǎn)品;

????}

(3)一組生產(chǎn)者,一組消費(fèi)者,公用n個(gè)環(huán)形緩沖區(qū)

???????????? 在這個(gè)問(wèn)題中,不僅生產(chǎn)者與消費(fèi)者之間要同步,而且各個(gè)生產(chǎn)者之間、各個(gè)消費(fèi)者之間還必須互斥地訪(fǎng)問(wèn)緩沖區(qū)。

定義四個(gè)信號(hào)量:

empty——表示緩沖區(qū)是否為空,初值為n。

full——表示緩沖區(qū)中是否為滿(mǎn),初值為0。

mutex1——生產(chǎn)者之間的互斥信號(hào)量,初值為1。

mutex2——消費(fèi)者之間的互斥信號(hào)量,初值為1。

???????????? 設(shè)緩沖區(qū)的編號(hào)為1~n&61485;1,定義兩個(gè)指針in和out,分別是生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程使用的指針,指向下一個(gè)可用的緩沖區(qū)。

生產(chǎn)者進(jìn)程

while(TRUE){

??????????????生產(chǎn)一個(gè)產(chǎn)品;

??????????????P(empty);

??????????????P(mutex1);

??????????????產(chǎn)品送往buffer(in);

??????????????in=(in+1)mod n;

??????????????V(mutex1);

??????????????V(full);

??????????????}

消費(fèi)者進(jìn)程

while(TRUE){

P(full);

????P(mutex2);

????從buffer(out)中取出產(chǎn)品;

????out=(out+1)mod n;

????V(mutex2);

????V(empty);

????消費(fèi)該產(chǎn)品;

????}

需要注意的是無(wú)論在生產(chǎn)者進(jìn)程中還是在消費(fèi)者進(jìn)程中,兩個(gè)P操作的次序不能顛倒。應(yīng)先執(zhí)行同步信號(hào)量的P操作,然后再執(zhí)行互斥信號(hào)量的P操作,否則可能造成進(jìn)程死鎖。

【例2】桌上有一空盤(pán),允許存放一只水果。爸爸可向盤(pán)中放蘋(píng)果,也可向盤(pán)中放桔子,兒子專(zhuān)等吃盤(pán)中的桔子,女兒專(zhuān)等吃盤(pán)中的蘋(píng)果。規(guī)定當(dāng)盤(pán)空時(shí)一次只能放一只水果供吃者取用,請(qǐng)用P、V原語(yǔ)實(shí)現(xiàn)爸爸、兒子、女兒三個(gè)并發(fā)進(jìn)程的同步。

分析在本題中,爸爸、兒子、女兒共用一個(gè)盤(pán)子,盤(pán)中一次只能放一個(gè)水果。當(dāng)盤(pán)子為空時(shí),爸爸可將一個(gè)水果放入果盤(pán)中。若放入果盤(pán)中的是桔子,則允許兒子吃,女兒必須等待;若放入果盤(pán)中的是蘋(píng)果,則允許女兒吃,兒子必須等待。本題實(shí)際上是生產(chǎn)者-消費(fèi)者問(wèn)題的一種變形。這里,生產(chǎn)者放入緩沖區(qū)的產(chǎn)品有兩類(lèi),消費(fèi)者也有兩類(lèi),每類(lèi)消費(fèi)者只消費(fèi)其中固定的一類(lèi)產(chǎn)品。

???????????? 解:在本題中,應(yīng)設(shè)置三個(gè)信號(hào)量S、So、Sa,信號(hào)量S表示盤(pán)子是否為空,其初值為l;信號(hào)量So表示盤(pán)中是否有桔子,其初值為0;信號(hào)量Sa表示盤(pán)中是否有蘋(píng)果,其初值為0。同步描述如下:

int S=1;

int Sa=0;

int So=0;

?????????????? main()

?????????????? {

???????????????? cobegin

???????????????????? father();??????????????

???????????????????? son();????????????????

???????????????????? daughter();????????????

???????????????? coend

???????????? }

???????????? father()

???????????? {

???????????????? while(1)

?????????????????? {

???????????????????? P(S);

???????????????????? 將水果放入盤(pán)中;

???????????????????? if(放入的是桔子)V(So);

???????????????????? else?????????? V(Sa);

????????????????????}

??????????????}

???????????? son()

???????????? {

???????????????? while(1)

?????????????????? {

??????????????????????P(So);

??????????????????????從盤(pán)中取出桔子;

??????????????????????V(S);

??????????????????????吃桔子;

????????????????????}

???????????? }

???????????? daughter()

???????????? {

??????????????????while(1)

???????????????????? {

?????????????????????? P(Sa);

?????????????????????? 從盤(pán)中取出蘋(píng)果;

?????????????????????? V(S);

?????????????????????? 吃蘋(píng)果;

????????????????????}

???????????? }

例題3 設(shè)公交車(chē)上,司機(jī)和售票員的活動(dòng)如下:司機(jī);啟動(dòng)車(chē)輛;正常行使,到站停車(chē). 售票員;關(guān)車(chē)門(mén),售票 開(kāi)車(chē)門(mén). 在汽車(chē)不斷到站 停車(chē)行駛過(guò)程中這兩個(gè)活動(dòng)有什么同步關(guān)系? 用信號(hào)量和pv操作實(shí)現(xiàn)。

設(shè)信號(hào)量為s1(是否開(kāi)車(chē))和s2(是否停車(chē)),s1=1,s2=0;

司機(jī)進(jìn)程:??????????????????????售票員進(jìn)程:

begin?????????????????????????? begin

L1:???????????????????????????? L2:

P(S1);??????????????????????????關(guān)閉車(chē)門(mén);

啟動(dòng)車(chē)輛;??????????????????????V(s1);??

正常行駛;??????????????????????售票;

V(s2);????????????????????????P(s2);

goto L1;????????????????????????開(kāi)車(chē)門(mén);

end;?????????????????????????? goto L2;

????????????????????????????????end;

思考題:

四個(gè)進(jìn)程A、B、C、D都要讀一個(gè)共享文件F,系統(tǒng)允許多個(gè)進(jìn)程同時(shí)讀文件F。但限制是進(jìn)程A和進(jìn)程C不能同時(shí)讀文件F,進(jìn)程B和進(jìn)程D也不能同時(shí)讀文件F。為了使這四個(gè)進(jìn)程并發(fā)執(zhí)行時(shí)能按系統(tǒng)要求使用文件,現(xiàn)用PV操作進(jìn)行管理,請(qǐng)回答下面的問(wèn)題:

(1)應(yīng)定義的信號(hào)量及初值:???????????????????????????? 。

(2)在下列的程序中填上適當(dāng)?shù)腜、V操作,以保證它們能正確并發(fā)工作:

?? A()???????????? B()????????????C()????????????????D()

??{??????????????{?????????????? {??????????????????{

?? [1];????????????[3];?????????? [5];?????????????? [7];

?? read F;???????? read F;????????read F;????????????read F;

?? [2];????????????[4];???????? [6];???????????????? [8];

?? }??????????????}??????????????}?????????????????? }

思考題解答:

(1)定義二個(gè)信號(hào)量S1、S2,初值均為1,即:S1=1,S2=1。其中進(jìn)程A和C使用信號(hào)量S1,進(jìn)程B和D使用信號(hào)量S2。

(2)從[1]到[8]分別為:P(S1) V(S1) P(S2) V(S2) P(S1) V(S1) P(S2) V(S2)

信號(hào)量、PV操作是解決進(jìn)程間的同步與互斥問(wèn)題的。

★???? 做題時(shí)尤其要注意隱藏的同步、互斥問(wèn)題。這些問(wèn)題通常可以歸入生產(chǎn)者-消費(fèi)者問(wèn)題和閱讀者-寫(xiě)入者問(wèn)題。

★?????PV操作一定是成對(duì)出現(xiàn)的,但是這不意味著它會(huì)在一個(gè)進(jìn)程內(nèi)成對(duì)出現(xiàn)。

★???? 在互斥關(guān)系中,PV操作一定是在一個(gè)進(jìn)程內(nèi)成對(duì)出現(xiàn)。而且,信號(hào)一定大于0,具體多少視情況而定。而對(duì)于同步關(guān)系,則一對(duì)PV操作在兩個(gè)進(jìn)程或者更多的進(jìn)程中出現(xiàn)。

★???? 對(duì)于同步關(guān)系,信號(hào)量可能為0,也可能不為0;用于同步的信號(hào)個(gè)數(shù)可能1個(gè),也可能是多個(gè)。

★???? 對(duì)信號(hào)量為1的,應(yīng)該先執(zhí)行V操作。

★???? 在生產(chǎn)者-消費(fèi)者問(wèn)題中,要設(shè)置三個(gè)信號(hào)量:empty-空閑的緩存區(qū)數(shù)量,初值為n;full-已填充的緩存區(qū)數(shù)量,初值為0;mutex-保證只有一個(gè)進(jìn)程在寫(xiě)入緩存區(qū),初值為1。

?★???? 在閱讀者-寫(xiě)入者問(wèn)題中,設(shè)置兩個(gè)信號(hào)量:信號(hào)量access-控制寫(xiě)入互斥,初值為1;信號(hào)量rc-控制對(duì)共享變量ReadCount(讀者統(tǒng)計(jì)值)的互斥訪(fǎng)問(wèn)。

轉(zhuǎn)載于:https://www.cnblogs.com/Quincy-yang/p/9179601.html

總結(jié)

以上是生活随笔為你收集整理的操作系统中的P-V操作(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。