银行家安全算法 2.docx

上传人:b****6 文档编号:6584084 上传时间:2023-01-08 格式:DOCX 页数:11 大小:82.96KB
下载 相关 举报
银行家安全算法 2.docx_第1页
第1页 / 共11页
银行家安全算法 2.docx_第2页
第2页 / 共11页
银行家安全算法 2.docx_第3页
第3页 / 共11页
银行家安全算法 2.docx_第4页
第4页 / 共11页
银行家安全算法 2.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

银行家安全算法 2.docx

《银行家安全算法 2.docx》由会员分享,可在线阅读,更多相关《银行家安全算法 2.docx(11页珍藏版)》请在冰豆网上搜索。

银行家安全算法 2.docx

银行家安全算法2

江西科技学院实验项目卡

实验中心:

计算机中心实验室:

S2-303机房制卡时间:

2013年3月

实验项目名称

编程实现银行家安全算法

实验项目编号

课程名称

操作系统

课程代码

81211679

适用专业

计算机科学与技术

实验学时数

6

实验类型

综合

实验要求

必修

实验类别

专业

实验

实验者类别

统招本科

每批组数

45

每组人数

1

实验方式

课内

实验

首开时间

2005年9月

变动情况说明

实验教材或指导书名称

《操作系统》

实验目的、实验内容、实验原理与实验要求:

一、实验目的

通过实验加强对银行家安全算法的理解和掌握。

二、实验内容

熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。

三、实验要求

1、需写出设计说明;

2、设计实现代码及说明

3、运行结果;

1输入Max和All进程的值

得到Need

正确

错误

 

 

2代码:

#include

main()

{inti,j,Max[5][3],All[5][3],Need[5][4],Ava[3],a[5][12],q,w,s[3];

intk=0,c[5];

intm=5;

printf("请输入Max的值;\n");

for(i=0;i<5;i++)

for(j=0;j<3;j++)

scanf("%d",&Max[i][j]);

printf("请输入All的值;\n");

for(i=0;i<5;i++)

for(j=0;j<3;j++)

scanf("%d",&All[i][j]);

for(i=0;i<5;i++)

for(j=0;j<3;j++)

Need[i][j]=Max[i][j]-All[i][j];

for(i=0;i<5;i++)

Need[i][3]=1;/*多定义need一列将这一列作为标示位记录是否已经进程结束并初始化为1*/

printf("请输入Ava的值;\n");

for(i=0;i<3;i++)

scanf("%d",&Ava[i]);

for(i=0;i<5;i++)/*输出need看是否将标示位赋值成功*/

{for(j=0;j<4;j++)

printf("%2d",Need[i][j]);

printf("\n");}

for(i=0;i<5;i++)/*将3个数组的值移到一个数组里*/

for(j=0;j<3;j++)

a[i][j]=Max[i][j];

for(i=0;i<5;i++)

for(j=0;j<3;j++)

a[i][j+3]=All[i][j];

for(i=0;i<5;i++)

for(j=0;j<3;j++)

a[i][j+6]=Need[i][j];

for(j=0;j<3;j++)

a[0][j+9]=Ava[j];

printf("MaxAllNeedAva\n");/*打印该数

组*/

printf("ABCABCABCABC\n");

for(j=0;j<1;j++)

printf("p[%d]",j);

for(j=0;j<12;j++)

printf("%5d",a[0][j]);

printf("\n");

for(i=1;i<5;i++)

{printf("p[%d]",i);

for(j=0;j<9;j++)

printf("%5d",a[i][j]);

printf("\n");}

/*该程序可以判断之前的进程是否有安全序列*/

/*

lop1:

for(i=0;i<5;i++)

if(Ava[0]>=Need[i][0]&&Ava[1]>=Need[i][1]&&Ava[2]>=Need[i][2]&&Need[i][3]==1)

{Ava[0]=Ava[0]-Need[i][0]+Max[i][0];

Ava[1]=Ava[1]-Need[i][1]+Max[i][1];

Ava[2]=Ava[2]-Need[i][2]+Max[i][2];

Need[i][3]=0;

c[k]=i;

k++;}

if(Need[0][3]==0&&Need[1][3]==0&&Need[2][3]==0&&Need[3][3]==0&&Need[4][3]==0)

{gotolop2;}

/*for(i=0;i<5;i++)

{for(j=0;j<4;j++)

printf("%2d",Need[i][j]);

printf("\n");}*/

/*

if(m>0)

{m--;

gotolop1;

}

elsegotolop3;

lop2:

printf("安全序列为:

\n");

for(j=0;j<5;j++)

printf("P[%d]\n",c[j]);

if(!

(Need[0][3]==0&&Need[1][3]==0&&Need[2][3]==0&&Need[3][3]==0&&Need[4][3]==0))

lop3:

printf("不是安全序列\n");*/

printf("是否需要请求资源如果要请输入1并输入要在几进程中加入比如在第一进程请求,请输入1,0

不要请输入2\n");

scanf("%d,%d",&q,&w);/*输入是否请求的值1或者2,并输入在那个进程请求该资源*/

printf("%d",q);

if(q==1)/*判断是否请求*/

{

printf("请输入%d的3个资源请求值",w);

for(i=0;i<3;i++)

scanf("%d",&s[i]);

for(i=0;i<3;i++)

{if(s[i]>Ava[i])/*如果剩余的资源部满足则直接跳出*/

{printf("剩余资源数不足以满足\n");

gotolop3;}

All[w][i]=All[w][i]+s[i];/*将之前所要求的进程请求的进程修改*/

Ava[i]=Ava[i]-s[i];/*将剩余的资源数修改*/

}

for(i=0;i<5;i++)/*将修改后的进程重新导入need中*/

for(j=0;j<3;j++)

Need[i][j]=Max[i][j]-All[i][j];

for(i=0;i<5;i++)/*将3个数组的值移到一个数组里*/

for(j=0;j<3;j++)

a[i][j]=Max[i][j];

for(i=0;i<5;i++)

for(j=0;j<3;j++)

a[i][j+3]=All[i][j];

for(i=0;i<5;i++)

for(j=0;j<3;j++)

a[i][j+6]=Need[i][j];

for(j=0;j<3;j++)

a[0][j+9]=Ava[j];

printf("MaxAllNeedAva\n");/*打印修改

后的该数组*/

printf("ABCABCABCABC\n");

for(j=0;j<1;j++)

printf("p[%d]",j);

for(j=0;j<12;j++)

printf("%5d",a[0][j]);

printf("\n");

for(i=1;i<5;i++)

{printf("p[%d]",i);

for(j=0;j<9;j++)

printf("%5d",a[i][j]);

printf("\n");}

}

lop1:

/*控制跳转的次数*/

for(i=0;i<5;i++)

if(Ava[0]>=Need[i][0]&&Ava[1]>=Need[i][1]&&Ava[2]>=Need[i][2]&&Need[i][3]==1)/*判断剩余资

源是否满足当前资源需要*/

{Ava[0]=Ava[0]-Need[i][0]+Max[i][0];/*修改剩余资源*/

Ava[1]=Ava[1]-Need[i][1]+Max[i][1];/*修改剩余资源*/

Ava[2]=Ava[2]-Need[i][2]+Max[i][2];/*修改剩余资源*/

Need[i][3]=0;/*将标示位修改为0*/

c[k]=i;/*记下当前满足的位置*/

k++;}

if(Need[0][3]==0&&Need[1][3]==0&&Need[2][3]==0&&Need[3][3]==0&&Need[4][3]==0)/*判断标示位

是否已修改*/

{gotolop2;}/*跳转到lop2*/

for(i=0;i<5;i++)/*打印标示位是否已修改*/

{for(j=0;j<4;j++)

printf("%2d",Need[i][j]);

printf("\n");}

if(m>0)/*控制跳转的次数*/

{m--;/*m初值为5控制次数*/

gotolop1;

}

elsegotolop3;

lop2:

printf("安全序列为:

\n");

for(j=0;j<5;j++)/*打印输出安全序列*/

printf("P[%d]\n",c[j]);

if(!

(Need[0][3]==0&&Need[1][3]==0&&Need[2][3]==0&&Need[3][3]==0&&Need[4][3]==0))

{lop3:

printf("不是安全序列\n");}

}

输入书中的例子可得

输入请求的资源过大时所得

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1