实验四:进程死锁避免
实验目的:
1.加深了解有关资源申请、避免死锁等概念。
2.加深对银行家算法的步骤和相关数据结构用法的更好理解。
实验内容:
系统中有m个同类资源被n个进程共享,每个进程对资源的最大需求数分别为S1,S2,…Sn, 且Max(Si)<=m(i=1,2,…n).进程可以动态地申请和释放资源。编写一个程序,实现银行家算法,当系统将资源分配给某一进程而不会死锁时,就分配,否则推迟分配并显示适当信息。
要求:
要画出银行家算法的程序框图,说明数据结构。当进程要分配资源时以及释放资源后,打印输出资源分配或释放后的分配情况表,如果可能产生死锁,则显示适当信息;如果不产生死锁,更新系统的资源分配情况表。
实验步骤 :
1、理解本实验中关于两种调度算法的说明。
2、根据调度算法的说明,画出相应的程序流程图。
3、按照程序流程图,用C语言编程并实现。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define False 0
#define True 1
int Max[100][100]={0};//各进程所需各类资源的最大需求
int Avaliable[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100]={0};//请求资源向量
int temp[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
int M=100;//作业的最大数为100
int N=100;//资源的最大数为100
void showdata()//显示资源矩阵
{
int i,j;
cout<<"系统目前可用的资源[Avaliable]:"<<endl;
for(i=0;i<N;i++)
cout<<name[i]<<" ";
cout<<endl;
for (j=0;j<N;j++)
cout<<Avaliable[j]<<" ";//输出分配资源
cout<<endl;
cout<<" Max Allocation Need"<<endl;
cout<<"进程名 ";
for(j=0;j<3;j++){
for(i=0;i<N;i++)
cout<<name[i]<<" ";
cout<<" ";
}
cout<<endl;
for(i=0;i<M;i++){
cout<<" "<<i<<" ";
for(j=0;j<N;j++)
cout<<Max[i][j]<<" ";
cout<<"