博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

小区博客

   cyrich.cublog.cn
关于作者  
姓名:cyrich

我的分类  




操作系统多资源银行家算法

学习操作系统时写的,最近还要写这个实验报告.

//多资源银行家算法

#include <stdio.h>
#include <stdlib.h>

//A为已分配资源矩阵,C为请资源矩阵,V为可用资源。
int A[10][10], C[10][10], V[10];

//flag为标识进程是否完成,0表示还没完成,1表示完成。
int flag[10]={0};

//扫描矩阵函数,看是否有可满足的进程,有则返回指向该进程的序号,还则返-1
//maxpro为最大进程数,maxres为最大资源数
int scan(int maxpro,int maxres);

void main()
{
 int i, j, m, resTotal, proTotal;
 int sequen[10];  //保存安全序列
 
 int selected;
 int k=0;
 
 printf("输入有多少种资源:");
 scanf("%d", &resTotal);
 for (i=0;i<resTotal;i++)
 {
  printf("输入第%d种资源的可用数目:", i+1);
  scanf("%d", &V[i]);
 }
 printf("输入有多少个进程:");
 scanf("%d", &proTotal);
 for (i=0; i<proTotal; i++)
 {
  for (j=0; j<resTotal; j++)
  {
   printf("输入第%d个进程第%d种资源的已分配数:", i+1, j+1);
   scanf("%d", &A[i][j]);
  }
 }
 for (i=0; i<proTotal; i++)
 {
  for (j=0; j<resTotal; j++)
  {
   printf("输入第%d个进程第%d种资源的请求数:", i+1, j+1);
   scanf("%d", &C[i][j]);
  }
 }
 
 //开始扫描
 for(m=0; m<proTotal; m++)
 {
  selected=scan(proTotal,resTotal); 
  if(selected == -1)
  {
   printf("不安全 ");
   exit(0);
  }

  //分配资源
  for (i=0; i<resTotal; i++)
  {
   V[i]-=C[selected][i];
   A[selected][i]+=C[selected][i];
   C[selected][i]-=C[selected][i];
  }
  //回收资源
  for(i=0; i<resTotal; i++)
  {
   V[i]+=A[selected][i];
   flag[selected]=1;
  }
  
  sequen[k++]=selected;  
 }

 printf(" 状态安全! 安全进程序列:");
 for(i=0; i<k; i++)
  printf("%d ", sequen[i]+1);
 printf(" ");
}


int scan(int maxpro, int maxres)
{
 int i, j, temp;
 int m=-1;
 for (i=0; i<maxpro; i++)  //对进程逐个扫描
 {
  if(flag[i] == 0)   //判断些进程是否已完成分配工作
  {
   temp=0;
   for (j=0; j<maxres; j++)//对进程里的请求资源逐个扫描
   {
    if(C[i][j] <= V[j])
     temp++;
   }
   if(temp == maxres)  //判断些是否可满足些进程
   {
    m=i;
    break;
   }
  }
  
 }
 return m;
}

 发表于: 2005-12-11,修改于: 2005-12-11 18:17 已浏览2925次,有评论7条 推荐 投诉

  网友评论
  本站网友 时间:2006-06-09 15:16:03 IP地址:218.12.100.★
太好了

  焚环 时间:2006-10-26 08:59:21 IP地址:61.147.251.★
太感谢了!

  雨花石 时间:2006-12-15 11:19:42 IP地址:222.75.167.★
不错哦!! 谢谢与大家共享啊!

  本站网友 时间:2007-04-17 07:25:43 IP地址:61.54.82.★
可以用吧,我的运行不出来

  你好 时间:2007-05-29 08:29:36 IP地址:61.132.1.★
运行不了

  你好 时间:2007-05-29 08:31:58 IP地址:61.132.1.★
错误找到了
少了一个头函数#include <conio.h>
加上就可以运行了

  不错不错 时间:2007-06-20 15:01:01 IP地址:58.62.42.★
不错不错


  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:1.37028

京ICP证041476号