操作系統(tǒng)課程設(shè)計(jì)——銀行家算法的模擬實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  實(shí) 驗(yàn) 報(bào) 告</b></p><p><b>  附錄3</b></p><p><b>  程序源代碼:</b></p><p>  #include<string.h></p><p>  #include<stdio.h&

2、gt;</p><p>  #include<stdlib.h></p><p>  # define m 50</p><p>  # define false 0</p><p>  #define true 1</p><p>  int no1; //進(jìn)程數(shù)</p><p>

3、;  int no2; //資源數(shù)</p><p><b>  int r;</b></p><p>  int allocation[m][m],need[m][m],available[m],max[m][m]; </p><p>  char name1[m],name2[m];

4、 //定義全局變量</p><p>  void main()</p><p><b>  {</b></p><p>  void check();</p><p>  void print();</p><p>  int i,j,p=0,q=0;</p><p>&

5、lt;b>  char c;</b></p><p>  int request[m],allocation1[m][m],need1[m][m],available1[m];</p><p>  printf("**********************************************\n");</p><p&g

6、t;  printf("* 銀行家算法的設(shè)計(jì)與實(shí)現(xiàn) *\n");</p><p>  printf("**********************************************\n");</p><p>  printf("請(qǐng)輸入進(jìn)程總數(shù):\n");</p>

7、<p>  scanf("%d",&no1);</p><p>  printf("請(qǐng)輸入資源種類數(shù):\n");</p><p>  scanf("%d",&no2);</p><p>  printf("請(qǐng)輸入Max矩陣:\n");</p>&l

8、t;p>  for(i=0;i<no1;i++)</p><p>  for(j=0;j<no2;j++)</p><p>  scanf("%d",&max[i][j]); //輸入已知進(jìn)程最大資源需求量</p><p>  printf("請(qǐng)輸入Allocation矩陣:\n");</p

9、><p>  for(i=0;i<no1;i++)</p><p>  for(j=0;j<no2;j++)</p><p>  scanf("%d",&allocation[i][j]); //輸入已知的進(jìn)程已分配的資源數(shù)</p><p>  for(i=0;i<no1;i++)</p>

10、;<p>  for(j=0;j<no2;j++)</p><p>  need[i][j]=max[i][j]-allocation[i][j]; //根據(jù)輸入的兩個(gè)數(shù)組計(jì)算出need矩陣的值</p><p>  printf("請(qǐng)輸入Available矩陣\n");</p><p>  for(i=0;i<no2;i

11、++)</p><p>  scanf("%d",&available[i]); //輸入已知的可用資源數(shù)</p><p>  print(); //輸出已知條件</p><p>  check(); //檢測(cè)T0時(shí)刻已知條件的安全狀態(tài)</p><p>  if(r==1) //如果安全則執(zhí)行以下

12、代碼</p><p><b>  {</b></p><p><b>  do{ </b></p><p>  printf("\n請(qǐng)輸入請(qǐng)求資源的進(jìn)程號(hào)(0~4):\n");</p><p>  for(j=0;j<=no2;j++)</p><p&g

13、t;<b>  {</b></p><p>  scanf("%d",&i);</p><p>  if(i>=no1)</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");</p&g

14、t;<p>  continue; </p><p><b>  }</b></p><p>  else break;</p><p><b>  }</b></p><p>  printf("\n請(qǐng)輸入該進(jìn)程所請(qǐng)求的資源數(shù)request[j]:\n"

15、);</p><p>  for(j=0;j<no2;j++)</p><p>  scanf("%d",&request[j]);</p><p>  for(j=0;j<no2;j++)</p><p>  if(request[j]<=need[i][j]) p=0; </p>

16、<p>  //判斷請(qǐng)求是否超過(guò)該進(jìn)程所需要的資源數(shù)</p><p><b>  if(p)</b></p><p>  printf("請(qǐng)求資源超過(guò)該進(jìn)程資源需求量,請(qǐng)求失敗!\n");</p><p><b>  else</b></p><p><b&g

17、t;  {</b></p><p>  for(j=0;j<no2;j++)</p><p>  if(request[j]<=available[j]) q=0; //判斷請(qǐng)求是否超過(guò)可用資源數(shù)</p><p><b>  if(q) </b></p><p>  printf("沒(méi)

18、有做夠的資源分配,請(qǐng)求失?。n");</p><p>  else //請(qǐng)求滿足條件</p><p><b>  {</b></p><p>  for(j=0;j<no2;j++) </p><p><b>  {</b>

19、</p><p>  available1[j]=available[j]; </p><p>  allocation1[i][j]=allocation[i][j];</p><p>  need1[i][j]=need[i][j]; </p><p>  //保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)</p>

20、<p>  available[j]=available[j]-request[j]; </p><p>  allocation[i][j]=allocation+request[j];</p><p>  need[i][j]=need[i][j]-request[j];</p><p>  //系統(tǒng)嘗試把資源分配給請(qǐng)求的進(jìn)程</p>

21、<p><b>  }</b></p><p><b>  print();</b></p><p>  check(); //檢測(cè)分配后的安全性</p><p>  if(r==0) //如果分配后系統(tǒng)不安全</p><p><b>  {</b>&

22、lt;/p><p>  for(j=0;j<no2;j++)</p><p><b>  {</b></p><p>  available[j]=available1[j]; </p><p>  allocation[i][j]=allocation1[i][j];</p><p>  n

23、eed[i][j]=need1[i][j];</p><p>  //還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)</p><p><b>  }</b></p><p>  printf("返回分配前資源數(shù)\n");</p><p><b>  print();</b>&l

24、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  }printf("\n你還要繼續(xù)分配嗎?Y or N ?\n"); </p><p>  //判斷是否繼續(xù)進(jìn)行資源分配</p><p>  c=getch

25、ar();</p><p>  }while(c=='y'||c=='Y');</p><p><b>  }</b></p><p><b>  }</b></p><p>  void check() //安全算法函數(shù)</p><p>

26、<b>  {</b></p><p>  int k,f,v=0,i,j;</p><p>  int work[m],a[m];</p><p>  int finish[m];</p><p><b>  r=1;</b></p><p>  for(i=0;i<

27、no1;i++)</p><p>  finish[i]=false; // 初始化進(jìn)程均沒(méi)得到足夠資源數(shù)并完成</p><p>  for(i=0;i<no2;i++)</p><p>  work[i]=available[i];//work[i]表示可提供進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)</p><p><b>  k=no

28、1;</b></p><p><b>  do{</b></p><p>  for(i=0;i<no1;i++)</p><p><b>  {</b></p><p>  if(finish[i]==false)</p><p><b>  {

29、</b></p><p><b>  f=1;</b></p><p>  for(j=0;j<no2;j++)</p><p>  if(need[i][j]>work[j])</p><p><b>  f=0;</b></p><p>  if(

30、f==1) //找到還沒(méi)有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)程</p><p><b>  {</b></p><p>  finish[i]=true;</p><p>  a[v++]=i; //記錄安全序列號(hào)</p><p>  for(j=0;j<no2;j++)</p>

31、;<p>  work[j]+=allocation[i][j]; //釋放該進(jìn)程已分配的資源</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  k--; //每

32、完成一個(gè)進(jìn)程分配,未完成的進(jìn)程數(shù)就減1</p><p>  }while(k>0);</p><p><b>  f=1;</b></p><p>  for(i=0;i<no1;i++) //判斷是否所有的進(jìn)程都完成</p><p><b>  {</b></p>

33、<p>  if(finish[i]==false) </p><p><b>  {</b></p><p><b>  f=0;</b></p><p><b>  break;</b></p><p><b>  }</b></p

34、><p><b>  }</b></p><p>  if(f==0) //若有進(jìn)程沒(méi)完成,則為不安全狀態(tài)</p><p><b>  {</b></p><p>  printf("系統(tǒng)處在不安全狀態(tài)!");</p><p><b> 

35、 r=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:\n");</p>

36、;<p>  for(i=0;i<no1;i++)</p><p>  printf("p%d ",a[i]); //輸出安全序列</p><p><b>  }</b></p><p><b>  }</b></p><p>  void print()

37、 //輸出函數(shù)</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  printf("\n");</p><p>  printf("*************此時(shí)刻資源分配情況***************

38、******\n");</p><p>  printf("進(jìn)程名/號(hào) | Max | Allocation | Need |\n");</p><p>  for (i = 0; i < no1; i++)</p><p><b>  {</b></p>&l

39、t;p>  printf(" p%d/%d ",i,i);</p><p>  for (j = 0; j < no2; j++) </p><p>  {printf("%d ",max[i][j]);}</p><p>  for (j = 0; j < no2; j++) </p

40、><p>  {printf(" %d ",allocation[i][j]);}</p><p>  for (j = 0; j < no2; j++)</p><p>  {printf(" %d ",need[i][j]);}</p><p>  printf("\n"

41、;);</p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("各類資源可利用的資源數(shù)為:");</p><p>  for (j = 0; j < no2; j++) </p><p&g

42、t;  {printf(" %d",available[j]);}</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  (程序結(jié)束)</b></p><p><b>  附錄 4<

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論