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

下載本文檔

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

文檔簡介

1、<p>  設計題目: 銀行家算法 </p><p><b>  一、設計目的</b></p><p>  本課程設計是學習完“操作系統(tǒng)原理”課程后進行的一次全面的綜合訓練,通過課程設計,更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,加深對操作系統(tǒng)基礎理論和重要算法的理解,加強學生的動手能力。</p><p><

2、;b>  二、設計內(nèi)容</b></p><p><b>  1)概述</b></p><p>  用C或C++語言編制銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性。</p><p>  算法介紹:數(shù)據(jù)結(jié)構(gòu):</p><p>  可利用資源向量 Available;</p><p&g

3、t;  最大需求矩陣Max;</p><p>  分配矩陣Allocation;</p><p><b>  需求矩陣Need</b></p><p><b>  功能介紹</b></p><p>  模擬實現(xiàn)Dijkstra的銀行家算法以避免死鎖的出現(xiàn),分兩部分組成:</p><

4、;p>  第一部分:銀行家算法(掃描);</p><p>  第二部分:安全性算法。</p><p><b>  2)設計原理</b></p><p>  一.銀行家算法的基本概念</p><p><b>  1、死鎖概念。</b></p><p>  在多道程序系統(tǒng)中

5、,雖可借助于多個進程的并發(fā)執(zhí)行,來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險━━死鎖。所謂死鎖(Deadlock),是指多個進程在運行中因爭奪資源而造成的一種僵局(Deadly_Embrace),當進程處于這種僵持狀態(tài)時,若無外力作用,它們都將無法再向前推進。一組進程中,每個進程都無限等待被該組進程中另一進程所占有的資源,因而永遠無法得到的資源,這種現(xiàn)象稱為進程死鎖,這一組進程就稱為死鎖進程。</p>&l

6、t;p>  2、關于死鎖的一些結(jié)論: </p><p>  ? 參與死鎖的進程最少是兩個 </p><p>  ? (兩個以上進程才會出現(xiàn)死鎖) </p><p>  ? 參與死鎖的進程至少有兩個已經(jīng)占有資源 </p><p>  ? 參與死鎖的所有進程都在等待資源 </p><p>  ? 參與死鎖的進

7、程是當前系統(tǒng)中所有進程的子集 </p><p>  注:如果死鎖發(fā)生,會浪費大量系統(tǒng)資源,甚至導致系統(tǒng)崩潰。 </p><p><b>  3、資源分類。 </b></p><p><b>  永久性資源: </b></p><p>  可以被多個進程多次使用(可再用資源) </p>

8、<p>  ? 可搶占資源 </p><p>  ? 不可搶占資源 </p><p>  臨時性資源:只可使用一次的資源;如信號量,中斷信號,同步信號等(可消耗性資源) </p><p>  “申請--分配--使用--釋放”模式 </p><p>  4、產(chǎn)生死鎖的四個必要條件:互斥使用(資源獨占)、

9、不可強占(不可剝奪)、請求和保持(部分分配,占有申請)、循環(huán)等待。 </p><p>  1) 互斥使用(資源獨占) </p><p>  一個資源每次只能給一個進程使用。</p><p>  2) 不可強占(不可剝奪) </p><p>  資源申請者不能強行的從資源占有者手中奪取資源,資源只能由占有者自愿釋放。</p>&l

10、t;p>  3) 請求和保持(部分分配,占有申請) </p><p>  一個進程在申請新的資源的同時保持對原有資源的占有(只有這樣才是動態(tài)申請,動態(tài)分配)。</p><p><b>  4) 循環(huán)等待 </b></p><p>  存在一個進程等待隊列 </p><p>  {P1 , P2 , … , Pn},

11、 </p><p>  其中P1等待P2占有的資源,P2等待P3占有的資源,…,Pn等待P1占有的資源,形成一個進程等待環(huán)路。</p><p><b>  5、死鎖預防: </b></p><p>  定義:在系統(tǒng)設計時確定資源分配算法,保證不發(fā)生死鎖。具體的做法是破壞產(chǎn)生死鎖的四個必要條件之一。</p><p> ?、?/p>

12、破壞“不可剝奪”條件 </p><p>  在允許進程動態(tài)申請資源前提下規(guī)定,一個進程在申請新的資源不能立即得到滿足而變?yōu)榈却隣顟B(tài)之前,必須釋放已占有的全部資源,若需要再重新申請 </p><p> ?、谄茐摹罢埱蠛捅3帧睏l件。 </p><p>  要求每個進程在運行前必須一次性申請它所要求的所有資源,且僅當該進程所要資源均可滿足時才給予一次性分配。 </p

13、><p> ?、燮茐摹把h(huán)等待”條件 </p><p>  采用資源有序分配法: </p><p>  把系統(tǒng)中所有資源編號,進程在申請資源時必須嚴格按資源編號的遞增次序進行,否則操作系統(tǒng)不予分配。 </p><p>  6.安全狀態(tài)與不安全狀態(tài) </p><p><b>  安全狀態(tài): </b>&l

14、t;/p><p>  如果存在一個由系統(tǒng)中所有進程構(gòu)成的安全序列P1,…Pn,則系統(tǒng)處于安全狀態(tài)。一個進程序列{P1,…,Pn}是安全的,如果對于每一個進程Pi(1≤i≤n),它以后尚需要的資源量不超過系統(tǒng)當前剩余資源量與所有進程Pj (j < i )當前占有資源量之和,系統(tǒng)處于安全狀態(tài) (安全狀態(tài)一定是沒有死鎖發(fā)生的) </p><p>  不安全狀態(tài):不存在一個安全序列,不安全狀態(tài)一

15、定導致死鎖。</p><p><b>  二.銀行家算法</b></p><p>  1、銀行家算法中的數(shù)據(jù)結(jié)構(gòu) </p><p>  1)可利用資源向量Available </p><p>  它是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該

16、類資源的分配和回收而動態(tài)地改變。如果Available[j]=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個。 </p><p>  2)最大需求短陣Max </p><p>  這是—個n×m的矩陣,它定義了系統(tǒng)中n個進程中的每一個進程對m類資源的最大需求。如果Max(i,j)=K,表示進程i需要Rj類資源的最大數(shù)目為K。 </p><p>  3)分配短陣Allo

17、cation </p><p>  這是一個n×m的矩陣,它定義了系統(tǒng)中每一類資源當前已分配給每個進程的資源數(shù)。如果Allocation(i,j)=K,表示進程i當前已分得Rj類資源的數(shù)目為K。 </p><p>  4)需求矩陣Need </p><p>  它是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數(shù),如果Need[i,j]=K,

18、則表示進程i還需要Rj類資源k個,方能完成其任務。 </p><p>  上述三個矩陣間存在下述關系: </p><p>  Need[i,j]=Max[i,j]-Allocation[i,j] </p><p><b>  2、銀行家算法 </b></p><p>  設Requesti是進程Pi的請求向量。如果Req

19、uesti[j]=k,表示進程只需要k個Rj類型的資源。當Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查: </p><p>  1)如果 Requesti[j]<=Need[i,j],則轉(zhuǎn)向步驟2;否則,認為出錯,因為它所需要的資源數(shù)已超過它所宣布的最大值。 </p><p>  2)如果Requesti[j]<=Available[j] ,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無足夠

20、的資源,Pi必須等待。 </p><p>  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&

21、gt;  Need[i,j]:=Need[i,j]-Requesti[j]; </p><p>  4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則,將試探分配作廢,恢復原來的資源分配狀態(tài),讓進程Pi等待。 </p><p><b>  3、安全性算法 </b></p><p

22、>  系統(tǒng)所執(zhí)行的安全性算法可描述如下: </p><p><b>  1)設置兩個向量 </b></p><p>  ①、工作向量Work。它表示系統(tǒng)可提供給進程繼續(xù)運行所需要的各類資源數(shù)目,它含有m個元素,執(zhí)行安全算法開始時,Work = Available。 </p><p> ?、凇inish。它表示系統(tǒng)是否有足夠的資源分配給進

23、程,使之運行完成,開始時先做Finish[i]:=false ;當有足夠資源分配給進程時,令 Finish[i]:=true。 </p><p>  2)從進程集合中找到一個能滿足下述條件的進程: </p><p> ?、?、Finish[i]=false; ②、Need[i,j]<=Work[j];如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。 </p><p&g

24、t;  3)當進程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應執(zhí)行: </p><p>  Work[j]:=Work[i]+Allocation[i,j]; </p><p>  Finish[i]:=true; </p><p>  goto step 2; </p><p>  4)如果所有進程的Finish[i]

25、:=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。</p><p><b>  3)詳細設計及編碼</b></p><p>  1)銀行家算法流程圖</p><p><b>  2)程序源代碼</b></p><p>  #include <iostream.h></

26、p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p><p><b>  //定義全局變量</b></p><p>  const int

27、 x=20,y=20; //常量,便于修改</p><p>  int Available[x]; //各資源可利用的數(shù)量</p><p>  int Allocation[y][y]; //各進程當前已分配的資源數(shù)量</p><p>  int Max[y][y]; //各進程對各類資源的最大需求數(shù)</p><p>  i

28、nt Need[y][y]; //尚需多少資源</p><p>  int Request[x]; //申請多少資源</p><p>  int Work[x]; //工作向量,表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)量</p><p>  int Finish[y]; //表示系統(tǒng)是否有足夠的資源分配給進程,1為是</p><p>  

29、int p[y]; //存儲安全序列</p><p>  int i,j; //i表示進程,j表示資源</p><p>  int n,m; //n為進程i的數(shù)量,m為資源j種類數(shù)</p><p>  int l=0; //l用來記錄有幾個進程是Finish[i]=1的,當l=n是說明系統(tǒng)狀態(tài)是安全的</p><p>  int

30、counter=0;</p><p><b>  //函數(shù)聲明</b></p><p>  void chushihua(); //初始化函數(shù)</p><p>  void safe(); //安全性算法</p><p>  void show(); //函數(shù)show,輸出當前狀態(tài)</p>

31、<p>  void bank(); //銀行家算法</p><p>  //void jieshu(); //結(jié)束函數(shù)</p><p>  void chushihua()</p><p><b>  {</b></p><p>  cout<<"輸入進程的數(shù)量:

32、";//從此開始輸入有關數(shù)據(jù)</p><p><b>  cin>>n;</b></p><p>  cout<<"輸入資源種類數(shù): ";</p><p><b>  cin>>m;</b></p><p>  cout<<

33、;endl<<"輸入各種資源當前可用的數(shù)量( "<<m<<" 種): "<<endl;</p><p>  for (j=0; j<m; j++)</p><p><b>  {</b></p><p>  cout<<"輸入資源

34、 "<<j<<" 可利用的數(shù)量Available["<<j<<"]: ";</p><p>  cin>>Available[j]; //輸入數(shù)字的過程...</p><p>  Work[j]=Available[j]; //初始化Work[j],它的初始值就是當前可用

35、的資源數(shù)</p><p><b>  }</b></p><p>  cout<<endl<<"輸入各進程當前已分配的資源數(shù)量Allocation["<<n<<"]["<<m<<"]: "<<endl;</p>

36、<p>  for (i=0; i<n; i++)</p><p><b>  {</b></p><p>  for (j=0; j<m; j++)</p><p><b>  {</b></p><p>  cout<<" 輸入進程 "

37、;<<i<<" 當前已分配的資源 "<<j<<" 數(shù)量: ";</p><p>  cin>>Allocation[i][j];</p><p><b>  }</b></p><p>  cout<<endl;</p>

38、<p>  Finish[i]=0;//初始化Finish[i]</p><p><b>  }</b></p><p>  cout<<endl<<"輸入各進程對各類資源的最大需求Max["<<n<<"]["<<m<<"]: &quo

39、t;<<endl;</p><p>  for (i=0; i<n; i++)</p><p><b>  {</b></p><p>  for (j=0; j<m; j++)</p><p><b>  {</b></p><p>  cout&l

40、t;<" 輸入進程 "<<i<<" 對資源 "<<j<<" 的最大需求數(shù): ";</p><p>  cin>>Max[i][j];</p><p>  if(Max[i][j]>=Allocation[i][j]) //若最大需求大于已分配,則計算需求量

41、</p><p>  Need[i][j] = Max[i][j]-Allocation[i][j];</p><p><b>  else</b></p><p>  Need[i][j]=0;//Max小于已分配的時候,此類資源已足夠不需再申請</p><p><b>  }</b></p

42、><p>  cout<<endl;</p><p><b>  }</b></p><p>  cout<<endl<<"初始化完成"<<endl;</p><p><b>  }</b></p><p>&l

43、t;b>  //安全性算法函數(shù)</b></p><p>  void safe()</p><p><b>  {</b></p><p><b>  l=0;</b></p><p>  for (i=0; i<n;i++)</p><p><

44、b>  { //i++</b></p><p>  if (Finish[i]==0)</p><p>  { //逐個查找Finish[i]==0的進程 條件一</p><p>  counter=0; //記數(shù)器</p><p>  for (j=0; j<m; j++)</p><

45、;p><b>  {</b></p><p>  if (Work[j]>=Need[i][j]) counter=counter+1;//可用大于需求,記數(shù)</p><p><b>  }</b></p><p>  if(counter==m) //i進程的每類資源都符合Work[j]>=Need

46、[i][j] 條件二</p><p><b>  {</b></p><p>  p[l]=i; //存儲安全序列</p><p>  Finish[i]=1; //i進程標志為可分配</p><p>  for (j=0; j<m;j++)</p><p>  Work[j]=Work

47、[j]+Allocation[i][j]; //釋放資源</p><p>  l=l+1; //記數(shù),現(xiàn)在有L個進程是安全的,當L=N時說明滿足安全序列</p><p>  i= -1; //從第一個進程開始繼續(xù)尋找滿足條件一二的進程</p><p><b>  }</b></p><p><b>  }&l

48、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //顯示當前狀態(tài)函數(shù)</p><p>  void show() //函數(shù)show,輸出當前資源分配情況</p><p><b>  {</b

49、></p><p>  int i,j; //局部變量</p><p>  int All[y]; //各種資源的總數(shù)量</p><p>  cout<<"當前的狀態(tài)為:"<<endl;</p><p>  cout<<"各種資源的總數(shù)量:"<<en

50、dl;</p><p>  for (j=0;j<m;j++)</p><p><b>  {</b></p><p>  cout<<" 資源"<<j<<": ";</p><p>  All[j]=Available[j]; //總

51、數(shù)量=可用的+已分配的</p><p>  for (i=0;i<n;i++) All[j]+=Allocation[i][j];</p><p>  cout<<All[j]<<" ";</p><p><b>  }</b></p><p>  cout<

52、<endl<<"當前各種資源可用的量為(available):"<<endl;</p><p>  for (j=0;j<m;j++)</p><p>  cout<<" 資源"<<j<<": "<<Available[j]<<&quo

53、t; ";</p><p>  cout<<endl<<"各進程已經(jīng)得到的資源量(allocation): "<<endl;</p><p>  for (j=0;j<m;j++) cout<<'\t'<<"資源"<<j;</p>

54、<p>  cout<<endl;</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  cout<<"進程"<<i<<":";</p><p>  for

55、(j=0;j<m;j++) cout<<'\t'<<" "<<Allocation[i][j];</p><p>  cout<<endl;</p><p><b>  }</b></p><p>  cout<<endl<<&q

56、uot;各進程還需要的資源量(need):"<<endl;</p><p>  for (j=0;j<m;j++) cout<<'\t'<<"資源"<<j;</p><p>  cout<<endl;</p><p>  for(i=0;i<n;

57、i++)</p><p><b>  {</b></p><p>  cout<<"進程"<<i<<":";</p><p>  for (j=0;j<m;j++) cout<<'\t'<<" "&l

58、t;<Need[i][j];</p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //銀行家算法函數(shù)</b></p><p>  voi

59、d bank()</p><p><b>  {</b></p><p>  cout<<endl<<"進程申請分配資源:"<<endl;</p><p>  int k=0; //用于輸入進程編號</p><p>  bool r=false; // 初值為假

60、,輸入Y繼續(xù)申請則置為真</p><p><b>  do{//輸入請求</b></p><p>  cout<<"輸入申請資源的進程(0-"<<n-1<<"): ";</p><p><b>  cin>>k;</b></p&g

61、t;<p>  cout<<endl;</p><p>  while(k>n-1) //輸入錯誤處理</p><p><b>  {</b></p><p>  cout<<endl<<"輸入錯誤,重新輸入:"<<endl;</p><

62、p>  cout<<endl<<"輸入申請資源的進程(0--"<<n-1<<"): ";</p><p><b>  cin>>k;</b></p><p>  cout<<endl;</p><p><b>  }&

63、lt;/b></p><p>  cout<<endl<<"輸入該進程申請各類資源的數(shù)量: "<<endl;</p><p>  for (j=0; j<m; j++)</p><p><b>  {</b></p><p>  do{ //do……w

64、hile 循環(huán)判斷申請輸入的情況</p><p>  cout<<"進程 "<<k<<" 申請資源["<<j<<"]的數(shù)量:";</p><p>  cin>>Request[j];</p><p>  cout<<endl

65、;</p><p>  if(Request[j]>Need[k][j])</p><p>  { //申請大于需求量時出錯,提示重新輸入(貸款數(shù)目不允許超過需求數(shù)目)</p><p>  cout<<"申請大于需要量!"<<endl;</p><p>  cout<<"

66、;申請的資源"<<j<<"的數(shù)量為"<<Request[j]<<",大于 進程"<<k<<"對該資源需求量"<<Need[k][j]<<"。"<<endl;</p><p>  cout<<"重新

67、輸入!"<<endl;</p><p><b>  }</b></p><p>  else //先判斷是否申請大于需求量,再判斷是否申請大于可利用量</p><p>  if(Request[j]>Available[j])</p><p>  { //申請大于可利用量, 應該阻塞等待

68、?…… ???</p><p>  cout<<"\n沒有那么多資源,目前可利用資源"<<j<<"數(shù)量為"<<Available[j]<<",本次申請不成功,進程等待!"<<endl;</p><p>  Finish[k]=0; //該進程等待<

69、;/p><p>  goto ppp; //goto語句 跳轉(zhuǎn),結(jié)束本次申請</p><p><b>  }</b></p><p>  }while(Request[j]>Need[k][j]); //Request[j]>Available[j]||</p><p><b>  }</b&

70、gt;</p><p>  //改變Avilable、Allocation、Need的值</p><p>  for (j=0; j<m; j++) </p><p><b>  {</b></p><p>  Available[j] = Available[j]-Request[j];</p>&

71、lt;p>  Allocation[k][j] = Allocation[k][j]+Request[j];</p><p>  Need[k][j] = Need[k][j]-Request[j];</p><p>  Work[j] = Available[j];</p><p><b>  }</b></p><

72、p>  //判斷當前狀態(tài)的安全性</p><p>  safe(); //調(diào)用安全性算法函數(shù)</p><p><b>  if (l<n)</b></p><p><b>  {</b></p><p><b>  l=0;</b></p><

73、p>  cout<<"\n試分配后,狀態(tài)不安全,所以不予分配!恢復原狀態(tài)"<<endl;</p><p><b>  //恢復數(shù)據(jù)</b></p><p>  for (j=0; j<m; j++)</p><p><b>  {</b></p><

74、;p>  Available[j] = Available[j]+Request[j];</p><p>  Allocation[k][j] = Allocation[k][j]-Request[j];</p><p>  Need[k][j] = Need[k][j]+Request[j];</p><p>  Work[j] = Available[j]

75、;</p><p><b>  }</b></p><p>  for (i=0; i<n; i++)</p><p>  Finish[i]=0; //進程置為未分配狀態(tài)</p><p><b>  }</b></p><p><b>  else<

76、/b></p><p><b>  {</b></p><p><b>  l=0;</b></p><p>  cout<<"\n申請資源成功!!!"<<endl;</p><p>  for(j=0;j<m;j++)</p>

77、<p><b>  {</b></p><p>  if(Need[k][j]==0);</p><p><b>  else </b></p><p>  { //有一種資源還沒全部申請到,則該進程不可執(zhí)行,不能釋放擁有的資源</p><p>  l=1; //置l為1,作為

78、判斷標志</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(l!=1)</b></p><p>  { //進程可以執(zhí)

79、行,則釋放該進程的所有資源</p><p>  for (j=0;j<m;j++)</p><p><b>  {</b></p><p>  Available[j]=Available[j]+Allocation[k][j];</p><p>  Allocation[k][j]=0;</p>&

80、lt;p><b>  }</b></p><p>  cout<<"該進程已得到所有需求資源,執(zhí)行后將釋放其所有擁有資源!"<<endl;</p><p><b>  }</b></p><p>  l=0; //歸零</p><p>  cout

81、<<"\n安全的狀態(tài)!"<<endl;</p><p>  cout<<"安全序列為: ";</p><p>  cout<<endl<<"進程"<<"("<<p[0]<<")"; //輸出

82、安全序列,考慮顯示格式,先輸出第一個</p><p>  Finish[0]=0;</p><p>  for (i=1; i<n; i++)</p><p><b>  {</b></p><p>  cout<<"==>>"<<"進程"

83、<<"("<<p[i]<<")";</p><p>  Finish[i]=0; //所有進程置為未分配狀態(tài)</p><p><b>  }</b></p><p>  cout<<endl<<endl;</p><p>

84、<b>  }</b></p><p>  show(); //顯示當前狀態(tài)</p><p>  ppp: //申請大于可利用量, 應該阻塞等待,結(jié)束本次資源申請,GOTO 語句跳轉(zhuǎn)至此</p><p>  cout<<endl<<"是否繼續(xù)申請資源(y/n) ?";</p>&l

85、t;p>  char* b=new char; //輸入y/n,判斷是否繼續(xù)申請 <<endl</p><p><b>  cin>>b;</b></p><p>  cout<<endl;</p><p>  cout<<"------------------------

86、-------------------"<<endl<<endl;</p><p>  cout<<endl;</p><p>  if(*b=='y'||*b=='Y') r=true;</p><p><b>  else</b></p><p

87、><b>  //{</b></p><p>  r=false; //輸入非 Y 則令 R =false</p><p>  //jieshu(); //調(diào)用結(jié)束函數(shù)</p><p><b>  //}</b></p><p>  } while (r==true);</p>

88、;<p><b>  }</b></p><p><b>  //結(jié)束函數(shù)</b></p><p>  //void jieshu()</p><p><b>  //{</b></p><p>  // cout<<endl<<end

89、l;</p><p>  // cout<<"\t\t 演示計算完畢"<<endl;</p><p>  // cout<<endl<<endl;</p><p><b>  //}</b></p><p><b>  //主函數(shù)<

90、/b></p><p>  int main()</p><p><b>  {</b></p><p>  cout<<endl<<endl<<"\t\t\t\t模擬銀行家算法"<<endl<<endl;</p><p>  chus

91、hihua(); //初始化函數(shù)調(diào)用</p><p>  cout<<endl;</p><p>  show(); //輸出當前狀態(tài)</p><p>  safe(); //判斷當前狀態(tài)的安全性</p><p>  if (l<n) //l在safe中是用來記錄安全的進程的個數(shù)的</p><p&

92、gt;<b>  {</b></p><p>  cout<<"\n當前狀態(tài)不安全,拒絕申請!"<<endl;</p><p>  cout<<endl;</p><p><b>  return 0;</b></p><p><b>

93、;  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  int i; //局部變量</p><p><b>  l=0;</b></p><p>  cout<<

94、;endl<<"\n當前的狀態(tài)是安全的!安全序列為:"<<endl;</p><p>  cout<<"進程"<<"("<<p[0]<<")"; //輸出安全序列</p><p>  for (i=1; i<n; i++)

95、cout<<"->>"<<"進程"<<"("<<p[i]<<")";</p><p>  for (i=0; i<n; i++) Finish[i]=0; //所有進程置為未分配狀態(tài)</p><p>  cout<<en

96、dl;</p><p><b>  }</b></p><p>  bank(); //調(diào)用銀行家算法函數(shù)</p><p>  cout<<"\t\t 演示計算完畢"<<endl;</p><p><b>  return 0;</b></p&

97、gt;<p><b>  }</b></p><p><b>  4)運行結(jié)果分析</b></p><p><b>  1.示例數(shù)據(jù)</b></p><p><b>  進程數(shù)量:5</b></p><p><b>  資源種類3&

98、lt;/b></p><p>  2.測試結(jié)果(以上表中數(shù)據(jù)為列)</p><p><b>  截圖如下:</b></p><p><b>  5)設計小結(jié)</b></p><p>  這次我做的課題是“銀行家算法的模擬實現(xiàn)”,通過這次的課程設計,我不僅拓寬了自己的知識面,還在實踐過程中鞏固和

99、加深了自己所學的理論知識,使自己的技術(shù)素質(zhì)和實踐能力有了進一步的提高,同時我的專業(yè)水平也有了很大的進步。 </p><p>  同時,在軟件開發(fā)方面也累積了不少經(jīng)驗,對操作系統(tǒng)的知識重要性的認識更深了。通過設計過程的鍛煉,自己分析問題和解決問題的能力都得到了鍛煉和提高,完善了自己的知識結(jié)構(gòu),加深了對所學知識的理解。 </p><p>  通過幾天努力,這次課程設計圓滿的結(jié)束了,在這個過程中

100、,我學到了很多的知識,在以后的學習中,我會更加努力的學好專業(yè)知識,并將所學知識用于實踐當中去,以便牢固掌握知識。</p><p><b>  6)參考文獻</b></p><p>  [1]計算機操作系統(tǒng)(第3版),湯小丹,西安電子科技大學出版社,2007年7月</p><p>  [2]Visual C++面向?qū)ο缶幊探坛蹋ǖ诙妫跤龍裕?/p>

溫馨提示

  • 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

提交評論