银行家算法和安全性算法笔记
简介
首先银行家算法属于避免死锁的一个著名算法,由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台磁带机。
银行家算法思想简框图
银行家算法的数据结构
可用资源向量 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类型的资源。
银行家算法具体框图
银行家算法具体步骤描述
当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等待。
安全性算法
由银行家算法改进更通用的安全性算法
安全性算法原理简框图
安全性算法的数据结构
工作向量Work
它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素
Finish
它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:= False; 当有足够资源分配给进程时, 再令Finish[i]:= True。
安全性算法具体框图
安全性算法具体步骤描述
- (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 |
- 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) 本程序要能描述 n 个并发进程共享 m 类资源,在某一时刻的资源分配状态: n.m 自定,但都不能小于 3: (2) 本程序功能: ...
- 【银行家算法-安全性算法】
1. 银行家算法 介绍 银行家算法是最具代表性的避免死锁的算法,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态则分配,否则等待. 银行 ...
- 神了,无意中发现一位1500道的2021LeetCode算法刷题pdf笔记
昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到. 关于算法刷题的困惑和疑问也经常听朋友们提及.这份笔记 ...
- 《算法导论》读书笔记(七)
<算法导论>读书笔记之第16章 贪心算法-活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优 ...
- 牛客网《BAT面试算法精品课》学习笔记
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
- 数据结构基础:算法的基础知识笔记
1.算法的概念 算法是问题求解过程中的精确描述,它为解决某一特定类型的问题规定了一个运算过程. 2.算法的特点 2.1 有穷性 一个算法必须在有穷的步骤结束后结束,并且每一步都在有穷时间内完成. 2. ...
- 密码学专题 相关概念的解析 对称算法|算法的安全性|非对称算法存在的问题|单向散列函数|数字签名的弊端|密钥交换
对称加密算法 对称加密算法又可以分成流加密算法和块加密 算法. 流加密算法又称为序列加密算法或序列密码,它每次只对明文中的单个位或单个字节 进行加密操作.这种算法的优点是能够实时进行数据传输和解密,缺 ...
- 算法_深度LSTM笔记[博]
原创博客链接:算法_深度LSTM笔记 本文适合有一定基础同学的复习使用,不适合小白入门,入门参考本文参考文献第一篇 结构_静态综合图 结构_分步动图 进一步,向量化参数和引入问题 1, cell 的状 ...
- cart算法_决策树学习笔记(三):CART算法,决策树总结
点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...
- 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...
1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...
最新文章
- 操作系统(三十七)基本分页存储的概念
- 【转】自然语言系列学习之表示学习与知识获取(一)分布式表示
- MyBatis 实际使用案例-Mapper.xml 映射配置文件【重点】
- eclipse启动时JDK环境变量报错
- VSCode + PYQT5 + QtDesigner
- jquery.form.js ajax提交上传文件
- Qt编写自定义控件15-百分比仪表盘
- mysql手动编译安装_手动编译安装Mysql
- java电影购票系统_基于Java的电影院购票系统
- VTK:图形基本操作进阶——表面重建技术(等值面提取)
- python将文字转换成图片_python将文本转换成图片输出的方法
- 这种方式打开会ctrl的流量明星cxk,简直就是魔鬼
- 国内学生该怎么学好A-Level数学?
- MC基础教程#1 关于启动器
- centos7 安装pg_repack
- 区块链中的女巫攻击问题
- WPF 3D 点光源学习
- OpenGl法向量计算
- Ubuntu20安装erlang和rabbitmq
- spring 运行原理