[操作系统]—死锁

死锁

死锁

原因及必要条件

处理问题

预防死锁

破坏必要条件

避免死锁

银行家算法

检测与解除死锁

死锁定理+资源分配图

  • 三胞胎

    • 死锁:资源被占有,双方互不相让,导致都不能运行。

    • 活锁:双方互相谦让,导致资源空闲。

    • 饥饿:有一方等待时间过长。

  • 死锁避免

    • 银行家算法

    安全序列(不唯一)

    找到

    无死锁

    可避免

    找不到

    必死锁

    无法避免

  • 银行家算法案例:

  最大值 已分配 可需要
万科 6000 4000 2000
恒大 5000 3000 2000
万达 3000 2000 1000

一共有资产一亿,已经分配的有4000 + 3000 + 2000 = 9000万,还剩1000万,可以满足的只有万达,所以将1000万分配给万达。

  最大值 已分配 可需要
万科 6000 4000 2000
恒大 5000 3000 2000

因为上面将剩余的已分配给万达,所以万达运行完,就会释放资源,所以目前剩下3000万的资产,可以将其分配给万科或者恒大,我就将其资产分配给万科。剩余3000 - 2000 = 1000万。

  最大值 已分配 可需要
恒大 5000 3000 2000

将万达释放的资源分配给万科之后,万科运行完就会释放资源,目前资产就会剩余1000 + 6000 = 7000万,最后将其分配给恒大。

所以安全序列为万达—万科—恒大或者万达—恒大—万科

  • 案例:

    • available(拥有的)

    • Max(最大分配量)

    • allocation(已分配)

    • need(可需要)

    • residue(剩余量)

                                                     available = \left[ \begin{matrix} 3 & 3 & 2 \end{matrix} \right] \tag{1}

                                                            [操作系统]—死锁_第1张图片

                                                    [操作系统]—死锁_第2张图片

                         [操作系统]—死锁_第3张图片

                   need = Max - allocation

上述对应的线程是P1,P2,P3,P4,P5,拥有的资源量是A,B,C。

  • 第一步:上述进程中,满足的有P2进程。释放P2进程资源,计算公式available - need + Max

                                                             need = \left[ \begin{matrix} 7 & 4 & 3 \\ 6 & 0 & 0 \\ 0 & 1 & 1 \\ 4 & 3 & 1 \\ \end{matrix} \right] \tag{5}

                                                         residue = \left[ \begin{matrix} 5 & 3 & 2 \end{matrix} \right] \tag{6}

  • 第二步,满足的有P4和P5进程,这里以P4进程为例。

                                                             need = \left[ \begin{matrix} 7 & 4 & 3 \\ 6 & 0 & 0 \\ 4 & 3 & 1 \\ \end{matrix} \right] \tag{5}

                                                         residue = \left[ \begin{matrix} 7 & 4 & 3 \end{matrix} \right] \tag{8}

  • 第三步,满足的有P1进程。

                                                             need = \left[ \begin{matrix} 6 & 0 & 0 \\ 4 & 3 & 1 \\ \end{matrix} \right] \tag{5}

                                                         residue = \left[ \begin{matrix} 7 & 5 & 3 \end{matrix} \right] \tag{8}

  • 第四步,满足的有P3进程。

                                                              need = \left[ \begin{matrix} 4 & 3 & 1 \\ \end{matrix} \right] \tag{5}

                                                         residue = \left[ \begin{matrix} 10 & 5 & 5 \end{matrix} \right] \tag{8}

  • 第五步,进程结束。

此程序的安全序列是P2,P4,P1,P3,P5。

                                

  • 资源转换图

                                     

 

                                          

①寻找圆圈进程,判断申请边是否能够得到满足,满足则删除,不满足则找下一个进程。

                                    

                                    

                                    

  • 根据资源转换图写出四个矩阵

                                                                      Max = \left[ \begin{matrix} 2 & 1 \\ 2& 1 \\ \end{matrix} \right] \tag{5}

                                                                allocation = \left[ \begin{matrix} 2 & 0 \\ 1 & 1 \\ \end{matrix} \right] \tag{5}

                                                                          need = \left[ \begin{matrix} 0 & 1 \\ 1 & 0 \\ \end{matrix} \right] \tag{5}

                                                                   available = \left[ \begin{matrix} 1 & 1 \\ \end{matrix} \right] \tag{5}

不懂的可以参考GitHub原文,链接:操作系统,欢迎star。

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