死锁解决之银行家算法:分配资源的原则及例子讲解

  • Post author:
  • Post category:其他



请大家务必仔细看,相信一定会看懂的!



银行家算法的原理

  1. 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程。
  2. 进程可以分期请求资源,但请求的总数不能超过最大需求量。
  3. 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。



银行家算法例子:

假设系统中有三类互斥资源R1、R2、R3,可用资源数分别是9,8,5。在T0时刻系统中有P1,P2,P3,P4,P5共5个进程,这些进程对资源的最大需求量和已分配资源数如下所示,如果进程按____________序列执行,那么系统状态使安全的。

​ 进程资源表

| 资源 | 最大需求量R1,R2,R3 | 已分配资源 R1,R2,R3 |

进程 R1 R2 R3 R1 R2 R3
P1 6 5 2 1 2 1
P2 2 2 1 2 1 1
P3 8 1 1 2 1 0
P4 1 2 1 1 2 0
P5 3 4 4 1 1 3

A.P1->P2->P4->P5->P3

B.P2->P4->P5->P1->P3

C.P2->P1->P4->P5->P3

D.P4->P2->P5->P1->P3

​ 进程资源表

| 资源 | 最大需求量 R1,R2,R3 | 已分配资源 R1,R2,R3 | 还需资源 R1,R2,R3 |

进程 R1 R2 R3 R1 R2 R3 R1 R2 R3
P1 6 5 2 1 2 1 5 3 1
P2 2 2 1 2 1 1 0 1 0
P3 8 1 1 2 1 0 6 0 1
P4 1 2 1 1 2 0 0 0 1
P5 3 4 4 1 1 3 2 3 1

R1,R2,R3现在已分配资源数: 7 7 5

R1,R2,R3现在未分配资源数: 2 1 0

现在从未分配的资源中给五个进程分配资源,使得分配完成后,可以让得到资源的进程完成当前的任务以释放资源。可以看到:

  • R1=2,R2=1,R3=0

  • 5个进程所需资源分别为:

    1. 5,3,1
    2. 0,1,0
    3. 6,0,1
    4. 0,0,1
    5. 2,3,1
  • 目前就只有P2进程可以从还未分配的资源中分配资源,进而完成任务,释放资源。故分配给P2进程资源。

  • P2完成任务并释放资源。现在R1,R2,R3未分配的资源为:4,2,1

  • 4个进程所需资源分别为:

    1. 5,3,1

    2. 6,0,1

    3. 0,0,1

    4. 2,3,1

  • 目前4个进程只有P4进程可以从还未分配的资源中分配资源,分配资源后进而完成任务,释放P4进程已分配的资源。

  • P4执行完并释放资源。现在R1,R2,R3未分配的资源为:5,4,1

  • 剩下3个进程所需资源分别为:

    1. 5,3,1

    2. 6,0,1

    3. 2,3,1

  • 现在P1和P5进程都可以执行完并释放资源。既然题目中是按照P2->P4->P5->P1->P3的顺序来执行,这里就为P5进程分配资源。

  • P5执行完并释放资源。现在R1,R2,R3未分配的资源为:6,5,4

  • 剩下的2个进程所需资源分别为:

    1. 5,3,1

    2. 6,0,1

  • 此时P1,P3进程都可满足条件。这里还是按照题目的选项B(P2->P4->P5->P1->P3)来验证。现在为P1分配资源。

  • P1执行完并释放资源。现在R1,R2,R3未分配的资源为:7,7,5

  • 剩下的1个进程:

    1. 6,0,1
  • 现在为P3分配资源。P3进程执行完并释放资源。

  • 到此执行完毕。故选项B正确。还有不清楚的可以用这种方法检查剩下的选项。



版权声明:本文为qq_41809511原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。