博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统银行家算法C语言代码实现
阅读量:4957 次
发布时间:2019-06-12

本文共 2304 字,大约阅读时间需要 7 分钟。

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛)

    实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现。以下为详细步骤:  

  •  定义:

              max1[ ][ ] : 最大需求矩阵,max1[i][j]为第i条进程的第j项资源的最大需求数目;

      allocation[ ][ ] : 分配矩阵,allocation[i][j]为第i条进程已分得的第j项资源的数目;

      need[ ][ ] : 需求矩阵,need[i][j]为第i条进程尚需要的第j项资源的数目;

      available[ ] : 可利用资源量,available[i]为系统中第i项资源的可分配数目; 

      request[ ][ ] : 请求矩阵,request[i][j]表示第i条进程对第j项资源的请求数目;//可以改成一维数组

    int safe (int n,int m,int work) : n条进程,m项进程,返回值为1时当前状态安全,否则不安全;

  •  程序流程:   
  1. 键盘输入max1矩阵,allocation矩阵,available数组,计算出need矩阵。
  2. 判断当前时刻系统的状态是否安全。true 转向3,false转向7 
  3. 判断当前时刻request<=need。true 转向4,false 转向7 
  4. 判断当前时刻request<=available。true 转向5,false 转向7
  5. 进行安全性算法检测。true 转向6,false 转向7
  6. 系统分配资源并继续等待指令。
  7. 系统不予分配资源并输出原因。
  •  安全性算法  :  每次从第一个进程开始检测,如遇到所有的m项资源都可以满足时,work+=allocation,否则转入下一个进程的检测。两种情况跳出第20行的循环。
  1.  所有finish均为1,i无法置为-1 ,i==N时跳出循环
  2.  存在为0的finish,但直至i==N时,仍未有新的work<need出现(从最近的一次i==-1算起),i==N时跳出循环

  第50行进行检测区分上述两种情况,如安全返回1,否则返回0;

 

以下为完整的代码实现:(另附测试数据)

1 #include
2 int max1[1000][1000]= {
0}; 3 int allocation[1000][1000]= {
0}; 4 int need[1000][1000]= {
0}; 5 int finish[1000]= {
0}; 6 int available[1000]= {
0}; 7 int request[1000][1000]= {
0}; 8 int waitq[1000]= {
0}; 9 int waitnum=0; 10 int safeq[1000]= {
0}; 11 int safe (int N , int M ,int work[]) 12 { 13 int s=0; 14 memset(finish,0,1000*sizeof(int)); 15 for(int i=0; i
work[j]) 28 { 29 flag=0; 30 break; 31 } 32 } 33 if(flag) 34 { 35 for(int j=0; j
need[num][i])195 {196 judge=0;197 printf("error!\n");198 break;199 }200 }201 if(judge)202 {203 int wait=0;204 for(int i=0; i
available[i])207 {208 wait=1;209 printf("wait because request>available!\n");210 break;211 }212 }213 if(!wait)214 {215 216 for(int j1=0; j1

 

转载于:https://www.cnblogs.com/gideonzsd/p/7230417.html

你可能感兴趣的文章
iOS自定义字体
查看>>
Remote Desktop Connection Manager介绍
查看>>
JavaScript6-2 下拉菜单
查看>>
php获取网站域名 及 SERVER 相关变量
查看>>
Linux 硬盘分区生效命令partprobe
查看>>
Angular随笔第一课
查看>>
java ArrayList集合迭代读取元素
查看>>
两个map合并
查看>>
javascript小知识
查看>>
[SHOI2008]堵塞的交通(线段树维护联通性)
查看>>
shell 使用for循环 启动后台任务
查看>>
数据库介绍与分类
查看>>
抓老鼠啊
查看>>
特效讲解
查看>>
无组件客户端js图片压缩
查看>>
Webdynpro Debug
查看>>
SSH框架整合的其它方式
查看>>
SSM框架整合过程总结
查看>>
对编译原理的认识
查看>>
Java语言基础-递归
查看>>