操作系统银行家算法Word格式文档下载.docx
- 文档编号:20849335
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:381.76KB
操作系统银行家算法Word格式文档下载.docx
《操作系统银行家算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统银行家算法Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
整体流程:
算法设计:
n:
系统中进程的总数
m:
资源类总数
Available:
ARRAY[1..m]ofinteger;
Max:
ARRAY[1..n,1..m]ofinteger;
Allocation:
Need:
Request:
符号说明:
Available可用剩余资源
Max最大需求
Allocation已分配资源
Need需求资源
Request请求资源
当进程pi提出资源申请时,系统执行下列
步骤:
(“=”为赋值符号,“==”为等号)
step
(1)若Request<
=Need,gotostep
(2);
否则错误返回
step
(2)若Request<
=Available,gotostep(3);
否则进程等待
step(3)假设系统分配了资源,则有:
Available=Available-Request;
Allocation=Allocation+Request;
Need=Need-Request
若系统新状态是安全的,则分配完成
若系统新状态是不安全的,则恢复原状态,进程等待
为进行安全性检查,定义数据结构:
Work:
ARRAY[1..m]ofinteger;
Finish:
ARRAY[1..n]ofBoolean;
安全性检查的步骤:
step
(1):
Work=Available;
Finish=false;
step
(2)寻找满足条件的i:
a.Finish==false;
b.Need<
=Work;
如果不存在,gotostep(4)
step(3)
Work=Work+Allocation;
Finish=true;
gotostep
(2)
step(4)若对所有i,Finish=true,则系统处于安全状态,否则处于不安全状态
四、实验设备
Win7下虚拟机VMware-workstation-11.0.0及CentOS-5.8-i386
五、实验要求
1.输入系统进程数量n和资源类型数量m。
2.输入每类资源的数量。
3.输入每个进程每类资源的最大需求量和已获资源量。
检验系统的安全系。
六、实验程序
#include"
malloc.h"
stdio.h"
stdlib.h"
#definealloclensizeof(structallocation)
#definemaxlensizeof(structmax)
#defineavalensizeof(structavailable)
#defineneedlensizeof(structneed)
#definefinilensizeof(structfinish)
#definepathlensizeof(structpath)
structallocation
{intvalue;
structallocation*next;
};
structmax
structmax*next;
structavailable/*可用资源数*/
structavailable*next;
structneed/*需求资源数*/
structneed*next;
structpath
structpath*next;
structfinish
{intstat;
structfinish*next;
intmain()
{introw,colum,status=0,i,j,t,temp,processtest;
structallocation*allochead,*alloc1,*alloc2,*alloctemp;
structmax*maxhead,*maxium1,*maxium2,*maxtemp;
structavailable*avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1;
structneed*needhead,*need1,*need2,*needtemp;
structfinish*finihead,*finish1,*finish2,*finishtemp;
structpath*pathhead,*path1,*path2;
printf("
请输入系统资源的种类数:
"
);
scanf("
%d"
&
colum);
请输入现时内存中的进程数:
row);
请输入已分配资源矩阵:
\n"
for(i=0;
i<
row;
i++)
{for(j=0;
j<
colum;
j++)
{printf("
请输入已分配给进程p%d的%c种系统资源:
i+1,'
A'
+j);
if(status==0)
{allochead=alloc1=alloc2=(structallocation*)malloc(alloclen);
alloc1->
next=alloc2->
next=NULL;
allochead->
value);
status++;
}
else
{alloc2=(structallocation*)malloc(alloclen);
%d,%d"
alloc2->
if(status==1)
{allochead->
next=alloc2;
alloc1=alloc2;
alloc2->
status=0;
请输入最大需求矩阵:
请输入进程p%d种类%c系统资源最大需求:
{maxhead=maxium1=maxium2=(structmax*)malloc(maxlen);
maxium1->
next=maxium2->
maxium1->
{maxium2=(structmax*)malloc(maxlen);
maxium2->
{maxhead->
next=maxium2;
maxium1=maxium2;
maxium2->
请输入现时系统剩余的资源矩阵:
for(j=0;
种类%c的系统资源剩余:
'
{avahead=available1=available2=(structavailable*)malloc(avalen);
workhead=work1=work2=(structavailable*)malloc(avalen);
available1->
next=available2->
work1->
next=work2->
available1->
value=available1->
value;
{available2=(structavailable*)malloc(avalen);
work2=(structavailable*)malloc(avalen);
available2->
work2->
value=available2->
{avahead->
next=available2;
workhead->
next=work2;
available1=available2;
work1=work2;
available2->
alloctemp=allochead;
maxtemp=maxhead;
{if(status==0)
{
needhead=need1=need2=(structneed*)malloc(needlen);
need1->
next=need2->
value=maxtemp->
value-alloctemp->
{need2=(structneed*)malloc(needlen);
need2->
value=(maxtemp->
value)-(alloctemp->
{needhead->
next=need2;
need1=need2;
maxtemp=maxtemp->
next;
alloctemp=alloctemp->
{finihead=finish1=finish2=(structfinish*)malloc(finilen);
finish1->
next=finish2->
stat=0;
{finish2=(structfinish*)malloc(finilen);
finish2->
{finihead->
next=finish2;
finish1=finish2;
}}
/*Initializationcompleated*/
processtest=0;
for(temp=0;
temp<
temp++)
{alloctemp=allochead;
needtemp=needhead;
finishtemp=finihead;
worktemp=workhead;
{worktemp1=worktemp;
if(finishtemp->
stat==0)
{for(j=0;
j++,needtemp=needtemp->
next,worktemp=worktemp->
next)
if(needtemp->
value<
=worktemp->
value)
processtest++;
if(processtest==colum)
for(j=0;
{worktemp1->
value+=alloctemp->
worktemp1=worktemp1->
{pathhead=path1=path2=(structpath*)malloc(pathlen);
path1->
next=path2->
value=i;
{path2=(structpath*)malloc(pathlen);
path2->
{pathhead->
next=path2;
path1=path2;
finishtemp->
stat=1;
{for(t=0;
t<
t++)
for(t=0;
{needtemp=needtemp->
finishtemp=finishtemp->
{if(finishtemp->
\n系统处于非安全状态!
exit(0);
\n系统处于安全状态.\n"
安全序列为:
\n"
do
p%d"
pathhead->
value+1);
while(pathhead=pathhead->
next);
return0;
}
七、总结心得
(一)实验分析
设系统中有三种类型的资源(A、B、C)和五个进程(P1、P2、P3、P4、P5),A资源的数量为17,B资源的数量为5,C资源的数量为20。
在T0时刻系统状态如下表所求。
(二)实验心得总结
1、本次实验让我对银行家算法和死锁都有了一定的理解,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
2、操作系统的基本特征就是并发和共享,系统允许多个进程并发执行,并且共享系统的软、硬件资源。
为了最大限度的利用计算机资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足、分配不当而引起“死锁”。
3、该算法就是一个资源分配过程,使分配序列不会产生死锁。
此算法的中心思想就是,每次分配后总存在着一个进程,如果让它单独的运行下去,必然可以获得它所需要的全部资源,而它结束后可以归还这类资源以满足其他申请者的需要。
4、只要现时内存中的进程数比系统资源最大需求数要高,那么,系统就会处于安全状态。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 银行家 算法