奋斗吧!小蜗牛

导航

银行家算法

                   银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

                   流程图如下:

                                                                                                    

 

                   例如:判断如下请求状态是否安全

Process(进程号) Allocation(已分配) Need(需要) Avaiable(可分配资源)
    p0  0  0  3  2 0  0  1  2 1  6  2  2
    p1  1  0  0  0 1  7  5  0  
    p2  1  3  5  4 2  3  5  6  
    p3  0  3  3  2 0  6  5  2  
    p4  0  0  1  4 0  6  5  6  

 

        判断步骤:

        1、当前可分配资源为1 6 2 2,那么我们从Need中查找所需要资源小于1 6 2 2的,可以查找到p0进程,目前需要 0 0 1 2,那么我们先把资源分配给p0,

        p0执行完成后会释放它已分配的资源 0 0 3 2,那么p0执行完成后Avaiable = 1 6 2 2 + 0 0 3 2 = 1 6 5 4

        2、同理,我们继续从剩下尚未执行的进程的Need中查找所需资源小于1 6 5 4的,可以查找到P3进程,目前需要 0 6 5 2,那么我们资源分配给p3执行完成

        后 Avaiable = 1 6 5 4 + 0 3 3 2 = 1 9 8 6

        3、同理继续判断,判断完成后,我们可以找到一条安全序列:p0->p3->p1->p4->p2,所以请求是安全的。

      

     步骤如下表:

    

    进程号     Work     Need   Allocation  Work+Allaction   Finish
    p0   1  6  2  2 0  0  1  2 0  0  3  2 1  6  5  4   true
    p3   1  6  5  4 0  6  5  2 0  3  3  2 1  9  8  6   true
    p1   1  9  8  6 1  7  5  0 1  0  0  0 2  9  8  6   true
    p4   2  9  8  6 0  6  5  6 0  0  1  4 2  9  9  10   true
    p2   2  9  9  10 2  3  5  6 1  3  5  4 3    12 14   14   true

    

    那么如果p2提出Request(1,2,2,2),能否分配成功?

    根据上面的流程图,我们需要:

      1、判断Request 是否小于等于 Need, 如果否,则失败;如果小于继续;1 2 2 2 < 2 3 5 6 = true

      2、判断Request 是否小于等于Avaiable,如果否,则等待;   1 2 2 2 <  1 6 2 2 = true

      3、尝试分配:

        Avaiable = Avaiable - Request = 1 6 2 2 - 1 2 2 2 = 0 4 0 0

        Allocation = Allocation + Request = 1 3 5 4 + 1 2 2 2 = 2 5 7 6

        Need = Need - Request = 2 3 5 6 -  1 2 2 2 = 1 1 3 4

      4、判断是否安全

        

 Process(进程号) Allocation(已分配) Need(需要) Avaiable(可分配资源)
    p0  0  0  3  2 0  0  1  2 0  4  0  0
    p1  1  0  0  0 1  7  5  0  
    p2  2  5  7  6 1  1  3  4  
    p3  0  3  3  2 0  6  5  2  
    p4  0  0  1  4 0  6  5  6  

      我们按照上面的判断步骤,去Need中寻找所需资源小于 0 4 0 0 的进程,结果并没有找到,所以当前是不安全的,p2提出Request(1,2,2,2)不能分配成功。

        

        

 

posted on 2020-11-28 17:11  奋斗的小强  阅读(358)  评论(0编辑  收藏  举报