2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  一、實(shí)驗(yàn)名稱:</b></p><p><b>  模擬實(shí)現(xiàn)銀行家算法</b></p><p><b>  二、實(shí)驗(yàn)?zāi)康模?lt;/b></p><p>  用程序語言模擬實(shí)現(xiàn)銀行家算法。銀行家算法是避免死鎖的一種重要方法,通過編寫一個(gè)簡單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)

2、、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。</p><p><b>  三、問題分析與設(shè)計(jì)</b></p><p>  1、算法思路:先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來的狀態(tài),拒絕申請(qǐng)。</

3、p><p>  2、銀行家算法步驟:</p><p> ?。?)如果Requesti<o(jì)r =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值。</p><p> ?。?)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(jìn)程必須等待。</p><p> ?。?)

4、系統(tǒng)試探把要求的資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:</p><p>  Available=Available-Request[i];</p><p>  Allocation=Allocation+Request;</p><p>  Need=Need-Request;</p><p>  (4)系統(tǒng)執(zhí)行安全性算法,檢查此次

5、資源分配后,系統(tǒng)是否處于安全狀態(tài)。</p><p>  3、安全性算法步驟:</p><p><b>  (1)設(shè)置兩個(gè)向量</b></p><p> ?、俟ぷ飨蛄縒ork。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時(shí),Work=Allocation;</p><p> ?、诓紶栂蛄縁inish。

6、它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始時(shí)先做Finish[i]=false,當(dāng)有足夠資源分配給進(jìn)程時(shí),令Finish[i]=true。</p><p>  (2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:</p><p> ?、貴inish[i]=false</p><p> ?、贜eed<or=Work</p><p&g

7、t;  如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。</p><p> ?。?)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:</p><p>  Work=Work+Allocation;</p><p>  Finish[i]=true; </p><p><b>  轉(zhuǎn)向步驟(2)。</b

8、></p><p> ?。?)如果所有進(jìn)程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。</p><p><b>  4、流程圖:</b></p><p> ?、傧到y(tǒng)主要過程流程圖:</p><p> ?、阢y行家算法流程圖:</p><p>  ③安全性算

9、法流程圖:</p><p><b>  5、實(shí)現(xiàn)過程:</b></p><p><b>  一、開發(fā)環(huán)境</b></p><p><b>  編程語言:java</b></p><p>  開發(fā)環(huán)境:windows & eclipse</p><p&

10、gt;<b>  二、開發(fā)過程:</b></p><p>  1、display()用于初始化資源矩陣和初始化進(jìn)程,available[][]、allocation[]、need[][]、resource[]、process[]。</p><p>  2、print(int)用于打印T時(shí)刻的資源矩陣。</p><p>  3、cal()用于進(jìn)行

11、安全性算法。</p><p>  4、changeStatu()通過request向量改變資源使用情況并進(jìn)行安全性檢測(cè)。</p><p>  5、main()用于初始化程序。</p><p>  三 、 關(guān)鍵代碼</p><p><b>  1.銀行家算法</b></p><p>  whil

12、e(flag){</p><p>  int[] req=new int[5];</p><p>  System.out.print("請(qǐng)輸入您要請(qǐng)求資源的 編號(hào):");</p><p>  int choose=scan.nextInt();</p><p>  System.out.print("請(qǐng)輸入該進(jìn)

13、程的請(qǐng)求向量:");</p><p>  for (int i = 0; i < resource; i++) {</p><p>  req[i]=scan.nextInt();</p><p>  }//將請(qǐng)求向量存入數(shù)組</p><p>  boolean flag1 = (req[0]<=need[choose]

14、[0]&&req[1]<=need[choose][1]&&req[2]<=need[choose][2]&&req[3]<=need[choose][3]&&req[4]<=need[choose][4]);</p><p>  boolean flag2 = (req[0]<=available[0]&&am

15、p;req[1]<=available[1]&&req[2]<=available[2]&&req[3]<=available[3]&&req[4]<=available[4]);</p><p>  System.out.println(flag1);</p><p>  System.out.println(fla

16、g2);</p><p>  if(flag1){</p><p>  if(flag2){</p><p>  //判斷請(qǐng)求向量是否小于可用資源數(shù) </p><p>  for (int i = 0; i < resource; i++) {</p><p>  available[i]=available[i

17、]-req[i]; //改變可用資源數(shù) </p><p>  allocation[choose][i]=allocation[choose][i]+req[i]; </p><p>  need[choose][i]=need[choose][i]-req[i]; //改變所需資源數(shù)3</p><p><b>  }</b></p>

18、;<p>  int[] work=new int[5];//資源種類數(shù)量大小的數(shù)組 </p><p>  boolean[] finish1=new boolean[process]; //設(shè)置finish標(biāo)志數(shù)組 </p><p>  for (int i = 0; i < process; i++) {</p><p>  finish1[

19、i]=false;</p><p><b>  }</b></p><p>  int[] array1=new int[process];</p><p>  int num1=1;</p><p>  int count11=0; </p><p>  while(num1<proces

20、s){</p><p>  for (int i = 0; i < process; i++) {</p><p>  if(finish1[i]==false){</p><p>  if(need[i][0]<=work[0]&&need[i][1]<=work[1]&&need[i][2]<=work[0

21、]&&need[i][3]<= work[3]&&need[i][4]<=work[4]){</p><p>  for (int j2 = 0; j2 < resource; j2++) {</p><p>  available[j2]=available[j2]+allocation[i][j2

22、];</p><p>  available[j2] = work[j2];</p><p><b>  }</b></p><p>  finish1[i]=true;</p><p>  array1[count11]=i;</p><p>  count11++;</p>&l

23、t;p><b>  }</b></p><p><b>  }</b></p><p><b>  }num1++;</b></p><p>  } //安全性算法3</p><p>  int count2=0;</p><p>  for (i

24、nt i = 0; i < array1.length; i++) {</p><p>  if(finish1[i]==true){</p><p><b>  count2++;</b></p><p><b>  }</b></p><p>  } //判斷有多少個(gè)進(jìn)程已經(jīng)成功得到所需進(jìn)

25、程并結(jié)束</p><p>  if(count2==process){</p><p>  System.out.println("存在一個(gè)安全序列:");</p><p>  for (int i = 0; i < array1.length; i++) {</p><p>  System.out.print(&

26、quot;P"+array1[i]+"→");</p><p><b>  }</b></p><p>  } //判斷整個(gè)進(jìn)程序列書否全部完成 并打印輸出安全序列</p><p><b>  else{</b></p><p>  System.out.printl

27、n("系統(tǒng)處于不安全狀態(tài)!");</p><p><b>  }</b></p><p>  System.out.println();</p><p><b>  }</b></p><p><b>  else{</b></p><p

28、>  System.out.println("資源不夠清等待!");</p><p><b>  }</b></p><p><b>  }//if結(jié)束</b></p><p><b>  else{</b></p><p>  System.out.

29、println("請(qǐng)求資源已超過所需資源!");</p><p><b>  }</b></p><p>  }//while結(jié)束</p><p>  }//end of method changeStatu</p><p>  public static void main(String args[

30、]) throws IOException{</p><p>  work w = new work();</p><p>  int count2 = 1; </p><p>  w.display();</p><p>  w.print(count2++);</p><p><b>  w.cal();

31、</b></p><p>  w.changeStatu();</p><p>  } //end of method main</p><p><b>  2.安全性算法</b></p><p>  boolean[] finish = new boolean[process];</p>&l

32、t;p>  for (int i = 0; i < process; i++) {</p><p>  finish[i]=false;//初始化數(shù)組finish</p><p><b>  }</b></p><p>  int[] array = new int[process];//定義一個(gè)數(shù)組保存安全序列</p>

33、<p>  int num=1;</p><p>  int count1=1; </p><p>  while(num<process){</p><p>  for (int i = 0; i < process; i++) {</p><p>  if(finish[i]==false){</p>

34、<p>  if(need[i][0]<=available[0]&&need[i][1]<=available[1]&&need[i][2]<=available[0]&&need[i][3]<=available[3]&&need[i][4]<=available[4]){</p><p>  for

35、(int j2 = 0; j2 < resource; j2++) {</p><p>  available[j2]=available[j2]+allocation[i][j2];</p><p><b>  }</b></p><p>  finish[i]=true;</p><p>  array[cou

36、nt1-1]=i;</p><p><b>  count1++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }num++;</b></p><p><

37、b>  } //安全性算法</b></p><p><b>  3、實(shí)驗(yàn)結(jié)果</b></p><p><b>  6、程序清單</b></p><p>  package banker;</p><p>  import java.io.IOException;</p>

38、<p>  import java.util.Scanner;</p><p>  public class work {</p><p><b>  public</b></p><p>  int resource;</p><p>  int process;</p><p>

39、  int available[];</p><p>  int max[][];</p><p>  int allocation[][];</p><p>  int need[][];//定義基本的數(shù)據(jù)</p><p>  boolean flag1;</p><p>  boolean flag2;</p

40、><p>  Scanner scan = new Scanner(System.in);</p><p>  public void display(){</p><p>  System.out.println("\t\t"+"操作系統(tǒng)課程設(shè)計(jì)--銀行家算法");</p><p>  System.ou

41、t.print("請(qǐng)輸入進(jìn)程數(shù):");</p><p>  process = scan.nextInt();</p><p>  System.out.print("請(qǐng)輸入資源種類數(shù):");</p><p>  resource = scan.nextInt();</p><p>  System.o

42、ut.print("請(qǐng)輸入可用資源數(shù):");</p><p>  available = new int[5];</p><p>  for(int i = 0;i<resource;i++){</p><p>  available[i] = scan.nextInt();</p><p><b>  }

43、</b></p><p>  System.out.println("請(qǐng)輸入資源分配矩陣");</p><p>  allocation = new int [5][5];</p><p>  for(int i = 0;i<process;i++){</p><p>  System.out.print

44、("請(qǐng)輸入"+ i + "號(hào)進(jìn)程已分配資源數(shù):");</p><p>  for(int j =0;j<resource;j++){</p><p>  allocation[i][j] = scan.nextInt();</p><p>  }//end of resource</p><p>

45、  } //end of process</p><p>  need = new int[5][5];</p><p>  for(int i = 0;i<process;i++){</p><p>  System.out.print("請(qǐng)輸入"+ i + "號(hào)進(jìn)程還需要資源數(shù):");</p><

46、p>  for(int j =0;j<resource;j++){</p><p>  need[i][j] = scan.nextInt();</p><p>  }//end of resource</p><p>  } //end of process</p><p>  max = new int[5][5];</

47、p><p>  for(int i = 0;i<process;i++){</p><p>  System.out.print("請(qǐng)輸入"+ i + "號(hào)進(jìn)程最大需求資源數(shù):");</p><p>  for(int j = 0;j<resource;j++){</p><p>  max[i

48、][j] = scan.nextInt();</p><p>  } // end of resource</p><p>  }// end of for process</p><p>  } //end of method display</p><p>  public void print(int g){</p>&l

49、t;p>  System.out.println();</p><p><b>  /*</b></p><p><b>  * 打印資源分配表</b></p><p><b>  * */</b></p><p>  System.out.println("T

50、"+g+"時(shí)刻的資源分配矩陣");</p><p>  System.out.println("進(jìn)程\tmax\t\tallocation\tneed\t\tavailable");</p><p>  System.out.print("P0 ");</p><p>  for (int i

51、= 0; i <resource; i++) {</p><p>  System.out.print(max[0][i]+" ");</p><p><b>  }</b></p><p>  System.out.print(" ");</p><p>  for

52、(int i = 0; i <resource; i++) {</p><p>  System.out.print(allocation[0][i]+" ");</p><p><b>  }</b></p><p>  System.out.print(" ");</p>&

53、lt;p>  for (int i = 0; i <resource; i++) {</p><p>  System.out.print(need[0][i]+" ");</p><p><b>  }</b></p><p>  System.out.print(" ");</

54、p><p>  for (int i = 0; i <resource; i++) {</p><p>  System.out.print(available[i]+" ");</p><p><b>  }</b></p><p>  System.out.println();</p&

55、gt;<p>  for (int i = 1; i < process; i++) {</p><p>  System.out.print("P"+i+" ");</p><p>  for (int j = 0; j < resource; j++) {</p><p>  System.ou

56、t.print(max[i][j]+" ");</p><p><b>  }</b></p><p>  System.out.print(" ");</p><p>  for (int j = 0; j < resource; j++) {</p><p>  S

57、ystem.out.print(allocation[i][j]+" ");</p><p><b>  }</b></p><p>  System.out.print(" ");</p><p>  for (int j = 0; j < resource; j++) {</p>

58、;<p>  System.out.print(need[i][j]+" ");</p><p><b>  }</b></p><p>  System.out.println();</p><p>  } //此段程序輸出已輸入數(shù)據(jù)s </p><p> 

59、 }//end of method print</p><p>  public void cal(){</p><p><b>  /**</b></p><p><b>  * 檢查安全序列</b></p><p><b>  * */</b></p><

60、;p>  boolean[] finish = new boolean[process];</p><p>  for (int i = 0; i < process; i++) {</p><p>  finish[i]=false;//初始化數(shù)組finish</p><p><b>  }</b></p><

61、p>  int[] array = new int[process];//定義一個(gè)數(shù)組保存安全序列</p><p>  int num=1;</p><p>  int count1=1; </p><p>  while(num<process){</p><p>  for (int i = 0; i < process

62、; i++) {</p><p>  if(finish[i]==false){</p><p>  if(need[i][0]<=available[0]&&need[i][1]<=available[1]&&need[i][2]<=available[0]&&need[i][3]<=available[3]&

63、;&need[i][4]<=available[4]){</p><p>  for (int j2 = 0; j2 < resource; j2++) {</p><p>  available[j2]=available[j2]+allocation[i][j2];</p><p><b>  }</b></p&g

64、t;<p>  finish[i]=true;</p><p>  array[count1-1]=i;</p><p><b>  count1++;</b></p><p><b>  }</b></p><p><b>  }</b></p>

65、<p><b>  }num++;</b></p><p><b>  } //安全性算法</b></p><p>  int count=0;</p><p>  for (int i = 0; i < array.length; i++) {</p><p>  if(finis

66、h[i]==true){</p><p><b>  count++;</b></p><p><b>  }</b></p><p>  }//檢查已完成的進(jìn)程數(shù)目</p><p>  if(count==process){</p><p>  System.out.pri

67、ntln("存在一個(gè)安全序列:");</p><p>  for (int i = 0; i < array.length; i++) {</p><p>  System.out.print("P"+array[i]+"→");</p><p><b>  }</b></

68、p><p><b>  }//輸出安全序列</b></p><p><b>  else{</b></p><p>  System.out.println("系統(tǒng)處于不安全狀態(tài)!");</p><p><b>  }</b></p><p&

69、gt;  System.out.println();</p><p>  }//end of cal</p><p>  public void prinSecurityList(){</p><p>  }//end of method prinSecurityList</p><p>  public void changeStatu()

70、{</p><p>  boolean flag=true;</p><p>  while(flag){</p><p>  int[] req=new int[5];</p><p>  System.out.print("請(qǐng)輸入您要請(qǐng)求資源的 編號(hào):");</p><p>  int choo

71、se=scan.nextInt();</p><p>  System.out.print("請(qǐng)輸入該進(jìn)程的請(qǐng)求向量:");</p><p>  for (int i = 0; i < resource; i++) {</p><p>  req[i]=scan.nextInt();</p><p>  }//將請(qǐng)求

72、向量存入數(shù)組</p><p>  boolean flag1 = (req[0]<=need[choose][0]&&req[1]<=need[choose][1]&&req[2]<=need[choose][2]&&req[3]<=need[choose][3]&&req[4]<=need[choose][4]);&l

73、t;/p><p>  boolean flag2 = (req[0]<=available[0]&&req[1]<=available[1]&&req[2]<=available[2]&&req[3]<=available[3]&&req[4]<=available[4]);</p><p>  Sy

74、stem.out.println(flag1);</p><p>  System.out.println(flag2);</p><p>  if(flag1){</p><p>  if(flag2){</p><p>  //判斷請(qǐng)求向量是否小于可用資源數(shù) </p><p>  for (int i = 0; i

75、 < resource; i++) {</p><p>  available[i]=available[i]-req[i]; //改變可用資源數(shù) 分配資源</p><p>  allocation[choose][i]=allocation[choose][i]+req[i]; //由于已分配資源 </p><p>  need[choose][i]=ne

76、ed[choose][i]-req[i]; //改變所需資源數(shù)3</p><p><b>  }</b></p><p>  int[] work=new int[5];//資源種類數(shù)量大小的數(shù)組 用來構(gòu)建available的數(shù)</p><p>  boolean[] finish1=new boolean[process]; //設(shè)置fini

77、sh標(biāo)志數(shù)組 </p><p>  for (int i = 0; i < process; i++) {</p><p>  finish1[i]=false;</p><p><b>  }</b></p><p>  int[] array1=new int[process];</p><

78、p>  int num1=1;</p><p>  int count11=0; </p><p>  while(num1<process){</p><p>  for (int i = 0; i < process; i++) {</p><p>  if(finish1[i]==false){</p>

79、<p>  if(need[i][0]<=work[0]&&need[i][1]<=work[1]&&need[i][2]<=work[0]&&need[i][3]<=work[3]&&need[i][4]<=work[4]){</p><p>  for (int j2 = 0; j2 < resour

80、ce; j2++) {</p><p>  available[j2]=available[j2]+allocation[i][j2];</p><p>  available[j2] = work[j2];</p><p><b>  }</b></p><p>  finish1[i]=true;</p>

81、<p>  array1[count11]=i;</p><p>  count11++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }num1++;</b></p><p>

82、;  } //安全性算法3</p><p>  int count2=0;</p><p>  for (int i = 0; i < array1.length; i++) {</p><p>  if(finish1[i]==true){</p><p><b>  count2++;</b></p>

83、;<p><b>  }</b></p><p>  } //判斷有多少個(gè)進(jìn)程已經(jīng)成功得到所需進(jìn)程并結(jié)束</p><p>  if(count2==process){</p><p>  System.out.println("存在一個(gè)安全序列:");</p><p>  for (in

84、t i = 0; i < array1.length; i++) {</p><p>  System.out.print("P"+array1[i]+"→");</p><p><b>  }</b></p><p>  } //判斷整個(gè)進(jìn)程序列書否全部完成 并打印輸出安全序列</p>

85、;<p><b>  else{</b></p><p>  System.out.println("系統(tǒng)處于不安全狀態(tài)!");</p><p><b>  }</b></p><p>  System.out.println();</p><p><b>

86、;  }</b></p><p><b>  else{</b></p><p>  System.out.println("資源不夠清等待!");</p><p><b>  }</b></p><p><b>  }//if結(jié)束</b><

87、;/p><p><b>  else{</b></p><p>  System.out.println("請(qǐng)求資源已超過所需資源!");</p><p><b>  }</b></p><p>  }//while結(jié)束</p><p>  }//end of

88、 method changeStatu</p><p>  public static void main(String args[]) throws IOException{</p><p>  work w = new work();</p><p>  int count2 = 1; </p><p>  w.display();<

89、;/p><p>  w.print(count2++);</p><p><b>  w.cal();</b></p><p>  w.changeStatu();</p><p>  } //end of method main</p><p>  }// end of class work<

溫馨提示

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

評(píng)論

0/150

提交評(píng)論