zoukankan      html  css  js  c++  java
  • 银行家算法

    目的:避免死锁的产生。

    算法思想:

           1、假分配检测:Request < Need

                                Request < Available

           2、安全序列检测算法

    实例列举:

      某系统有R1,R2,R3共3中资源,在T0时刻P0,P1,P2,P3和P4这5个进程对资源的占用和需求情况如下表1,此时系统的可用资源向量为(3,3,2)。试问:

    1、T0时刻系统是否存在安全序列?

    2、P1请求资源:P1发出请求向量Request(1,0,2),系统是否接受该请求?请使用银行家算法检查

    3、P4请求资源:P4发出请求向量Request(3,3,0),系统按银行家算法检查.

    4、P0请求资源:P0发出请求向量Request(0,2,0),系统按银行家算法检查.

          表1 T0时刻的资源分配表

      MAX Allocation Need Available
    P0            7 5 3         0 1 0         7 4 3          3 3 2        
    P1 3 2 2     2 0 0 1 2 2       
    P2 9 0 2 3 0 2 6 0 0  
    P3 2 2 2  2 1 1   0 1 1  
    P4 4 3 3 0 0 2 4 3 1  

    an:

      1、T0时刻系统是否存在安全序列?

        Available > Need1 ----> 可用资源分配给P1,直到P1进程执行完成,然后Available = Available + Allocation1 = (5,3,2)

               Available > Need3 -----> 可用资源分配给P3,直到P3进程执行完成,然后Available = Available + Allocation3 = (7,4,3)

        Available> Need4.....

            得到安全序列为:P1,P3,P4,P2,P0

      2、P1请求资源:P1发出请求向量Request(1,0,2),系统是否接受该请求?请使用银行家算法检查

       第一步(假分配检查):把Request分配给P1,必须满足Request要小于Available,Request要小于Need。

                           Request(1,0,2)< Available(3,3,2)

                           Request(1,0,2)< Need(1,2,2)

            因为满足第一步检查,进入第二层检查(安全序列检查)。

       第二步(安全序列检查):建立安全性检查表

      Work   Need Allocation   Work+Allocation   Finish
    P1 2 3 0 0 2 0 3 0 2    
               
               
               
               

      如果 Work > Need ,那么执行Work+Allocation,得到:                

      Work   Need Allocation   Work+Allocation   Finish
    P1   2 3 0 0 2 0     3 0 2  5 3 2  true
      5 3 2            
               
               
               

       找到Need<Work的进程,如果没有找到这样的进程而进程集合没有执行,则算法返回,得到不存在安全序列结果,否则继续执行该算法。

       这里我们找到了P3进程。修改安全序列检查表:

      Work   Need Allocation   Work+Allocation   Finish
    P1   2 3 0 0 2 0     3 0 2  5 3 2  true
    P3 5 3 2     0 1 1   2 1 1  7 4 3  true
      7 4 3        
               
               

      这样一直执行到所有的进程到完成,以完成该安全序列检查表:

      Work   Need Allocation   Work+Allocation   Finish
    P1   2 3 0 0 2 0     3 0 2  5 3 2  true
    P3 5 3 2     0 1 1 2 1 1  7 4 3  true
    P4 7 4 3 4 3 1 0 0 2  7 4 5  true
    P0 7 4 5 7 4 3 0 1 0  7 5 5  true
    P2 7 5 5 6 0 0 3 0 2 10 5 7  true

          这样就找到了整个安全序列为:P1,P3,P4,P0,P2

        3、4小问也是同样的解题过程。这里不赘述...

  • 相关阅读:
    ThinkPad R400 windows 2008 下网卡、蓝牙驱动程序安装过程记录
    google 小百货工具
    今天发现数据库到处都有,还是学习一种比较好
    今天玩玩Android == 了解一下
    p 同学推荐的 书 读完了 == 感慨颇深,霍霍
    new confirm and new idea == need time
    娑罗双树,半枯半荣,娑罗花开,盛者必衰
    使用VC6.0 连接PostgreSQL数据库
    vc6操作PostgreSQL 测试下异步通知接口
    准备这几天看的内容
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2435053.html
Copyright © 2011-2022 走看看