那时候的银行家算法 处理计算机思索避免问题
2016-11-21 12:00
169 查看
银行家算法:二维表格解决方法
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j
< i )当前占有资源量之和。
安全状态
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态
不存在一个安全序列。不安全状态不一定导致死锁。
在操作系统课程中遇到了要处理“银行家算法”的问题,参考了网上的一些介绍,发现用表格处理的方法很简单方便,并且也容易用代码去实现。
我们可以建立一个表格:每列数据表示每次交易各个参与者的限额。这个表格第一列列出银行家和客户数目,每发生一次交易,增加一列,同时将银行家和发生交易的客户的限额减小。直到银行家的限额小于某个客户的限额时,交易不能继续进行。我们可以从表格中分析得到哪个申请可以被允许,哪个要被挂起,如果能分配成功则全部的请求允许,否则便发生死锁。如下图所示:
下面用这种方法去解决实际的问题,例如在下面这道系统分析员的考试题目:
操作系统分配资源时的一个重要考虑是避免死锁的发生.若系统中有同类资源 16 个,由四个进程 P1 、P2 、P3 和 P4 共享该资源。已知
P1 、P2 、P3 、P4 所需的资源总数分别为 8 、5 、9 、6 。各进程请求资源的次序如下表,若系统采用银行家算法为它们分配资源,那么_____依次申请分配会使系统进入不安全状态。
A(3,4) B(3,5) C(4,5) D(5,6)
我们按照提到的方案建立下面这个表格:
分析:从图中可以看出,当银行家允许客户3的请求后,银行家拥有的资源只有1个,这时银行家只能满足客户2的请求,所以第4个和第5个资源请求会被银行家挂起,然后第6个资源请求(客户2)会被允许。只能等到P2结束运行释放资源后,银行家才会允许接下来的其他请求,在这种分配情况下系统不会发生死锁。
不过,如果在允许客户3的请求后,接着允许请求4或请求5,但请求4和请求5需要的不止一个资源,这时系统就会进入死锁状态。所以答案选择C。
这只是理论上的分析,接下来要用代码去模拟下银行家算法的具体分配工作。
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j
< i )当前占有资源量之和。
安全状态
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态
不存在一个安全序列。不安全状态不一定导致死锁。
在操作系统课程中遇到了要处理“银行家算法”的问题,参考了网上的一些介绍,发现用表格处理的方法很简单方便,并且也容易用代码去实现。
我们可以建立一个表格:每列数据表示每次交易各个参与者的限额。这个表格第一列列出银行家和客户数目,每发生一次交易,增加一列,同时将银行家和发生交易的客户的限额减小。直到银行家的限额小于某个客户的限额时,交易不能继续进行。我们可以从表格中分析得到哪个申请可以被允许,哪个要被挂起,如果能分配成功则全部的请求允许,否则便发生死锁。如下图所示:
下面用这种方法去解决实际的问题,例如在下面这道系统分析员的考试题目:
操作系统分配资源时的一个重要考虑是避免死锁的发生.若系统中有同类资源 16 个,由四个进程 P1 、P2 、P3 和 P4 共享该资源。已知
P1 、P2 、P3 、P4 所需的资源总数分别为 8 、5 、9 、6 。各进程请求资源的次序如下表,若系统采用银行家算法为它们分配资源,那么_____依次申请分配会使系统进入不安全状态。
A(3,4) B(3,5) C(4,5) D(5,6)
我们按照提到的方案建立下面这个表格:
分析:从图中可以看出,当银行家允许客户3的请求后,银行家拥有的资源只有1个,这时银行家只能满足客户2的请求,所以第4个和第5个资源请求会被银行家挂起,然后第6个资源请求(客户2)会被允许。只能等到P2结束运行释放资源后,银行家才会允许接下来的其他请求,在这种分配情况下系统不会发生死锁。
不过,如果在允许客户3的请求后,接着允许请求4或请求5,但请求4和请求5需要的不止一个资源,这时系统就会进入死锁状态。所以答案选择C。
这只是理论上的分析,接下来要用代码去模拟下银行家算法的具体分配工作。
相关文章推荐
- 处理SQL Server 因修改过计算机名无法登陆的问题
- iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题
- 计算机专业面试笔试问题之大数据量,海量数据 处理方法总结
- 巧用setTimeout处理定时问题,避免迭代
- 计算机问题处理常识
- iOS项目开发中,对后台返回数据为<null>时候的处理,避免取值产生程序崩溃问题
- javascript处理HTML的Encode(转码)和Decode(解码)总结,避免js脚本注入问题
- 优化读取的异步文件过多问题(方案:对于已经处理过的文件可以选择移除到备份文件夹下,避免处理前遍历文件过多)
- 未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序--问题的处理
- JAVA写的escape函数,可以处理JAVASCRIPT的ESCAPE处理的字符,避免字符集问题
- 银行家算法避免死锁问题
- 计算机物证调查问题研究(一)
- 关于webcontrols的TreeView中转义符的处理问题
- 处理VS.NET资源文件过程中产生的问题
- 计算机科学与技术学习心得之计算机理论的一个核心问题--计算数学基础(转载)
- 查找替换RTF格式的文本时对锁定文本的处理问题
- 关于数据库长度限制和.NET中处理正确长度等问题
- 计算机科学与技术学习心得之计算机理论的一个核心问题--续谈其他的一些计算数学(转载)
- 使用system.web.mail.SMTPmail发送邮件,处理smtp验证问题
- 问题处理