銀行家算法實驗報告_第1頁
銀行家算法實驗報告_第2頁
銀行家算法實驗報告_第3頁
銀行家算法實驗報告_第4頁
銀行家算法實驗報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上南華大學(xué)計算機(jī)學(xué)院實驗報告 ( 2018學(xué)年春季學(xué)期 )課程名稱 操作系統(tǒng)實驗名稱 銀行家算法姓名學(xué)號專業(yè)網(wǎng)絡(luò)工程班級1班地點教師曹軍一、實驗題目: 系統(tǒng)中有 m 個同類資源被 n 個進(jìn)程共享,每個進(jìn)程對資源的最大需求數(shù)分別為 S1, S2,Sn,且 Max(Si)<=m, (i=1,2,n)。進(jìn)程可以動態(tài)地申請資源和釋放資源。編寫一個程序, 實現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進(jìn)程而不會死鎖時,就分配之。否則,推遲分配,并顯示適當(dāng)?shù)男畔?。二、實驗?zāi)康模?當(dāng)系統(tǒng)的總資源數(shù) m 小于或等于所有進(jìn)程對資源的最大需求 S n n i i =1 時,就可能產(chǎn)生 死鎖。

2、死鎖會引起計算機(jī)系統(tǒng)的癱瘓。銀行家算法是在實現(xiàn)資源分配時避免死鎖的一個著名 算法,該算法是在能確保系統(tǒng)處于安全狀態(tài)時才把資源分配給申請者。通過本實驗進(jìn)一步理解死鎖的概念,并選擇一個算法來避免死鎖。 進(jìn)一步理解利用銀行家算法避免死鎖的問題; 在了解和掌握銀行家算法。理解和掌握安全序列、安全性算法。三、實驗內(nèi)容及要求:1、設(shè)計進(jìn)程對各類資源最大申請表示及初值的確定。2、設(shè)定系統(tǒng)提供資源的初始狀況。3、設(shè)定每次某個進(jìn)程對各類資源的申請表示。4、編制程序,依據(jù)銀行家算法,決定其資源申請是否得到滿足。5、顯示資源申請和分配時的變化情況。四、實驗過程:程序要求:1. 判斷當(dāng)前狀態(tài)是否安全,如果安全,給出安

3、全序列;如果不安全給出理由。2. 對于下一個時刻T1,某個進(jìn)程Pk會提出請求Request(R1, ,Rm),判斷分配給P k進(jìn)程請求的資源之后是否安全。如果安全,給出安全序列;如果不安全給出理由。3. 輸入:進(jìn)程個數(shù)n,資源種類m,T0時刻各個進(jìn)程的資源分配情況(可以運行輸入,也可以在程序中設(shè)置)。4. 輸出:如果安全輸出安全的進(jìn)程序列,不安全提示信息。進(jìn)程調(diào)度的實現(xiàn)過程:1. 變量初始化;2. 接收用戶輸入n,m,(輸入或者默認(rèn)的)Allocationij,Need ij;3. 按照銀行家算法判斷當(dāng)前狀態(tài)安全與否,安全給出安全序列,不安全給出提示;4. 如果安全,提示用戶輸入下一時刻進(jìn)程P

4、k的資源請求Request(R1, ,Rm);5. 如果不安全或者無新請求則退出。源代碼:#include <stdio.h>#include <iostream>#include <iomanip>#include <fstream>#include <windows.h>using namespace std;#define MaxNumber 20static int n;static int m;static int AvailableMaxNumber;static int MaxMaxNumberMaxNumber;sta

5、tic int AllocationMaxNumberMaxNumber;static int NeedMaxNumberMaxNumber;static int RequestMaxNumber;static int SafeOrderMaxNumber;static bool FinishMaxNumber;static bool isDisplayAvaliable = true;static char sourceName = 'A','B','C','D','E','F','G&#

6、39;,'H','I','J','K' /資源名稱void input();bool isSystemSafe();void bankerAlgorithm();void display();int main() input(); bankerAlgorithm(); system("pause"); return 0;void input() /int n=6; /int m=3; ifstream inData; inData.open("C:/476.txt"); /讀取數(shù)據(jù) inDa

7、ta>>n; inData>>m; for (int i=0;i<m;i+) inData>>Availablei; for (int i=0;i<n;i+) for (int j=0;j<m;j+) inData>>Allocationij; for (int i=0;i<n;i+) for (int j=0;j<m;j+) inData>>Needij; for (int i=0;i<n;i+) for (int j=0;j<m;j+) Maxij = Needij + Allocatio

8、nij; cout<<"*程序開始*"<<endl; display();bool isSystemSafe() int workMaxNumber; for (int i=0;i<m;i+) /m是資源個數(shù)A,B,C worki = Availablei; for (int i=0;i<n;i+) /n是進(jìn)程個數(shù) Finishi = false; SafeOrderi = -1; /初始化安全序列 int FinishNumebr = 0; int isSafe; int i =0,j; while(i<n) isSafe = 0

9、; for(j = 0;j<m;j+) if (Finishi=false && Needij<=workj) isSafe+; else break; if (isSafe = m) /當(dāng)且僅當(dāng)進(jìn)程對應(yīng)的所有資源的數(shù)量都滿足的時候才成立 Finishi = true; SafeOrderFinishNumebr = i; FinishNumebr+; for (j = 0;j<m;j+) workj += Allocationij; i=0; /找到滿足條件的進(jìn)程后,從頭開始再進(jìn)行尋找 else i+; if (FinishNumebr=n) cout<

10、;<"*Safe!*"<<endl; cout<<"對應(yīng)的安全序列為:"<<endl; cout<<"P"<<SafeOrder0; for (int i=1;i<n;i+) cout<<"->"<<"P"<<SafeOrderi ; cout<<endl; return true; cout<<"*unSafe!*"<<end

11、l; return false;void bankerAlgorithm() int chooseProcess; char isContinue; while(true) /設(shè)置兩個布爾變量:判別請求向量是等待還是系統(tǒng)已經(jīng)不再分配新的資源 bool isRequestNeedOK = true; bool isRequestAvailableOK = true; cout<<"請輸入要申請資源的進(jìn)程號(注意:第一個進(jìn)程為0號,第二個進(jìn)程為1號,以此類推?。?quot;<<endl<<"chooseProcess=" cin&g

12、t;>chooseProcess; cout<<"請輸入進(jìn)程所請求的各類資源的數(shù)量:(A B C)"<<endl; for (int i=0;i<m;i+) cin>>Requesti; /輸入錯誤判斷 for (int i=0;i<m;i+) if (Requesti>NeedchooseProcessi) cout<<"*當(dāng)前運行結(jié)果*"<<endl; cout<<"您輸入的請求進(jìn)程所對應(yīng)的資源數(shù)量超過最大需求量,請重新輸入!"<

13、<endl; / cout<<"*"<<endl; isRequestNeedOK = false; continue; if (Requesti>Availablei) cout<<"*當(dāng)前運行結(jié)果*"<<endl; cout<<"您輸入的請求進(jìn)程的資源數(shù)量超過系統(tǒng)所供給的最大資源數(shù)量pi必須等待,請重新輸入!"<<endl; / cout<<"*"<<endl; isRequestAvailableOK

14、= false; continue; for (int j = 0;j<m;j+) Availablej -=Requestj; AllocationchooseProcessj += Requestj; NeedchooseProcessj -= Requestj; cout<<"*"<<endl; if (!isSystemSafe() /如何不滿足系統(tǒng)安全性算法,將本次試探作廢,恢復(fù)到原來的值 for (int j = 0;j<m;j+) Availablej +=Requestj; AllocationchooseProcessj

15、 -= Requestj; NeedchooseProcessj += Requestj; /當(dāng)請求向量Request滿足和Need、Available的關(guān)系時,證明系統(tǒng)已不能再分配資源 if (isRequestAvailableOK&&isRequestNeedOK) cout<<"*當(dāng)前運行結(jié)果*"<<endl; cout<<"當(dāng)前可利用資源已經(jīng)不能滿足任何進(jìn)程的需求,故系統(tǒng)進(jìn)入不安全狀態(tài),系統(tǒng)不分配資源!"<<endl; cout<<"*"<&l

16、t;endl; cout<<"嘗試根據(jù)p(i)發(fā)出的請求向量后的資源情況:"<<endl; display(); cout<<"*"<<endl; cout<<"是否繼續(xù)輸入請求變量request進(jìn)行測試,是(Y),否(N)"<<endl; cout<<"isContinue = " cin>>isContinue; if (isContinue='Y'|isContinue='y') /

17、input();/實現(xiàn)多次請求(保留上一次請求的狀態(tài)) continue; else if (isContinue='N'|isContinue='n') cout<<"*程序結(jié)束*"<<endl; break; void display() char processName = '1','2','3','4','5','6' cout<<"-"<<endl; cout<&l

18、t;"當(dāng)前進(jìn)程個數(shù)為 n = "<<n<<endl; cout<<"當(dāng)前資源個數(shù)為 m = "<<m<<endl; cout<<"系統(tǒng)可利用資源數(shù)情況如下:"<<endl; for (int i=0;i<m;i+) cout<<setw(5)<<sourceNamei<<" " cout<<endl; cout<<setw(5)<<Available0&l

19、t;<" " cout<<setw(5)<<Available1<<" " cout<<setw(5)<<Available2<<" "<<endl; cout<<"-"<<endl; cout<<"processName" cout<<setw(10)<<"Max"<<" " cout<&

20、lt;setw(15)<<"Allocation"<<" " cout<<setw(10)<<"Need"<<" " if (isDisplayAvaliable) cout<<setw(15)<<"available" cout<<endl; cout<<setw(15); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<setw(5); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<setw(10); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); if (isDisplayAvaliable) cout<<setw(5); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<

溫馨提示

  • 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

提交評論