




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3.3 信號(hào)量與PV操作3.3.1同步與同步機(jī)制3.3.2記錄型信號(hào)量與PV操作3.3.3用記錄型信號(hào)量實(shí)現(xiàn)互斥3.3.4記錄型信號(hào)量解決生產(chǎn)者-消費(fèi)者問題3.3.5記錄型信號(hào)量解決讀者-寫者問題3.3.6記錄型信號(hào)量解決理發(fā)師問題3.3.1 同步和同步機(jī)制 著名的生產(chǎn)者-消費(fèi)者問題是計(jì)算機(jī)操作系統(tǒng)中并發(fā)進(jìn)程內(nèi)在關(guān)系的一種抽象,是典型的進(jìn)程同步問題。 在操作系統(tǒng)中,生產(chǎn)者進(jìn)程可以是計(jì)算進(jìn)程、發(fā)送進(jìn)程;而消費(fèi)者進(jìn)程可以是打印進(jìn)程、接收進(jìn)程等等。 解決好生產(chǎn)者-消費(fèi)者問題就解決好了一類并發(fā)進(jìn)程的同步問題。生產(chǎn)者-消費(fèi)者問題表述 有界緩沖問題 有n個(gè)生產(chǎn)者和m個(gè)消費(fèi)者,連接在一個(gè)有k個(gè)單位緩沖區(qū)的有
2、界緩沖上。其中,pi和cj都是并發(fā)進(jìn)程,只要緩沖區(qū)未滿,生產(chǎn)者pi生產(chǎn)的產(chǎn)品就可投入緩沖區(qū);只要緩沖區(qū)不空,消費(fèi)者進(jìn)程cj就可從緩沖區(qū)取走并消耗產(chǎn)品。生產(chǎn)者-消費(fèi)者問題算法描述(1) var k:integer; nextp,nextc: item; buffer:array0.k-1 of item; in,out:integer:=0; coumter:integer:=0;生產(chǎn)者-消費(fèi)者問題算法描述(2) process producer begin while (TRUE) /* 無限循環(huán)*/ produce an item in nextp;/* 生產(chǎn)一個(gè)產(chǎn)品*/ if (count
3、er=k) sleep( );/* 緩沖滿時(shí),生產(chǎn)者睡眠*/ bufferin:=nextp; /* 將一個(gè)產(chǎn)品放入緩沖區(qū)*/ in:=(in+1) mod k; /* 指針推進(jìn)*/ counter:=counter+1; /* 緩沖內(nèi)產(chǎn)品數(shù)加1*/ if (counter=1) wakeup( consumer); /* 緩沖空了,加進(jìn)一件產(chǎn)品并喚醒消費(fèi)者*/ end 生產(chǎn)者-消費(fèi)者問題算法描述(3) process consumer begin while (TRUE) /* 無限循環(huán)*/ if (counter=0) sleep ( ); /* 緩沖區(qū)空消費(fèi)者睡眠*/ nextc:=bu
4、fferout; /*取一個(gè)產(chǎn)品到nextc*/ out:=(out+1) mod k; /* 指針推進(jìn)*/ counter:=counter-1; /* 取走一個(gè)產(chǎn)品,計(jì)數(shù)減1*/ if (counter=k-1) wakeup( producer); /* 緩沖滿了,取走一件產(chǎn)品并喚醒生產(chǎn)者*/ consume thr item in nextc;/* 消耗產(chǎn)品*/ end生產(chǎn)者-消費(fèi)者問題的算法描述(4) 生產(chǎn)者和消費(fèi)者進(jìn)程對(duì)counter的交替執(zhí)行會(huì)使其結(jié)果不唯一 生產(chǎn)者和消費(fèi)者進(jìn)程的交替執(zhí)行會(huì)導(dǎo)致進(jìn)程永遠(yuǎn)等待記錄型信號(hào)量與PV操作(1) 前節(jié)種種方法解決臨界區(qū)調(diào)度問題的缺點(diǎn): 1)對(duì)
5、不能進(jìn)入臨界區(qū)的進(jìn)程,采用忙式等待測(cè)試法,浪費(fèi)CPU時(shí)間。 2)將測(cè)試能否進(jìn)入臨界區(qū)的責(zé)任推給各個(gè)競(jìng)爭(zhēng)的進(jìn)程會(huì)削弱系統(tǒng)的可靠性,加重了用戶編程負(fù)擔(dān)。 1965年E.W.Dijkstra提出了新的同步工具-信號(hào)量和P、V操作。 記錄型信號(hào)量與PV操作(2) 信號(hào)量:一種軟件資源 原語:內(nèi)核中執(zhí)行時(shí)不可被中斷的過程 P操作原語和V操作原語 一個(gè)進(jìn)程在某一特殊點(diǎn)上被迫停止執(zhí)行直到接收到一個(gè)對(duì)應(yīng)的特殊變量值,這種特殊變量就是信號(hào)量(semaphore),復(fù)雜的進(jìn)程合作需求都可以通過適當(dāng)?shù)男盘?hào)結(jié)構(gòu)得到滿足。記錄型信號(hào)量與PV操作(3) 操作系統(tǒng)中,信號(hào)量表示物理資源的實(shí)體,它是一個(gè)與隊(duì)列有關(guān)的整型變量。
6、 實(shí)現(xiàn)時(shí),信號(hào)量是一種記錄型數(shù)據(jù)結(jié)構(gòu),有兩個(gè)分量:一個(gè)是信號(hào)量的值,另一個(gè)是信號(hào)量隊(duì)列的隊(duì)列指針。信號(hào)量的值(-2) 信號(hào)量隊(duì)列指針信號(hào)量分類信號(hào)量按其用途分為 公用信號(hào)量: 私有信號(hào)量:信號(hào)量按其取值分為 二元信號(hào)量: 一般信號(hào)量:整型信號(hào)量 設(shè)s為一個(gè)整形量,除初始化外,僅能通過P、V操作訪問,P和V操作原語定義: P(s):while s0 do null operation s:=s-1; V(s): s:=s+1;記錄型信號(hào)量(1) 設(shè)s為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu),一個(gè)分量為整形量value,另一個(gè)為信號(hào)量隊(duì)列queue, P和V操作原語定義: P(s);將信號(hào)量s減去l,若結(jié)果小于0,則
7、調(diào)用P(s)的進(jìn)程被置成等待信號(hào)量s的狀態(tài)。 V(s):將信號(hào)量s加1,若結(jié)果不大于0,則釋放一個(gè)等待信號(hào)量s的進(jìn)程。記錄型信號(hào)量(2)type semaphore = recordtype semaphore = record value:integer; value:integer; queue: list of process; queue: list of process;EndEndprocedure P(varprocedure P(var s:semaphore); s:semaphore);beginbegin s := s s := s 1; 1; /* 把信號(hào)量減去1 */
8、 if s 0 then W(s); if s 0 then W(s); /* 若信號(hào)量小于0,則調(diào)用P(s)的進(jìn) 程被置成等待信號(hào)量s的狀態(tài) */end;end;procedure V(varprocedure V(var s:semaphore); s:semaphore);beginbegins := s + 1;s := s + 1; /* 把信號(hào)量加1 */if s = 0 then R(s);if s =1 =1 then begin then begin Xi:=Xi-1; Aj:=Xi Xi:=Xi-1; Aj:=Xi; ; V(mutex V(mutex); );輸出一張票;
9、輸出一張票; end;end;else begin else begin V(mutex V(mutex); );輸出票已售完;輸出票已售完; end;end; goto goto L1; L1; end; end;記錄型信號(hào)量和PV操作解決機(jī)票問題(2) VarVar A : ARRAY1.m OF integer; A : ARRAY1.m OF integer; s : ARRAY1.m OF semaphore; sj := 1; s : ARRAY1.m OF semaphore; sj := 1;cobegincobeginprocess Piprocess Pivar Xivar
10、 Xi:integer;:integer;beginbeginL1:L1:按旅客定票要求找到按旅客定票要求找到AjAj;P(sj)P(sj)XiXi := Aj; := Aj;if Xiif Xi=1 =1 then begin then begin Xi:=Xi-1; Aj:=Xi Xi:=Xi-1; Aj:=Xi; ; V(sj); V(sj); 輸出一張票;輸出一張票; end;end;else begin else begin V(sj); V(sj);輸出票已售完;輸出票已售完; end;end; goto goto L1; L1;end;end;coendcoend; ; 哲學(xué)家吃
11、通心面問題問題(1)(1) 有五個(gè)哲學(xué)家圍坐在一圓桌旁,桌中央有一盤通心面,每人面前有一只空盤于,每?jī)扇酥g放一把叉子。每個(gè)哲學(xué)家思考、饑餓、然后吃通心面。為了吃面,每個(gè)哲學(xué)家必須獲得兩把叉子,且每人只能直接從自己左邊或右邊去取叉子 哲學(xué)家吃通心面問題問題(2(2) ) 哲學(xué)家吃通心面問問題題(3)(3)var forki :array0.4 of semaphore; forki := 1;cobeginprocess Pi / i=0,1,2,3,4, beginL1:思考;P(forki); P(fork(i+1)mod 5); 吃通心面;V(forki);V(fork(i+1)mod
12、5); goto L1; end;coend;有若干種辦法可避免這類死鎖 上述解法可能出現(xiàn)永遠(yuǎn)等待,有若 干種辦法可避免死鎖:至多允許四個(gè)哲學(xué)家同時(shí)吃;奇數(shù)號(hào)先取左手邊的叉子,偶數(shù)號(hào)先取右手邊的叉子;每個(gè)哲學(xué)家取到手邊的兩把叉子才吃,否則一把叉子也不取。哲學(xué)家吃通心面問問題題的的一一種種正正確確解解 var forkvar forki i :array0.4 of semaphore;:array0.4 of semaphore; fork forki i := 1; := 1;cobegincobeginprocess Pi process Pi / /* * i=0,1,2,3 i=0,1
13、,2,3 * */ /beginbeginL1:L1:思考;思考;P(forki)P(forki); / /* *i=4,P(fork0)i=4,P(fork0)* */ /P(forki+1 mod5) P(forki+1 mod5) / /* *i=4,P(fork4)i=4,P(fork4)* */ /吃通心面;吃通心面;V(forki)V(forki);V(fork(i+ 1 mod 5)V(fork(i+ 1 mod 5); gotogoto L1; L1; end; end;coendcoend; ;生產(chǎn)者消費(fèi)者問題一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享多個(gè)
14、緩沖區(qū)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)多個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、多個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)的解解varvar B : integer; B : integer; empty:semaphore; empty:semaphore; / /* * 可以使用的空緩沖區(qū)數(shù)可以使用的空緩沖區(qū)數(shù) * */ / full:semaphore; full:semaphore; / /* * 緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù) * */ / empty := 1; / empty := 1; /* *
15、緩沖區(qū)內(nèi)允許放入一件產(chǎn)品緩沖區(qū)內(nèi)允許放入一件產(chǎn)品 * */ / full := 0; / full := 0; /* * 緩沖區(qū)內(nèi)沒有產(chǎn)品緩沖區(qū)內(nèi)沒有產(chǎn)品 * */ /cobegincobeginProcess producer process consumer Process producer process consumer begin begin begin begin L1: L1: L2: L2:Produce a product; P(full);Produce a product; P(full);P(empty); P(empty); Product:= B; Product:
16、= B; B := product; B := product; V(empty); V(empty);V(full); V(full); Consume a product; Consume a product;Goto L1; Goto Goto L1; Goto L2;L2;end; end;end; end; coend coend多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者、共享多個(gè)緩沖區(qū)的解解varvar B : array0.k-1 of item; B : array0.k-1 of item; empty:semaphore:=k; /empty:semaphore:=k; /* * 可以使用的空
17、緩沖區(qū)數(shù)可以使用的空緩沖區(qū)數(shù) * */ / full:semaphore:=0; / full:semaphore:=0; /* * 緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù) * */ / mutex mutex:semaphore:=1; :semaphore:=1; in , out:integer:= 0; / in , out:integer:= 0; /* * 放入放入/ /取出緩沖區(qū)指針取出緩沖區(qū)指針* */ / cobegin cobeginprocess producer_i process producer_i process consumer_j process c
18、onsumer_j Begin Begin begin beginL1:produce a product; L1:produce a product; L2:P(full); L2:P(full);P(empty); P(empty); P(mutex P(mutex); );P(mutexP(mutex); ); Product:= Bout; Product:= Bout;Bin := product; Bin := product; out:=(out+1) mod k; out:=(out+1) mod k;in:=(in+1) mod k; in:=(in+1) mod k; V(
19、mutex V(mutex); );V(mutexV(mutex); ); V(empty); V(empty);V(full); V(full); Consume a product; Consume a product;Goto L1; GotoGoto L1; Goto L2; L2;end; end; end; end;coendcoend蘋果桔子問題 桌上有一只盤子,每次只能放入一只水果;爸爸專向盤子中放蘋果(apple),媽媽專向盤子中放桔于(orange),一個(gè)兒子專等吃盤子中的桔子,一個(gè)女兒專等吃盤子里的蘋果 記記錄錄型型信信號(hào)號(hào)量量解解決決蘋蘋果果桔桔子子問問題題plate
20、: integer;sp:semaphore; /* 盤子里可以放幾個(gè)水果 */sg1:semaphore; /* 盤子里有桔子 */sg2:semaphore; /* 盤子里有蘋果 */sp := 1; /* 盤子里允許放一個(gè)水果*/Sg1, := 0; /* 盤子里沒有桔子 */sg2 := 0; /* 盤子里沒有蘋果*/cobeginprocess father beginL1:削一個(gè)蘋果;P(sp);把蘋果放入plate;V(sg2);goto L1;end;process mother beginL2:剝一個(gè)桔子;P(sp);把桔子放入plate;V(sg1);goto L2;end
21、;process son beginL3:P(sg1);從plate中取桔子;V(sp);吃桔子;goto L3;end;process daughter beginL4:P(sg2);從plate中取蘋果;V(sp);吃蘋果;goto L4;end;coend讀者寫者問題 有兩組并發(fā)進(jìn)程:讀者和寫者,共享一個(gè)文件F,要求: 允許多個(gè)讀者同時(shí)執(zhí)行讀操作 任一寫者在完成寫操作之前不允許其它讀者或?qū)懻吖ぷ?寫者執(zhí)行寫操作前,應(yīng)讓已有的寫者和讀者全部退出記錄型信號(hào)量解決讀者寫者問題(1) var rc : integer:=0; W,R: semaphore; Rc := 0; /* 讀進(jìn)程計(jì)數(shù) *
22、/ W := 1; R := 1; 記錄型信號(hào)量解決讀者記錄型信號(hào)量解決讀者寫者問題寫者問題(2)(2) procedure read; procedure read; procedure write; procedure write; begin begin begin begin P(R); P(R); P(W); P(W); rc := rc rc := rc + 1; + 1; 寫文件寫文件; ; if rc if rc=1 then P(W)=1 then P(W); V(W);V(W); V(R); V(R); end; end; 讀文件;讀文件; P(R);P(R); rc := rc rc := rc - 1; - 1; if rc if rc = 0 then V(W) = 0 then V(W); V(R);V(R); end;end;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)束緊器壓頭數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2031年中國(guó)霧燈開關(guān)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)藥芯焊錫絲行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)押花膠片書簽行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年安徽審計(jì)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫必考題
- 2025年安徽廣播影視職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫含答案
- 2025年安徽省宿州市單招職業(yè)適應(yīng)性考試題庫一套
- 2025年北海職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫附答案
- 2025年安慶師范大學(xué)單招職業(yè)技能考試題庫及參考答案1套
- 2025年安慶醫(yī)藥高等專科學(xué)校單招綜合素質(zhì)考試題庫完美版
- 房、土兩稅困難減免申請(qǐng)報(bào)告(參考模板)(適用于房、土兩稅困難減免一般情形)
- 網(wǎng)絡(luò)運(yùn)維理論題庫
- 有機(jī)化學(xué)ppt課件(完整版)
- 全新人教精通版六年級(jí)英語下冊(cè)教案(全冊(cè) )
- 2021-2022學(xué)年貴州省貴陽一中高一下學(xué)期第二次月考數(shù)學(xué)試題(原卷版)
- 三年級(jí)藍(lán)色的家園海洋教育全冊(cè)教案.
- 護(hù)理不良事件-PPT課件
- 精品污水處理廠工程重難點(diǎn)分析及應(yīng)對(duì)措施
- 審核評(píng)估報(bào)告(課堂PPT)
- 后張法預(yù)應(yīng)力空心板梁施工方案
- 《房屋面積測(cè)算技術(shù)規(guī)程》DGJ32TJ131-2022
評(píng)論
0/150
提交評(píng)論