操作系統(tǒng)實驗二銀行家算法_第1頁
操作系統(tǒng)實驗二銀行家算法_第2頁
操作系統(tǒng)實驗二銀行家算法_第3頁
操作系統(tǒng)實驗二銀行家算法_第4頁
操作系統(tǒng)實驗二銀行家算法_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗二家算法一、實驗?zāi)康倪M一步理解利用在了解和掌握家算法避免死鎖;家算法的基礎(chǔ)上,編制家算法通用程序,將調(diào)試結(jié)果顯示在計算機屏幕上,再檢測和筆算的一致性。(3)理解和掌握安全序列、安全性算法二、實驗內(nèi)容(1)了解和理解死鎖;(2)理解利用家算法避免死鎖的原理;(3)會使用某種編程語言。三、安全狀態(tài)指系統(tǒng)能按照某種順序如(稱為序列為安全序列),為每個進程分配所需的資源,直至最大需求,使得每個進程都能順利完成。1家算法假設(shè)在進程并發(fā)執(zhí)行時進程i 提出請求j 類資源k 個后,表示為 Requestij=k。系統(tǒng)按下述步驟進行安全檢查:如果 RequestiNeedi 則繼續(xù)以下檢查,否則顯示需求申請

2、超出最大需求值的錯誤。如果 RequestiAvailable 則繼續(xù)以下檢查,否則顯示系統(tǒng)無足夠資源,Pi 阻塞等待。系統(tǒng)試探著把資源分配給進程 Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij;系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進程 Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進程 Pi 等待。2安全性算法(1)設(shè)置兩個向量

3、: 工作向量 Work: 它表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)目,它含有m 個元素,在執(zhí)行安全算法開始時,Work=Available; Finish: 它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成。開始時先做 Finishi=false; 當(dāng)有足夠資源分配給進程時,再令 Finishi=true。(2)從進程集合中找到一個能滿足下述條件的進程: Finishi=false; Needi,jWorkj; 若找到, 執(zhí)行步驟(3), 否則,執(zhí)行步驟(4)。(3)當(dāng)進程 Pi 獲得資源后,可順利執(zhí)行,直至完成,并故應(yīng)執(zhí)行:出分配給它的資源,Workj=Worki+Allocatio

4、ni,j;Finishi= go to step 2;true;(4)如果所有進程的 Finishi=true 都滿足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。源代碼: #include #include #include #define False 0#define True 1Max100100=0;/各進程所需各類資源的最大需求 Avaliable100=0;/系統(tǒng)可用資源char name100=0;/資源的名稱 Allocation100100=0;/系統(tǒng)已分配資源 Need100100=0;/還需要資源 Request100=0;/請求資源向量 temp100=0;/存

5、放安全序列 Work100=0;/存放系統(tǒng)可提供資源 M=100;/作業(yè)的最大數(shù)為 100N=100;/資源的最大數(shù)為 100 void showdata()/顯示資源矩陣i,j;cout系統(tǒng)目前可用的資源Avaliable:endl; for(i=0;iN;i+)coutnamei ; coutendl;for (j=0;jN;j+)coutAvaliablej ;/輸出分配資源 coutendl;cout cout進程名for(j=0;j3;j+) for(i=0;iN;i+)MaxAllocationNeedendl;coutnamei ;cout;coutendl; for(i=0;i

6、M;i+) cout i for(j=0;jN;j+)coutMaxij ;cout;for(j=0;jN;j+) coutAllocationij ;cout;for(j=0;jN;j+) coutNeedij ; coutendl;changdata(i)/進行資源分配j; (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;forreturn 1;safe()/安全性算法i,k=0,m,apply,Finish100=0; j;flag

7、=0; Work0=Avaliable0; Work1=Avaliable1; Work2=Avaliable2; for(i=0;iM;i+)apply=0; for(j=0;jN;j+)if (Finishi=False&Needij=Workj) apply+;if(apply=N) for(m=0;mN;m+)Workm=Workm+Allocationim;/變分配數(shù) Finishi=True;tempk=i; i=-1;k+;flag+;for(i=0;iM;i+) if(Finishi=False)cout系統(tǒng)不安全endl;/不成功系統(tǒng)不安全 return -1;cout系統(tǒng)是

8、安全的!endl;/如果安全,輸出成功 cout分配的序列:;for(i=0;iM;i+)/輸出運行進程數(shù)組 couttempi;if(iM-1) cout;coutendl; return 0;void share()/利用char ch;i=0,j=0;ch=y;家算法對申請資源對進行判定cout請輸入要求分配的資源進程號(0-M-1i;/輸入須申請的資源號cout請輸入進程 i 申請的資源:endl; for(j=0;jN;j+)coutnamejRequestj;/輸入需要申請的資源for (j=0;jNeedij)/判斷申請是否大于需求,若大于則出錯cout進程 i申請的資源大于它需

9、要的資源; cout 分配不合理,不予分配!Avaliablej)/判斷申請是否大于當(dāng)前資源,若大于則/出錯cout進程i申請的資源大于系統(tǒng)現(xiàn)在可利用的資源; cout 分配出錯,不予分配!endl;ch=n; break;if(ch=y) changdata(i);/根據(jù)進程需求量變換資源 showdata();/根據(jù)進程需求量顯示變換后的資源safe();/根據(jù)進程需求量進行家算法判斷void addresour()/添加資源 n,flag;coutn;flag=N; N=N+n;for(i=0;in;i+)coutnameflag; coutAvaliableflag+;showdata

10、(); safe();void delresour char ming;i,flag=1;()/刪除資源coutming; for(i=0;iN;i+)if(ming=namei) flag=0;break;if(i=N)cout該資源名稱不存在,請重新輸入:;while(flag);for(j=i;jN-1;j+)namej=namej+1; Avaliablej=Avaliablej+1; N=N-1;showdata(); safe();void changeresour()/修改資源函數(shù)cout系統(tǒng)目前可用的資源Avaliable:endl;for(i=0;iN;i+)coutname

11、i:Avaliableiendl; cout輸入系統(tǒng)可用資源Avaliable:Avaliable0Avaliable1Avaliable2; cout經(jīng)修改后的系統(tǒng)可用資源為endl;for (k=0;kN;k+)coutnamek:Avaliablekendl; showdata();safe();void addpros()/添加作業(yè)flag=M;M=M+1;cout請輸入該作業(yè)的最打需求量Maxendl;for(i=0;iN;i+)coutnameiMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata(); safe();main()

12、/主函數(shù)i,j,number,choice,m,n,flag; char ming;cout* 資 源 管 理 系 統(tǒng) 的*endl;coutn;設(shè) 計 與 實 現(xiàn)N=n;for(i=0;in;i+)cout資源i+1ming;namei=ming; coutnumber; Avaliablei=number;coutendl;coutm;M=m;cout請輸入各進程的最大需求量(m*n矩陣)Max:endl; for(i=0;im;i+)for(j=0;jMaxij;doflag=0;cout 請輸入各進程已經(jīng)申請 的資源量 (m*n 矩陣)Allocation:endl;for(i=0;i

13、m;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1;Needij=Maxij-Allocationij;if(flag)cout申請的資源大于最大需求量,請重新輸入!n;while(flag);showdata();/顯示各種資源safe();/用 while(choice)家算法判定系統(tǒng)是否安全cout* coutcout cout cout cout cout家算法演示*endl;1:增加資源2:刪除資源3:修改資源4:分配資源5:增加作業(yè)0:離開endl; endl; endl; endl; endl; endl;cout*endl; coutchoice; switch(choice)case case1: addresour2: delresour changeresour share();break;();break;();break;();break;case case case case3:4:5:0:addpros();break;choice=0;break;default: cout請正確選擇功能號(0-5)!endl;break;return 1;運行效果輸入如下初始數(shù)據(jù):四、實驗總結(jié)家算法是避免死鎖的一種重要方法,通過編寫一個簡單的家算法程序,加深了解有關(guān)資源申請、避免死鎖

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論