




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統第七次實驗張焓1. 實驗名稱:項目:銀行家算法實現2. 實驗目的:初始化由用戶輸入數據,分別對可利用資源向量矩陣AVAILABLE、最大需求矩陣MAX、分配矩陣ALLOCATION、需求矩陣NEED賦值。銀行家算法銀行家算法在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統性能。在該方法中把系統的狀態分為安全狀態和不安全狀態,只要能使系統始終都處于安全狀態,便可以避免發生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。設進程cusneed提出請求REQUEST i,則銀行家算法按如下規則進行判斷。(1)如果
2、REQUEST cusneed i<= NEEDcusneedi,則轉(2);否則,出錯。(2)如果REQUEST cusneed i<= AVAILABLEi,則轉(3);否則,等待。(3)系統試探分配資源,修改相關數據:AVAILABLEi-=REQUESTcusneedi;ALLOCATIONcusneedi+=REQUESTcusneedi;NEEDcusneedi-=REQUESTcusneedi;(4)系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復原狀,進程等待。銀行家算法安全性檢查算法(1)設置兩個工作向量Work=AVAILABLE;FINI
3、SH(2)從進程集合中找到一個滿足下述條件的進程,FINISH=false;NEED<=Work;如找到,執行(3);否則,執行(4)(3)設進程獲得資源,可順利執行,直至完成,從而釋放資源。Work=Work+ALLOCATION;Finish=true;GOTO 2(4)如所有的進程Finish= true,則表示安全;否則系統不安全。3. 實驗方法(1) 首先編寫客戶進程:包含需要用到的頭文件,聲明一些數據結構為全局變量用于紀錄系統(資源或進程)的當前狀態:#include<iostream>#include<string.h> #include<st
4、dio.h> using namespace std;#define False 0 #define True 1 int Max100100 = 0 ;/各進程所需各類資源的最大需求int Avaliable100 = 0 ;/系統可用資源char name100 = 0 ;/資源的名稱int Allocation100100 = 0 ;/系統已分配資源int Need100100 = 0 ;/還需要資源int Request100 = 0 ;/請求資源向量int temp100 = 0 ;/存放安全序列int Work100 = 0 ;/存放系統可提供資源int M = 100;/作
5、業的最大數為100int N = 100;/資源的最大數為100 (2) 定義showdata()函數用于記錄當前系統狀態的數據結構的內容:void showdata()/顯示資源矩陣int i, j;cout << "系統目前可用的資源Avaliable:" << endl;for (i = 0; i < N; i+)cout << namei << " "cout << endl;for (j = 0; j < N; j+)cout << Avaliablej <
6、;< " "/輸出分配資源cout << endl;cout << "tMaxtAllocationtNeed" << endl;cout << "進程名: "for (j = 0; j < 3; j+) for (i = 0; i < N; i+)cout << namei << " " cout << "t"cout << endl;for (i = 0; i < M; i
7、+) cout << " "cout << " " << i << " "for (j = 0; j < N; j+)cout << Maxij << " "cout << "t"for (j = 0; j < N; j+)cout << Allocationij << " "cout << "t"for (j = 0; j
8、< N; j+)cout << Needij << " "cout << endl;(3) 定義函數changdata(int),進行資源分配后的狀態更新,用于資源申請函數中資源申請成功后的狀態更新。其中,函數參數i為進程編號:int changdata(int i)/進行資源分配 int j;for (j = 0; j<M; j+)Avaliablej = Avaliablej - Requestj;Allocationij = Allocationij + Requestj;Needij = Needij - Reques
9、tj;return 1;(4) 安全性檢測函數,用于判斷當前計算機系統是否處于安全狀態,并輸出進程根據銀行家算法得出的運行順序:int safe()/安全性算法 int i, k = 0, m, apply, Finish100 = 0 ;int j;int flag = 0;Work0 = Avaliable0;Work1 = Avaliable1;Work2 = Avaliable2;for (i = 0; i<M; i+)apply = 0;for (j = 0; j < N; j+)if (Finishi = False&&Needij <= Work
10、j)apply+;if (apply = N)for (m = 0; m < N; m+)Workm = Workm + Allocationim;/變分配數Finishi = True;tempk = i;i = -1;k+;flag+;for (i = 0; i<M; i+)if (Finishi = False)cout << "系統不安全" << endl;/不成功系統不安全return - 1;cout << "系統是安全的!" << endl;/如果安全,輸出成功cout <&
11、lt; "分配的序列:"for (i = 0; i<M; i+)/輸出運行進程數組cout << tempi;if (i<M - 1) cout << "->"cout << endl;return 0;(5) 定義資源申請函數,用于錄入下一時刻哪個進程對計算機系統申請哪些資源,并且會對該申請進行判斷;如果當前可用資源足以滿足申請(不大于當前可用資源,不大于目前所需要的資源),則給予,如不能滿足,則不分配并提醒用戶,并在滿足進程申請的情況下進行安全性判定:void share()/可用此函數詢問需要為
12、某進程分配哪些資源,并利用銀行家算法對申請資源的可行性對進行判定char ch;int i = 0, j = 0;ch = 'y'cout << "請輸入要求分配的資源進程號(0 - " << M - 1 << ") :"cin >> i;/輸入須申請的資源號cout << "請輸入進程" << i << "申請的資源:" << endl;for (j = 0; j<N; j+)cout <&
13、lt; namej << ":"cin >> Requestj;/輸入需要申請的資源for (j = 0; j<N; j+)if (Requestj>Needij)/判斷申請是否大于需求,若大于則出錯cout << "進程" << i << "申請的資源大于它需要的資源"cout << "分配不合理,不予分配!" << endl;ch = 'n'break;elseif (Requestj>Aval
14、iablej)/判斷申請是否大于當前資源,若大于則/出錯cout << "進程" << i << "申請的資源大于系統現在可利用的資源"cout << "分配出錯,不予分配!" << endl;ch = 'n'break;if (ch = 'y')changdata(i);/根據進程需求量變換資源showdata();/根據進程需求量顯示變換后的資源safe();/根據進程需求量進行銀行家算法判斷(6) 資源增加函數,為計算機系統增加新的種類資
15、源,并指定其數量,并展示系統狀態、進行安全性檢測:void addresources()/添加資源int n, flag;cout << "請輸入需要添加資源種類的數量:"cin >> n;flag = N;N = N + n;for (int i = 0; i<n; i+)cout << "名稱:"cin >> nameflag;cout << "數量:"cin >> Avaliableflag+;showdata();safe();(7) 資源刪除函數,
16、為計算機系統刪除某種種類資源,并展示系統狀態、進行安全性檢測:void delresources() /刪除資源char ming;int i, flag = 1;cout << "請輸入需要刪除的資源名稱:"do cin >> ming;for (i = 0; i<N; i+)if (ming = namei)flag = 0;break;if (i = N)cout << "該資源名稱不存在,請重新輸入:" while (flag);for (int j = i; j<N - 1; j+)namej =
17、 namej + 1;Avaliablej = Avaliablej + 1;N = N - 1;showdata();safe();(8) 資源修改函數,為計算機系統修改所有資源的數量,并展示系統狀態、進行安全性檢測:void changeresources() /修改資源函數cout << " 系統目前可用的資源Avaliable:" << endl;for (int i = 0; i<N; i+)cout << namei << ":" << Avaliablei <<
18、endl;cout << "輸入系統可用資源Avaliable:" << endl;for (int i = 0; i < N; i+)cin >> Avaliablei;cout << "經修改后的系統可用資源為" << endl;for (int k = 0; k<N; k+)cout << namek << ":" << Avaliablek << endl;showdata();safe();(9) 作業增加
19、函數,為計算機系統增加作業進程,并指定其最大需求量,并展示系統狀態、進行安全性檢測:void addprocess() /添加作業int flag = M;M = M + 1;cout << "請輸入該作業的最打需求量Max" << endl;for (int i = 0; i<N; i+)cout << namei << ":"cin >> Maxflagi;Needflagi = Maxflagi - Allocationflagi;showdata();safe();(10) 主函數
20、,首先,將資源名稱、數量,進程的最大需求量、當前占用量進行定義:int main()int i, j, number, choice, m, n, flag;char ming;cout << "*資源管理系統的設計與實現*" << endl;cout << "請首先輸入系統可供資源種類的數量:"cin >> n;N = n;for (i = 0; i<n; i+)cout << "資源" << i + 1 << "的名稱:"
21、cin >> ming;namei = ming;cout << "資源的數量:"cin >> number;if (number < 0 | number>100)cout << "錯誤輸入,請輸入0-100內的常數n"Avaliablei = number;cout << endl;cout << "請輸入作業的數量:"cin >> m;M = m;cout << "請輸入各進程的最大需求量(" <
22、< m << "*" << n << "矩陣)Max:" << endl;for (i = 0; i<m; i+)for (j = 0; j<n; j+)cin >> Maxij;do flag = 0;cout << "請輸入各進程已經申請的資源量(" << m << "*" << n << "矩陣)Allocation:" << endl;fo
23、r (i = 0; i<m; i+)for (j = 0; j<n; j+)cin >> Allocationij;if (Allocationij>Maxij)flag = 1;Needij = Maxij - Allocationij;if (flag)cout << "錯誤:申請的資源大于最大需求量,請重新輸入!n" while (flag);(11) 隨后更新可用資源量,并展示系統狀態、進行安全性檢測:for (i = 0; i < n; i+)for (j = 0; j < m; j+)Avaliablei =
24、 Avaliablei - Allocationji;if (Avaliablei < 0)cout << "錯誤:申請的資源大于系統資源總量!n"exit(EXIT_FAILURE);showdata();/顯示各種資源safe();/用銀行家算法判定系統是否安全(12) 進入功能選擇菜單,并可按照提示進一步執行其他操作:choice = 1;while (choice)cout << "*銀行家算法演示*" << endl;cout << "1:增加資源" << e
25、ndl;cout << "2:刪除資源" << endl;cout << "3:修改資源" << endl;cout << "4:分配資源" << endl;cout << "5:增加作業" << endl;cout << "0:離開" << endl;cout << "*" << endl;cout << "請選擇功能號:"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河溝防溺水護欄施工方案
- 隧道維修施工方案下載
- 電纜支架整修方案范本
- 江海職業技術學院《商場設計》2023-2024學年第二學期期末試卷
- 重慶工程學院《混凝土結構基本原理A》2023-2024學年第一學期期末試卷
- 武漢信息傳播職業技術學院《高級細胞生物學》2023-2024學年第二學期期末試卷
- 2025租賃土地合同范本
- 河南降噪墻施工方案
- 文華學院《工業知識概論》2023-2024學年第二學期期末試卷
- 山西醫科大學《參展商實務》2023-2024學年第二學期期末試卷
- 幼兒園小班教案《單手拍球》含反思
- 非法捕撈與水生動植物保護規定
- JIT精益生產(最全最好的精益培訓教材)
- 起重吊裝作業安全檢查表
- 既有建筑混凝土結構改造設計規范DBJ-T 15-182-2020
- 如何在企業文化中樹立自信心
- 羽毛球正手發高遠球說課稿
- cecs31-2017鋼制電纜橋架工程設計規范
- 改裝店管理制度
- 2024年江蘇國信集團有限公司招聘筆試參考題庫含答案解析
- 醫療器械生產企業質量控制與成品放行指南
評論
0/150
提交評論