image.png
    安全状态判断—银行家算法(见PDF p198)

    1. 仍需要资源 | P1 | 0 | 0 | 0 | 0 | | :—-: | :—-: | :—-: | :—-: | :—-: | | P2 | 0 | 7 | 5 | 0 | | P3 | 6 | 6 | 2 | 2 | | P4 | 2 | 0 | 0 | 2 | | P5 | 0 | 3 | 2 | 0 |

    2. 安全状态

    由银行家算法:
    p1执行:(2 1 0 0)+(0 0 1 2)=(2 1 1 2)[加的是当前分配,非仍需要或最大需求]
    p4执行:(2 1 1 2)+(2 3 5 4)=(4 4 6 6)
    p5执行:(4 4 6 6)+(0 3 3 2)=(4 7 9 8)
    p2执行:(4 7 9 8)+(2 0 0 0)=(6 7 9 8)
    p3执行:(6 7 9 8)+(0 0 3 4)=(6 7 12 12)
    所有进程都能执行结束

    1. 根据死锁检测算法

    Allocation矩阵如下

    | image.png |
    1. 没有分配资源都为0的进程,不标记
    1. 初始化W=(2 1 0 0)
    1. 进程p1需求可满足,标记P1
    W = W+(0 0 1 2)=(2 1 1 2)
    4. 重复,最终所有进程都接受了标记
    4. 则没有死锁
    | 银行家算法和检测算法:
    银行家算法和死锁检测是同一种算法,但前者专门指资源分配前通过算法得出的安全状态而决定是否分配资源给某个线程;后者则是判断当前状态下是否有进程无法执行完毕 | | —- | —- | —- |

    1. 由3,不存在
    2. 假设同意后,使用银行家算法[对请求进程的”当前分配”增加对”可用资源”中扣除]

    image.png
    此时可用资源变为(2 0 0 0)
    p1执行:(2 0 0 0)+(0 0 1 2)=(2 0 1 2)[加的是当前分配,非仍需要或最大需求]
    p4执行:(2 0 1 2)+(2 3 5 4)=(4 3 6 6)
    p5执行:(4 3 6 6)+(0 3 3 2)=(4 6 9 8)
    p2,p3无法执行,产生死锁