银行家算法解决死锁问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaobangkuaipao/article/details/75912324

参考文献:http://www.docin.com/p-1491046367.html

银行家算法安全性序列分析

摘要:在操作系统的处理机调度的过程中,由于竞争资源或者进程间推进顺序非法,都会导致死锁的发生。本文主要研究如何利用银行家算法可以避免死锁,并分析银行家算法安全性序列。

关键词:银行家算法;安全性序列;避免死锁

引言

处理死锁的方法主要包括预防死锁、避免死锁、检测死锁和解除死锁。而利用银行家算法可以避免死锁,在这一避免死锁的过程中,银行家算法安全性序列分析是尤为重要的。

1. 银行家算法中的数据结构 

假定系统中有n个进程P1P2P3,...Pn),m类资源R1R2,...Rm),

(1) 空闲资源向量Available。这是包括m个元素的一维数组,如果Availablej=K表示第j类资源的现有空闲数量为K。随该类资源的分配和回收,其数值发生动态地改变。

2 最大需求矩阵MaxMax矩阵是n×m维的,Max[i][j]的值表示第i个进程对第j类资源的最大需求。

3 分配矩阵AllocationAllocation矩阵是n×m维的,该矩阵定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i][j]=K表示,第i个进程当前拥有的第j类资源个数为K

4需求矩阵NeedNeed矩阵是n×m维的,该矩阵定义了所有进程仍然需求的各类资源数。如果Need[i][j]=K,那么,为了能够完成其任务,进程i还需要Rj类资源K个。Need[i]表示矩阵的第i行,是进程i的需求资源向量。

Need[i][j]=Max[i][j]-Allocation[i][j]

2. 银行家算法的描述如下

Requesti向量,Requesti表示第i个进程向系统提出一次申请,申请的各类资源的数量就应该是该向量的各个分量。

当进程Pi发出资源请求后,系统按下述步骤进行检查:

注意:向量比较大小,是向量所有分量与对应的位置比较大小,加减法同理。

1) 如果RequestiNeed[i],便转向步骤2;否则认为出错,因为进程Pi申请的资源数不应该大于它的需求数。(检查是否申请过多

2) 如果RequestiAvailable,便转向步骤(3);否则, 表示尚无足够资源,Pi须等待。检查是否足够给资源申请者

3对Pi进程所请求的资源进行预分配,修改一下向量:

  Available=Available-Requesti;

  Allocation[i]=Allocation[i]+Requesti;

  Need[i]=Need[i]-Requesti;

4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全,就正式将资源分配给进程Pi,从而实现本次分配;反之,取消这次的试探分配,保持上一次的资源分配状态,让进程Pi等待。

3. 安全性算法 

1) 设置两个向量:① 长度为m的一维工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数量的多少在执行安全算法开始时,Work=Available;②长度为n的一维数组Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi]∶=false;当有足够资源分配给进程时, 再令Finishi]∶=true

2) 从进程集合中找到一个能满足下述条件的进程:

Finishi=false

Need[i]≤Work (可分配资源,每类资源都能满足当前进程的最大需求)

如果找到,那么,执行步骤(3), 否则,执行步骤(4)。(不能满足要求则看现有的资源能不能满足其他进行的需求)

3当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

 Work=Work+Allocation[i];

  Finish[i]=true;

  go to step 2;

4) 如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。

4. 银行家算法安全性序列分析之例 

假定系统中有4个进程{P1, P2, P3, P4}和三类资源{A, B, C},各种资源的数量分别为9、3、6,在T0时刻的资源分配情况如表1 所示。

1  T0时刻的资源分配表

资源情况

进程

Max

Allocation

Need

Available

A  B  C

A  B  C

A  B  C

A  B  C

P1

3  2  2

1  0  0

2  2  2

 

 

1  1  2

P2

6  1  3

5  1  1

1  0  2

P3

3  1  4

2  1  1

1  0  3

P4

4  2  2

0  0  2

4  2  0

(1)T0时刻的安全性: 

 

表格2来源解析:Work=Available={1,1,2},满足Need[i]≤Work的进程为P2,则先满足P2的资源申请。等P2执行完,Finish[i]=true;释放占有的资源,则Work=Work+Allocation[i];此时的Work{6,3,2};同理为其他为结束的进程分配资源。

 2  T0时刻的安全序列

资源情况

进程

Work

Need

Allocation

Work+Allocation

Finish

A  B  C

A  B  C

A  B  C

A  B  C

P2

1  1  2

1  0  2

5  1  1

6  2  3

TRUE

P1

6  2  3

2  2  2

1  0  0

7  2  3

TRUE

P3

7  2  3

1  0  3

2  1  1

9  3  4

TRUE

P4

9  3  4

4  2  0

0  0  2

9  3  6

TRUE

(2)P2请求资源Request21,0,1)系统根据银行家算法进行检查,执行如下操作:对比表1中的数据)。

 ① Request21, 0, 1Need21, 0, 2

 ② Request21, 0, 1Available1, 1, 2

 ③ 系统先假定可为P2分配资源,并修改Available, Allocation2Need2向量,由此形成的资源变化情况如表2所示。

2  系统先假定可为P2分配资源时刻的资源分配表

资源情况

进程

Max

Allocation

Need

Available

A  B  C

A  B  C

A  B  C

A  B  C

P1

3  2  2

1  0  0

2  2  2

0  1  1

P2

6  1  3

6  1  2

0  0  1

P3

3  1  4

2  1  1

1  0  3

P4

4  2  2

0  0  2

4  2  0

 ④ 再利用安全性算法检查此时系统是否安全。可见安全性分析结果见表3,有结果可知,可以找到一个安全序列{P2P1P3P4},因此系统是安全的,可以将资源分配给P2.

3  P2申请资源时的安全性检查

资源情况

进程

Work

Need

Allocation

Work+Allocation

Finish

A  B  C

A  B  C

A  B  C

A  B  C

P2

0  1  1

0  0  1

6  1  2

6  2  3

TRUE

P1

6  2  3

2  2  2

1  0  0

7  2  3

TRUE

P3

7  2  3

1  0  3

2  1  1

9  3  4

TRUE

P4

9  3  4

4  2  0

0  0  2

9  3  6

TRUE

 

展开阅读全文

没有更多推荐了,返回首页