简介

首先银行家算法属于避免死锁的一个著名算法,由Dijkstra在1965年为T.H.E系统设计的一种避免死锁产生的算法。这是由于该算法用于银行系统现金贷款的发放而得名。


基本思想

允许进程动态地申请资源,在资源分配之前,通过相应的算法确定本次资源分配后系统是否安全(不会产生死锁),若是,则进行分配,否则,让进程处于等待状态


重要概念

安全状态

某时刻,对于并发执行的n个进程,若系统能够按照某种顺序如{p1,p2…pn}来为每个进程分配所需资源,直至最大需求,从而使每个进程都可顺利完成,则认为该时刻系统处于安全状态,这样的序列为安全序列

安全状态例子
P1、P2和P3三个进程和12台磁带机,T0时刻可用资源为3:

进程 最大需求 已分配 尚需
P1 10 5 5
P2 4 2 2
P1 9 2 7

那么此刻如果以{P2,P1,P3} 的顺序来执行,就可以顺利运行(系统就可以救活)
执行的过程如下表:

进程 空闲资源
P2 5
P1 10
P3 12

如果在T0 状态不按安全序列进行分配,可能会导致系统进入一个不安全状态,例如在T0状态下P3中申请1台磁带机。


银行家算法思想简框图

Created with Raphaël 2.2.0开始资源请求合法性检查进行尝试性的资源分配分配安全吗?结束撤销本次资源分配不合法性处理yesnoyesno

银行家算法的数据结构

可用资源向量 Available[m]

m为系统中资源种类数,Available[j]=k表示系统中第j类资源数为k个。

最大需求矩阵 Max[n,m]

n为系统中进程数,Max[i,j]=k表示进程i对j类资源的最大需求数为中k。

分配矩阵 Allocation[n,m]

它定义了系统中每一类资源当前已分配给每一进程资源数, Allocation[i,j] = k表示进程i已分得j类资源的数目为k个。

需求矩阵 Need[n,m]

它表示每个进程尚需的各类资源数,Need[i,j]=k 表示进程i 还需要j类资源k个。Need[i,j]=Max[i,j] - Allocation[i,j]。

进程Pi的请求向量Requesti

如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。


银行家算法具体框图

Created with Raphaël 2.2.0开始Requesti ≤ Need[i]Request[i]≤AvailableAvailable= Available-RequestiAllocation[i]= Allocation[i]+RequestiNeed[i]=Need[i]-Requesti分配安全吗?Available= Available+RequestiAllocation[i]= Allocation[i]-RequestiNeed[i]=Need[i]+Requesti结束撤销本次资源分配请求进程等待资源请求非法yesnoyesnoyesno

银行家算法具体步骤描述

当Pi发出资源请求后,系统按下述步骤进行检查:

  • (1) 如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
  • (2) 如果Requesti[j]≤Available[j],便转向步骤(3);否则, 表示尚无足够资源,Pi须等待。
  • (3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值 Available[j]:=Available[j] –Requesti[j];
    Allocation[i, j]:=Allocation[i, j]+Requesti[j];
    Need[i, j]:=Need[i, j]-Requesti[j];
  • (4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,
    将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

安全性算法

由银行家算法改进更通用的安全性算法


安全性算法原理简框图

Created with Raphaël 2.2.0开始寻找一个非阻塞的进程?运行完成,释放资源所有进程节点都可以运行完成吗?系统安全系统不安全yesnoyesno

安全性算法的数据结构

工作向量Work

它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素

Finish

它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:= False; 当有足够资源分配给进程时, 再令Finish[i]:= True。


安全性算法具体框图

Created with Raphaël 2.2.0开始Work=Available;All Finish=FALSE;Finish[i]=false &&Need[i]≤work?Work=Work+Allocation[i];Finish[i]=TRUE;All finish==TRUE?Return 安全Return 不安全yesnoyesno

安全性算法具体步骤描述

  • (1) 设置两个向量: 在执行安全算法开始时,Work∶=Available; Finish[i]:= False;
  • (2) 从进程集合中找到一个能满足下述条件的进程: ① Finish[i]= False; ② Need[i,j]≤Work[j];
    若找到, 执行步骤(3), 否则,执行步骤(4)。
  • (3) 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
    Work[j]∶= Work[i]+ Allocation[i, j];
    Finish[i]∶= true; go to step 2;
  • (4) 如果所有进程的Finish[i]=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。

例子

假定系统中有五个进程{P0、P1、P2、P3、P4}和三种类型资源{A、B、C},每一种资源的数量分别为10、5、7。如下所示

进程\资源情况 Max
A B C
Allocation
A B C
Need
A B C
Available
A B C
P0 7 5 3 0 1 0 7 4 3 3 2 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
  1. T0时刻是否安全?
    从表中可找出一个序列(P1 、 P3、 P4 、 P2 、 P0)使各进程顺序地一个个地执行完成
进程\资源情况 Work
A B C
Need
A B C
Allocation
A B C
Work+Allocation
A B C
Finish
P1 3 2 2 1 2 2 2 0 0 5 3 2 ture
P3 5 3 2 0 1 1 2 1 1 7 4 3 ture
P4 7 4 3 4 3 1 0 0 2 7 4 5 ture
P2 7 4 5 6 0 0 3 0 2 10 4 7 ture
P0 10 4 7 7 4 3 0 1 0 10 5 7 ture

银行家算法和安全性算法笔记相关推荐

  1. 银行家算法中安全性检查子算法的实现

    实验内容: 编程实现银行家算法中的安全性检查子算法,要求: (1) 本程序要能描述 n 个并发进程共享 m 类资源,在某一时刻的资源分配状态: n.m 自定,但都不能小于 3: (2) 本程序功能: ...

  2. 【银行家算法-安全性算法】

    1. 银行家算法 介绍 银行家算法是最具代表性的避免死锁的算法,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态则分配,否则等待. 银行 ...

  3. 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记

    昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到. 关于算法刷题的困惑和疑问也经常听朋友们提及.这份笔记 ...

  4. 《算法导论》读书笔记(七)

    <算法导论>读书笔记之第16章 贪心算法-活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优 ...

  5. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  6. 数据结构基础:算法的基础知识笔记

    1.算法的概念 算法是问题求解过程中的精确描述,它为解决某一特定类型的问题规定了一个运算过程. 2.算法的特点 2.1 有穷性 一个算法必须在有穷的步骤结束后结束,并且每一步都在有穷时间内完成. 2. ...

  7. 密码学专题 相关概念的解析 对称算法|算法的安全性|非对称算法存在的问题|单向散列函数|数字签名的弊端|密钥交换

    对称加密算法 对称加密算法又可以分成流加密算法和块加密 算法. 流加密算法又称为序列加密算法或序列密码,它每次只对明文中的单个位或单个字节 进行加密操作.这种算法的优点是能够实时进行数据传输和解密,缺 ...

  8. 算法_深度LSTM笔记[博]

    原创博客链接:算法_深度LSTM笔记 本文适合有一定基础同学的复习使用,不适合小白入门,入门参考本文参考文献第一篇 结构_静态综合图 结构_分步动图 进一步,向量化参数和引入问题 1, cell 的状 ...

  9. cart算法_决策树学习笔记(三):CART算法,决策树总结

    点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...

  10. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

最新文章

  1. 操作系统(三十七)基本分页存储的概念
  2. 【转】自然语言系列学习之表示学习与知识获取(一)分布式表示
  3. MyBatis 实际使用案例-Mapper.xml 映射配置文件【重点】
  4. eclipse启动时JDK环境变量报错
  5. VSCode + PYQT5 + QtDesigner
  6. jquery.form.js ajax提交上传文件
  7. Qt编写自定义控件15-百分比仪表盘
  8. mysql手动编译安装_手动编译安装Mysql
  9. java电影购票系统_基于Java的电影院购票系统
  10. VTK:图形基本操作进阶——表面重建技术(等值面提取)
  11. python将文字转换成图片_python将文本转换成图片输出的方法
  12. 这种方式打开会ctrl的流量明星cxk,简直就是魔鬼
  13. 国内学生该怎么学好A-Level数学?
  14. MC基础教程#1 关于启动器
  15. centos7 安装pg_repack
  16. 区块链中的女巫攻击问题
  17. WPF 3D 点光源学习
  18. OpenGl法向量计算
  19. Ubuntu20安装erlang和rabbitmq
  20. spring 运行原理

热门文章

  1. oCPC实践录 | 成本优化策略之eCPC(1)
  2. 求两个列表的交集、并集和补集
  3. 【视频MV】laislabonita美丽的海岛*女歌星Alizee(艾莉婕)
  4. Spring入门学习
  5. 【今日CV 计算机视觉论文速览 第150期】Fri, 2 Aug 2019
  6. 网络空间安全——2021软科中国大学专业排名
  7. 大写字母转换成小写字母
  8. exlsx表格教程_excel表格格式刷的使用教程详解
  9. 【程序8】输出9*9口诀 and 【程序9】输出国际象棋棋盘
  10. 绘制自己的人际关系图_错综复杂的人际关系,一张图谱一目了然