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

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)學(xué)與計(jì)算機(jī)學(xué)院</b></p><p><b>  課程設(shè)計(jì)說明書</b></p><p>  課 程 名 稱: 操作系統(tǒng)原理-課程設(shè)計(jì) </p><p>  課 程 代 碼: </p><p>  題 目:

2、 銀行家算法 </p><p>  年級/專業(yè)/班: 2009級軟件工程2班 </p><p>  學(xué) 生 姓 名: </p><p>  學(xué) 號: </p><p>  開 始 時(shí) 間: 2011

3、 年 12 月 05 日</p><p>  完 成 時(shí) 間: 2011 年 12 月 25 日</p><p><b>  課程設(shè)計(jì)成績:</b></p><p>  指導(dǎo)教師簽名: 年 月 日</p><p><b>  目 錄 </b&g

4、t;</p><p><b>  1 引 言1</b></p><p>  1.1 問題的提出1</p><p>  1.2任務(wù)與分析1</p><p><b>  2 需求分析1</b></p><p>  2.1數(shù)據(jù)的初始化1</p><p

5、>  2.2銀行家算法1</p><p>  2.3 系統(tǒng)安全性的檢測1</p><p><b>  2.4顯示功能1</b></p><p><b>  2.5恢復(fù)功能1</b></p><p><b>  2.6菜單功能2</b></p>&l

6、t;p>  3 程序運(yùn)行平臺2</p><p><b>  4 總體設(shè)計(jì)2</b></p><p><b>  5 詳細(xì)設(shè)計(jì)2</b></p><p>  5.1數(shù)據(jù)的錄入2</p><p>  5.2 顯示模塊4</p><p>  5.3 系統(tǒng)安全狀態(tài)檢測

7、5</p><p>  5.4 系統(tǒng)試為進(jìn)程分配資源7</p><p>  5.5 恢復(fù)函數(shù)8</p><p>  5.6 菜單選項(xiàng)8</p><p><b>  6 系統(tǒng)測試9</b></p><p><b>  7 結(jié)論13</b></p>&l

8、t;p><b>  參考文獻(xiàn)15</b></p><p><b>  摘 要 </b></p><p>  隨著計(jì)算機(jī)的普及計(jì)算機(jī)的日新月異,計(jì)算機(jī)可以說在飛速的發(fā)展著,計(jì)算機(jī)領(lǐng)域的相關(guān)技術(shù)也越來越高,許多的技術(shù)得到了較好的改進(jìn),使計(jì)算機(jī)越來越滿足人們的要求和生活習(xí)慣,這也是計(jì)算機(jī)得到飛速發(fā)展的原因之一,。隨著計(jì)算機(jī)的發(fā)展,人們對計(jì)算

9、機(jī)的需求也越來越高,為了防止用戶操作過于平凡,導(dǎo)致計(jì)算機(jī)同一時(shí)刻進(jìn)程過多而產(chǎn)生死鎖,所以本次任務(wù)主要是編寫銀行家算法避免計(jì)算機(jī)產(chǎn)生死鎖。經(jīng)過分析,本次主要是銀行家算法通用程序的編寫,以及測試所跟進(jìn)程狀態(tài)的安全性,經(jīng)查閱相關(guān)資料,了解了銀行家算法的大體思路,經(jīng)過設(shè)計(jì)流程圖,用java語言,利用neatbean 6.9實(shí)現(xiàn)了銀行家算法的通用程序,該程序具有輸入進(jìn)程資源以及計(jì)算機(jī)可利用資源的數(shù)量,即初始化。輸出資源進(jìn)程資源信息,檢測系統(tǒng)安全性

10、,進(jìn)程請求資源,系統(tǒng)試為進(jìn)程分配資源,不成功恢復(fù)資源等功能。因此銀行家算法的各種功能基本已經(jīng)實(shí)現(xiàn)。</p><p>  關(guān)鍵詞:銀行家算法通用程序;計(jì)算機(jī);避免死鎖的算法 </p><p><b>  1 引 言 </b></p><p>  1.1 問題的提出 </p><p>  在多道程序程序系統(tǒng)中,雖可借助于多

11、個(gè)進(jìn)程的并發(fā)執(zhí)行來改善系統(tǒng)資源利用率,提高系統(tǒng)的額吞吐量,但是可能會(huì)發(fā)生一種危險(xiǎn)—死鎖。所謂死鎖,是指多個(gè)進(jìn)程在運(yùn)行過程中因爭奪資源而造成的一種僵局,當(dāng)進(jìn)程處于這種僵持狀態(tài)時(shí),若無外力作用,他們將無法再向前推進(jìn)。為了避免這種情況的發(fā)生,本次利用課程設(shè)計(jì)之際,編寫了一個(gè)銀行家算法通用程序,避免死鎖在發(fā)生。</p><p><b>  1.2任務(wù)與分析 </b></p><p

12、>  本課題主要的目的是編寫銀行家算法通用程序,功能主要包括銀行家算法中數(shù)據(jù)結(jié)構(gòu)的初始化,銀行家算法的實(shí)現(xiàn),安全性檢測的算法實(shí)現(xiàn)等等。以及對給定的狀態(tài)進(jìn)行測試安全性等。</p><p><b>  2 需求分析</b></p><p><b>  2.1數(shù)據(jù)的初始化</b></p><p>  對銀行家算法中的數(shù)據(jù)結(jié)

13、構(gòu)進(jìn)行初始化,包括資源種類和進(jìn)程數(shù)目的輸入,可利用資源的初始化,進(jìn)程的最大需求矩陣,分配矩陣。 </p><p><b>  2.2銀行家算法</b></p><p>  對一個(gè)進(jìn)程請求的資源進(jìn)行判斷,看是否可以為其立即進(jìn)行資源的分配。若可以,試著分配,并且進(jìn)行安全性的檢測,若不安全,恢復(fù)原來的資源分配情況。</p><p>  2.3 系統(tǒng)安

14、全性的檢測</p><p>  能夠?qū)δ硶r(shí)刻的資源分配情況進(jìn)行檢測,判斷系統(tǒng)是否安全。</p><p><b>  2.4顯示功能</b></p><p>  顯示某時(shí)刻資源的分配狀態(tài)</p><p><b>  2.5恢復(fù)功能</b></p><p>  對進(jìn)程請求資源,已

15、獲得分配的,經(jīng)檢測不安全的狀態(tài)進(jìn)行恢復(fù)為請求前的狀態(tài)</p><p><b>  2.6菜單功能</b></p><p>  列出用戶能操作的選項(xiàng)</p><p><b>  3 程序運(yùn)行平臺</b></p><p>  Neatbean IDE 6.9</p><p>  

16、具體操作如下:文件->打開項(xiàng)目->運(yùn)行->運(yùn)行文件。 </p><p><b>  4 總體設(shè)計(jì) </b></p><p>  圖4.1 系統(tǒng)總體框架圖</p><p><b>  5 詳細(xì)設(shè)計(jì)</b></p><p><b>  5.1數(shù)據(jù)的錄入</b>&l

17、t;/p><p>  選擇數(shù)據(jù)錄入菜單后,系統(tǒng)將提示用戶輸入相關(guān)的數(shù)據(jù)。包括輸入資源種類,進(jìn)程數(shù)目,以及可利用資源數(shù)目。進(jìn)程最大需求矩陣,已分配矩陣。</p><p><b>  流程圖如圖6.1:</b></p><p><b>  關(guān)鍵代碼:</b></p><p>  /*------------

18、----------------初始化函數(shù)------------------------------*/ </p><p>  public void input(){</p><p>  System.out.println("請輸入資源的種類n和進(jìn)程數(shù)m:");</p><p>  n=sc.nextInt() ;</p&

19、gt;<p>  m=sc.nextInt();</p><p>  Available=new int[1][n];</p><p>  Request=new int[1][n];</p><p>  Allocation=new int[m][n];</p><p>  Need=new int[m][m];</p&

20、gt;<p>  Max=new int[m][n];</p><p>  System.out.println("請輸入各類資源的數(shù)目:");</p><p>  for(int i=0;i<n;i++)</p><p>  Available[0][i]=sc.nextInt();</p><p>

21、  System.out.println("請輸入各進(jìn)程請求的各類資源的最大數(shù)目:");</p><p>  for(int h=0;h<m;h++){</p><p>  for(int j=0;j<n;j++){</p><p>  Max[h][j]=sc.nextInt();</p><p><b

22、>  }</b></p><p>  // System.out.println();</p><p><b>  }</b></p><p>  System.out.println("請輸入各進(jìn)程請求的各類資源已經(jīng)分配數(shù)目:");</p><p>  for(int h=0;h&

23、lt;m;h++){</p><p>  for(int j=0;j<n;j++){</p><p>  Allocation[h][j]=sc.nextInt();</p><p><b>  }</b></p><p>  // System.out.println();</p><p>

24、;<b>  }</b></p><p>  for(int k=0;k<m;k++)</p><p>  for(int e=0;e<n;e++){</p><p>  Need[k][e]=Max[k][e]-Allocation[k][e];</p><p><b>  } </b>

25、;</p><p><b>  }</b></p><p>  /*-------------------------初始化函數(shù)結(jié)束------------------------------*/</p><p><b>  5.2 顯示模塊</b></p><p>  將進(jìn)程的資源分配情況顯示出來

26、</p><p><b>  流程圖:</b></p><p><b>  關(guān)鍵代碼:</b></p><p>  /*-------------顯示函數(shù)----------------------------------*/</p><p>  public void display(){<

27、/p><p><b>  int i,j;</b></p><p>  System.out.println("正在更新數(shù)據(jù)...");</p><p>  System.out.println("|-----|-----|-------|--------|---------|-------|");</

28、p><p>  System.out.println("|-----| 資源| Max | Allocation | Need | Available |");</p><p>  System.out.println("|進(jìn)程 |");</p><p>  System.out.println("|-----|----

29、------|-----------|--------|--------|");</p><p>  for(i=0;i<m;i++){</p><p>  System.out.print("|p"+i+" |");</p><p>  for(j=0;j<n;j++)</p><

30、;p>  System.out.print(Max[i][j]+" ");</p><p>  System.out.print("|");</p><p>  for(j=0;j<n;j++) </p><p>  System.out.print(" "+Allocation[i][j

31、]);</p><p>  System.out.print("|");</p><p>  for(j=0;j<n;j++)</p><p>  System.out.print(" "+Need[i][j]);</p><p>  System.out.print("|"

32、);</p><p><b>  if(i==0){</b></p><p>  for(j=0;j<n;j++)</p><p>  System.out.print(" "+Available[0][j]);</p><p>  System.out.println("|&quo

33、t;);</p><p><b>  }</b></p><p>  if(i>0)System.out.println();</p><p><b>  }</b></p><p>  System.out.println("|-----|----------|---------|

34、---------|----------|"); </p><p><b>  }</b></p><p>  /*-------------------------顯示函數(shù)結(jié)束--------------------------------*/</p><p>  5.3 系統(tǒng)安全狀態(tài)檢測</p><p>

35、;  能對跟定的系統(tǒng)狀態(tài)進(jìn)行安全檢測,成功輸出系統(tǒng)安全狀態(tài)圖,否則輸出系統(tǒng)狀態(tài)不安全</p><p><b>  流程圖:</b></p><p><b>  關(guān)鍵代碼:</b></p><p>  /*------------------------檢測狀態(tài)安全涵數(shù)函數(shù)-------------------*/</

36、p><p>  void checksafe1(int s)</p><p><b>  {</b></p><p>  int temp[]=new int[m],i,l=0,k=0,count=0;</p><p>  boolean Finish[]=new boolean[m];</p><p

37、>  work=new int[1][n];</p><p>  work1=new int[m][n];</p><p>  work2=new int [m][n];</p><p>  int a=jcys(m);</p><p>  for(int v=0;v<m;v++)</p><p>  Fi

38、nish[v]=false;</p><p>  System.arraycopy(Available[0], 0, work[0], 0, n);</p><p>  i=s;//s傳遞進(jìn)來賦給i,s是用戶輸入的進(jìn)程號(有主函數(shù)里的in傳遞進(jìn)來)</p><p>  while(i<m&&k!=m&&count!=a) { &

39、lt;/p><p>  for(int j=0;j<n;j++)</p><p>  if (Finish[i]==false&&Need[i][j]<=work[0][j])l++;</p><p><b>  if(l==n){</b></p><p>  System.arraycopy(w

40、ork[0], 0, work1[k], 0, n);</p><p>  for(int j=0;j<n;j++){</p><p>  work[0][j]=work[0][j]+Allocation[i][j];</p><p><b>  }</b></p><p>  System.arraycopy(w

41、ork[0], 0, work2[k], 0, n);</p><p>  Finish[i]=true;</p><p>  temp[k]=i;</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  l

42、=0;</b></p><p><b>  count++;</b></p><p>  i=(i+1)%m;//從用戶選擇的進(jìn)程開始對每個(gè)進(jìn)程都要檢測</p><p><b>  }</b></p><p><b>  if(k!=m){</b></p>

43、;<p>  System.out.println("系統(tǒng)資源狀態(tài)不安全!!! ");</p><p><b>  }</b></p><p><b>  else {</b></p><p>  System.out.println("已通過安全性測試!");<

44、/p><p>  System.out.println("系統(tǒng)狀態(tài)安全");</p><p>  System.out.println("打印輸出...");</p><p>  System.out.println("|-----|-----|------|-------|------|------|------|&q

45、uot;);</p><p>  System.out.println("|-----| 資源| Work | Need | Allocation | Work+Allocation | Funish");</p><p>  System.out.println("|進(jìn)程 |");</p><p>  System

46、.out.println("|-----|----------|---------|----------|---------|");</p><p>  for(i=0;i<m;i++){</p><p>  System.out.print("|p"+temp[i]+" |");</p><p>

47、;  for(int j=0;j<n;j++)</p><p>  System.out.print(work1[i][j]+" ");</p><p>  System.out.print("|");</p><p>  for(int j=0;j<n;j++) </p><p>  

48、System.out.print(" "+Need[temp[i]][j]);</p><p>  System.out.print("|");</p><p>  for(int j=0;j<n;j++)</p><p>  System.out.print(" "+Allocation[tem

49、p[i]][j]);</p><p>  System.out.print("|");</p><p>  for(int j=0;j<n;j++)</p><p>  System.out.print(" "+work2[i][j]);</p><p>  System.out.print(&

50、quot;|");</p><p>  System.out.println(" "+Finish[i]+" |");</p><p><b>  }</b></p><p>  System.out.println("|-----|--------|------|--------

51、|-------|--------|");</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*---------------------檢測狀態(tài)安全涵數(shù)結(jié)束------------------------------*/</p><p>

52、;  5.4 系統(tǒng)試為進(jìn)程分配資源</p><p>  首先由用戶輸入要需要請求求資源的進(jìn)程號,然后根據(jù)提示輸入請求資源的數(shù)量,當(dāng)輸入滿足要求后,系統(tǒng)試為該進(jìn)程分配資源</p><p><b>  流程圖:</b></p><p><b>  關(guān)鍵代碼:</b></p><p>  /*------

53、-----------------試分配函數(shù)----------------------------------*/</p><p>  void tryfenpei(int i){</p><p>  for(int f=0;f<n;f++)</p><p><b>  {</b></p><p>  Avail

54、able[0][f] = Available[0][f] - Request[0][f];</p><p>  Allocation[i][f] = Allocation[i][f] + Request[0][f];</p><p>  Need[i][f] = Need[i][f]-Request[0][f];</p><p><b>  }</b

55、></p><p><b>  }</b></p><p>  /*----------------------試分配函數(shù)結(jié)束----------------------------------*/</p><p><b>  5.5 恢復(fù)函數(shù)</b></p><p>  當(dāng)系統(tǒng)試著為進(jìn)程分配

56、資源后,進(jìn)檢測分配后的狀態(tài)為不安全,既要恢復(fù)分配以前的狀態(tài)。</p><p><b>  流程圖:</b></p><p><b>  關(guān)鍵代碼:</b></p><p>  /*---------------------恢復(fù)數(shù)據(jù)函數(shù)----------------------------------*/</p>

57、;<p>  void refenpei(int i){</p><p>  for(int f=0;f<n;f++){</p><p>  Available[0][f] = Available[0][f] + Request[0][f];</p><p>  Allocation[i][f] = Allocation[i][f] - Requ

58、est[0][f];</p><p>  Need[i][f] = Need[i][f]+Request[0][f];</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*--------------------恢復(fù)數(shù)據(jù)函數(shù)結(jié)束----------

59、------------------------*/</p><p><b>  5.6 菜單選項(xiàng)</b></p><p>  用戶可以根據(jù)菜單選項(xiàng)選擇需要操作的選項(xiàng)。</p><p><b>  關(guān)鍵代碼:</b></p><p>  /*--------------------菜單選項(xiàng)函數(shù)---

60、---------------------------------*/</p><p>  public void menu(){</p><p>  System.out.println("|----------------------------------------|");</p><p>  System.out.println(&qu

61、ot;|---------1、初始化資源數(shù)組---------------|");</p><p>  System.out.println("|---------2、輸出系統(tǒng)資源情況-------------|");</p><p>  System.out.println("|---------3、系統(tǒng)安全測試-----------------|

62、");</p><p>  System.out.println("|---------4、進(jìn)程請求資源-----------------|");</p><p>  System.out.println("|---------5、退出試驗(yàn)---------------------|");</p><p>  Sys

63、tem.out.println("|----------------------------------------|");</p><p><b>  }</b></p><p>  /*----------------------菜單函數(shù)結(jié)束----------------------------------*/</p><

64、p><b>  6 系統(tǒng)測試</b></p><p>  首先進(jìn)入neatbean IDE 6.9,打開工程銀行家算法,然后進(jìn)入源程序,右鍵,運(yùn)行文件即可,下面是對給出的狀態(tài)進(jìn)行檢測,以及進(jìn)程申請資源的情況</p><p><b>  程序運(yùn)行初始狀態(tài):</b></p><p><b>  圖 6.1<

65、;/b></p><p>  首先對1>的a狀態(tài)測試選擇1輸入數(shù)據(jù)并顯示: </p><p><b>  圖 6.2</b></p><p>  選擇3進(jìn)行測試:結(jié)果如圖6.3所示</p><p><b>  圖 6.3</b></p><p>  對1>b

66、狀態(tài)進(jìn)行測試:選擇1輸入數(shù)據(jù)</p><p><b>  圖 6.4</b></p><p>  選擇3進(jìn)行狀態(tài)安全性檢測,結(jié)果如下圖所示:</p><p><b>  圖 6.5</b></p><p>  對2>所跟狀態(tài)進(jìn)行檢測,選擇1輸入數(shù)據(jù):</p><p>&

67、lt;b>  圖 6.6</b></p><p><b>  系統(tǒng)狀態(tài)安全。</b></p><p>  輸入3安全狀態(tài)檢測,結(jié)果下圖所示:</p><p><b>  圖 6.7</b></p><p><b>  系統(tǒng)狀態(tài)安全。</b></p>

68、;<p>  選擇4,輸入2>中進(jìn)程2請求資源(0420),結(jié)果如圖6.8所示:</p><p><b>  圖6.8</b></p><p>  因此可以立即為其分配資源。</p><p><b>  7 結(jié)論</b></p><p>  該題目是銀行家算法,主要是編寫銀行家算

69、法通用程序的編寫,并且測試題目給出的狀態(tài)的安全性,以及進(jìn)程請求資源是否可以立即進(jìn)行分配。進(jìn)過幾天的努力,終于實(shí)現(xiàn)了該題目所需要完成的功能,包括進(jìn)程初始態(tài)資源的錄入,檢測系統(tǒng)安全狀態(tài),銀行家算法的實(shí)現(xiàn),即進(jìn)程發(fā)起資源請求,經(jīng)判斷后,系統(tǒng)試著把資源分配跟該進(jìn)程,然后調(diào)用系統(tǒng)安全檢測函數(shù)進(jìn)行檢測,如果檢測通過,既可以立即跟該進(jìn)程進(jìn)行資源分配,否則分配失敗,恢復(fù)分配前的進(jìn)程資源情況,以及顯示進(jìn)程資源狀態(tài)等功能。經(jīng)輸入數(shù)據(jù)測試后,功能滿足,結(jié)果準(zhǔn)

70、確。該程序滿足銀行家的通用算法,即用戶可以進(jìn)行資源種類和進(jìn)程的個(gè)數(shù)。另外采用了菜單式的選項(xiàng),用戶可以明了的選擇自己想要做的事情。但是該程序?qū)嵲赿os下完成的輸入,見面看起來不是很舒服,如果有多的時(shí)間,可以試著采用圖形界面編程,在窗口中觀察結(jié)果更加清晰。</p><p>  通過本次課程設(shè)計(jì),可以說是受益匪淺,學(xué)到了許多的東西。在編寫程序的過程中,遇到了許多的問題,如知道了系統(tǒng)安全性檢查的方法,但是在編寫的過程中,

71、由于變量的位置沒有放正確,導(dǎo)致結(jié)果不正確,思維卻受到了限制,因?yàn)樗悸犯揪蜎]錯(cuò),因此很難發(fā)現(xiàn)是哪里錯(cuò),如果不采取正確的方法,就會(huì)浪費(fèi)很多的時(shí)間。遇到這種情況,我們需要設(shè)置更多的數(shù)據(jù)輸入進(jìn)行測試,這樣很快就可以發(fā)現(xiàn)是哪里不對。由此可知,遇到問題應(yīng)該選擇恰當(dāng)?shù)姆椒ㄟM(jìn)行解決,這樣效率才高。另外,通過背刺課程設(shè)計(jì),對銀行家算法基本上已經(jīng)了解,對java面向?qū)ο蟪绦蛟O(shè)計(jì)以及c語言有了更好的引用??偠灾?,感覺課程設(shè)計(jì)就是一種實(shí)現(xiàn),可以學(xué)到很多的東

72、西。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 湯子瀛等編著.計(jì)算機(jī)操作系統(tǒng).西安:西安電子科技出版社,1996.12</p><p>  [2] 耿祥義 等編著 .Java面向?qū)ο蟪绦蛟O(shè)計(jì).北京:清華大學(xué)出版社,2009.6</p><p>  [3] 朱立華 等編著.C語言程序設(shè)計(jì).北

溫馨提示

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

評論

0/150

提交評論