毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 报告 >> 正文

银行家算法防止死锁-银行家算法 第2页

更新时间:2009-4-14:  来源:毕业论文
银行家算法防止死锁
前i 个申请共计占用的资源,进程当前已经运行到的位置等信息。

      模拟分配的程序部分,采用循环队列对各进程进行调度。

      3、物理设计

      全局变量的结构定义如下:

      bool avoid;
      struct info//进程信息
      {
         long tot,n;//最大占用资源, 申请次数
         long list[16];// 申请资源列表
         long pre[16];// 已占用资源数
         long p;// 已分配状况的指针
      }pro[4];
      long LeftRes;

      程序的结构定义如下:

      int main()//主函数
      {
         init(); 751com.cn
         allot();
      }
      void init()//函数功能:输入和初始化
      void allot()//函数功能:模拟资源分配过程
      allot()使用以下函数模拟分配过程:
      bool require(long x)//函数功能:尝试分配资源给进程x
      bool safe(long x)//函数功能:检查分配是否安全

      可以处理3 种资源的程序全局变量结构如下:

      //共有 3 种资源,3 个进程
      bool avoid;
      struct info//进程信息
      {
         long tot[4];//最大占用资源数
         long p[4];// 已经占有的资源数
      }pro[5];
      long LeftRes[4];//剩余资源数
      long qu[4];

四、测试结果

      对于一组会导致死锁的数据,分别选择采用和不采用避免算法

结果如下:

Avoid deadlock?(Y/N)Y
Please input the resourse-require lists of these 3 processes, one lists in a line:
2 3 4
2 3 3
3 1

=================================================================
Process1 :               2 3 4 (Sum=9)
Process2 :               2 3 3 (Sum=8)
Process3 :               3 1 (Sum=4)

=================================================================

Process1 require 2 unit(s) resourse......Success! LeftResourse=8
Process2 require 2 unit(s) resourse......Success! LeftResourse=6
Process3 require 3 unit(s) resourse......Success! LeftResourse=3
Process1 require 3 unit(s) resourse......Denied! Not safe
Process2 require 3 unit(s) resourse......Denied! Not safe
Process3 require 1 unit(s) resourse......Success! LeftResourse=2
Process3 finish. LeftResourse=6
Process1 require 3 unit(s) resourse......Denied! Not safe
Process2 require 3 unit(s) resourse......Success! LeftResourse=3
Process1 require 3 unit(s) resourse......Denied! Not safe
Process2 require 3 unit(s) resourse......Success! LeftResourse=0
Process2 finish. LeftResourse=8
Process1 require 3 unit(s) resourse......Success! LeftResourse=5
Process1 require 4 unit(s) resourse......Success! LeftResourse=1
Process1 finish. LeftResourse=10

Finish 751com.cn

如果不避免死锁:

Avoid deadlock?(Y/N)N
Please input the resourse-require lists of these 3 processes, one lists in a lin
e:
2 3 4
2 3 3
3 1

=================================================================
Process1 :               2 3 4 (Sum=9)
Process2 :          2 3 3 (Sum=8)
Process3 :          3 1 (Sum=4)

=================================================================

Process1 require 2 unit(s) resourse......Success! LeftResourse=8
Process2 require 2 unit(s) resourse......Success! LeftResourse=6
Process3 require 3 unit(s) resourse......Success! LeftResourse=3
Process1 require 3 unit(s) resourse......Success! LeftResourse=0
Process2 require 3 unit(s) resourse......Denied! No enough resourse
Process3 require 1 unit(s) resourse......Denied! No enough resourse
Process1 require 4 unit(s) resourse......Denied! No enough resourse
Already Deadlock

Finish

改进版本(可以使用3 种资源的程序)测试结果如下:

五、系统不足与经验体会 

      系统不能处理多种不同资源的情况,也缺乏处理大规模数据的能

力。 

      safe 函数的编写是程序成功的关键,其中利用 Change 标记的思

乡值得仔细体会。 

辣、附录:源代码(带注释) 

//*******************************************************
//* 操作系统实验三 死锁                                                *
//* 实验学院一班(0436101) 张元竞(6040310110)                           *
//* 2006-10-15                                            *
//******************************************************/

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>

//共有 3 种资源,3 个进程
bool avoid;
struct info//进程信息 {
       long tot[4];//最大占用资源数
       long p[4];// 已经占有的资源数
}pro[5];
long LeftRes[4];//剩余资源数
long qu[4];

void init()//函数功能:输入和初始化
{
       char tmp[128];
       long i,j;

       // 以下由用户选择是否采用避免死锁算法
       printf("是否采用避免死锁算法?(Y/N)");
       gets(tmp);
       avoid=(tmp[0]=='Y' || tmp[0]=='y');

       //输入各进程的资源信息
       printf("请输入各进程的资源信息:\n");
       printf("依次输入各进程所需要的最大资源数量:\n");
       for (i=1;i<=3;i++)
       {
           for (j=1;j<=3;j++)
           {
                 scanf("%ld",&pro[i].tot[j]);
           }
       }
       printf("依次输入各进程已经占据的资源数量:\n");
       for (i=1;i<=3;i++)
       {
           for (j=1;j<=3;j++)
           {
                 do 751com.cn
                 {
                      scanf("%ld",&pro[i].p[j]);
                      if (pro[i].p[j]>pro[i].tot[j])
                            printf("\n  占有资源超过了声明的最大资源,请重新输入\n");
                 }while (pro[i].p[j]>pro[i].tot[j]);
           }
       }

       //初始化资源数量
       for (i=1;i<=3;i++)

上一页  [1] [2] [3] 下一页

银行家算法防止死锁-银行家算法 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。