资源简介

操作系统 课程设计任务书 银行家算法 1)了解多道程序系统中,多个进程并发执行的资源分配。 2)掌握银行家算法,了解资源在进程并发执行中的资源分配情况。 3)掌握预防死锁的方法,系统安全状态的基本概念。 设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。要求: 1) 简单的选择界面; 2) 能显示当前系统资源的占用和剩余情况。 3) 为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分配不成功; 4) 撤销作业,释放资源。 编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。

资源截图

代码片段和文件信息

#include 
#include 

int  m=3;//m个系统资源
int  n=0;//n个并发进程
int Max[20][20];//={{753}{322}{902}{222}{433}};            //最大需求矩阵   
int Available[20];//={1032};                                            //可利用资源向量 
int Allocation[20][20];//={{010}{200}{302}{211}{002}};     //分配矩阵
int Need[20][20];//={{743}{122}{600}{011}{431}};           //需求矩阵
int Request[20];  
int queue[20];    //进程Pi的请求向量

//*******************************************************************************
int output()  //显示各个矩阵资源分配情况
{
 int klt;t=65;
 printf(“\n**********************************************************\n“);

   printf(“    MAX “);
   for(l=0;l   printf(“Allocation “);
   for(l=0;l    printf(“Need “);
   for(l=0;l  printf(“Available “);
   for(l=0;l   printf(“\n“);
   
 //printf(“        A   B   C    A   B   C    A   B   C    A   B   C  “);
 printf(“        “);
 for(l=0;l<4;l++)
 {for(k=0;k    printf(“%c   “65+k);
    printf(“  “);}
 for(k=0;k {
  printf(“\nP%d      “k);
  for(l=0;l    printf(“%d   “Max[k][l]);printf(“  “);
  for(l=0;l    printf(“%d   “Allocation[k][l]);printf(“  “);
  for(l=0;l  printf(“%d   “Need[k][l]);printf(“  “);
  if(k==0) {
  for(l=0;l  printf(“%d   “Available[l]);
  }
 }
 return 1;
}
//*****************************************************************************
int input()  //资源分配情况的录入。
{
 int ij;int t=65;
     //printf(“\n请输入系统的未分配资源数:“);
 // scanf(“%d%d%d“AvailableAvailable+1Available+2);
 //for(i=0;i<5;i++)
     printf(“\n                资源名称:“);
 for(i=0;i  printf(“\n请输入p%d的最大需求资源数:“n);
 for(i=0;i   
 printf(“\n                资源名称:“);
 for(i=0;i  printf(“\n请输入p%d的已分配的资源数:“n);
 for(i=0;i  //for(i=0;i   for(j=0;j  
  Need[n][j]=Max[n][j]-Allocation[n][j];
     for(i=0;i  {
     Available[i]-=Allocation[n][i];
 }
  
    n++;
 return 1;
}
//*****************************************************************************
int safe(){//安全性检查 返回1 表示安全 有安全队列 queue 返回0表示不安全
int doneapply=0;int t;
    int ij;int work[20];
int finish[20]={0};
    for(j=0;j  while(apply {
  t=0;
for(i=0;i {
 done=0;
 if(finish[i]!=false) {continue;}
   for(j=0;j    { 
   if(Need[i][j] >work[j]) {done=1; break; }
   } 
 if(done==0)
 {
 for(j=0;j    finish[i]=true;
   queue[apply]=i;apply++;t=1;
 }
}
if(t==0)  return false;
}  
  return 1;
}

//***************************************************************
int dijkstra(in

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     839168  2013-06-29 15:40  操作系统课程设计\操作系统-课程设计报告.doc

     文件       6313  2013-01-14 22:00  操作系统课程设计\源代码及运行程序\dijkstra.cpp

     文件     200781  2013-01-14 22:00  操作系统课程设计\源代码及运行程序\dijkstra.exe

     目录          0  2013-06-29 15:40  操作系统课程设计\源代码及运行程序

     目录          0  2013-06-29 15:41  操作系统课程设计

----------- ---------  ---------- -----  ----

              1046262                    5


评论

共有 条评论