




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上實驗四 銀行家算法(一)教學要求掌握處理死鎖的方法,掌握銀行家算法的實現(二)知識點提示死鎖的概念,死鎖產生的原因和條件,處理死鎖的方法,銀行家算法,安全狀態和不安全狀態,安全性算法(三)教學內容銀行家算法的模擬實現實驗步驟:(1)定義數據結構:allocation; /分配矩陣available; /可用資源向量need; /需求矩陣request; /資源請求向量(2)定義函數:void bank_arithmetic(int i, int request) /銀行家算法 void isSafe( ); /安全性算法 主函數中對可用資源向量,分配矩陣和需求矩陣進行
2、初始化(輸入數據參照課本P113的例題),輸入請求資源的進程編號以及請求的資源向量,通過調用銀行家算法判斷是否可以把資源分配給請求資源的進程。(3)銀行家算法的執行步驟:設Requesti是進程Pi的請求向量。若Requestij=k,表示進程Pi需要k個j類資源。當Pi發出資源請求后,系統按下述步驟進行檢查: 若RequestiNeedi ,則轉;否則,認為出錯。因為它所需要的資源數已超過它所宣布的最大值。 若RequestiAvailable,則轉;否則,表示系統中尚無足夠的資源,Pi必須等待。 系統試探把要求的資源分配給進程Pi,并修改下面數據結構中的數值。 Available=Avai
3、lable Requesti Allocationi = Allocationi + Requesti Needi = Needi Requesti 系統執行安全性算法,檢測此次資源分配后,系統是否處于安全狀態。若安全,才正式將資源分給進程Pi;否則,將試探分配作廢,恢復資源狀態,讓Pi等待。(4)安全性算法的執行步驟: 設置兩個向量work和finish工作向量work,它表示系統可提供給進程繼續運行的各類資源數,含有m個元素,其初始值為:workj=availablej。完成向量finish,它表示系統是否有足夠資源使進程推進完成,開始執行安全性算法時,Finishi=false;當有足夠
4、資源分配給進程Pi,Pi推進完成時,令Finishi=true。 從進程集合中找到一個進程,其滿足: Finishi=false Needi,j Workj 如找到則執行步驟 ,找不到則執行步驟。 當進程Pi獲得資源后,便可以向前推進,直至完 成,并釋放出分配給它的全部資源,故應執行: Workj=Workj+Allocationi,j; Finishi=true; 執行步驟。 若所有進程的Finish都為true,則系統為安全狀態;否則,系統為不安全狀態。實驗程序:#include <stdio.h>#define M 3#define N 5int available=3,3,
5、2;int allocationNM=0,1,0,2,0,0,3,0,2,2,1,1,0,0,2;int needNM=7,4,3,1,2,2,6,0,0,0,1,1,4,3,1;void banker_arithmetic(int i,int request)int isSafe();int j,k,l;printf("進程P%d請求資源,資源請求向量為: n",i);for(j=0;j<M;j+)printf("%d ",requestj);printf("n");j=0;while(j < M)if(requestj
6、<=needij) j+;elsebreak;if(j=M)k=0;while(k < M)if(requestk<=needik)k+;elsebreak;if(k=M)for(l=0;l<M;l+)availablel=availablel-requestl;allocationil=allocationil+requestl;needil=needil-requestl;if(isSafe()printf("分配是安全的,可以把資源分配給p%dn",i);elseprintf("分配是不安全的,不能把資源分配給P%dn",i
7、);for(l=0;l<M;l+)availablel=availablel+requestl;allocationil=allocationil-requestl;needil=needil+requestl;printf("Allocation:");for(j=0;j<N;j+)for(k=0;k<M;k+)printf("%d ",allocationjk); printf("n");printf("Need:");for(j=0;j<N;j+)for(k=0;k<M;k+)p
8、rintf("%d ",needjk); printf("n");printf("Available:n");for(j=0;j<M;j+)printf("%d ",availablej);printf("n");i+;int isSafe()int workM;int i,j,k,l=0,a=0;int finish=0,0,0,0,0;for(i=0;i<M;i+)worki=availablei;while(l<N|a < N) i=0;while(i<N)
9、if(finishi=0) j=0; while(j<M) if(needij<=workj) j+; else break; if(j=M) printf("P%d ",i); for(k=0;k<M;k+) workk=workk+allocationik; printf("n"); finishi=1; l+; i+;a+;for(i=0;i<N;i+)if(finishi=0)return 0;return 1;int main()int i=1;int request=1,0,2; banker_arithmetic(i,request);return 0;實驗結果:進程p1請求資源,資源請求向量為:1 0 2p1p3p4p0p2分配是安全的,可以把資源分配給p1Allocation:0 1 03 0 23 0 22 1 10 0 2Need:7 4 30 2 06 0 00 1 14 3 1Available:2 3 0Press any key to continue.(四)思考題1、死鎖產生的原因是什么?死鎖產生的原因有競爭不可搶占型資源引起死鎖 競爭可消耗資源引起死鎖 進程推進順序不當引發死鎖2、處理死鎖的方法有哪些?預防死鎖:通過設置某些限制條件,去破壞產生死鎖的四個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 就業宣講面試題及答案
- 山東能源考試題及答案
- tanrry招聘面試題及答案
- 醫院員工教育培訓
- 經濟員考試題及答案
- 歷史自考試題及答案
- 涉外業務面試題及答案
- java查詢面試題及答案
- 海關客服面試題及答案
- 教育與培訓行業:教育行業大數據應用與隱私保護研究報告
- ESG趨勢下企業財務管理新挑戰
- 2024年公安機關理論考試題庫500道(基礎題)
- 2024年11月-礦山隱蔽致災因素普查
- DBJ51T 163-2021 成都軌道交通設計防火標準
- 加熱爐安全操作規程培訓課件
- 學校紅十字會工作手冊
- 特種設備隱患排查與整治
- 2024年人教版七年級下冊生物期末檢測試卷及答案
- 藥劑師知識科普大賽單選題100道及答案解析
- 荊州市國土空間總體規劃(2021-2035年)
- 2024年變電設備檢修工(高級技師)技能鑒定理論考試題庫(含答案)
評論
0/150
提交評論