银行家算法操作系统Word文档下载推荐.docx
- 文档编号:21529366
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:8
- 大小:100.37KB
银行家算法操作系统Word文档下载推荐.docx
《银行家算法操作系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《银行家算法操作系统Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
#include<
stdio.h>
time.h>
stdlib.h>
typedefstructProcedure
{
intMax[3];
//满足此进程需要三类资源的数量
intAllocation[3];
//系统已经为该进程分配的资源情况
intNeed[3];
//该进程还需要资源数量
intflag;
//标志位,执行完之前为0,执行完之后为1
charp;
//在执行完之后,给出相应的编号,如P1,P2
structProcedure*pNext;
}Pro,*PNODE;
//如果系统资源足够多的话,那么所有的安全序列的数量就会是5*4*3*2*1=120个
PNODEcreate_list(int&
len);
voidtraverse_list(PNODEpHead);
intcnt_exe(PNODEpHead,int*system,inti);
//计算目前系统能够执行的进程数
intwork(PNODEpHead,int*system);
intmain()
intok;
intlen;
srand(time(0));
intsystem[3]={rand()%5+10,rand()%5+2,rand()%5+5};
printf("
系统中可用的各类资源数分别为:
%d%d%d\n"
system[0],system[1],system[2]);
Pro*pHead=create_list(len);
traverse_list(pHead);
intcnt=cnt_exe(pHead,system,3);
if(cnt==0)
{
printf("
对不起,不存在安全序列\n"
);
return0;
}
else
intok=work(pHead,system);
if(ok==len)
printf("
恭喜!
存在安全序列!
\n"
else
很抱歉!
不存在安全序列!
return0;
}
len)
inti,j;
charc='
A'
;
//用来临时存放用户输入的结点的值
//分配了一个不存放有效数据的头结点
PNODEpHead=(PNODE)malloc(sizeof(Pro));
if(NULL==pHead)
分配失败,程序终止!
exit(-1);
PNODEpTail=pHead;
pTail->
pNext=NULL;
请输入您需要生成的链表节点的个数:
"
scanf("
%d"
&
for(i=0;
i<
len;
++i)
PNODEpNew=(PNODE)malloc(sizeof(Pro));
if(NULL==pNew)
{
exit(-1);
}
for(j=0;
j<
3;
j++)
pNew->
Max[j]=rand()%5+4;
Allocation[j]=rand()%5;
Need[j]=pNew->
Max[j]-pNew->
Allocation[j];
pNew->
flag=0;
p=c;
pTail->
pNext=pNew;
pTail=pNew;
c++;
returnpHead;
voidtraverse_list(PNODEpHead)
PNODEp=pHead->
pNext;
inti=1;
while(NULL!
=p)
第%d个资源的需要资源总数各为:
%d%d%d"
i,p->
Max[0],p->
Max[1],p->
Max[2]);
第%d个资源已分配资源总数各为:
Allocation[0],p->
Allocation[1],p->
Allocation[2]);
第%d个资源还需要资源总数各为:
Need[0],p->
Need[1],p->
Need[2]);
p=p->
i++;
return;
intcnt_exe(PNODEpHead,int*system,inti)
PNODEp;
p=pHead->
//p指向第一个节点
intcount=0;
while(p!
=NULL)
if(system[0]>
=p->
Need[0]&
&
system[1]>
Need[1]&
system[2]>
Need[2])
count++;
p=p->
returncount;
intwork(PNODEpHead,int*system)
intok=0;
{
system[0]+=p->
Allocation[0];
system[1]+=p->
Allocation[1];
system[2]+=p->
Allocation[2];
p->
flag=1;
ok++;
printf("
系统已经为您执行了进程:
%c\n"
p->
p);
PNODEq;
q=pHead;
//寻找q的前一个节点,方便删掉q节点
while(q->
pNext!
=p)
{
q=q->
}
q->
pNext=p->
free(p);
p=NULL;
p=pHead->
//p又重新指向第一个节点
}
else
p=p->
returnok;
存在安全序列的情况:
不存在安全序列的情况:
四、实验小结
用随机数为系统分配三类资源的个数,随后系统为每个作业分配每个资源需要的个数和已经分配的资源数量,那么还需要资源的数量则有最大分配量减去已经分配的数量。
系统在队列中寻找能满足当前条件的作业,运行完之后,将其资源释放,把各类资源重新还给系统。
把运行完之后的作业从队列中删除,系统再从队列开头重新寻找下一个能执行的作业。
如果中途遇到系统无法为任何一个作业运行提供条件时,则不存在安全序列,否则,存在安全序列。
本次实验我用一个变量检测作业数量,若执行完一个作业时,其数量加一,最后检测是否为总作业的个数。
是,则存在安全序列,否则,不存在。
通过本次试验,加深了我对银行家算法的核心的理解。
【此文档部分内容来源于网络,如有侵权请告知删除,本文档可自行编辑和修改内容,感谢您的支持!
】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 操作系统