實(shí)驗(yàn)二 死鎖的避免_第1頁
實(shí)驗(yàn)二 死鎖的避免_第2頁
實(shí)驗(yàn)二 死鎖的避免_第3頁
實(shí)驗(yàn)二 死鎖的避免_第4頁
實(shí)驗(yàn)二 死鎖的避免_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)二 死鎖的避免班級: 學(xué)號: 姓名: 1 實(shí)驗(yàn)內(nèi)容模擬進(jìn)程的資源分配算法2.實(shí)驗(yàn)?zāi)康臑榱肆私庀到y(tǒng)的資源分配情況,假定系統(tǒng)的任何一種資源在任一時刻只能被一個進(jìn)程使用。任何進(jìn)程已經(jīng)占用的資源只能由進(jìn)程自己釋放,而不能由其他進(jìn)程搶占。當(dāng)進(jìn)程申請的資源不能滿足時,必須等待。因此,只要資源分配算法能保證進(jìn)程的資源請求,且不出現(xiàn)循環(huán)等待,則系統(tǒng)不會出現(xiàn)死鎖。編寫模擬系統(tǒng)進(jìn)行資源調(diào)度的程序,采用銀行家算法,有效地避免死鎖的產(chǎn)生。模擬進(jìn)程的資源分配算法,了解死鎖的產(chǎn)生和避免的方法。3.實(shí)驗(yàn)設(shè)計(jì)3.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)使用銀行家算法過程中,當(dāng)某個進(jìn)程提出資源請求時,假定系統(tǒng)先分配給它,之后用系統(tǒng)安全性檢查算法對

2、系統(tǒng)進(jìn)行安全性檢查。若系統(tǒng)安全,則假定分配變成真的分配,若系統(tǒng)不安全,假定分配作廢,讓進(jìn)程等待。void judge()/利用銀行家算法對申請資源對進(jìn)行判定 char ch; int i=0,j=0;ch='y'cout<<"請輸入需要資源的進(jìn)程號(0-"<<N-1<<"):" cin>>i;/輸入須申請的進(jìn)程號 cout<<"請輸入進(jìn)程 "<<i<<" 申請的資源:"<<endl; for(j=0;j&

3、lt;M;j+) cout<<namej<<":" cin>>Requestj;/需要申請的資源 for (j=0;j<M;j+) if(Requestj>Needij|Requestj>Avaliablej)/判斷申請是否大于需求和可分配的資源數(shù)目 cout<<"進(jìn)程 "<<i<<"申請的資源不符合要求" cout<<" 無法分配!"<<endl; ch='n' break; if(c

4、h='y') resource_allocation(i);/根據(jù)進(jìn)程需求量變換資源 show();/根據(jù)進(jìn)程需求量顯示變換后的資源 safe();/根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷 在進(jìn)行系統(tǒng)安全性檢查時,第一步,把各進(jìn)程的剩余資源量與系統(tǒng)的剩余資源量進(jìn)行比較,檢查系統(tǒng)剩余資源量是否可供分配,若是,進(jìn)行第二步,若不是,進(jìn)行第三步。第二步,將資源分配給當(dāng)前進(jìn)程,此時,該進(jìn)程已獲得所需的所有資源量,標(biāo)記該進(jìn)程為TRUE,并將它占有資源歸還系統(tǒng),繼續(xù)進(jìn)行第一步的操作。第三步,檢查是否所有資源都標(biāo)記為TRUE,若是,則系統(tǒng)安全,否則,系統(tǒng)不安全。int safe()/安全性算法 in

5、t i,j,k=0,m,apply,Finish100; int flag=0; still0=Avaliable0; still1=Avaliable1; still2=Avaliable2; for(i=0;i<N;i+) apply=0; for(j=0;j<M;j+) if(Finishi=False&&Needij<=stillj) apply+; if(apply=M) for(m=0;m<M;m+) stillm=stillm+Allocationim;/變分配數(shù) Finishi=True; safequeuek=i; i=-1; k+;

6、flag+; for(i=0;i<N;i+) if(Finishi=False) cout<<"安全序列不存在!"<<endl;/不成功,系統(tǒng)不安全 return -1; cout<<"系統(tǒng)安全"<<endl;/如果安全,輸出成功 cout<<"分配的序列:" for(i=0;i<N;i+)/輸出運(yùn)行進(jìn)程數(shù)組 cout<<safequeuei; if(i<N-1) cout<<"->" cout<<

7、;endl; return 0; 3.2 求解方法 在安全狀態(tài)下系統(tǒng)收到進(jìn)程資源請求后,先把資源試探性地分配給它?,F(xiàn)在,系統(tǒng)將剩余資源和其他進(jìn)程還需要的資源數(shù)進(jìn)行比較,找出剩余資源量能滿足最大需求量的進(jìn)程,從而保證進(jìn)程運(yùn)行完畢并把資源歸還系統(tǒng)。這時,將該進(jìn)程標(biāo)記為TRUE,在安全序列中添加該進(jìn)程,歸還其占有的所有資源,反復(fù)執(zhí)行以上步驟。最后,檢查進(jìn)程的標(biāo)記,若都為TRUE,則系統(tǒng)安全,輸出安全序列,若有進(jìn)程標(biāo)記為FALSE,則系統(tǒng)不安全。程序結(jié)構(gòu)如下:4.實(shí)驗(yàn)結(jié)果1.系統(tǒng)資源設(shè)置界面2.進(jìn)程數(shù)目、最大需求量、已分配資源數(shù)的設(shè)置界面3.主菜單界面4.輸入1,進(jìn)行資源的分配5. 輸入2,進(jìn)行資源的

8、增加6.輸入3,進(jìn)行資源的刪除7.輸入4,增加作業(yè)8.輸入5,退出菜單5.實(shí)驗(yàn)體會 銀行家算法能通過對資源的合理分配確保系統(tǒng)不會出現(xiàn)循環(huán)等待鏈,從而有效地避免死鎖的問題。通過對某個實(shí)際問題的解決,生動形象地向我們展示了對于一系列作業(yè)的調(diào)度方法。銀行家算法和其他死鎖防止方法相比,提高了系統(tǒng)的并發(fā)性,并且一定程度上提高了系統(tǒng)的資源利用率。總的說來,對資源的合適分配可以防止和避免死鎖的發(fā)生,但是一定程度上限制了進(jìn)程對系統(tǒng)資源的充分共享附 源程序#include<iostream> #include<cstring> #include<cstdio> using n

9、amespace std;#define False 0 #define True 1 int M=100;/系統(tǒng)擁有的最大資源數(shù)int N=100;/系統(tǒng)運(yùn)行的最多進(jìn)程數(shù)char name100;/資源名int Max100100;/各進(jìn)程所需各類資源的最大需求 int Avaliable100;/系統(tǒng)可用資源 int Allocation100100;/系統(tǒng)已分配資源 int Need100100;/還需要資源 int Request100;/請求資源向量 int safequeue100;/存放安全序列 int still100;/存放系統(tǒng)可提供資源 void show()/顯示資源矩陣

10、 int i,j; cout<<"系統(tǒng)可用的資源Avaliable:"<<endl; for( i=0;i<M;i+) cout<<namei<<" " cout<<endl; for(j=0;j<M;j+) cout<<Avaliablej<<" "/輸出系統(tǒng)中可用的資源數(shù)目 cout<<endl; cout<<" Max Allocation Need"<<endl; cout&l

11、t;<"進(jìn)程名 " for(j=0;j<3;j+) for(i=0;i<M;i+) cout<<namei<<" " cout<<" " cout<<endl; for(i=0;i<N;i+) cout<<" "<<i<<" " for(j=0;j<M;j+) cout<<Maxij<<" " cout<<" &quo

12、t; for(j=0;j<M;j+) cout<<Allocationij<<" " cout<<" " for(j=0;j<M;j+) cout<<Needij<<" " cout<<endl; int resource_allocation(int i)/資源分配 for(int j=0;j<N;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Ne

13、edij=Needij-Requestj; return 1; int safe()/安全性檢查 int i,j,k=0,m,apply,Finish100; int flag=0; still0=Avaliable0; still1=Avaliable1; still2=Avaliable2; for(i=0;i<N;i+) apply=0; for(j=0;j<M;j+) if(Finishi=False&&Needij<=stillj) apply+; if(apply=M) for(m=0;m<M;m+) stillm=stillm+Alloca

14、tionim;/變分配數(shù) Finishi=True; safequeuek=i; i=-1; k+; flag+; for(i=0;i<N;i+) if(Finishi=False) cout<<"安全序列不存在!"<<endl;/不成功,系統(tǒng)不安全 return -1; cout<<"系統(tǒng)安全"<<endl;/如果安全,輸出成功 cout<<"分配的序列:" for(i=0;i<N;i+)/輸出運(yùn)行進(jìn)程數(shù)組 cout<<safequeuei; if(

15、i<N-1) cout<<"->" cout<<endl; return 0; void judge()/利用銀行家算法對申請資源對進(jìn)行判定 char ch; int i=0,j=0;ch='y'cout<<"請輸入需要資源的進(jìn)程號(0-"<<N-1<<"):" cin>>i;/輸入須申請的進(jìn)程號 cout<<"請輸入進(jìn)程 "<<i<<" 申請的資源:"<

16、<endl; for(j=0;j<M;j+) cout<<namej<<":" cin>>Requestj;/需要申請的資源 for (j=0;j<M;j+) if(Requestj>Needij|Requestj>Avaliablej)/判斷申請是否大于需求和可分配的資源數(shù)目 cout<<"進(jìn)程 "<<i<<"申請的資源不符合要求" cout<<" 無法分配!"<<endl; ch=

17、9;n' break; if(ch='y') resource_allocation(i);/根據(jù)進(jìn)程需求量變換資源 show();/根據(jù)進(jìn)程需求量顯示變換后的資源 safe();/根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷 void addresources()/增加資源int n,flag; cout<<"請輸入需要添加資源種類的數(shù)量:" cin>>n; flag=M; M=M+n; for(int i=0;i<n;i+) cout<<"名稱:" cin>>nameflag; cou

18、t<<"數(shù)量:" cin>>Avaliableflag+; show(); safe(); void delresources()/刪除資源char ming; int i,flag=1; cout<<"請輸入需要刪除的資源名稱:" do cin>>ming; for(i=0;i<M;i+) if(ming=namei) flag=0; break; if(i=M) cout<<"該資源不存在,請重新輸入:" while(flag); for(int j=i;j<

19、M-1;j+) namej=namej+1; Avaliablej=Avaliablej+1; M=M-1; show(); safe(); void addprocess()/增加作業(yè)int flag=N; N=N+1; cout<<"請輸入該作業(yè)的最打需求量Max"<<endl;for(int i=0;i<M;i+) cout<<namei<<":" cin>>Maxflagi; Needflagi=Maxflagi-Allocationflagi; show(); safe(); i

20、nt main()/主函數(shù) int i,j,number,choice,m,n,flag; char ming; cout<<"輸入系統(tǒng)可供資源種類的數(shù)量:" cin>>n; M=n; for(i=0;i<n;i+) cout<<"資源"<<i+1<<"的名稱:" cin>>ming; namei=ming; cout<<"資源的數(shù)量:" cin>>number; Avaliablei=number; cout&l

21、t;<endl; cout<<"輸入作業(yè)的數(shù)量:" cin>>m; N=m; cout<<"輸入各進(jìn)程的最大需求量("<<m<<"*"<<n<<"矩陣)Max:"<<endl; for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>Maxij; do flag=0; cout<<"輸入已經(jīng)分配給各進(jìn)程的資源量("<<m<<"*"<<n<<"矩陣)Allocation:"<<endl; for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>Allocationij; if(Allocationij>Maxij) flag=1;Needij=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論