• 银行家算法


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

    安全序列

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

     

    数据结构

      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

  • 相关阅读:
    python操作Oracle数据库驱动下载
    Python操作Oracle数据库查询数据导出到EXCEL 代码如下
    Python操作MYSQL数据库查询数据导出到EXCEL
    python 3.6 安装 win32 win32com模块
    2.win10手动安装python excel第三方库xlwings库成功 提示No module named pywintypes 安装pywin32
    vuepress2.x集成评论插件
    html基础知识
    html简单认识
    div
    留言板
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10505235.html
Copyright © 2020-2023  润新知