預(yù)防進(jìn)程死鎖的銀行家算法實(shí)驗(yàn)報(bào)告_第1頁
預(yù)防進(jìn)程死鎖的銀行家算法實(shí)驗(yàn)報(bào)告_第2頁
預(yù)防進(jìn)程死鎖的銀行家算法實(shí)驗(yàn)報(bào)告_第3頁
預(yù)防進(jìn)程死鎖的銀行家算法實(shí)驗(yàn)報(bào)告_第4頁
預(yù)防進(jìn)程死鎖的銀行家算法實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、華僑大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 預(yù)防進(jìn)程死鎖的銀行家算法 學(xué)生姓名: 學(xué)生學(xué)號(hào): 專業(yè)班級(jí): 指導(dǎo)老師: 2013年6月20日1、 實(shí)驗(yàn)?zāi)康?通過這次實(shí)驗(yàn),加深對(duì)進(jìn)程死鎖的理解,進(jìn)一步掌握進(jìn)程資源的分配、死鎖的檢測和安全序列的生成方法。2、問題描述:設(shè)計(jì)程序模擬預(yù)防進(jìn)程死鎖的銀行家算法的工作過程。假設(shè)系統(tǒng)中有n個(gè)進(jìn)程P1, ,Pn,有m類可分配的資源R1, ,Rm,在T0時(shí)刻,進(jìn)程Pi分配到的j類資源為Allocationij個(gè),它還需要j類資源Need ij個(gè),系統(tǒng)目前剩余j類資源Workj個(gè),現(xiàn)采用銀行家算法進(jìn)行進(jìn)程資源分配預(yù)防死鎖的發(fā)生。3、需求分析1 判斷當(dāng)前狀態(tài)是否安全,如果安全給出安

2、全序列;如果不安全給出理由。2 對(duì)于下一個(gè)時(shí)刻T1,某個(gè)進(jìn)程Pk會(huì)提出請(qǐng)求Request(R1, ,Rm),判斷分配給P k進(jìn)程請(qǐng)求的資源之后系統(tǒng)是否安全。3 輸入:進(jìn)程個(gè)數(shù)n,資源種類m,T0時(shí)刻各個(gè)進(jìn)程的資源分配情況(可以運(yùn)行輸入,也可以在程序中設(shè)置);4 輸出:如果安全,輸出安全的進(jìn)程序列,不安全則提示信息。4、 概要設(shè)計(jì)1)程序中進(jìn)程調(diào)度時(shí)間變量描述如下:5、 調(diào)試分析1、本次試驗(yàn)代碼里用到了大量的判斷語句,這時(shí)就要求對(duì)各種判斷條件以及循環(huán)結(jié)束的條件考慮周全,這樣才不至于讓程序出現(xiàn)無運(yùn)行結(jié)果的錯(cuò)誤。 2、銀行家算法里對(duì)于請(qǐng)求資源后的各個(gè)矩陣分布情況要放在全局里考慮,在此基礎(chǔ)上當(dāng)再次需要

3、分配資源時(shí)使得可分配資源已經(jīng)不是最初的值。6、用戶使用說明用C+語言實(shí)現(xiàn)提示。調(diào)試運(yùn)行程序之前要熟悉變量輸入的順序,否則運(yùn)行結(jié)果會(huì)出現(xiàn)錯(cuò)誤。7、測試結(jié)果8、 存在問題 剛開始著手編寫程序的時(shí)候?qū)τ谒惴ㄔO(shè)計(jì)的思路不太對(duì),走了很多彎路,浪費(fèi)了很多時(shí)間。9、 心得體會(huì) 通過這次實(shí)驗(yàn),使我加深對(duì)進(jìn)程死鎖的理解,進(jìn)一步掌握進(jìn)程資源的分配、死鎖的檢測和安全序列的生成方法。剛開始著手編寫程序的時(shí)候?qū)τ谒惴ㄔO(shè)計(jì)的思路不太對(duì),走了很多彎路,浪費(fèi)了很多時(shí)間,這也給我一個(gè)教訓(xùn),在著手編寫程序前要做充分的準(zhǔn)備,確保思路清晰。10、附錄程序源代碼:#include <iostream.h>#define M

4、axNum 100#define error 0#define ok 1int compare(int aMaxNum,int bMaxNum,int m)/數(shù)組比較大小int i, k=0;for(i=0;i<m;i+)if(ai<bi)k=1;break;if(k=0) return ok;elsereturn error;int safe_check(int AvailableMaxNum, int MaxMaxNumMaxNum, int AllocationMaxNumMaxNum, int NeedMaxNumMaxNum, int SafeOrderMaxNum,in

5、t n,int m)int workMaxNumMaxNum, needMaxNumMaxNum,allocationMaxNumMaxNum;bool finishMaxNum=false;int kindMaxNum=0;int s=0,P=0;int temp1MaxNum,temp2MaxNum;for(int i=0;i<m;i+)work0i=Availablei;while(s<n && P=0) int symbol =0; for( i=0;i<n;i+) for(int j=0;j<m;j+) temp1j=worksj; temp2

6、j=Needij; if(compare(temp1,temp2,m)=1 && kindi=0) symbol=1; break; if(symbol=1) SafeOrders=i; kindi=1; for(int j=0;j<m;j+) allocationsj=Allocationij; needsj=Needij; works+1j=worksj+allocationsj; finishs=true; s+; else cout<<1<<endl; P=1; if(P=1 && s<n)cout<<&q

7、uot;該狀態(tài)不安全,找不到安全序列"<<endl; return 0;elsecout<<"該狀態(tài)下安全,安全序列為:"<<endl;for(int v=0;v<n;v+)cout<<SafeOrderv<<" "return 1;void request_check(int AvailableMaxNum, int MaxMaxNumMaxNum, int AllocationMaxNumMaxNum, int NeedMaxNumMaxNum, int SafeOrderM

8、axNum,int n,int m,int p,int RequestMaxNum)int temp3MaxNum;for(int i=0;i<m;i+)temp3i=Needpi;if(compare(temp3,Request,m)=1 && compare(Available,Request,m)=1 )for(i=0;i<m;i+)Availablei=Availablei-Requesti; Allocationpi=Allocationpi+Requesti;Needpi=Needpi-Requesti; if( safe_check( Availabl

9、e, Max, Allocation, Need, SafeOrder, n, m)=1)cout<<"系統(tǒng)是安全的,可以立即將"<<p<<"進(jìn)程所申請(qǐng)的資源分配給它!"<<endl;elsefor(i=0;i<m;i+) Availablei=Availablei+Requesti; Allocationpi=Allocationpi-Requesti;Needpi=Needpi+Requesti; elsecout<<"進(jìn)程申請(qǐng)的資源超出該進(jìn)程所需資源或者超出現(xiàn)有資源!讓進(jìn)程

10、"<<p<<"等待"<<endl;void output(int aMaxNumMaxNum,int n,int e)for(int i=0;i<n;i+)cout<<aei<<" "void main ()cout<<"*"<<endl; cout<<"* 預(yù)防進(jìn)程死鎖的銀行家算法 張迪 1025116022 *"<<endl; cout<<"*"<&l

11、t;endl; int AvailableMaxNum;int MaxMaxNumMaxNum;int AllocationMaxNumMaxNum;int NeedMaxNumMaxNum;int RequestMaxNum;int SafeOrderMaxNum;int n,m,p;int i,j;cout<<"請(qǐng)輸入進(jìn)程數(shù):"cin>>n;cout<<"請(qǐng)輸入資源數(shù):"cin>>m;for(i=0;i<n;i+) /賦值cout<<"請(qǐng)輸入進(jìn)程"<<i

12、;for(j=0;j<m;j+) cout<<"資源"<<j<<"的各項(xiàng)分配情況"<<endl;cin>>Maxij;cin>>Allocationij; cin>>Needij;cout<<"請(qǐng)輸入Available:"<<endl;for(i=0;i<m;i+)cin>>Availablei;cout<<"請(qǐng)求資源進(jìn)程為:"cin>>p;cout<&l

13、t;"請(qǐng)求資源為:"for(i=0;i<m;i+)cin>>Requesti; for(i=0;i<n;i+)cout<<"進(jìn)程"<<i<<endl;cout<<"Max: "output(Max,m,i); cout<<"Allocation: "output(Allocation,m,i);cout<<"Need: "output(Need,m,i); cout<<endl;cout&

14、lt;<"Available: " for(i=0;i<m;i+) cout<<Availablei<<" " cout<<endl; safe_check( Available, Max, Allocation, Need, SafeOrder, n, m); cout<<"*"<<endl; cout<<"申請(qǐng)資源后"<<endl; request_check(Available, Max,Allocation, Need, SafeOrder,n, m, p, Request); cout<<"*"<<endl; int choice=0; while(choice=0) cout<<"請(qǐng)求資源進(jìn)程為:" cin>>p; cout<<"請(qǐng)求資源為:" for(i=0;i<m;i+) cin>>Req

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論