




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實 驗 報 告題 目名 稱銀行家算法的模擬實現院 系信息工程學院班 級完成時間指導老師本次實驗成績組長聯系電話郵件地址組員(姓名,學號)主要任務程序算法的編寫、實現、運行調試組員(姓名,學號)主要任務實驗報告的完成組員(姓名,學號)主要任務實驗報告的完成組員(姓名,學號)主要原理及所參考的資料(包括實驗內容及條件)銀行家算法原理:我們可以把操作系統看作是銀行家,操作系統管理的資源相當于銀行家管理的資金,進程向操作系統請求分配資源相當于用戶向銀行家貸款。 為保證資金的安全,銀行家規定: (1) 當一個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客; (2) 顧客可以分期貸款,但貸款
2、的總數不能超過最大需求量; (3) 當銀行家現有的資金不能滿足顧客尚需的貸款數額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間里得到貸款; (4) 當顧客得到所需的全部資金后,一定能在有限的時間里歸還所有的資金. 操作系統按照銀行家制定的規則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程本次申請的資源數是否超過了該資源所剩余的總量。若超過則拒絕分配資源,若能滿足則按當前的申請量分配資源,否則也要推遲分配。主要參考書:計算機操作系統第三版 西安
3、電子科技大學出版社 湯子瀛主編主要算法流程圖和具體實驗步驟主要算法流程圖和具體實驗步驟算法流程圖:附錄1 - 銀行家算法流程圖附錄2 - 安全性算法流程圖實驗步驟:一銀行家算法進程i發出請求資源申請, (1)如果Request j<=needi,j,轉向步驟(2),否則認為出錯,因為他所需要的資源數已經超過它所宣布的最大值。(2)如果:Request ij<=availablei,j,轉向步驟(3),否則表示尚無足夠資源,進程i需等待。(3)若以上兩個條件都滿足,則系統試探著將資源分配給申請的進程,并修改下面數據結構中的數值:Availablei,j= Availablei,j-
4、Request j;Allocationij= Allocationij+ Request j;needij= needij- Request j;(4)試分配后,執行安全性檢查,調用check()函數檢查此次資源分配后系統是否處于安全狀態。若安全,才正式將資源分配給進程;否則本次試探分配作廢,恢復原來的資源分配狀態,讓該進程等待。(5)用dowhile 循環語句實現輸入字符y/n判斷是否繼續進行資源申請。二安全性檢查算法(check()函數)(1)設置兩個向量:工作向量Work,它表示系統可提供給進程繼續運行所需的各類資源數目,在執行安全性算法開始時,Work= Available。工作向量
5、Finish,它表示系統是否有足夠的資源分配給進程,使之運行完成。開始時先做Finishi=false;當有足夠的資源分配給進程時,再令Finishi=true。(2)在進程中查找符合以下條件的進程:條件1:Finishi=false;條件2:needij<=Workj若找到,則執行步驟(3)否則,執行步驟(4)(3)當進程獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:Workj= Workj+ Allocationij;Finishi=true;goto step (2);(4)如果所有的Finishi=true都滿足,則表示系統處于安全狀態,否則,處于不安全狀態
6、。程序源代碼及調試結果附錄3 - 程序源代碼附錄4 - 程序運行調試結果實 驗 心 得本次實驗我負責程序的編寫方面,雖然基礎一般,但是我仍然堅持花了三天的時間終于把程序拿下,這是讓自己很欣慰的事,本次實驗不僅讓我對銀行家算法有了更深入的理解,并且還讓我的編程能力得到了較大提高,希望能有更多這樣的機會,借此較好的鍛煉自己,從而更好的掌握和運用自己的專業知識,提高能力水平。本次實驗相對于c基礎并不好的我有一定的難度,所以我在程序方面所做的較少。而對銀行家算法了解的比較透徹,在程序設計的原理和流程圖方面做的工作較多,本次實驗我學到的東西好多,也知道自己在很多方面的不足,雖然我給自己的發展方向定位為硬
7、件方向,但是對C語言還是要進一步的學習。 YNYNYNYN系統初始化輸入進程個數no1輸入資源類數no2輸入進程最大需求矩陣Max、已分配矩陣Allocation和可利用資源矩陣Available打印輸出此時資源分配情況表Need=Max-Allocation輸入欲申請資源進程號輸入是否合法輸入該進程申請的資源量Request>Need?繼續分配(Y)?or退出(N)?Request>Available?預分配調用check()函數進行安全性檢查退出系統附錄 1銀行家算法流程圖附錄 2安全性算法流程圖調用check()函數work=availablefinish=false nee
8、d<=workfinish=false ?work=work+allocationfinish=trueYN所有進程的finish=true?YN輸出安全序列,并打印出當前資源分配情況輸出提示:系統不安全調用結束附錄3程序源代碼:#include<string.h>#include<stdio.h>#include<stdlib.h># define m 50# define false 0#define true 1 int no1; /進程數int no2; /資源數int r;int allocationmm,needmm,availablem,
9、maxmm; char name1m,name2m; /定義全局變量void main()void check();void print();int i,j,p=0,q=0;char c;int requestm,allocation1mm,need1mm,available1m;printf("*n");printf("* 銀行家算法的設計與實現 *n"); printf("*n");printf("請輸入進程總數:n");scanf("%d",&no1);printf("請
10、輸入資源種類數:n");scanf("%d",&no2); printf("請輸入Max矩陣:n");for(i=0;i<no1;i+)for(j=0;j<no2;j+)scanf("%d",&maxij); /輸入已知進程最大資源需求量printf("請輸入Allocation矩陣:n");for(i=0;i<no1;i+)for(j=0;j<no2;j+)scanf("%d",&allocationij); /輸入已知的進程已分配的資
11、源數 for(i=0;i<no1;i+)for(j=0;j<no2;j+)needij=maxij-allocationij; /根據輸入的兩個數組計算出need矩陣的值 printf("請輸入Available矩陣n");for(i=0;i<no2;i+)scanf("%d",&availablei); /輸入已知的可用資源數print(); /輸出已知條件check(); /檢測T0時刻已知條件的安全狀態if(r=1) /如果安全則執行以下代碼do printf("n請輸入請求資源的進程號(04):n")
12、;for(j=0;j<=no2;j+)scanf("%d",&i);if(i>=no1)printf("輸入錯誤,請重新輸入:n"); continue; else break;printf("n請輸入該進程所請求的資源數requestj:n");for(j=0;j<no2;j+)scanf("%d",&requestj);for(j=0;j<no2;j+)if(requestj<=needij) p=0; /判斷請求是否超過該進程所需要的資源數if(p)printf(
13、"請求資源超過該進程資源需求量,請求失敗!n");elsefor(j=0;j<no2;j+)if(requestj<=availablej) q=0; /判斷請求是否超過可用資源數if(q) printf("沒有做夠的資源分配,請求失敗!n");else /請求滿足條件for(j=0;j<no2;j+) available1j=availablej; allocation1ij=allocationij;need1ij=needij; /保存原已分配的資源數,仍需要的資源數和可用的資源數availablej=availablej-req
14、uestj; allocationij=allocation+requestj;needij=needij-requestj; /系統嘗試把資源分配給請求的進程print();check(); /檢測分配后的安全性if(r=0) /如果分配后系統不安全for(j=0;j<no2;j+)availablej=available1j; allocationij=allocation1ij; needij=need1ij; /還原已分配的資源數,仍需要的資源數和可用的資源數printf("返回分配前資源數n");print();printf("n你還要繼續分配嗎?
15、Y or N ?n"); /判斷是否繼續進行資源分配c=getchar();while(c='y'|c='Y');void check() /安全算法函數int k,f,v=0,i,j;int workm,am;int finishm;r=1;for(i=0;i<no1;i+)finishi=false; / 初始化進程均沒得到足夠資源數并完成for(i=0;i<no2;i+) worki=availablei;/worki表示可提供進程繼續運行的各類資源數k=no1;dofor(i=0;i<no1;i+)if(finishi=fal
16、se)f=1;for(j=0;j<no2;j+)if(needij>workj)f=0;if(f=1) /找到還沒有完成且需求數小于可提供進程繼續運行的資源數的進程finishi=true;av+=i; /記錄安全序列號for(j=0;j<no2;j+)workj+=allocationij; /釋放該進程已分配的資源k-; /每完成一個進程分配,未完成的進程數就減1while(k>0);f=1;for(i=0;i<no1;i+) /判斷是否所有的進程都完成if(finishi=false) f=0;break;if(f=0) /若有進程沒完成,則為不安全狀態pr
17、intf("系統處在不安全狀態!");r=0;elseprintf("n系統當前為安全狀態,安全序列為:n");for(i=0;i<no1;i+)printf("p%d ",ai); /輸出安全序列void print() /輸出函數int i,j;printf("n");printf("*此時刻資源分配情況*n");printf("進程名/號 | Max | Allocation | Need |n"); for (i = 0; i < no1; i+)printf(" p%d/%d ",i,i); for (j = 0; j < no2; j+) printf("%d ",maxij);for (j = 0; j < no2; j+) printf(" %d ",alloc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 濱江就業協議書
- 通信設備購銷合同協議
- 早教培訓協議書
- 畢業友誼協議書
- 產品采購與質量保證協議條款書
- 農業資源循環利用技術應用協議條款
- 建筑行業居間合同
- 個人物品質押借款協議書
- 農資購銷合同封面
- 合作運營發展協議
- 2023中華護理學會團體標準-注射相關感染預防與控制
- 去乙酰毛花苷注射液
- DB 34T∕ 2205-2014 大中型水閘工程自動化系統質量
- 弱電智能化基礎知識題庫100道(含答案)
- 第二課 只有社會主義才能救中國 課件-高考政治一輪復習統編版必修一中國特色社會主義
- 三年級數學計算題300道
- 山東省臨沂市2024年中考英語真題【附真題答案】
- 長安歷史文化概論智慧樹知到答案2024年西安電子科技大學
- 2024年典型事故案例警示教育手冊15例
- COCA20000詞匯 增強版表格
- 遺傳因素導致近視眼病進展
評論
0/150
提交評論