版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告題目: 銀行家算法的模擬實現(xiàn) 專業(yè)計算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級計算機(jī)131學(xué)號指導(dǎo)教師完成日期2015.7.10信 息 工 程 學(xué) 院15操作系統(tǒng)課程設(shè)計(2015)目 錄1 概述21.1 設(shè)計目的21.2 設(shè)計要求22 設(shè)計原理22.1 銀行家算法22.2 安全性算法33 概要設(shè)計33.1 功能結(jié)構(gòu)33.2 模塊劃分34 詳細(xì)設(shè)計44.1 初始化模塊設(shè)計44.2 銀行家算法模塊設(shè)計44.3 安全性檢查模塊設(shè)計55 測試與分析65.1 測試方案65.2 測試結(jié)果65.3 結(jié)果分析76 設(shè)計小結(jié)77 參考文獻(xiàn)8附錄 源程序代碼9題目:銀行家算法的模擬實現(xiàn)1 概述1.1 設(shè)計目
2、的a).進(jìn)一步了解進(jìn)程的并發(fā)執(zhí)行。b).加強(qiáng)對進(jìn)程死鎖的理解。c).是用銀行家算法完成死鎖檢測。1.2 設(shè)計要求a).初始狀態(tài)沒有進(jìn)程啟動;b).計算每次進(jìn)程申請是否分配,如:計算出預(yù)分配后的狀態(tài)情況(安全狀態(tài)、不安全狀態(tài)),如果是安全狀態(tài),輸出安全序列;c).每次進(jìn)程申請被允許后,輸出資源分配矩陣a和可用資源向量v;d).每次申請情況應(yīng)可單步查看,如:輸入一個空格,繼續(xù)下個申請。2 設(shè)計原理2.1 銀行家算法設(shè)requesti是進(jìn)程pi的請求向量,如果requestij=k,表示進(jìn)程pi需要k個ri類型的資源。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:a)如果requestij= nee
3、di,j,便轉(zhuǎn)向步驟b);否則認(rèn)為出錯,因為它所需的資源數(shù)已經(jīng)超過了它所宣布的最大值。b)如果requestij= availablej,便轉(zhuǎn)向步驟c);否則表示尚無足夠資源,pi需等待。c)系統(tǒng)試探著把資源分配給進(jìn)程pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值。availablej=available-requestij;allocationi,j=allocationi,j+requestij;needi,j=needi,j-requestj; d)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程pi,以完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來資源
4、的分配狀態(tài),讓進(jìn)程pi等待。2.2 安全性算法系統(tǒng)所執(zhí)行的安全性算法可描述如下:a)設(shè)置兩個向量:一個是工作向量work;它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運行所需要的各類資源的數(shù)目,它含有m個元素,在執(zhí)行安全性算法開始時,work=availalbe;另一個是 finish:它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成。開始時先做finishi=false;當(dāng)有足夠資源分配給進(jìn)程時,再令finishi=rue;b)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程:一是finishi=false;二是 needi,j=workj;若找到,執(zhí)行步驟c),否則,執(zhí)行步驟d);c)當(dāng)進(jìn)程pi獲得資源后,可順利
5、執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:workj=workj+allocationi,j;finishi=true;go to step b);d)如果所有進(jìn)程的finishi=true都滿足,則表示系統(tǒng)處于安全狀態(tài),否則系統(tǒng)處于不安全狀態(tài)。3 概要設(shè)計3.1 功能結(jié)構(gòu) 銀行家算法功能結(jié)構(gòu)圖如圖3-1所示: 圖3-13.2 模塊劃分 a)初始化 b)銀行家算法 c)安全性檢查4 詳細(xì)設(shè)計4.1 初始化模塊設(shè)計由用戶輸入數(shù)據(jù),分別對運行的進(jìn)程數(shù)、總的資源種類數(shù)、總資源數(shù)、各進(jìn)程所需要的最大資源數(shù)量(max),已分配的資源數(shù)量(allowcation),可利用的資源數(shù)量(availab
6、le)賦值。如圖5-1所示,代碼如下。 int i,j,p=0,q=0;char c;int requestm,allocation1mm,need1mm,available1m;printf(*n);printf(* 銀行家算法的設(shè)計與實現(xiàn) *n); printf(*n);printf(請輸入進(jìn)程總數(shù):n);scanf(%d,&no1);printf(請輸入資源種類數(shù):n);scanf(%d,&no2); printf(請輸入max矩陣:n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&maxij); /輸入已知進(jìn)程最大資源需求量printf(請輸入a
7、llocation矩陣:n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij); /輸入已知的進(jìn)程已分配的資源數(shù) for(i=0;ino1;i+)for(j=0;jno2;j+)needij=maxij-allocationij; /根據(jù)輸入的兩個數(shù)組計算出need矩陣的值 printf(請輸入available矩陣n);for(i=0;ino2;i+)scanf(%d,&availablei); /輸入已知的可用資源數(shù)4.2 銀行家算法模塊設(shè)計設(shè)requesti是進(jìn)程pi的請求向量,如果requestij=k,表示進(jìn)程pi需要k個
8、ri類型的資源。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:a)如果requestij= needi,j,便轉(zhuǎn)向步驟b);否則認(rèn)為出錯,因為它所需的資源數(shù)已經(jīng)超過了它所宣布的最大值。b)如果requestij= availablej,便轉(zhuǎn)向步驟c);否則表示尚無足夠資源,pi需等待。c)系統(tǒng)試探著把資源分配給進(jìn)程pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值。availablej=available-requestij;allocationi,j=allocationi,j+requestij;needi,j=needi,j-requestj;d)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀
9、態(tài)。若安全,才正式將資源分配給進(jìn)程pi,以完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來資源的分配狀態(tài),讓進(jìn)程pi等待。如圖5-3,5-4,5-5,5-6所示,代碼如下。 q=0; p=0; printf(n請輸入請求資源的進(jìn)程號(04):n); for(j=0;j=no1)printf(輸入錯誤,請重新輸入:n);continue; else break; printf(n請輸入該進(jìn)程所請求的資源數(shù)requestj:n); for(j=0;jno2;j+)scanf(%d,&requestj); for(j=0;jneedij) p=1; /判斷請求是否超過該進(jìn)程所需要的資源數(shù) if(p
10、)printf(請求資源超過該進(jìn)程資源需求量,請求失??!n); else for(j=0;javailablej) q=1; /判斷請求是否超過可用資源數(shù)if(q) printf(沒有做夠的資源分配,請求失??!n);else /請求滿足條件for(j=0;jno2;j+) available1j=availablej; allocation1ij=allocationij;need1ij=needij; /保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)availablej=availablej-requestj; allocationij+=requestj;needij=needij-r
11、equestj; /系統(tǒng)嘗試把資源分配給請求的進(jìn)程print();check(); /檢測分配后的安全性if(r=0) /如果分配后系統(tǒng)不安全for(j=0;jno2;j+)availablej=available1j; allocationij=allocation1ij;needij=need1ij; /還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)printf(返回分配前資源數(shù)n);print();4.3 安全性檢查模塊設(shè)計系統(tǒng)所執(zhí)行的安全性算法可描述如下:a)設(shè)置兩個向量:一個是工作向量work;它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運行所需要的各類資源的數(shù)目,它含有m個元素,在執(zhí)行安全性算法開
12、始時,work=availalbe;另一個是 finish:它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成。開始時先做finishi=false;當(dāng)有足夠資源分配給進(jìn)程時,再令finishi=true;b)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程:一是finishi=false;二是 needi,j=workj;若找到,執(zhí)行步驟c),否則,執(zhí)行步驟d);c)當(dāng)進(jìn)程pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:workj=workj+allocationi,j;finishi=true;go to step b);d)如果所有進(jìn)程的finishi=true都滿足,則
13、表示系統(tǒng)處于安全狀態(tài),否則系統(tǒng)處于不安全狀態(tài)。void check() /安全算法函數(shù)int k,f,v=0,i,j;int workm,am;bool finishm;r=1;for(i=0;ino1;i+)finishi=false; / 初始化進(jìn)程均沒得到足夠資源數(shù)并完成for(i=0;ino2;i+) worki=availablei;/worki表示可提供進(jìn)程繼續(xù)運行的各類資源數(shù)k=no1;dofor(i=0;ino1;i+)if(finishi=false)f=1;for(j=0;jworkj)f=0;if(f=1) /找到還沒有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運行的資源數(shù)的進(jìn)程fi
14、nishi=true;av+=i; /記錄安全序列號for(j=0;j0);f=1;for(i=0;ino1;i+) /判斷是否所有的進(jìn)程都完成if(finishi=false) f=0;break;if(f=0) /若有進(jìn)程沒完成,則為不安全狀態(tài)printf(系統(tǒng)處在不安全狀態(tài)!);r=0;elseprintf(n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:n);for(i=0;ino1;i+)printf(p%d ,ai); /輸出安全序列5 測試與分析5.1 測試方案假定系統(tǒng)中有五個進(jìn)程:p0,p1,p2,p3,p4和三種類型的資源a,b,c,每一種資源的數(shù)量分別為10、5、7,輸入相應(yīng)數(shù)據(jù)。5.2
15、 測試結(jié)果 程序初始化如圖5-1所示: 圖5-1t0時刻的資源分配情況如圖5-2所示: 圖5-2p1請求資源以及分配情況圖如圖5-3所示: 圖5-3p4請求資源以及分配情況圖如圖5-4所示: 圖5-4p0請求資源以及分配情況圖如圖5-5,5-6所示: 圖5-5 圖5-65.3 結(jié)果分析圖示為初始化函數(shù)執(zhí)行的結(jié)果,輸入相應(yīng)數(shù)據(jù),得到一個安全狀態(tài),然后對安全狀態(tài)進(jìn)行檢測,如果不是安全狀態(tài),重新初始化。驗證了各種安全與不安全申請。6 設(shè)計小結(jié) 一周的課程設(shè)計結(jié)束了。在這一周里,我做一個模擬銀行家算法。我覺得在著手設(shè)計前設(shè)計的思路是很重要的。只有思路清晰才能進(jìn)行下一階段的設(shè)計。這樣才能完成整個程序的設(shè)
16、計,完成整個文報告的書寫。 課程設(shè)計這幾天學(xué)到的東西還真不少。以前不清楚的現(xiàn)在都暴露出來了。以前認(rèn)為學(xué)了沒用的東西現(xiàn)在也用到了。這次的課程設(shè)計使我進(jìn)一步了解了調(diào)度與死鎖的問題。以及有關(guān)資源申請的問題、避免死鎖的具體實施方法。深入了解了銀行家算法的資源申請和資源分配的過程及原則。保證系統(tǒng)處于安全狀態(tài)。7 參考文獻(xiàn)1 韓立毛,李先鋒. 計算機(jī)操作系統(tǒng)實踐教程m,南京:南京大學(xué)出版社,2011.10.2 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)m,北京:清華大學(xué)出版社,1997.4.3 張堯?qū)W,史美林. 計算機(jī)操作系統(tǒng)教程m,北京:清華大學(xué)出版社,2000.8.4 孫靜宇. 計算機(jī)操作系統(tǒng)課程設(shè)計指導(dǎo)書m,山西:
17、太原理工出版社,2006.4.附錄 源程序代碼#include #include #include # define m 50 int no1; /進(jìn)程數(shù)int no2; /資源數(shù)int r;int allocationmm,needmm,availablem,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(* 銀行家算法的設(shè)計
18、與實現(xiàn) *n); printf(*n);printf(請輸入進(jìn)程總數(shù):n);scanf(%d,&no1);printf(請輸入資源種類數(shù):n);scanf(%d,&no2); printf(請輸入max矩陣:n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&maxij); /輸入已知進(jìn)程最大資源需求量printf(請輸入allocation矩陣:n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij); /輸入已知的進(jìn)程已分配的資源數(shù) for(i=0;ino1;i+)for(j=0;jno2;j
19、+)needij=maxij-allocationij; /根據(jù)輸入的兩個數(shù)組計算出need矩陣的值 printf(請輸入available矩陣n);for(i=0;ino2;i+)scanf(%d,&availablei); /輸入已知的可用資源數(shù)print(); /輸出已知條件check(); /檢測t0時刻已知條件的安全狀態(tài)if(r=1) /如果安全則執(zhí)行以下代碼do q=0; p=0;printf(n請輸入請求資源的進(jìn)程號(04):n);for(j=0;j=no1)printf(輸入錯誤,請重新輸入:n); continue; else break;printf(n請輸入該進(jìn)程所請求的
20、資源數(shù)requestj:n);for(j=0;jno2;j+)scanf(%d,&requestj);for(j=0;jneedij) p=1; /判斷請求是否超過該進(jìn)程所需要的資源數(shù)if(p)printf(請求資源超過該進(jìn)程資源需求量,請求失??!n);elsefor(j=0;javailablej) q=1; /判斷請求是否超過可用資源數(shù)if(q) printf(沒有做夠的資源分配,請求失敗!n);else /請求滿足條件for(j=0;jno2;j+) available1j=availablej; allocation1ij=allocationij;need1ij=needij; /保
21、存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)availablej=availablej-requestj; allocationij+=requestj;needij=needij-requestj; /系統(tǒng)嘗試把資源分配給請求的進(jìn)程print();check(); /檢測分配后的安全性if(r=0) /如果分配后系統(tǒng)不安全for(j=0;jno2;j+)availablej=available1j; allocationij=allocation1ij; needij=need1ij; /還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)printf(返回分配前資源數(shù)n);print();printf(n你還要繼續(xù)分配嗎?y or n ?n); /判斷是否繼續(xù)進(jìn)行資源分配c=getche();while(c=y|c=y);void check() /安全算法函數(shù)int k,f,v=0,i,j;int workm,am;bool finishm;r=1;for(i=0;ino1;i+)finishi=false; / 初始化進(jìn)程均沒得到足夠資源數(shù)并完成for(i=0;ino2;i+) worki=available
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上海市嘉定、長寧、金山區(qū)高三第三次模擬考試(5月)生物試題試卷含解析
- 2025年山東棗莊八中高考生物試題模擬試卷含解析
- 2024-2030年全球與中國乙氧基壬基酚丙烯酸酯(NP(EO)4A)市場發(fā)展價值及投資機(jī)會研究報告
- Unit 3 課時5 寫作2023-2024學(xué)年七年級下冊英語課后作業(yè)教學(xué)設(shè)計(牛津深圳版)
- 船殼漆相關(guān)行業(yè)項目建議書
- 七年級英語上冊 Unit 6 Lets Go Lesson 32 At the Supermarket教案 (新版)冀教版
- 高中信息技術(shù) 第一章 第三、四節(jié) 計算機(jī)的組成教案 浙教版
- 【新教材】2024-2025學(xué)年統(tǒng)編版語文七年級上冊 第16課《誡子書》課件3
- 員工自愿不交社保協(xié)議是違法
- 高考英語 Unit3Under the sea練習(xí) 新人教選修7
- 消防安全自查自糾情況表
- 《危險化學(xué)品目錄(2022調(diào)整版)》
- 小學(xué)《道德與法治》教學(xué)設(shè)計三篇
- 家長會課件:六年級數(shù)學(xué)老師家長會課件
- 3.2 海水的性質(zhì)(說課稿)-高中地理人教版(2019)必修第一冊
- 全國中小學(xué)生轉(zhuǎn)學(xué)申請表-8
- 中華民族共同體概論心得體會范文(3篇)
- 口腔診所醫(yī)保費用結(jié)算制度范本
- POCT管理制度(三級醫(yī)院)
- 射線檢測Ⅱ級人員開卷筆試練習(xí)題
- 寺廟規(guī)劃設(shè)計施工方案范本
評論
0/150
提交評論