【银行家算法-安全性算法】
1. 银行家算法
介绍
- 银行家算法是最具代表性的避免死锁的算法,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态则分配,否则等待。
银行家算法中四个数据结构
可利用资源向量 Available
长度为m的向量,如果 Available[j] = K,则表示系统中资源R(j)现在有K个;
最大需求矩阵 Max
是一个n x m的矩阵,定义系统中n个进程中的每个进程对m类资源的 最大需求,如果Max[i,j] = K,则表示进程i需要资源R(j)的最大数目为K;
分配矩阵 Allocation
一个n x m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocation[i,j]= K,则表示进程i当前已分得资源R(j)的数目为K;
需求矩阵 Need
一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j] = K,则表示进程i还需要资源R(j)的个数为k。
1.1 安全性算法
安全性算法的步骤
通过Max - Allocation 获得矩阵 Need,初始化Work = Available
接着对Need中的每一条数据 Need(i) 和 Work 进行比较
如果Need(i) <= Work && Finish[i] = false, 说明为该进程分配资源是安全的;
且假设该进程会立刻释放已分配的资源Allocation[i],因此执行Work += Allocation[i]
更新Finish[i] = true;
如果Need(i) > Work ,说明为该进程分配资源是不安全的;
继续查找下一个安全的进程;
如果对于所有的i,Finish[i]均为true,则系统处于安全的状态。
操作系统概念 第七版 截图如下。
举例
- 首先初始化Work = Available,即Work = (3, 3, 2);
- 对于need(0),(7, 4, 3) > (3, 3, 2),不满足条件继续查找;
- 对于need(1),(1, 2, 2) < (3, 2, 2),满足条件执行
- Work += Allocation[1] ,work = (3,3,2) + (2,0,0) = (5,3,2);
- Finish[1] = true;
- 继续查找;
- 对于need(2),(6, 0, 0) > (5, 3, 2),不满足条件继续查找;
- 对于need(3),(0, 1, 1) < (5, 3, 2),满足条件执行
- Work += Allocation[3] ,work = (5, 3, 2) + (2,1,1) = (7,4,3);
- Finish[3] = true;
- 继续查找
- 对于need(4),(4, 3, 1) < (7, 4, 3),满足条件执行
- Work += Allocation[4] ,work =(7, 4, 3) + (0,0,2) = (7,4,5);
- Finish[4] = true;
- 继续查找
- 对于need(2),(6, 0, 0) <(7,4,5),满足条件执行
- Work += Allocation[2] ,work =(7,4,5) + (3,0,2) = (10,4,7);
- Finish[2] = true;
- 继续查找
- 对于need(0),(7, 4, 3) <(10,4,7);,满足条件执行
- Work += Allocation[0] ,work =(10,4,7); + (0,1,0) = (10,5,7);
- Finish[0] = true;
- 至此对于所有的i,均满足Finish[i] = true,因此顺序<p1,p3,p4,p2,p0>满足安全条件。
1.2 资源请求算法
资源请求算法的步骤
对于每一个请求Request[i],首先判断是否<=Need[i]
- 如果不满足即代表请求资源Request[i]大于最大需求资源Need[i],显然无法分配资源需等待;
- 如果满足则继续向下执行;
判断是否Request[i] <= Available
- 如果不满足,即请求资源Request[i] 大于可用资源Available,显然无法分配资源需等待;
- 如果满足,则假设为进程p(i)分配资源,更新Available、Allocation、Need三个矩阵
- Available = Available - Request[i];
- Allocation = Allocation + Request[i];
- Need = Need - Request[i];
- 使用安全性算法检测是否安全,如果安全则分配资源,反之则需等待。
操作系统概念 第七版 截图如下。
【银行家算法-安全性算法】相关推荐
- 7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗
一:前言 停更一周了,在这一周里,我每时每刻都在 想这我这 29个粉丝,庆幸教师资格证终于结束了,贴心杰又可以天天更新博客了 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,I am come back; 二: ...
- 华南理工大学计算机操作系统课程设计大作业银行家死锁避免算法模拟,2016春操作系统大作业银行家死锁避免算法模拟.doc...
文档介绍: 2016春操作系统大作业银行家死锁避免算法模拟20160501华南理工大学"计算机操作系统"课程设计大作业计算机科学与技术专业:春2015班级:号:2015047420 ...
- HMAC算法安全性浅析
HMAC算法安全性浅析 HMAC,全称为"Hash Message Authentication Code",中文名"散列消息鉴别码",主要是利用哈希算法,以一 ...
- 【计算机网络】网络层 : 路由算法 ( 路由算法分类 | 静态路由算法 | 动态路由算法 | 全局性动态路由算法 | 分散性动态路由算法 | 分层次路由选择协议 )
文章目录 一.路由算法 二.路由算法 分类 三.静态路由算法 四.动态路由算法 五.动态路由算法 分类 六.分层次的路由选择协议 一.路由算法 路由算法 : 选择数传输的 "最佳路由&quo ...
- 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法
文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...
- 前后台加解密的使用--SHA256算法 RSA算法 AES算法
SHA256算法 sha256与md5一样是散列算法,不是加密算法,不存在解密的问题,因此是不可逆的,可以通过key+password,对密码进行加密,在后台进行比对,安全性比md5高一点,加密后生成 ...
- 算法总结---最常用的五大算法(算法题思路)
算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...
- 生成树的概念,最小生成树Prim算法 Kruskal算法
求解最小生成树可以用Prim算法 Kruskal算法
- 期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用
期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用 EM的应用 EM算法有很多的应用,最广泛的就是GMM混合高斯模型.聚类.HMM等等.具体可以参考Jerry ...
最新文章
- 简单的apache URL重写
- QT关联容器QMap,QHash的Key值自动排序问题
- 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机
- 斯坦福2014机器学习笔记五----正则化
- Delphi 数据类型列表
- python11-28笔记(1.6-1.7)
- 前端学习(3143):react-hello-react之总结生命周期
- 爱奇艺纪录片《棒!少年》《从长安到罗马》入选广电总局“2020年优秀国产纪录片集锦”...
- Linux下7款最佳的开源视频播放器
- 计算机科学中的计算机思维在本质上源自于,计算思维对学习计算机知识有何作用?...
- Medusa(美杜莎)--参数及常见命令
- 学习和使用Oracle的基本Sql语句
- Zer0pts CTF 2020的web赛后记录+复现环境
- october cms-官方文档-ajax
- 怎样开启SQL数据库服务
- 渗透测试-Docker容器
- 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年
- c语言编程斐波那契前n项,c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)...
- 如何理解六西格玛MSA测量系统分析中的线性
- Kubernetes的网络架构