操作系统中死锁避免算法 --- 银行家算法

1. 背景

在银行系统中, 客户完成项目需要申请贷款的数量是有限的, 每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量, 在满足所有贷款要求并完成项目时, 客户应及时归还. 银行家在客户申请的贷款数量不超过自己拥有的最大值时, 都应尽量满足客户的需要. 在这样的描述中, 银行家就好比操作系统, 资金就是资源, 客户就相当与要申请资源的进程.

2. 原理

当有一个进程请求各种资源时, 银行家算法会根据当前系统情况给你返回一个如果分配给你的话系统处于safe还是unsafe的结果, 如果返回safe, 那么就会分配给你, 如果返回unsafe, 那么请求进程就需要等待.

2.1 前提条件

  • 多个实例
  • 每个进程都必须能最大限度地利用资源
  • 当一个进程请求一个资源, 就不得不等待
  • 当一个进程获得所有的资源就必须在一段有限的时间释放它们

基于上述前提条件, 银行家算法通过尝试寻找允许每个进程获得的最大资源并结束(把资源返还给系统)的进程请求的一个理想执行时序, 来决定一个状态是否是安全的.

不存在这满足要求的执行时序的状态都是不安全的.

2.2 数据结构

  • n: 进程数量
  • m: 资源类型数量
  • Max(总需求量): n * m矩阵. 如果Max[i,j] = k, 表示进程P_{i}最多请求资源类型R_{j}k个实例.
  • Available(剩余空闲量): 长度为m的向量. 如果Available[j] = k, 有k个类型R_{j}的资源实例可用.
  • Allcation(已分配量): n * m矩阵. 如果Allocation[j] = k, 则P_{i}当前分配了k个类型R_{j}的资源实例.
  • Need(未来需要量): n * m矩阵. 如果Need[i, j] = k, 则P_{i}可能需要至少k个类型R_{j}的资源实例完成任务.

Need[i, j] = Max[i, j] - Allocation[i, j]

2.3 判断过程

1. 定义WorkFinish分别是长度为mn的向量.

初始化:

  • Work = Available                               //当前资源剩余空闲量
  • Finish[i] = false                               //代表当前线程是否结束, 初始化均为false

2. 找这样的进程i:                                      //接下来找出 NeedWork小的进程i

需要找到具有以下特点的进程:

  • Finish[i] = false
  • Need[i, j] \leq Work                       //这个线程结束所需要的所有资源都能被满足

如果找到了, 就跳到3, 如果没有找到这样的进程i, 转到4.

3. 找到了当前能被满足的进程i, 就执行并回收

  • Work = Work + Allocate[i];                                  //回收进程i执行结束后所分配的资源
  • Finish[i] = true                                                       //所以配置给他再回收

转到2.

4. 因为4是由2转过来的, 到达了4, 就会出现两种情况

  • if Finish[i] = true for all i, then the system is in a safe state.         //如果所有进程的Finish[i] = true, 那么表明系统处于安全状态, 那么银行家判断算法就会返回safe.
  • 否则就是第二种状态, 找不到一个系统当前能直接结束的进程了

2.4 算法执行过程

1. 如果 Request[i] \leq Need[i], 转到步骤2. 否则, 提出错误条件, 因为进程已经超过了其最大要求.

2. 如果Request[i] \leq Available, 转到步骤3. 否则P_{i}必须等待, 因为资源不可用.

3. 假装给P_{i}分配给它需要的资源; //生成一个需要判断状态是否安全的资源分配环境:

Available = Available - Request[i];

Allocation = Allocation + Request[i];

Need[i] = Need[i] - Request[i];

Call safety state Estimating Algorithm:

  • 如果返回sage, 将资源分配给P_{i}.
  • 如果返回unsafe, P_{i}必须等待, 旧的资源分配状态被恢复.

2.5 举例说明

  • safe state:

初始状态如图:

1. 首先先确定有没有进程P_{i}Need[i] \leq Work, 找到了P_{2}, 然后把其finish置为true, 然后把其占用的资源回收(资源分配向量Allocation[2]加回到Available中):

 

2. 然后又找到了P_{1}, 发现P_{1}可以被满足, 重复上面步骤, 如下:

3. 然后又找到了P_{3}, 发现P_{3}可以被满足, 重复上面步骤, 如下: 

4. 最后P_{4}也可以被满足, 于是我们就找到了一个安全序列, P_{2}->P_{1}->P_{3}->P_{4}, 那么此时的system state就是一个safe state.

  • unsafe state:

初始状态如图:

1. 假如此时P_{1}发出Request_{1}为[1, 0, 1], 系统会假设先分配给P_{1}, 那么此时的状态变成了:

2. 然后此时发现系统已经找不到一个可以被满足的线程P_{i}了, 所以此时银行家算法返回unsafe, 也就不会给线程P_{i}分配资源.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python字符串对齐_Python - 字符串对齐

字符串对齐 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20463231 Python中, 字符串对齐, 使用ljust(), 左对齐;rjust(), 右对齐; center(), 中间对齐; 也可以修改第三个参数, 修改填充数据, 默认使用空格; 代码如下: # -*- coding: utf-8 -*- # #File: Te…

操作系统中的死锁问题

1 死锁问题概述 一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源.例子: 系统有两个磁带驱动器, P1和P2各有一个, 都需要另外一个. 2 系统模型 资源类型: , , ..., 包括CPU cycles, memory space, I/O devices 每个资源类型有实例. 每个进程使用资源过程如下…

chrome控制台如何把vw显示成px_你可能不知道的chrome调试技巧

本文是对常用的chrome调试技巧进行总结整理,如果你没有深入了解过chrome调试工具,此处总有你不知道的惊喜!从 Chrome 说起对于大部分人来说,Chrome 可能只是个浏览器,但是对于开发人员来说,它更是一个强大无…

gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_ARP协议在同网段及跨网段下的工作原理...

前言:ARP协议是在链路层通讯中,已知目标IP地址,但是,仅有IP 地址是不够的,因为IP数据报必须封装成帧才能通过数据链路进行发送,而数据帧必须要有目的MAC地址,每一个网络设备在数据封装前都需要获取下一跳的…

操作系统文件系统

1 基本概念 1.1 文件系统和文件 1.1.1 简述 文件系统: 一种用于持久性存储的系统抽象 在存储器上: 组织, 控制, 导航, 访问和检索数据大多数计算机系统包含文件系统个人电脑, 服务器, 笔记本电脑ipod, Tivo/机顶盒, 手机/掌上电脑google可能是由一个文件系统构成的 文件: 文…

c++代码整洁之道pdf_别再问如何用python提取PDF内容了

作者:陈熹 来源:早起Python大家好,在之前的办公自动化系列文章中我们已经详细介绍了如何使用python批量处理PDF文件,包括合并、拆分、水印、加密等操作。今天我们再次回到PDF,详细讲解如何使用python从PDF提取指定的信…

查看文章影响因子的插件_Scholarscope--在新版PubMed中实现基于影响因子的文献筛选...

小编之前介绍过如何在Pubmed上直接显示杂志影响因子的方法,这个方法主要是依托Scholarscope插件,其实除了显示影响因子,这个插件还可以帮助大家根据影响因子筛选文献哦,操作也很简单,只要生成自定义过滤器即可&#xf…

leetcode32 --- longestValidParentheses

1 题目 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 2 解法 2.1 动态规划方法 维护一个字符串长度的数组cur_max_len, 第i个元素代表以当前(或者)结束的最长有效括号的长度. 这样就会利用动态规划递推…

armitage识别不了漏洞_Shiro RememberMe 漏洞检测的探索之路

前言Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证、授权、密码套件和会话管理等功能。该框架在 2016 年报出了一个著名的漏洞——Shiro-550,即 RememberMe 反序列化漏洞。4年过去了,该漏洞不但没有沉没在漏洞的…

css响应式布局_用 CSS Grid 布局制作一个响应式柱状图

最新一段时间比较喜欢玩弄图表,出于好奇,我想找出比较好的用 CSS 制作图表的方案。开始学习网上开源图表库,它对我学习新的和不熟悉的前端技术很有帮助,比如这个:CSS Grid。今天和大家分享我学到的新知识:如…

vs code 插件_[VSCode插件开发] 由浅入深,带你了解如何打造百万级产品

去年,笔者有幸在微软技术暨生态大会上做了个演讲,主题是“从零开始开发一款属于你的 Visual Studio Code 插件”。演讲内容主要覆盖了VS Code插件开发的四个方面:设计、实现、推广和维护。作为一个开发者,我们往往会把大多数的时间…

leetcode45 --- jump

1 题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 2 解法 2.1 从终点遍历的方法(时间复杂度)…

python怎么查看网页编码格式_怎么用python爬取网页文字?

用Python进行爬取网页文字的代码:#!/usr/bin/python# -*- coding: UTF-8 -*-import requestsimport re# 下载一个网页url htt用python进行爬取网页文字的代码:#!/usr/bin/python# -*- coding: UTF-8 -*-import requestsimport re# 下载一个网页url htt…

leetcode41 --- firstMissingPositive

1 题目 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 2 解法 最笨的方法是从1开始试, 看1在数组里面是否出现过, 2, 3, ....不过时间复杂度是. 2.1 hash 可以考虑…

计算机网络中的数据链路层

概述 结点: 主机, 路由器 链路: 网络中两个结点之间的物理通道, 链路的传输介质主要有双绞线, 光纤和微波, 分为有线链路和无线链路. 数据链路: 网络中两个结点之间的逻辑通道, 把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路. 帧: 链路层的协议数据单元…

jnativecpp.dll一定要放到系统目录下吗_电脑硬盘有必要分区吗,分几个区最好?...

购买电脑后,必不可少的一个步骤就是对电脑硬盘进行分区了,其实硬盘分区也是有讲究的,并不是随意分的,下面租物租就给大家介绍下电脑分区的知识。硬盘分区可以提高数据的安全,防止数据丢失,但是防止数据丢失…

数据结构中的树

1. 树 即是以层次化方式组织和存放数据的特定数据结构 边: 节点与节点之间的连线 根节点: 叶子节点: 度: 节点的度数即为其分叉数, 即其子节点个数. 整棵树的度数是所有节点中度数的最大值 节点深度: 根节点到该节点的唯一路径长(即边的数量) 树高: 所有节点中深度的最大…

排序算法 --- 堆排序

根据大顶堆的描述, 父节点的值始终大于子节点(如果有的话)的值, 再加上堆是完全二叉树, 可以用数组表示, 那么就可以用来进行排序. 具体做法就是, 对于随机排列的数组: 1. 首先将其构建成一个大顶堆, 根据堆的性质, 此时堆顶就是最大值. 2. 把堆顶元素与数组最后一个元素进行…

数据结构中的树 --- 红黑树

红黑树是一种几近平衡的二叉搜索树, 但不是AVL树. 1 红黑树的一些特殊性质 1. 每个节点皆为红色或者黑色。 2. 根节点是黑色。 3. 每个叶子节点(NIL)是黑色(注意, 每个叶子节点必须都为空节点, 也就是指针为nullptr, 无key值)。 4. 每个红色结点的两…

c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解

前言栈和队列是一对好兄弟,前面我们介绍过数据结构与算法—栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去)。而队列就好比是一个隧道&#…