版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (規(guī)劃設(shè)計)接線類陶瓷項目可行性研究報告
- 吹膜機(jī)建設(shè)項目可行性分析報告
- 熱水器生產(chǎn)加工項目可行性研究報告
- 玻璃燈罩項目可行性研究報告
- 2024年砂石供應(yīng)合同范本協(xié)議書
- 2024-2030年新版中國熱炎寧合劑項目可行性研究報告
- 2024-2030年新版中國不銹車件項目可行性研究報告
- 2024-2030年撰寫:中國福辛普利片項目風(fēng)險評估報告
- 2024-2030年撰寫:中國(水立方)系列直聯(lián)式離心泵項目風(fēng)險評估報告
- 國開(內(nèi)蒙古)2024年《漢語中的中國文化》形成性考核1-3終結(jié)性考核答案
- 司法臨床司法鑒定培訓(xùn)
- 第47屆世界技能大賽江蘇省選拔賽計算機(jī)軟件測試項目樣題
- 勞務(wù)合同保證金合同模板
- 小學(xué)足球課課件
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 4-07-05-04 消防設(shè)施操作員 人社廳發(fā)201963號
- 七年級上冊語文第三單元知識速記清單(統(tǒng)編版2024)
- 2023-2024學(xué)年全國初中七年級下地理人教版期末考試試卷(含答案解析)
- 全過程工程咨詢項目部管理制度
- 繼電保護(hù)新安裝檢驗、定期檢驗及驗收細(xì)則
評論
0/150
提交評論