银行家算法实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“银行家算法c实验报告”。
实验三 银行家算法
(1)死锁产生的原因和必要条件是什么? 原因:
a)系统资源不足;
b)进程运行推进的顺序不合适; c)资源分配不当。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺战、有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
必要条件:
a)互斥条件:一个资源每次只能被一个进程使用;
b)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放; c)不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺; d)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
(2)银行家算法中的安全性检查时,Work[j]+Allocation[i,j]的含义是什么?
work[j]表示当前系统可用的第j类资源,Allocation[i][j]表示当前已经分配给进程i使用的第j类资源数量。Work[j]= Work[j]+ Allocation[i,j]这句的意思是目前进程已经利用手上资源完成相关工作了,这些已分配的资源可以重新归还系统了,所以系统可用的第j类资源work[j]就增加了,增加量就是当前进程想要归还的资源量Allocation[i][j]。
(3)为什么银行家算法能有效避免死锁的发生?算法的主要思想是什么?
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。
银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。
(4)补全Bank()和Safe()函数; void Bank()//银行家算法 { int q;bool flag = true;printf(“请输入请求的进程向量n”);scanf(“%d”,&q);printf(“请输入%d个资源的请求资源数n”,n);for(int i=0;ineed[q][j]){ flag=false;} } if(flag){ for(int j=0;i
int Safe()//安全性算法 { //返回1表示安全,返回0表示不安全 int tp=1;int i;int Work[20];int tmp=0,t=0;for(i=0;i
for(i=0;iWork[j]){ flag = false;} } //所有资源小于需求,允许分配 if(flag){ for(int j=0;j
for(i=0;i
(5)给出程序运行截图。
课程设计报告课程设计名称 共享资源分配与银行家算法 系(部)专业班级姓 名学 号指导教师 年 月 日 、目 录一、课程设计目的和意义 ............................................
计算机操作系统实验报告一、实验名称:银行家算法二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并......
计算机操作系统实验报告何美西109253030212一、实验名称:银行家算法二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请......
实验目的银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁......
实验四死锁一、实验目的 当系统的总资源数m小于或等于所有进程对对资源的最大需求时,就可能产生 死锁。死锁会引起计算机系统的瘫痪。银行家算法是在实现资源分配时避免死锁......