操作系統(tǒng)進(jìn)程同步互斥問題

操作系統(tǒng)進(jìn)程同步互斥問題

ID:13942094

大小:30.00 KB

頁數(shù):4頁

時(shí)間:2018-07-25

操作系統(tǒng)進(jìn)程同步互斥問題_第1頁
操作系統(tǒng)進(jìn)程同步互斥問題_第2頁
操作系統(tǒng)進(jìn)程同步互斥問題_第3頁
操作系統(tǒng)進(jìn)程同步互斥問題_第4頁
資源描述:

《操作系統(tǒng)進(jìn)程同步互斥問題》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、利用軟件方法解決進(jìn)程互斥問題假設(shè)有兩個(gè)進(jìn)程Pi和Pj,它們共享一個(gè)臨界資源R,請(qǐng)使用軟件方法使進(jìn)程Pi和Pj能互斥地訪問資源R。算法1:設(shè)置整形變量turn,用于指示被允許進(jìn)入臨界區(qū)的進(jìn)程的編號(hào),即若turn=0,表示允許進(jìn)程Pi進(jìn)入臨界區(qū)。注意:該算法強(qiáng)制兩個(gè)進(jìn)程輪流進(jìn)入臨界區(qū),不考慮實(shí)際需要。很容易造成資源的不充分利用。對(duì)Pi進(jìn)程的描述如下:repeatwhile?turn≠i?do??no-opcritical?sectionturn:=jremaindersectionuntil?false算法2:在每一個(gè)進(jìn)程訪問臨界資源之前,先去查看一下臨界資源是否正被訪問,若正被訪問,該進(jìn)程等

2、待;否則,進(jìn)入自己的臨界區(qū)。設(shè)置數(shù)組flag,使其中每個(gè)元素的初值為false——表示所有進(jìn)程都未進(jìn)入臨界區(qū),而當(dāng)其中的第i個(gè)元素值非false時(shí),即若flag[i]=ture——表示進(jìn)程Pi正在臨界區(qū)內(nèi)執(zhí)行。注意:該算法解決了有空讓進(jìn)的原則,但當(dāng)Pi和Pj的訪問標(biāo)志flag都為false時(shí),如果Pi和Pj幾乎同時(shí)都要求進(jìn)入臨界區(qū),因而都發(fā)現(xiàn)對(duì)方的標(biāo)志為false,于是,兩進(jìn)程都???先后進(jìn)入臨界區(qū),又違背了忙則等待的原則。算法描述如下:Var?flag:arry[0,1,,…n]?of?Boolean;RepeatWhileflag[j]?do?no-opFlag[i]:=true;Cr

3、iticalsectionFlag[i]:=false;RemaindersectionUntil?false算法3:設(shè)數(shù)組flag[n],當(dāng)flag[i]=ture——表示進(jìn)程Pi希望進(jìn)入臨界區(qū),即每當(dāng)Pi要進(jìn)入臨界區(qū)前,先將flag[i]=ture——表示進(jìn)程已要求進(jìn)入臨界區(qū),再去查看Pj的標(biāo)志,若flag[j]=ture,則Pi等待,否則,Pi進(jìn)入臨界區(qū)。(即要求進(jìn)入臨界區(qū)的進(jìn)程先設(shè)置其要求進(jìn)入的標(biāo)志,然后再去查看其他進(jìn)程的標(biāo)志)注意:該算法可以有效地防止兩個(gè)進(jìn)程進(jìn)入臨界區(qū),但又可能導(dǎo)致最終都不進(jìn)入臨界區(qū)的情況它即違背了“有空讓進(jìn)”的準(zhǔn)則,又違背了“有限等待”的準(zhǔn)則,描述如下:rep

4、eatflag[i]:=ture;whileflag[i]dono-opcriticalsectionflag[i]:=false;remainder?sectionuntilfalse算法4:該算法為進(jìn)程Pi設(shè)置了標(biāo)志位flag[i],當(dāng)flag[i]=ture——表示Pi要求進(jìn)入臨界區(qū),或正在臨界區(qū)中執(zhí)行。還設(shè)置了ture變量——指示允許進(jìn)入臨界區(qū)的進(jìn)程編號(hào)。注意:保證了“忙則等待”和“有空讓進(jìn)“的準(zhǔn)則。Repeatflag[i]:=ture;turn:=j;?表示Pi已進(jìn)入臨界區(qū),輪到Pj進(jìn)入臨界區(qū)。whileflag[i]andturn:=jdono-op;?若flag[i]and

5、turn:=j為false,則Pj進(jìn)入臨界區(qū)。criticalsectionflag[i]:=false;remainder?sectionuntilfalse用硬件法解決進(jìn)程互斥的問題1、利用Test—and---set指令實(shí)現(xiàn)互斥function?TS(VAR??lock:boolean):boolean;beginTS:=lock;Lock:=true;End其中:lock=false——表示該資源空閑;當(dāng)lock=true——表示該資源正在使用。2、利用TS實(shí)現(xiàn)進(jìn)程互斥(1)可為每個(gè)臨界資源設(shè)置一個(gè)布爾變量lock,初值為false——表示資源空閑。FunctionTS(varlo

6、ck:Boolean):BooleanBeginTS:=lock;Lock:=true;End(2)利用TS實(shí)現(xiàn)進(jìn)程互斥為每一個(gè)臨界資源設(shè)置一個(gè)布爾變量lock,初值為false——表示資源空閑;用TS指令將變量lock的狀態(tài)記錄在變量TS中,并將true賦予lock;這等于關(guān)閉了臨界區(qū),使任何進(jìn)程都不能進(jìn)入臨界區(qū)。利用TS指令實(shí)現(xiàn)互斥的循環(huán)進(jìn)程可描述為:repeatwhile?TS(lock)?doskip;criticalsectionlock:=false;remaindersectionuntilfalse3、利用Swap指令實(shí)現(xiàn)進(jìn)程互斥(1)Swap指令Procedure?Swa

7、p(var?a,b:Boolean)(交換兩個(gè)字的內(nèi)容)Vartemp:boolean;BeginTemp:=a;A:=b;B:=temp;End?(2)利用Swap指令實(shí)現(xiàn)進(jìn)程互斥repeatkey:=true;repeatswap(lock,key);until?key=false;criticalsectionlock:=false;remaindersection

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。