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

      当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

    安全序列

      安全序列是指对当前申请资源的进程排出一个序列,保证按照这个序列分配资源完成进程。

     

    数据结构

      int n,m; //系统中进程总数n和资源种类总数m   

      int Available[1..m]; //资源当前可用总量        

      int Max[1..n,1..m] //每个进程最大所需的各种资源数量   

      int Allocation[1..n,1..m]; //当前给分配给每个进程的各种资源数量   

      int Need[1..n,1..m];//当前每个进程还需分配的各种资源数量   

      int Work[1..m]; //当前可分配的资源 

    例子:

      因为系统资源R=(17,5,20)而系统分配给这几个线程的资源为Allocation=(15,2,17) 则可以求出Available=(2,3,3)

    (1)在T0时刻,由于Availabel大于等于Need中 P5 所在行的向量,因此Availabel能满足 P5 的运行,在 P5 运行后,系统的状态变更为如下图所示:

      因此,在T0时刻,存在安全序列:P5,P4,P3,P2,P1(并不唯一)

    (2)P2请求资源,P2发出请求向量Request(i)(0,3,4),系统根据银行家算法进行检查;
       ① P2 申请资源Reuqest(i)(0,3,4)<=Need中 P2 所在行向量Need(i)(1,3,4)

       ② P2 申请资源Reuqest(i)(0,3,4)>=可以利用资源向量Availabel(2,3,3),所以,该申请不给于分配

    (3)P4请求资源,P4发出请求向量Request(i)(2,0,1),系统根据银行家算法进行检查;

       ①Reuqest(i)(2,0,1)<= Need(i)(2,2,1)

       ② Reuqest(i)(2,0,1 <= Availabel(2,3,3)

       ③对 P4 的申请(2,0,1)进行预分配后,系统的状态为:

      可利用资源向量Availabel=(0,3,2),大于Need中 P4 所在行的向量(0,2,0),因此可以满足 P4 的运行。P4 运行结束后,系统的状态变为:

       同理依次推导,可计算出存在安全序列P4,P5,P3,P2,P1(并不唯一)

    (4)P1请求资源,P1发出请求向量Request(i)(0,2,0),系统根据银行家算法进行检查;

       ①Request(i)(0,2,0)<= Need(i)(3,4,7)

       ② Request(i)(0,2,0)<= Availabel(2,3,3)

       ③对 P1 的申请(0,2,0)进行预分配后,系统的状态为:

      由于Availabel不大于等于 P1 到 P5 任一进程在Need中的需求向量,因此系统进行预分配后

      处于不安全状态,所以对于 P1 申请资源(0,2,0)不给予分配。

    转自:https://blog.csdn.net/wyf2017/article/details/80068608

  • 相关阅读:
    SQL Server的AlwaysOn错误19456和41158
    kvm上的Linux虚拟机使用virtio磁盘
    利用HAProxy代理SQL Server的AlwaysOn辅助副本
    KVM安装部署
    ola.hallengren的SQL Server维护脚本
    在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)
    怎么发现RAC环境中&#39;library cache pin&#39;等待事件的堵塞者(Blocker)?
    php unserialize 返回false的解决方法
    千万别让这些举动断送了你的职业前程-好文共分享
    Android开发:仿美团下拉列表菜单,帮助类,复用简单
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10505235.html
Copyright © 2011-2022 走看看