久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2794|回復: 0
打印 上一主題 下一主題
收起左側

銀行家算法C語言模擬程序

[復制鏈接]
跳轉到指定樓層
樓主
銀行家算法C語言模擬程序
這個最簡單的模擬程序,為了完成操作系統作業而做的。大家放心,絕對可以運行,呵呵!
有什么不完善的地方請提出!(在計數器的運用上比較亂,希望大家看的明白)
(注:各位大哥大姐們,希望大家重視小弟我身為初學者不容易,到時別在其他網站到處亂添,這樣小弟我會很傷心的!作者:luo盧丹)
源程序:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. int Available[10];           //可使用資源向量
  5. int Max[10][10];             //最大需求矩陣
  6. int Allocation[10][10]={0};      //分配矩陣
  7. int Need[10][10]={0};            //需求矩陣
  8. int Work[10];                //工作向量
  9. int Finish[10];              //狀態標志
  10. int Request[10][10];         //進程申請資源向量
  11. int Pause[10];
  12. int List[10];
  13. int i,j;
  14. int n;                       //系統資源總數
  15. int m;                       //總的進程數
  16. int a;                       //當前申請的進程號
  17. int l,e;                     //計數器
  18. int b=0,c=0,f=0,g;           //計數器
  19. void mainenter()//主要的輸入部分代碼
  20. {
  21. printf("請輸入系統總共有的資源數:");
  22. scanf("%d",&n);
  23. printf("請輸入總共有多少個進程:");
  24. scanf("%d",&m);
  25. for(i=1;i<=n;i++)
  26. {
  27.   printf("第%d類資源有的資源實例:",i);
  28.   scanf("%d",&Available[i]);
  29. }
  30. for(i=1;i<=m;i++)
  31. {
  32.   for(j=1;j<=n;j++)
  33.   {
  34.    printf("進程P[%d]對第%d類資源的最大需求量:",i,j);
  35.    scanf("%d",&Max[i][j]);
  36.    Need[i][j]=Max[i][j];
  37.   }
  38. }
  39. }
  40. void mainrequest()  //進程提出新申請的代碼部分
  41. {
  42.     printf("請輸入申請資源的進程:");
  43.     scanf("%d",&a);
  44. for(i=1;i<=n;i++)
  45. {
  46.   printf("請輸入進程P[%d]對%d類資源的申請量:",a,i);
  47.   scanf("%d",&Request[a][i]);
  48.   if(Request[a][i]>Need[a][i])
  49.    printf("n出錯!進程申請的資源數多于它自己申報的最大量n");
  50.   if(Request[a][i]>Available[i])
  51.    printf("nP[%d]必須等待n",a);
  52. //以下是試探性分配
  53.   Available[i]=Available[i]-Request[a][i];
  54.   Allocation[a][i]=Allocation[a][i]+Request[a][i];
  55.   Need[a][i]=Need[a][i]-Request[a][i];
  56.   Work[i]=Available[i];
  57. }
  58. for(i=1;i<=m;i++)
  59. {
  60.   Pause[i]=Available[i];//Pause[i]只是一個暫時寄存的中間變量,為防止在下面
  61.                         //安全性檢查時修改到Available[i]而代替的一維數組
  62.   Finish[i]=false;
  63. }
  64. for(g=1;g<=m;g++)
  65. {
  66.   for(i=1;i<=m;i++)
  67.   {
  68.    b=0;                 //計數器初始化
  69.    for(j=1;j<=n;j++)
  70.    {   
  71.     if(Need[i][j]<=Pause[j])
  72.     {
  73.      b=b+1;   
  74.     }
  75.                 if(Finish[i]==false&&b==n)
  76.     {
  77.      for(l=1;l<=n;l++)
  78.      {
  79.       Pause[l]=Pause[l]+Allocation[i][l];
  80.      }
  81.      Finish[i]=true;
  82.      printf("$ %d ",i);//依次輸出進程安全序列之一中每個元素
  83.     }
  84.    }
  85.   }
  86. }
  87.     printf("n");
  88. for(i=1;i<=m;i++)  
  89. {
  90.   if(Finish[i]==true) f=f+1;//統計Finish[i]==true的個數
  91. }
  92. if (f==m)
  93. {
  94.   printf("safe static");
  95.      f=0;//將計數器f重新初始化,為下一次提出新的進程申請做準備
  96. }
  97. else
  98. {
  99.   printf(" unsafe static ");//以下代碼為當系統被判定為不安全狀態時
  100.                             //返回提出申請前的狀態
  101.   for(i=1;i<=n;i++)
  102.   {
  103.    Available[i]=Available[i]+Request[a][i];
  104.    Allocation[a][i]=Allocation[a][i]-Request[a][i];
  105.    Need[a][i]=Need[a][i]+Request[a][i];
  106.   }
  107. }
  108. }
  109. void mainprint()
  110. {
  111. printf("當前的系統狀態n");
  112. printf("        目前占有量     最大需求量      尚需要量 n進程");
  113. for(i=1;i<=n;i++)
  114.   for(j=1;j<=n;j++)
  115.   {
  116.    printf("  %d類",j);
  117.   }
  118. for(i=1;i<=m;i++)
  119. {
  120.   printf("nP[%d]",i);
  121.   for(j=1;j<=n;j++)
  122.   {
  123.    printf("   %d ",Allocation[i][j]);
  124.   }
  125.   for(j=1;j<=n;j++)
  126.   {
  127.    printf("   %d ",Max[i][j]);
  128.   }
  129.   for(j=1;j<=n;j++)
  130.   {
  131.    printf("   %d ",Need[i][j]);
  132.   }
  133. }
  134. printf("nn系統剩余資源量:   ");   
  135. for(i=1;i<=n;i++)
  136. {
  137.   printf("   %d ",Available[i]);
  138. }
  139. printf("n");
  140. }
  141. void main()
  142. { int k,h=1;
  143.    while(h)
  144.   {  system("cls");
  145.    {
  146.     printf("nn            ★ 歡迎使用本程序 ★n");
  147.     printf("nn  1:輸入系統的資源數、申請進程數、每個類資源的實例數");
  148.     printf("n  2:……………………………………  輸入進程的資源申請");
  149.     printf("n  3:……………………………………………  輸出系統狀態");
  150.     printf("n  4:…………………………………………………  退出程序");
  151.     printf("nn please choose ");
  152.     scanf("%d",&k);
  153.    }
  154.      switch(k)
  155.    {
  156.     case 1:mainenter();      break;
  157.     case 2:mainrequest();      break;
  158.     case 3:mainprint();      break;
  159.     case 4:h=0;        break;
  160.    }
  161.      printf("n");
  162.      system("pause");
  163.   }
  164.    system("cls");
  165.    printf("nn       謝謝使用 n");
  166.    printf("nn  See you next time!!!nnn");
  167. }
復制代碼

以下是程序運行截圖:
        以此輸入每個進程對各類資源的需求量;
      所有進程輸入完成后系統的當前狀態
進程P[2]再次提出申請,系統為安全狀態;
對進程P[2]分配后的系統狀態;
進程P[1]再次提出資源申請,分配后系統為不安全狀態,則不提供資源分配;
由于P[1]分配后系統狀態不安全,則退回到前一狀態;


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人av | 羞羞视频在线观看 | 91精品国产综合久久婷婷香蕉 | 久久精品欧美一区二区三区不卡 | 亚洲国产成人精品一区二区 | 久久久久中文字幕 | 午夜影院在线免费观看视频 | 久久久久久网站 | 日韩欧美精品在线 | 久草在线 | 懂色一区二区三区免费观看 | 91国内在线观看 | 91免费观看国产 | 欧美美女爱爱视频 | 日日摸日日添日日躁av | 亚洲成人999 | 国产午夜精品理论片a大结局 | 日日干夜夜操天天操 | 久久香蕉精品视频 | 日韩欧美在线播放 | 99在线精品视频 | 亚洲国产一区在线 | 91精品久久久久久久久中文字幕 | 91视频大全 | 免费a国产 | 国产精品久久久久不卡 | 亚洲久久在线 | 久久久久国产精品一区二区 | 国产片网站 | 久久美国 | 国产在线一区二区三区 | 久草在线 | 美女黄网站 | 91精品国产一区二区三区 | 国产精品久久久99 | 日韩视频区 | 国产视频中文字幕在线观看 | av网站在线播放 | 日本一道本 | 欧美一区二区三区视频在线播放 | av一区在线观看 |