操作系統(tǒng)課程設(shè)計(jì)-銀行家算法_第1頁(yè)
已閱讀1頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p>  設(shè)計(jì)目的----------------------------------------------------2</p><p>  2、設(shè)計(jì)要求----------------------------------------------------2</p><p> 

2、 3、設(shè)計(jì)概述----------------------------------------------------3</p><p>  4、設(shè)計(jì)的基本概念和原理---------------------------------------3</p><p>  5、總體設(shè)計(jì)----------------------------------------------------4<

3、;/p><p>  6、詳細(xì)設(shè)計(jì)----------------------------------------------------6</p><p>  7、完成的情況--------------------------------------------------10</p><p>  8、用戶(hù)手冊(cè)------------------------------

4、----------------------12</p><p>  9、總結(jié)--------------------------------------------------------13</p><p>  10、參考文獻(xiàn)--------------------------------------------------13</p><p>  11、附錄(

5、源程序清單)----------------------------------------14</p><p><b>  銀 行 家 算 法</b></p><p><b>  一、設(shè)計(jì)目的</b></p><p>  本課程設(shè)計(jì)是學(xué)生學(xué)習(xí)完《操作系統(tǒng)原理》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過(guò)課程設(shè)計(jì),讓學(xué)生更好地掌

6、握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對(duì)操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)學(xué)生的動(dòng)手能力。</p><p><b>  二、設(shè)計(jì)要求</b></p><p>  從課程設(shè)計(jì)的目的出發(fā),通過(guò)設(shè)計(jì)工作的各個(gè)環(huán)節(jié),達(dá)到以下教學(xué)要求:兩人一組,每組從所給題目中任選一個(gè)(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個(gè)學(xué)生必須獨(dú)立完成課程設(shè)計(jì),不能相互抄襲,同組者文檔不能相同;設(shè)計(jì)完成后,將

7、所完成的工作交由指導(dǎo)教師檢查;要求寫(xiě)出一份詳細(xì)的設(shè)計(jì)報(bào)告。</p><p><b>  三、設(shè)計(jì)概述</b></p><p>  1、設(shè)計(jì)主要完成的任務(wù)</p><p>  要求用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法通用程序,觀察死鎖產(chǎn)生的條件,采用該程序能有效的防止和避免死鎖的發(fā)生,并檢測(cè)所給狀態(tài)的系統(tǒng)安全性,能輸出系統(tǒng)的安全序列。<

8、/p><p><b>  2、解決的主要問(wèn)題</b></p><p>  1、能任意設(shè)定資源的種類(lèi)數(shù)。</p><p>  2、能任意設(shè)定進(jìn)程的總數(shù)。</p><p>  3、能查看各類(lèi)資源的剩余情況。</p><p>  4、能查看各個(gè)進(jìn)程的資源分配情況。</p><p> 

9、 5、當(dāng)某進(jìn)程申請(qǐng)資源時(shí),能用銀行家算法和安全性算法檢查系統(tǒng)的安全性。</p><p>  6、當(dāng)系統(tǒng)處于安全狀態(tài)時(shí),能輸出系統(tǒng)的安全性序列。 </p><p>  7、在初始化銀行家算法時(shí),能對(duì)輸入的數(shù)據(jù)進(jìn)行判斷,并能報(bào)錯(cuò)!</p><p>  四、設(shè)計(jì)的基本概念和原理</p><p><b>  1、安全狀態(tài)</b>

10、</p><p>  指系統(tǒng)能按照某種順序如<P1,P2,…,Pn>(稱(chēng)為<P1,P2,…,Pn>序列為安全序列),為每個(gè)進(jìn)程分配所需的資源,直至最大需求,使得每個(gè)進(jìn)程都能順利完成。 </p><p><b>  2、銀行家算法</b></p><p>  設(shè)Requesti是進(jìn)程Pi的請(qǐng)求向量,如果Requesti[j

11、]=k,表示進(jìn)程Pi需要j類(lèi)資源k個(gè)。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行安全檢查:</p><p>  (1)如果Requesti[j]≤Need[i,j],便轉(zhuǎn)向步驟(2);否則認(rèn)為出錯(cuò),因?yàn)樾枨笊暾?qǐng)超出最大需求值。</p><p>  (2)如果Requesti≤Available,便轉(zhuǎn)向步驟(3),否則,表示尚無(wú)足夠資源,讓進(jìn)程Pi等待。</p><p>

12、;  (3)系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:</p><p>  Available[j]∶=Available[j]-Requesti[j]; </p><p>  Allocation[i,j]∶=Allocation[i,j]+Requesti[j];</p><p>  Need[i,j]∶=Need[i,j]-Requ

13、esti[j];</p><p>  (4) 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài),讓進(jìn)程Pi等待。</p><p><b>  3、安全性算法</b></p><p>  系統(tǒng)所執(zhí)行的安全性算法可描述如下:<

14、;/p><p>  (1)設(shè)置兩個(gè)向量:</p><p> ?、俟ぷ飨蛄縒ork: 它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類(lèi)資源數(shù)目,它含有m個(gè)元素,在執(zhí)行安全算法開(kāi)始時(shí),Work∶=Available; </p><p>  ②Finish: 它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。</p><p>  開(kāi)始時(shí)先做Finish[i

15、]∶=false; 當(dāng)有足夠資源分配給進(jìn)程時(shí), 再</p><p>  令Finish[i]∶=true。</p><p>  (2)從進(jìn)程集合中找到一個(gè)能滿(mǎn)足下述條件的進(jìn)程: </p><p>  ①Finish[i]=false; </p><p> ?、贜eed[i,j]≤Work[j]; 若找到,執(zhí)行步驟(3), 否則,執(zhí)行步驟(4)

16、。</p><p>  (3)當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:</p><p>  Work[j]∶=Work[i]+Allocation[i,j];</p><p>  Finish[i]∶=true; </p><p>  go to step 2; </p><p&

17、gt;  (4)如果所有進(jìn)程的Finish[i]=true都滿(mǎn)足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。</p><p><b>  五、總體設(shè)計(jì)</b></p><p>  1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)描述</p><p>  (1)AVAILABLE[MAXRESOURCE]:</p><p>  可利用資源向量A

18、vailable(一維數(shù)組)是一個(gè)含有m個(gè)元素,其中的每一個(gè)元素代表一類(lèi)可利用的資源數(shù)目,其初值是系統(tǒng)中所配置的該類(lèi)全部可用資源數(shù)目。如果Available[j]=k, 表示系統(tǒng)中現(xiàn)有j類(lèi)資源k個(gè)。</p><p>  (2)MAX[MAXPROCESS][MAXRESOURCE]:</p><p>  最大需求矩陣Max(二維數(shù)組)是一個(gè)含有n*m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程

19、中的每一個(gè)進(jìn)程對(duì)m類(lèi)資源的最大需求。如果Max[i,j]=k, 表示進(jìn)程i需要Rj類(lèi)資源的最大數(shù)目為k。</p><p>  (3)ALLOCATION[MAXPROCESS][MAXRESOURCE]:</p><p>  分配矩陣Allocation(二維數(shù)組)是一個(gè)含有n*m的矩陣,它定義了系統(tǒng)中每一類(lèi)資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocation[i,j]=k

20、, 表示進(jìn)程i當(dāng)前已分得Rj類(lèi)資源k個(gè)。</p><p>  (4)NEED[MAXPROCESS][MAXRESOURCE]:</p><p>  需求矩陣Need (二維數(shù)組)是一個(gè)含有n*m的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類(lèi)資源數(shù)。如果Need[i,j]=k, 表示進(jìn)程i還需要j類(lèi)資源k個(gè),方能完成其任務(wù)。Need[i,j]= Max[i,j]-Allocati

21、on[i,j]</p><p>  (5)REQUEST[MAXPROCESS][MAXRESOURCE]:</p><p>  Request[i][j]是進(jìn)程Pi的請(qǐng)求向量,如果Request[i][j]=k,表示進(jìn)程Pi需要j類(lèi)資源k個(gè)。</p><p>  (6)FINISH[MAXPROCESS]: </p>&

22、lt;p>  它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。</p><p>  開(kāi)始時(shí)先做Finish[i]∶=false; 當(dāng)有足夠資源分配給進(jìn)程時(shí), 再</p><p>  令Finish[i]∶=true。 </p><p>  (7)Work[MAXRESOURCE]: </p><p>  它表示

23、系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類(lèi)資源數(shù)目,它含有m個(gè)元素,在執(zhí)行安全算法開(kāi)始時(shí),Work∶=Available; </p><p>  (8)P[MAXPROCESS]:</p><p>  當(dāng)系統(tǒng)處于安全狀態(tài)時(shí),存儲(chǔ)一個(gè)安全序列。</p><p>  (9) Resourcename[26]:</p><p>  用來(lái)存儲(chǔ)各類(lèi)資源的默認(rèn)名

24、,分別為A、B、C、D、E………依此類(lèi)推。 </p><p><b>  2、程序的模塊設(shè)計(jì)</b></p><p>  根據(jù)程序所要實(shí)現(xiàn)的功能,我分別設(shè)計(jì)了八個(gè)函數(shù)模塊:void main()主函數(shù)、void Initialization() 初始化銀行家算法、void Menu()菜單函數(shù)、bo

25、ol Safe()安全性算法函數(shù)、bool Bank()銀行家算法函數(shù)、void Request()進(jìn)程申請(qǐng)資源函數(shù)、void CheckProcess()查看進(jìn)程資源分配情況函數(shù)、void CheckResource()查看資源剩余情況函數(shù)。</p><p>  當(dāng)輸入對(duì)應(yīng)的值時(shí)就可以調(diào)用各個(gè)函數(shù)模塊,而各函數(shù)模塊之間是相互獨(dú)立的,下面用模塊圖來(lái)表示</p><p>  函數(shù)模塊間的調(diào)用

26、關(guān)系:(箭頭起始處函數(shù)調(diào)用箭頭指向處函數(shù))</p><p><b>  六、詳細(xì)設(shè)計(jì)</b></p><p><b>  1、主要函數(shù)模塊</b></p><p>  下面將介紹各函數(shù)模塊的流程圖,void main()主函數(shù)、void Menu()菜單函數(shù)、void CheckProcess()查看進(jìn)程資源分配情況函數(shù)、

27、void CheckResource()查看資源剩余情況函數(shù),這幾個(gè)函數(shù)比較簡(jiǎn)單,這里將介紹其它幾個(gè)函數(shù)。</p><p>  Initialization()函數(shù)流程圖</p><p>  Safe()函數(shù)流程圖</p><p>  Bank()函數(shù)流程圖</p><p>  Request()函數(shù)流程圖</p><p&

28、gt;<b>  七、完成的情況</b></p><p><b>  1、測(cè)試步驟</b></p><p>  (1)初始化銀行家算法,設(shè)定系統(tǒng)有3類(lèi)資源A,B,C,資源A,B,C的總資源分別為10,5,7。現(xiàn)有5個(gè)進(jìn)程{P0,P1,P2,P3,P4},它們對(duì)各類(lèi)資源的最大申請(qǐng)量和已分配的資源數(shù)如下表所示。</p><p>

29、;  (2)查看資源A,B,C的剩余情況。</p><p>  (3)查看進(jìn)程P1的資源情況。</p><p>  (4)P1請(qǐng)求資源:P1發(fā)出請(qǐng)求向量Request1(1,0,2),用該系統(tǒng)進(jìn)行系統(tǒng)安全性的判斷,若系統(tǒng)安全,輸出安全序列。</p><p><b>  (5)退出系統(tǒng)</b></p><p><b&

30、gt;  2、測(cè)試輸出結(jié)果</b></p><p><b>  主 菜 單</b></p><p>  資源A,B,C的剩余情況</p><p><b>  進(jìn)程P1的資源情況</b></p><p><b>  退出系統(tǒng)</b></p><p&

31、gt;  P1請(qǐng)求資源后的情況</p><p><b>  3、測(cè)試總結(jié)</b></p><p>  1、本程序能完成設(shè)計(jì)要求的所有功能。</p><p>  2、經(jīng)測(cè)試,當(dāng)正確輸入選擇時(shí),能夠正確無(wú)誤的運(yùn)行并得出結(jié)果;該程序還擁有一定的糾錯(cuò)性能,能夠?qū)Τ龇秶臄?shù)值進(jìn)行屏蔽,使其重新輸入。</p><p>  3、本程

32、序有一缺陷:一旦某一進(jìn)程申請(qǐng)資源后,如果系統(tǒng)處于安全狀態(tài),系統(tǒng)會(huì)按照安全序列的順序把所有進(jìn)程都執(zhí)行完,不能再進(jìn)行其它進(jìn)程的資源請(qǐng)求測(cè)試。必須退出系統(tǒng)后,再次啟動(dòng)系統(tǒng),方可進(jìn)行其它進(jìn)程的資源請(qǐng)求測(cè)試。</p><p><b>  八、用戶(hù)手冊(cè)</b></p><p>  1、本程序使用的是VC/MFC界面操作,主要是以對(duì)話框形式與用戶(hù)交流,各個(gè)菜單均為中文,且有中文提示

33、,操作簡(jiǎn)單方便,所以具體操作就不作介紹了。</p><p>  2、初始化銀行家算法時(shí),輸入的數(shù)據(jù)一定要正確,因?yàn)樵摮绦蜻€不具備該數(shù)據(jù)的糾錯(cuò)功能。</p><p>  3、由于本人水平有限,本程序尚有許多不足之處,功能也不是十分完善,但我已盡我所能做到最好,若發(fā)現(xiàn)不足希望用戶(hù)指出。</p><p><b>  九、總結(jié)</b></p>

34、;<p>  一周的操作系統(tǒng)課程設(shè)計(jì)很快就結(jié)束了,操作系統(tǒng)課程是一門(mén)理論性很強(qiáng)的課程,其中的概念都比較抽象,只有通過(guò)親自編寫(xiě)算法、上機(jī)運(yùn)行和調(diào)試程序,才能加深理解和掌握所學(xué)的知識(shí),提高對(duì)操作系統(tǒng)各個(gè)概念的理解,所以自己做好了思想準(zhǔn)備,這次課程設(shè)計(jì)必須獨(dú)立的完成。</p><p>  剛看到題目就覺(jué)得要求實(shí)現(xiàn)的功能還真是挺多的,但是經(jīng)過(guò)仔細(xì)分析后,題目其實(shí)并不怎么難,運(yùn)用的知識(shí)大多都集中在數(shù)組的運(yùn)用中

35、。經(jīng)過(guò)四五天的構(gòu)思、紙上編程、上機(jī)編程、調(diào)試、分析、改進(jìn)……銀行家算法系統(tǒng)終于完成了,并實(shí)現(xiàn)了所有要求的功能。</p><p>  不遇到困難是不可能的,有時(shí)候?yàn)榱苏页鲆粋€(gè)邏輯錯(cuò)誤,要憋上好幾個(gè)小時(shí),一覺(jué)得自己的設(shè)計(jì)不行,就推翻進(jìn)行重新設(shè)計(jì)。從中也看出自己的基本功不夠扎實(shí),C/C++運(yùn)用不夠熟練,平時(shí)很少親自編寫(xiě)算法、上機(jī)運(yùn)行和調(diào)試過(guò),這值得自己認(rèn)真反思一下,大學(xué)學(xué)習(xí)的自主性是很強(qiáng)的,自己平時(shí)的課余時(shí)間也是挺多的

36、,其中有多少花在了學(xué)習(xí)上了,這里要打個(gè)大大的問(wèn)號(hào)!</p><p>  其實(shí)我要感謝學(xué)校安排了此次課程設(shè)計(jì),讓我從中學(xué)到了很多,我也想了很多,以后的路怎么走,我想我現(xiàn)在已經(jīng)很清楚了!</p><p><b>  十、參考文獻(xiàn)</b></p><p>  1、《計(jì)算機(jī)操作系統(tǒng)》. 湯子丹、梁紅兵等編編.西安電子科技大學(xué)出版社</p>

37、<p>  2、《計(jì)算機(jī)操作實(shí)驗(yàn)教程》. 張麗芬、劉立峰、王全玉編著.清華大學(xué)出版社</p><p>  3、《數(shù)據(jù)結(jié)構(gòu)實(shí)用教程》(第二版).徐孝凱編著.清華大學(xué)出版社</p><p>  4、《C程序設(shè)計(jì)》(第三版).譚浩強(qiáng)編著.清華大學(xué)出版社</p><p>  十一、附錄(源程序清單)</p><p>  #include

38、"iomanip.h" //該頭文件包含iostream.h的全部?jī)?nèi)容</p><p>  #include "stdlib.h"</p><p>  #define MAXPROCESS 50 //最大進(jìn)程數(shù)</p><p>  #define MAXRESOURCE

39、26 //最大資源數(shù)</p><p>  int AVAILABLE[MAXRESOURCE]; //可用資源數(shù)組</p><p>  int MAX[MAXPROCESS][MAXRESOURCE]; //最大需求矩陣</p><p>  int ALLOCATION[MAXPROCESS][MAXRESOURC

40、E]; //分配矩陣</p><p>  int NEED[MAXPROCESS][MAXRESOURCE]; //需求矩陣</p><p>  int REQUEST[MAXPROCESS][MAXRESOURCE]; //進(jìn)程需要資源數(shù)</p><p>  bool FINISH[MAXPROCESS];

41、 //系統(tǒng)是否有足夠的資源分配</p><p>  int Work[MAXRESOURCE]; //工作數(shù)組</p><p>  int p[MAXPROCESS]; //存儲(chǔ)安全序列</p><p>  char Resourcename[26]={'

42、;A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R', 'S&

43、#39;,'T','U','V','w','X','Y','Z'}; //默認(rèn)進(jìn)程名 </p><p>  int n,m; //n個(gè)進(jìn)程,m個(gè)資源&l

44、t;/p><p>  //初始化銀行家算法</p><p>  void Initialization() </p><p><b>  { </b></p><p><b>  int i,j; </b></p><p>  cout<<&

45、quot;請(qǐng)輸入資源的種類(lèi)數(shù)(1-26):"; //初始化資源種類(lèi)數(shù)</p><p><b>  cin>>m; </b></p><p>  cout<<"請(qǐng)輸入各類(lèi)資源的總數(shù)目(1-100):"<<endl;

46、 //初始化可用資源數(shù)組AVAILABLE[MAXRESOURCE]</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  cout<<"資源"<<Resourcename[i]<<":&

47、quot;;</p><p>  cin>>AVAILABLE[i];</p><p><b>  }</b></p><p>  cout<<"請(qǐng)輸入進(jìn)程的數(shù)目(1-50):"; //初始化進(jìn)程總數(shù)</p><p><b>  

48、cin>>n;</b></p><p>  cout<<"請(qǐng)輸入每個(gè)進(jìn)程最多所需的各類(lèi)資源數(shù):"<<endl; </p><p>  //初始化最大需求矩陣MAX[MAXPROCESS][MAXRESOURCE]</p><p>  for(i=0;i<n;i++)</p>

49、<p><b>  { </b></p><p>  cout<<endl<<" 進(jìn)程P"<<i<<""<<endl; </p><p>  for(j=0;j<m;j++)</p><p><b>  { <

50、;/b></p><p>  cout<<"資源"<<Resourcename[j]<<":"; </p><p>  cin>>MAX[i][j];</p><p><b>  }</b></p><p><b> 

51、 }</b></p><p>  cout<<endl<<"請(qǐng)輸入每個(gè)進(jìn)程已分配的各資源數(shù):"<<endl; </p><p>  //初始化分配矩陣ALLOCATION[MAXPROCESS][MAXRESOURCE]</p><p>  for(i=0;i<n;i++)</p

52、><p><b>  {</b></p><p>  cout<<endl<<" 進(jìn)程P"<<i<<""<<endl; </p><p>  for(j=0;j<m;j++)</p><p><b>  {

53、 </b></p><p>  cout<<"資源"<<Resourcename[j]<<":";</p><p>  cin>>ALLOCATION[i][j];</p><p>  AVAILABLE[j]=AVAILABLE[j]-ALLOCATION[i][

54、j];</p><p>  NEED[i][j]=MAX[i][j]-ALLOCATION[i][j]; </p><p>  //初始化需求矩陣NEED[MAXPROCESS][MAXRESOURCE]</p><p>  if(NEED[i][j]<0)</p><p><b>  {<

55、/b></p><p>  cout<<"您輸入的P"<<i<<"進(jìn)程所擁有的"<<Resourcename[j]<<"類(lèi)資源數(shù)錯(cuò)誤,請(qǐng)重新輸入:"<<endl;</p><p><b>  j--;</b></p>

56、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //安全性算法</b></p>

57、<p>  bool Safe(int& cusneed) </p><p><b>  {</b></p><p>  int i,j,k;</p><p>  int l=0,a=n*n,b=0;</p><p>  for(i=0;

58、i<m;i++)</p><p>  Work[i]=AVAILABLE[i]; //初始化工作數(shù)組Work[MAXRESOURCE]</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  FINISH[i]=false;

59、 //初始化FINISH[MAXPROCESS]</p><p><b>  }</b></p><p>  for(i=cusneed;i<n;i++) //從申請(qǐng)資源的進(jìn)程開(kāi)始掃描所有進(jìn)程</p><p><b>  { </b></p><p>  if(FINI

60、SH[i]==false)</p><p><b>  {</b></p><p>  for(j=0;j<m;j++)</p><p><b>  {</b></p><p>  if(NEED[i][j]<=Work[j]) </p><

61、;p>  //判斷是NEED[MAXPROCESS][MAXRESOURCE]<=Work[MAXRESOURCE] </p><p><b>  b++; </b></p><p><b>  }</b></p><p><b>  if (b==m)</b></p>&l

62、t;p><b>  { </b></p><p>  FINISH[i]=true; //進(jìn)程執(zhí)行完后釋放出分配給它的資源</p><p>  for(k=0;k<m;k++)</p><p><b>  {</b></p><p>  Work[k]+=ALLOCATIO

63、N[i][k];</p><p>  AVAILABLE[k]+=ALLOCATION[i][k];</p><p><b>  }</b></p><p><b>  p[l++]=i;</b></p><p><b>  }</b></p><p>

64、<b>  b=0;</b></p><p><b>  }</b></p><p><b>  a--;</b></p><p>  if (i==(n-1)) i=-1; //實(shí)現(xiàn)循環(huán)掃描 </p><p>  if(a<0)

65、 i=n; //實(shí)現(xiàn)退出掃描</p><p><b>  }</b></p><p>  for(i=0;i<n;i++) //安全性算法不通過(guò)返回false</p><p><b>  {</b></p>&l

66、t;p>  if(FINISH[i]==false)</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  cou

67、t<<"由安全性檢查可知系統(tǒng)是安全的!"<<endl;</p><p>  cout<<"安全序列:"; //輸出安全序列</p><p>  for(i=0;i<l-1;i++)</p><p><b>  {</b

68、></p><p>  cout<<"P"<<p[i]<<"-->";</p><p><b>  }</b></p><p>  cout<<"P"<<p[i]; </p><p>  r

69、eturn true; //通過(guò)安全性算法返回true</p><p><b>  } </b></p><p><b>  //銀行家算法</b></p><p>  bool Bank(int& cusneed ) &

70、lt;/p><p><b>  { </b></p><p><b>  int i;</b></p><p>  for(i=0;i<m;i++)</p><p><b>  { </b></p><p>  if(REQUEST[cusnee

71、d][i]>NEED[cusneed][i]) //判斷是否//REQUEST[MAXPROCESS][MAXRESOURCE]>NEED[MAXPROCESS][//MAXRESOURCE]</p><p><b>  {</b></p><p>  cout<<endl<<"您輸入的請(qǐng)求數(shù)超過(guò)進(jìn)程的需求量

72、!"<<endl;</p><p>  return false;</p><p><b>  }</b></p><p>  if(REQUEST[cusneed][i]>AVAILABLE[i]) //判斷是否//REQUEST[MAXPROCESS][MAXRESOURCE]&g

73、t;AVAILABLE[MAXRESOURCE]</p><p><b>  {</b></p><p>  cout<<endl<<"您輸入的請(qǐng)求數(shù)超過(guò)系統(tǒng)可用資源數(shù)!"<<endl;</p><p>  return false;</p><p><b&g

74、t;  }</b></p><p><b>  }</b></p><p>  for(i=0;i<m;i++) //系統(tǒng)試探著把資源分配給進(jìn)程</p><p><b>  {</b></p&g

75、t;<p>  AVAILABLE[i]-=REQUEST[cusneed][i];</p><p>  ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];</p><p>  NEED[cusneed][i]-=REQUEST[cusneed][i];</p><p><b>  }</b>

76、</p><p>  cout<<endl<<"用銀行家算法檢查通過(guò),假設(shè)為該進(jìn)程分配所需資源!"<<endl; </p><p>  return true; //通過(guò)銀行家算法返回true</p><p><b>  }</b></p><

77、;p>  //為進(jìn)程申請(qǐng)資源 </p><p>  void Request() </p><p><b>  {</b></p><p>  int i,cusneed;</p><p>  cout<<"請(qǐng)輸入要申請(qǐng)資源的進(jìn)程號(hào)&

78、quot;<<endl;</p><p>  cin>>cusneed;</p><p>  if(FINISH[cusneed]==true) //判斷該進(jìn)程是否已執(zhí)行結(jié)束</p><p>  cout<<"該進(jìn)程已經(jīng)執(zhí)行結(jié)束,無(wú)需分配資源!"<<endl;</p

79、><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入進(jìn)程所請(qǐng)求的各類(lèi)資源的數(shù)量"<<endl;</p><p>  for(i=0;i<m;i++)</p><p&g

80、t;<b>  {</b></p><p>  cout<<"資源"<<Resourcename[i]<<":";</p><p>  cin>>REQUEST[cusneed][i];</p><p><b>  }</b></

81、p><p>  if(Bank(cusneed))</p><p><b>  {</b></p><p>  if(Safe(cusneed))</p><p><b>  {</b></p><p>  cout<<endl<<"通過(guò)安全性算

82、法檢查,同意分配請(qǐng)求!"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"沒(méi)通過(guò)安全性算法檢查,系統(tǒng)是不安全

83、的,您的請(qǐng)求被拒絕!"<<endl; //沒(méi)通過(guò)安全性算法,恢復(fù)原來(lái)的資源分配狀態(tài)</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  AVAILABLE[i]+=REQUEST[cusneed][i];</p><p&g

84、t;  ALLOCATION[cusneed][i]-=REQUEST[cusneed][i];</p><p>  NEED[cusneed][i]+=REQUEST[cusneed][i];</p><p><b>  }</b></p><p><b>  }</b></p><p><

85、b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //查看各類(lèi)資源的情況 </p><p>  void CheckResoure() </p>

86、<p><b>  { </b></p><p><b>  int j;</b></p><p>  cout<<"資源名"<<setw(15)<<"Avaliable"<<endl;</p><p>  for( j

87、=0;j<m;j++)</p><p><b>  { </b></p><p>  cout<<"資源"<<Resourcename[j]<<":"<<setw(10)<< AVAILABLE[j]<<endl; //輸出各類(lèi)資源剩余情況&l

88、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //查看各進(jìn)程情況</b></p><p>  void CheckProcess() </p>&

89、lt;p><b>  { </b></p><p>  int process; </p><p>  cout<<"請(qǐng)輸入要查看的進(jìn)程號(hào)"<<endl; //判斷該進(jìn)程是否已執(zhí)行結(jié)束</p><p>  cin>>process; </p><

90、;p>  if(FINISH[process])</p><p><b>  { </b></p><p>  cout<<"該進(jìn)程已經(jīng)執(zhí)行完!"<<endl;</p><p><b>  }</b></p><p><b>  else&

91、lt;/b></p><p><b>  { </b></p><p>  cout<<"進(jìn)程P"<<process<<endl;</p><p>  cout<<setw(18)<<"Allocation"<<setw(7

92、)<<" Need"<<endl; </p><p>  for(int j=0;j<m;j++)</p><p>  { //輸出進(jìn)程已分配和還需要的各類(lèi)資源數(shù)

93、 </p><p>  cout<<"資源"<<Resourcename[j]<<":"; </p><p>  cout<<setw(7)<<ALLOCATION[process][j]<<setw(10)<<NEED[process][j]<<e

94、ndl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //主菜單</b></p><p>  void menu()

95、 </p><p><b>  {</b></p><p><b>  int flag;</b></p><p><b>  //程序處理過(guò)程</b></p><p><b>  do{</b></p><

96、p>  cout<<endl<<" ********************* 主*菜*單 ***********************"<<endl;</p><p>  cout<<" 1、初始化銀行家算法 2、為某進(jìn)程申請(qǐng)資源 "<<endl;

97、 </p><p>  cout<<" 3、查看各類(lèi)資源的情況 4、查看各進(jìn)程情況 "<<endl; </p><p>  cout<<" 5、退出系統(tǒng)

98、 "<<endl;</p><p>  cout<<" *************************************************"<<endl;</p><p>  //顯示功能表并接受用戶(hù)選擇</p><p>  cout<<" ***

99、*****請(qǐng) 輸 入 你 的 選 擇 (1-5)******"<<endl;</p><p><b>  do{</b></p><p>  cin>>flag;</p><p>  if (flag<1||flag>5)</p><p>  cout<<&quo

100、t;輸入功能有誤,請(qǐng)重輸: ";</p><p>  }while(flag<1||flag>5);//根據(jù)不同的選擇進(jìn)行相應(yīng)的處理</p><p>  switch(flag)</p><p><b>  {</b></p><p>  case 1:Initialization();break;

101、</p><p>  case 2:Request();break;</p><p>  case 3:CheckResoure();break;</p><p>  case 4:CheckProcess();break;</p><p>  case 5:cout<<"程序運(yùn)行結(jié)束!"<<end

102、l;return; //執(zhí)行結(jié)束位置</p><p>  } //swith語(yǔ)句終端位置</p><p>  }while(1);//外層do循環(huán)終端位置</p><p><b>  }</b></p><p><b>  //主函數(shù)</b></p><p>  voi

103、d main() </p><p><b>  { </b></p><p>  cout<<"@@@@@@@@@@@@@@@@@@@@ 銀 行 家 算 法 @@@@@@@@@@@@@@@@@@@@@@"<<endl;</p><p><b>  menu();</b>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論