《操作系统》实验三实验报告
【实验题目】:预防进程死锁的银行家算法
【实验目的】
通过这次实验,加深对进程死锁的理解,进一步掌握进程资源的
分配、死锁的检测和安全序列的生成方法。
【实验内容】
问题描述:
设计程序模拟预防进程死锁的银行家算法的工作过程。假设有系
统中有 n 个进程 P1, … ,Pn,有 m 类可分配的资源 R1, … ,Rm,在 T0
时刻,进程 Pi 分配到的 j 类资源为 Allocationij 个,它还需要 j 类资源
Need ij 个,系统目前剩余 j 类资源 Workj 个,现采用银行家算法进行
进程资源分配预防死锁的发生。
程序要求如下:
1)判断当前状态是否安全,如果安全,给出安全序列;如果不安
全给出理由。
2 ) 对 于 下 一 个 时 刻 T1 , 某 个 进 程 Pk 会 提 出 请 求
Request(R1, … ,Rm),判断分配给 P k 进程请求的资源之后。
3)输入:进程个数 n,资源种类 m,T0 时刻各个进程的资源分配
情况(可以运行输入,也可以在程序中设置);
4)输出:如果安全输出安全的进程序列,不安全提示信息。
system("cls");
break;
case 2:ChangResources();
system("pause");
system("cls");
break;
case 3:CheckSafe();
system("pause");
system("cls");
break;
case 0:choice=0;break;
default: cout<<"请正确选择功能号(0-4)!"<
>n;
for(int i=0;i>name[i];
//cout<>Available[i];
//cout<>m;
cout<>Max[i][j];
do{
flag=0;
cout<<"请输入各进程的分配资源 Allocation["<cin>>Allocation[i][j];
if(Allocation[i][j]>Max[i][j])
flag=1;
Need[i][j]=Max[i][j]-Allocation[i][j];
{
}
if(flag)
cout<<"申请的资源大于最大需求量,请重新输入!\n";
}while(flag);
cout<<"系统目前可分配的资源:"<
cout<
if(Request[i]==false&&Need[i][j]<=Work[j])
{
apply++;
if(apply==n)
{
for(int k=0;k
";
}
cout<:";
cin>>a;
for(int i=0;icin>>name[i];*/
cout<<"请输入"<
>AddRes[i];
}
}
void ChangResources()
{
for(int i=0;i【实验结果】
实验数据: