【OS】Bankers Algorithm

文章目录

  • 数据结构.
  • 向量.
  • 系统安全测试算法.
  • 资源请求算法.
  • 实例一.
    • 解答.
  • 实例二.
    • 解答.

数据结构.

  • n:整型,进程数量;
  • m:整型,资源类型的种类数;
  • Available[m]:一维数组,保存[1…m]每种资源的可用实例数量;
  • Max[n][m]:n×m矩阵,Max[i][j]表示i号进程对于j号资源的总需求量;
  • Allocation[n][m]:n×m矩阵,Allocation[i][j]表示i号进程已经持有的j号资源数量;
  • Need[n][m]:n×m矩阵,Need[i][j]表示i号进程还需要的j号资源数量。

向量.

  • 对于两个长度为n的向量 X X X Y Y Y,当且仅当 X [ i ] < Y [ i ] X[i]X[i]<Y[i]对于所有的 i ∈ [ 1.. n ] i∈[1..n] i[1..n]都成立时,我们说 X < Y . XX<Y.

系统安全测试算法.

  • 用于测试系统此时是否处于安全状态,算法如下:
TestSafety()
{
     
	//1.
	Work[1..m]=Available[1..m];
	//向量Work初始化为当前可用资源实例数向量.

	Finish[1..n]=false;
	//向量Finish每个分量都为false,表示初态都是未完成.

	//2.
	change=true;	//循环控制变量.
	while(change)
	{
     
		//Need[i]表示矩阵的第i行,也就是进程Pi所需资源数向量,
		//若进程Pi未完成,并且需求能够得到满足,就执行Pi,后续
		//释放其中的资源,等价于Work获得Pi已经持有的资源数向量
		//Allocation[i].
		change=false;
		for(int i=1;i<=n;++i)
		{
     
			if(Finish[i]==false && Need[i]<Work) 
			{
     
				Work=Work+Allocation[i];
				Finish[i]=true;
				change=true;
			}
		}
	}
	//不动点算法:只有当Finish和Allocation不再发生改变时,
	//也就意味着所有的进程都已经完成或者剩余进程都无法运行
	//这两种情况之一发生时,才会跳出while循环.

	//3.
	for(int i=1;i<=n;++i)
	{
     
		if(Finish[i]==false)
		{
     
			return false;
		}
	}
	return true;
	//全真为真,一假俱假.
}

资源请求算法.

  • Request[n][m]:n×m矩阵,Request[i][j]表示i号进程此时申请的j号资源数量。
if(Request[i]<Need[i])
{
     
	if(Request[i]<Available)
	{
     
		//Simulate allocation.
		Available=Available-Request[i];
		Allocation[i]=Allocation[i]+Request[i];
		Need[i]=Need[i]-Request[i];
		
		if(TestSafety())
		{
     
			Agree Allocation;
			//System safe,just allocate.
		}
		else
		{
     
			Rollback;
			//System unsafe,rollback.
		}
	}
	else
	{
     
		Wait;
		//Cause resource insufficient.
	}
}
else
{
     
	Error;
	//Cause request too many resources.
}

实例一.

【OS】Bankers Algorithm_第1张图片

  • 此时系统是否处于安全状态?
  • 如果进程 P 1 P_1 P1提出资源请求 R e q u e s t 1 = ( 1 , 0 , 2 ) Request_1 =(1, 0, 2) Request1=(1,0,2),能满足吗?
  • 如果进程 P 0 P_0 P0提出资源请求 R e q u e s t 0 = ( 0 , 2 , 0 ) Request_0 =(0, 2, 0) Request0=(0,2,0) ,能满足吗?
  • 如果进程 P 4 P_4 P4提出资源请求 R e q u e s t 4 = ( 3 , 3 , 0 ) Request_4 =(3, 3, 0) Request4=(3,3,0) ,能满足吗?

解答.

【OS】Bankers Algorithm_第2张图片
【OS】Bankers Algorithm_第3张图片

实例二.

2、考虑系统T0时刻的状态如下所示:

Allocation Max Available
A B C D A B C D A B C D
P 0 P_0 P0 0 0 1 2 0 0 1 2 1 5 2 0
P 1 P_1 P1 1 0 0 0 1 7 5 0
P 2 P_2 P2 1 3 5 4 2 3 5 6
P 3 P_3 P3 0 6 3 2 0 6 5 2
P 4 P_4 P4 0 0 1 4 0 6 5 6
  • 需求矩阵Need的内容如何?
  • 此时刻该系统是否处于安全状态?
  • 若此时 P 1 P_1 P1请求资源 R e q u e s t 1 = ( 0 , 4 , 2 , 0 ) Request_1=(0,4,2,0) Request1=(0,4,2,0),系统是否满足其请求?为什么?

解答.

【OS】Bankers Algorithm_第4张图片
【OS】Bankers Algorithm_第5张图片
【OS】Bankers Algorithm_第6张图片
【OS】Bankers Algorithm_第7张图片

你可能感兴趣的:(OS)