当前位置:首页 > 工具资源 > 正文内容

操作系统实验(三):c实现银行家算法的资源分配

admin2周前 (05-25)工具资源22

操作系统实验(三):c实现银行家算法的资源分配

[[id_484816843]d_694994859]id_1935620815]

①理解银行家算法。

②掌握进程安全性检查的方法及资源分配的方法。

二、【实验内容】

开发一套模拟银行家算法的软件银行家算法 资源分配,随后利用所提供的示例数据来检验该软件编写的准确性。

该系统涉及A、B、C、D四类资源银行家算法 资源分配,共计五个进程,包括PO、P1、P2、P3和P4操作系统实验(三):c实现银行家算法的资源分配,它们共同对这些资源进行使用。

各进程对资源的需求和分配情况如表4-1所示。

下表是各进程对资源的需求和分配情况表

操作系统实验(三):c实现银行家算法的资源分配 第1张

当前系统内银行家算法 资源分配操作系统实验(三):c实现银行家算法的资源分配,A、B、C、D四类资源剩余数量分别为1、5、2、0个,请依据银行家算法解答以下问题:

①现在系统是否处于安全状态?

若当前进程Pl申请所需(0、4、2、0)个资源,系统能否确保这些资源得到满足?

三、【实验步骤】

数据结构:

int available [100];//可利用资源数组

int max [50][100];//最大需求矩阵

定义了一个大小为50行100列的整数数组,用于矩阵分配。

int need [50][100];//需求矩阵

int request [50][100];

int finish [50];

int p [50];

[id_1008365469]

int isSafe()

int i = 0;

int j = 0;

int l = 0;

int work [100];//可利用资源数组

int main()//银行家算法

int i, j, mi;}

实验代码:

#include 
int available [100];//可利用资源数组
int max [50][100];//最大需求矩阵
int allocation [50][100];//分配矩阵
int need [50][100];//需求矩阵
int request [50][100];
int finish [50];
int p [50];
int m, n;//m个进程,n个资源
int isSafe()
{
 int i = 0;
 int j = 0;
 int l = 0;
 int work [100];//可利用资源数组
 for(i = 0; i < n; i++)
 {
  work[i] = available[i];
 }
 for(i = 0; i < m; i++)
 {
  finish[i] = 0;
 }
 for(i = 0; i < m; i++)
 {
  if(finish[i] == 1)
  {
   continue;
  }
  else
  {
   for(j = 0; j < n; j++)
   {
    if(need[i][j] > work[j])
    {
     break;
    }
   }
   if(j == n)
   {
    finish[i] = 1;
    int k;
    for(k = 0; k < n; k++)
    {
     work[k] += allocation[i][k];
     p[l++] = i;
     i = -1;
    }
    
   }
   else 
   {
    continue;
   }
  }
  if(l == m)
  {
   printf("系统是安全的\n");
   printf("安全序列是:\n");
   for(i = 0; i < l; i++)
   {
    printf("%d", p[i]);
    if(i != l-1)
    {
     printf("-->");
    }
   }
   printf("\n");
   return 1;
  }
 }
}
int main()//银行家算法
{
 int i, j, mi;
 printf("输入进程的数目:\n");
 scanf("%d", &m);
 printf("输入资源的种类:\n");
 scanf("%d", &n);
 printf(请输入每个进程所需的最大资源数量,并按照%d行%d列的矩阵格式进行输入。\n", m, n);
 for(i = 0; i < m; i++)
 for(j = 0; j < n; j++)
 scanf("%d", &max[i][j]);
 printf(请输入每个进程所分配的资源数量,并依照%d乘以%d的矩阵格式进行输入。\n", m, n);
 for(i = 0; i < m; i++)
 {
  for(j = 0; j < n; j++)
  {
   scanf("%d",&allocation[i][j]);
   need[i][j] = max[i][j] - allocation[i][j];
   if(need[i][j] < 0)
   {
   printf(您所输入的第%d个进程对应的第%d个资源数量有误,请核对后重新输入。\n", i+1, j+1);
   j--;
   
   continue;
   }
  }
 }
 printf("请输入各个资源现有的数目:\n");
 for(i = 0; i < n; i++)
 scanf("%d", &available[i]);
 isSafe();
 
 while(1)
  {
  printf("输入要申请资源的进程号(注:第1个进程号为0,以此类推)\n");
  scanf("%d", &mi);
  printf("输入进程所请求的各资源的数量\n");
  for(i = 0; i < n; i++)
  {
   scanf("%d", &request[mi][i]);
  }
  for(i = 0; 1 < n; i++)
  {
   if(request[mi][i] > need[mi][i])
   {
    printf("你输入的请求数超过进程的需求量!\n");
    return 0;
   }
   if(request[mi][i] > available[i])
   {
    printf("你输入的请求数超过系统有的资源数!\n");
    return 0;
   }
  }
  for(i = 0; i < n; i++)
  {
   available[i] -= request[mi][i];
   allocation[mi][i] += request[mi][i];
   need[mi][i] -= request[mi][i];
  }
  if(isSafe())
  {
   printf("同意分配请求!\n");
  } 
  else
  {
   printf("你的请求被拒绝\n");
   for(i = 0; i < n; i++)
   {
    available[i] += request[mi][i];
    allocation[mi][i] -= request[mi][i];
    need[mi][i] += request[mi][i];
   }
   for(i = 0; i < m; i++)
   {
    finish[i] = 0;
    }
   char YesOrNo;
   printf("你还想再次请求分配吗?是请按y/Y,否按n/N,再确定\n");
   
   while(1)
   {
    scanf("%c", &YesOrNo);
    if(YesOrNo == 'y' || YesOrNo == 'Y' || YesOrNo == 'n' || YesOrNo == 'N')
    {
     break;
    }
    else
    {
     printf("请按要求输入!\n");
     continue;
    }
   }
   if(YesOrNo == 'y' || YesOrNo == 'Y')
   {
    continue;
   }
   else 
   {
    break;
   }
   
  }
 }
}

结果自行运行~

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由智潮脉搏发布,如需转载请注明出处。

本文链接:https://zcmobo.com/post/1922.html

分享给朋友:

“操作系统实验(三):c实现银行家算法的资源分配” 的相关文章

AI 学习资源大礼包:书籍、课程、工具一网打尽

在当今数字化时代,人工智能(AI)的发展如火如荼,对 AI 知识的学习和掌握变得越来越重要。无论是想要进入 AI 领域的初学者,还是已经在该领域工作的专业人士,都需要不断地学习和更新自己的知识。为了满足大家的需求,我们为大家准备了一份 AI 学习资源大礼包,涵盖了书籍、课程和工具等方面,让你能够一站...

从 Kaggle 到天池:全球 AI 竞赛平台资源汇总

从 Kaggle 到天池:全球 AI 竞赛平台资源汇总

在当今人工智能飞速发展的时代,AI 竞赛平台成为了数据科学家和开发者们提升技能、展示才华的重要舞台。其中,Kaggle 和天池是全球范围内极具影响力的两个平台,它们各自拥有丰富的资源和独特的优势。本文将对 Kaggle 和天池进行详细的介绍和对比,为大家汇总全球 AI 竞赛平台的资源。一、Kaggl...

AI 职业认证大起底:哪些证书最受企业认可?

AI 职业认证大起底:哪些证书最受企业认可?

在当今数字化时代,人工智能(AI)领域的发展如火如荼,越来越多的企业开始将 AI 技术融入到业务中,以提升效率、降低成本并获取竞争优势。随之而来的是,对 AI 专业人才的需求急剧增加,而 AI 职业认证作为衡量从业者技能水平的重要标准,也受到了广泛的关注。那么,究竟哪些 AI 职业认证最受企业认可呢...

职业规划:AI 领域不同方向的发展前景与选择建议

职业规划:AI 领域不同方向的发展前景与选择建议

在当今科技飞速发展的时代,AI已成为引领变革的关键力量。深入了解AI领域不同方向的发展前景,并据此做出合理的职业选择,对个人的职业发展至关重要。AI研究方向聚焦于算法创新与理论突破,致力于探索更高效的模型架构与智能算法。该领域人才需求旺盛,顶尖研究机构与科技巨头对具备深厚数学基础和创新思维的研究者求...

算法偏见的社会影响:从招聘到司法的连锁反应

算法偏见在当今社会已成为一个不容忽视的问题,其影响广泛且深远,从招聘领域一直延伸到司法系统,引发了一系列连锁反应,对社会的公平与公正造成了潜在威胁。在招聘环节,算法偏见带来的后果令人担忧。企业借助算法筛选简历、评估求职者,看似高效便捷,却可能因算法设计存在缺陷而产生不公平现象。若算法在训练数据中存在...

AI 安全漏洞挖掘与修复:开发者必知的防护措施

在当今数字化时代,AI技术迅猛发展,广泛应用于各个领域。AI安全漏洞问题也日益凸显,给开发者带来了新的挑战。作为开发者,了解AI安全漏洞挖掘与修复的相关知识,掌握必要的防护措施至关重要。AI系统的安全漏洞可能引发诸多严重后果。一方面,可能导致数据泄露,用户的隐私信息被非法获取,这不仅会给用户带来极大...