1 银行家算法

操作系统的进程可以动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。(若此次分配为安全的,操作系统则将资源分配给进程,否则令进程等待)

避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态。

1.1 举例理解

战争举例

大将军(操作系统)有一个部队(代分配的资源),当然部队中有各种兵种(弓箭手、骑兵等,每个兵种就能完成特定的战争)人有若干(人数固定,大将军也只有这点兵),现在在我方的城池(很多个城池,当然每个城池每个兵种都有一定的人驻扎在这里,已分配的资源)有敌方突袭(每个城池都僵持着,没战胜敌方之前不能从这个城池把各个兵种的人撤走),这时每个城池都给大将军发出了能战胜敌方每个兵种的需求数量(Need),大将军就来判断怎样才能结束战斗(所有的城池都战胜敌方),当大将军发现某个城池在他的加入后能够战胜敌方就参与其中,如果战胜了敌方那么就可以把原来驻扎在这个城池的各个兵种调走,去支援其他的城池。周而复始通过边打仗边收兵,来使所有的城池和平。

银行家算法就是来判断能否赢取整个战争。

1.2 银行家算法的数据结构(以例子作为出发点)

  1. 可利用资源向量Available(代表大将军的部队,部队中各个兵种的人有若干个
    这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。

  2. 最大需求矩阵Max(代表一个城池中能够战胜敌方每个兵种需要全部的数量
    这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

  3. 分配矩阵Allocation(代表城池中已经驻扎的各个兵种的数量
    这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得R j类资源的数目为K。

  4. 需求矩阵Need(代表城池发送给大将军每个兵种需要支援的数量

    这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要R j类资源K个,方能完成其任务。

存在关系:Need[i, j]=Max[i, j]-Allocation[i, j];(城池的发出请求每个兵种的数量 = 战胜敌方所需每个兵种数量 - 城池中已有每个兵种数量

1.3 银行家算法实例

假定系统中有五个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图示。 (先忽略P1第二行的括号)

描述:有若干城池(P0 — P4),大将军有可利用的每个兵种的人数Available(3,3,2),就拿P0来说,P0解决战斗每个兵种的需要的总人数Max(7,5,3),在城池中每个兵种已经有的人数Allocation(0,1,0),P0完成这场斗争需要的兵的数量Need(7,4,3)【Need[i]=Max[i]-Allocation[i]】

解决步骤:首先大将军比较P0发现直接的兵Available(3,3,2),不能满足P0的需求Need(7,4,3),于是走到下一个城池P0,发现可以打赢这场战争,于是战斗解放了城池,因此部队也得到了增强到Available(5,3,2),依次类推寻找可以战胜战争的城池,获得最终的胜利。

战斗顺序:p1 -> P3 ->P4 -> P2 -> P0

计算方法:循环线程Pi,每次把Available跟Pi的Need比较,如果发现Available中每个元素都大于Need的每个元素,则进行资源分配,进程工作完后把Available=(Available+Allocation),依次循环找到线程分配序列。

银行家算法(战争举例、便于理解)相关推荐

  1. 银行家算法---------概念举例

    银行家算法是一种用来避免操作系统死锁出现的有效算法,所以在引入银行家算法的解释之前,有必要简单介绍下死锁的概念. 死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻 ...

  2. 【避免进程死锁】银行家算法

    一.概述 银行家算法(Banker's Algorithm)是一个避免进程死锁的著名算法,由 Dijkstra 于 1965 年提出.本文为笔者的读书笔记,结构如下: 死锁 银行家算法 例子展示 补充 ...

  3. 操作系统 进程调度-银行家算法实验报告

    实验要求 一. 实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止.本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家 ...

  4. 操作系统之银行家算法—详解流程及案例数据

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  5. 银行家算法课程设计(附源代码)

    死锁会引起计算机工作僵死,因此操作系统中必须防止.本实验提供了一个系统动态分配资源的简单模拟程序,用于了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生. 一.实验要求 设计有n个进程共享 ...

  6. 操作系统实验报告(二)银行家算法

    一. 实验目的 1.了解什么是操作系统安全状态和不安全状态: 2.了解如何避免系统死锁: 3.理解银行家算法是一种最有代表性的避免死锁的算法,掌握其实现原理及实现过程. 二. 实验环境 Windows ...

  7. “银行家算法”讲解,在前端表格中利用自定义公式实现“四舍六入五成双”

    银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的"利润"就是这其中的利息差额. 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息 ...

  8. 广州大学 操作系统实验之银行家算法

    实验二 银行家算法 一.实验目的 1.了解什么是操作系统安全状态和不安全状态: 2.了解如何避免系统死锁: 3.理解银行家算法是一种最有代表性的避免死锁的算法,掌握其实现原理及实现过程 二.实验环境 ...

  9. 操作系统-资源分配银行家算法

    资源分配----银行家算法 一. 实验目的 模拟实现银行家算法,用银行家算法实现资源分配和安全性检查.通过本次实验,使学生加深对死锁概念的理解和掌握,并培养学生对操作系统课程的兴趣与高级语言设计的能力 ...

最新文章

  1. 几种常见的模式识别算法
  2. AI 引领产业变革:相关岗位起薪33w
  3. 4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别
  4. SQL编程where子句与操作符
  5. WinForm部署问题
  6. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
  7. InfoPath2010表单-IE浏览器2个“微型内嵌工具”的使用和介绍
  8. Flask 扩展 自定义扩展
  9. pivot position_PIVOT用法详解
  10. matlab产生过渡矩阵,浅谈向量空间和矩阵
  11. 2007年12月25日至2008年1月1日百宝箱游戏下载排行榜
  12. matlab中字体修改,matlab——修改图中字体
  13. JSON、AJAX、Maven
  14. 向量线性无关和正交及其关系
  15. 每日加瓦,终成栋房3
  16. 将打开在扩展显示器的界面移动到主显示器中的方法
  17. Java 并发编程实战演练
  18. 卫星数据下载地址整理(包含Sentinel、Modis、Landsat等)
  19. 情人节程序员用HTML网页表白【华丽满屏烟花-生日快乐】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  20. JZOJ1496 页

热门文章

  1. 机械制造工程学(机电)_简要复习_附期末复习纲要
  2. 鸿蒙系统桌面纹路,PVC竟然做出皮革纹理质感,T110V-W独具匠心的设计
  3. html5 canvas 图片变形,HTML5/Canvas 流动的变形圆形
  4. vs2019安装包显示网络未链接_机械行业11款软件下载链接
  5. java添加图片到Excel单元格中(POI)
  6. 2D照片制作3D特效动画AE模板 3D照片动画
  7. mysql字符串类型的数字如何排序
  8. 数据作假,亚马逊关闭5万中国卖家真相
  9. 闲鱼代码Java_面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
  10. 【快速排序】—— [USACO07DEC]Bookshelf B