操作系统银行家算法实验报告_银行家算法实验报告
操作系统银行家算法实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“银行家算法实验报告”。
实验四
死锁
一、实验目的
当系统的总资源数m小于或等于所有进程对对资源的最大需求时,就可能产生 死锁。死锁会引起计算机系统的瘫痪。银行家算法是在实现资源分配时避免死锁的一个著名算法,该算法是在能确保系统处于安全状态时才把资源分配给申请者。通过本实验使学生能进一步理解死锁的概念,并能选择一个算法来避免死锁。
二、实验题目
系统中有m个同类资源被n个进程共享,每个进程对资源的最大需求数分别为S1, S2,…,Sn,且 Max(Si)
三、数据结构
主要数据结构:
Struct aa { void Print();//用于打印输出表格的函数 void Input();//用于输入的函数
void tryfenpei(int i);//试分配函数 void refenpei(int i);//恢复数据函数 void checksafe(int s);//安全检测函数 };
四、银行家算法的流程图 开始初始化资源类数c=3,进程数t=5初始化Available[c],Max[t][c],Allocation[t][c],Need[t][c],Request[c]输入进程数iInt f=0f
五、源代码
#include #include “stdio.h” const unsigned short c = 3;//资源类数 const unsigned short t = 5;//进程数
void Print();//用于打印输出表格的函数 void Input();//用于输入的函数
void tryfenpei(int i);//试分配函数 void refenpei(int i);//恢复数据函数 void checksafe(int s);//安全检测函数
//定义初始化数组 int Available[c], Max[t][c], Allocation[t][c], Need[t][c], Request[c];
int in;//用户选择的进程号
int main(int argc, char *argv[]){ int i;char ch='Y';cout>in){ if(in4){ cout>Request[i]){ if(Request[i]Need[in][i])coutAvailable[i])cout
cout
cout>ch);return 0;}
void Print(){ int i,j;cout0){ cout
void Input(){ for(int j=0;j>Available[j]){ if(Available[j]
{ for(int m=0;m>Max[l][m]){ if(Max[l][m]>Allocation[l][m])if(Allocation[l][m]
void tryfenpei(int i){ for(int f=0;f
//安全检测函数
void checksafe(int s){ int Work, flag, temp[t], i,j,l=0,k=0;bool Finish[t];for(i=0;i
} if(l==5)//一共有三类资源A B C,一条进程下面的安全性检测只检测了A类。如果A类通过了,那么还要判断B类,C类。否则不用 { for(i=0;i
} i=s;//s传递进来赋给i,s是用户输入的进程号(有主函数里的in传递进来)while(i
if(Finish[i]==false&&Need[i][j]“;cout
六、执行结果:
七、实验总结
通过本次实验了解到用银行家算法来预防死锁是可靠的,但也是非常保守的,因为它限制了进程对资源的存取,从而降低了进程的并发运行程度。死锁检测并不限制进程对资源的申请,只要有,就分配,但这也可能造成死锁。但由于死锁并不是经常发生的,故大大提高了系统运行的效率。
总之,通过本实验,使我进一步加深理解和掌握银行家算法。