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

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  設計目的----------------------------------------------------2</p><p>  2、設計要求----------------------------------------------------2</p><p> 

2、 3、設計概述----------------------------------------------------3</p><p>  4、設計的基本概念和原理---------------------------------------3</p><p>  5、總體設計----------------------------------------------------4<

3、;/p><p>  6、詳細設計----------------------------------------------------6</p><p>  7、完成的情況--------------------------------------------------10</p><p>  8、用戶手冊------------------------------

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

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

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

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

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

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

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

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

12、;  (3)系統(tǒng)試探著把資源分配給進程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)。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復原來的資源分配狀態(tài),讓進程Pi等待。</p><p><b>  3、安全性算法</b></p><p>  系統(tǒng)所執(zhí)行的安全性算法可描述如下:<

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

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

16、。</p><p>  (3)當進程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應執(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)如果所有進程的Finish[i]=true都滿足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。</p><p><b>  五、總體設計</b></p><p>  1、數(shù)據(jù)結(jié)構(gòu)設計描述</p><p>  (1)AVAILABLE[MAXRESOURCE]:</p><p>  可利用資源向量A

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

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

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

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

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

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

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

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

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

27、void CheckResource()查看資源剩余情況函數(shù),這幾個函數(shù)比較簡單,這里將介紹其它幾個函數(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、測試步驟</b></p><p>  (1)初始化銀行家算法,設定系統(tǒng)有3類資源A,B,C,資源A,B,C的總資源分別為10,5,7?,F(xiàn)有5個進程{P0,P1,P2,P3,P4},它們對各類資源的最大申請量和已分配的資源數(shù)如下表所示。</p><p>

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

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

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

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

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

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

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

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

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

38、"iomanip.h" //該頭文件包含iostream.h的全部內(nèi)容</p><p>  #include "stdlib.h"</p><p>  #define MAXPROCESS 50 //最大進程數(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]; //進程需要資源數(shù)</p><p>  bool FINISH[MAXPROCESS];

41、 //系統(tǒng)是否有足夠的資源分配</p><p>  int Work[MAXRESOURCE]; //工作數(shù)組</p><p>  int p[MAXPROCESS]; //存儲安全序列</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'}; //默認進程名 </p><p>  int n,m; //n個進程,m個資源&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;請輸入資源的種類數(shù)(1-26):"; //初始化資源種類數(shù)</p><p><b>  cin>>m; </b></p><p>  cout<<"請輸入各類資源的總數(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<<"請輸入進程的數(shù)目(1-50):"; //初始化進程總數(shù)</p><p><b>  

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

49、<p><b>  { </b></p><p>  cout<<endl<<" 進程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<<"請輸入每個進程已分配的各資源數(shù):"<<endl; </p><p>  //初始化分配矩陣ALLOCATION[MAXPROCESS][MAXRESOURCE]</p><p>  for(i=0;i<n;i++)</p

52、><p><b>  {</b></p><p>  cout<<endl<<" 進程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<<"進程所擁有的"<<Resourcename[j]<<"類資源數(shù)錯誤,請重新輸入:"<<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++) //從申請資源的進程開始掃描所有進程</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; //進程執(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; //實現(xiàn)循環(huán)掃描 </p><p>  if(a<0)

65、 i=n; //實現(xiàn)退出掃描</p><p><b>  }</b></p><p>  for(i=0;i<n;i++) //安全性算法不通過返回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; //通過安全性算法返回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<<"您輸入的請求數(shù)超過進程的需求量

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<<"您輸入的請求數(shù)超過系統(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)試探著把資源分配給進程</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<<"用銀行家算法檢查通過,假設為該進程分配所需資源!"<<endl; </p><p>  return true; //通過銀行家算法返回true</p><p><b>  }</b></p><

77、;p>  //為進程申請資源 </p><p>  void Request() </p><p><b>  {</b></p><p>  int i,cusneed;</p><p>  cout<<"請輸入要申請資源的進程號&

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

79、><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"請輸入進程所請求的各類資源的數(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<<"通過安全性算

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

83、的,您的請求被拒絕!"<<endl; //沒通過安全性算法,恢復原來的資源分配狀態(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>  //查看各類資源的情況 </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

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

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

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

91、lt;/b></p><p><b>  { </b></p><p>  cout<<"進程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>  { //輸出進程已分配和還需要的各類資源數(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>  //程序處理過程</b></p><p><b>  do{</b></p><

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

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

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

99、*****請 輸 入 你 的 選 擇 (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;輸入功能有誤,請重輸: ";</p><p>  }while(flag<1||flag>5);//根據(jù)不同的選擇進行相應的處理</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<<"程序運行結(jié)束!"<<end

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

評論

0/150

提交評論