实验二 死锁避免的模拟

一、实验目的

1)深入了解死锁的原因和必要条件。

2)掌握死锁的处理方式。

3)实现死锁避免的模拟

二、实验预备知识

1)系统安全状态

2)银行家算法

三、实验内容

验证银行家算法避免系统死锁。

假设系统中有三类资源A、B、C和五个进程P1、P2、P3、P4、P5。然后设定每种资源的数量。之后设定每个进程对各类资源的最大需求,最后假定在某一时刻,系统已经给各个进程分配多少资源。要求检查该时刻系统是否处于安全状态。

四、实验要求

1)  给出程序流程和源程序(附有详细注释)

2)  程序运行截图

3)  收获、体会及对该实验的改进意见和见解

五、实验提示

由于是实验,没有真正的避免死锁。所以在实验中首先假定一种系统状态,假设T0时刻资源的分配情况如下所示:

实验二 死锁避免的模拟_第1张图片

要求实现:

(1)确定系统在T0时刻的安全性。

(2)P1发出资源请求向量Request1(1,0,2),按照银行家算法确定能否将资源分配给P1。

(3)在(2)的基础上, P4发出请求向量Request4(3,3,0),按照银行家算法确定能否将资源分配给P1。

(4)再(3)的基础上,P0发出请求向量Request0(0,2,0),按照银行家算法确定能否将资源分配给P1。

(1)程序的代码

#include
using namespace std;

int Max[5][3];// 每个进程对各类资源的最大需求
int allocation[5][3];// 已经分配的资源的数量
int need[5][3];
int sum[3];
int available[3];
int request[3]={0};// 表示资源请求的数目
int r = 0;// 表示请求资源的进程
int safelist[5];// 表示安全序列

void inital()// 初始化所有资源的数量
{
	cout << "请分别输入的A、B、C资源的数量:";
	for(int i = 0;i<3;i++)
	{
		cin >> sum[i];
	}
	for(int i = 0;i<5;i++)
	{
		cout << "请输入进程Process[" << i+1 << "]需要A、B、C资源的最大数目:";
		for(int j = 0;j<3;j++)
		{
			cin >> Max[i][j];
		}
	}
	int add[3] = {0,0,0};
	for(int i = 0;i<5;i++)
	{
		cout << "请输入进程Process[" << i+1 << "]当前已分配的资源的数目:";
		for(int j = 0;j<3;j++)
		{
			cin >> allocation[i][j];
		}
	}
	for(int i = 0;i<3;i++)
	{
		for(int j = 0;j<5;j++)
		{
			add[i] += allocation[j][i]; 
		}
	}
	for(int i = 0;i<5;i++)
	{
		for(int j = 0;j<3;j++)
		{
			need[i][j] = Max[i][j] - allocation[i][j];
		}
	}
	for(int i = 0;i<3;i++)
	{
		available[i] = sum[i] - add[i];
	}
}
void display()
{
	cout<> r;
			if (r<=0||r>5)
				cout << "请输入合法的进程!!!" << endl;
			cout << "请分别输入的申请A、B、C资源的数目:";
			for (int i=0;i<3;i++)  
			{
				cin >> request[i];
			}
			int a = 0,b = 0;
			for (int i=0;i<3;i++)  
			{  
				if(request[i]>need[r-1][i])// Request<=Need 不满足
				{
					a = 1;
					break;
				}
				if(request[i]>available[i])// Request<=Available不满足
				{
					b = 1;
					break;
				}
			}
			if(a == 1)
			{
				system("cls");
				cout << "Request<=Need 不满足!!!" << endl;
				display();
			}
			else if(b == 1)
			{
				system("cls");
				cout << "Request<=Available不满足!!!"<< endl;
				display();
			}
			else
				requestprocess();
			cout << "【请选择程序是否继续执行】1(是) 0(否):";
			cin >> ex;
		}
	}
	return 0;
}
(2)程序的截图

实验二 死锁避免的模拟_第2张图片

实验二 死锁避免的模拟_第3张图片

实验二 死锁避免的模拟_第4张图片

实验二 死锁避免的模拟_第5张图片

实验二 死锁避免的模拟_第6张图片

你可能感兴趣的:(操作系统OS)