目录
前言
银行家算法
定义
举例
策略
思路
结束语
前言
今天是坚持写博客的第16天,已经超过半个月了,希望可以继续坚持,不断积累与回顾,夯实基础知识体系的基础。我们今天来讲讲操作系统当中的另一个重要知识点——银行家算法,希望对大家有所帮助。
银行家算法
定义
银行家算法是一种经典的用于避免操作系统中死锁问题的资源分配算法。它模拟了银行贷款管理的思路策略,确保系统在分配资源时能够维持在一个安全状态,从而防止死锁的发生。
银行家算法通过预测系统未来的资源分配情况,确保每次资源分配后系统仍能保持在安全状态,即存在一种资源分配序列,使得每个进程都能顺利完成,最终释放其占用的资源。
举例
我们仍然通过一道例题来解释银行家算法的解题策略和思路,并最终得出答案,带大家用最少的时间有最大的收获。
某系统有R1、R2、R3、R4四种资源,在T1时刻P1,P2,P3,P4,P5这五个进程对资源的占用和需求情况如下。现在已知系统中R1到R4的资源数量分别为15,9,12,11,那么请回答下列问题:
- 当前系统是否处于安全状态?写出它的安全序列。
- 如果P1发出资源请求(0,0,1,0),为了保证系统安全,能否分配资源这个进程?如果可以,请写出它的安全序列,反之请说明原因。
灵魂画手今天画的还行吧
策略
接下来是最重要的一步,我们介绍解题策略。求解银行家算法主要有以下几个重要步骤,我们记住后就能解决大部分问题:
- 用题目中R1-R4的数量减去Allocation中R1-R4的重量求得R1-R4的可用资源Available。
- 用Max中的R1-R4减去Allocation中的R1-R4求得需要的数量Need。
- 画出Work、Allocation、Need、Work+Allocation、Finish五个量组成的表。(内容先不填)
- 将第一步中求得的Available放在第一行的work当中,找到P1-P5当中的need的R1-R4值每一个都小于等于它的,将该进程的编号、allocation、need抄入第一行的对应位置。
- 根据刚刚抄入的数据求的work+allocation,并把finish置为true。
- 把第五步的数据抄到第二行的work处。
- 重复4、5、6步,直到所有进程都比较完。
- 第二小问是否可以分配,我们只需要将P1的请求写为request(0 0 1 0),并把request和P1的need、available比较,如果request同时小于等于他们两个,那么就可以分配,反之只要有一个大于,就不可以分配。
思路
根据解题策略,我们可以有下面的解题思路,最终的表格我们将放在思路的最后:
- 求出available和P1-P5的need,available为(1 0 0 4),need分别为(1 0 0 3)(0 2 1 0)(1 2 0 8)(1 1 1 2)(0 2 3 0)。
- 把available放入第一行的work,与P1-P5的need的R1-R4比较,发现进程P1的need的每一项都比它小(1 0 0 3)和(1 0 0 4)。
- 求出work+allocation(3 1 1 4)。finish置为true。
- 把第三步的work+allocation写到第二行,继续与P2-P5比较,发现P4的need每一项都比它小(1 1 1 2)和(3 1 1 4)。
- 求出work+allocation(6 2 2 7)。finish置为true。
- 把第五步的work+allocation写到地上喊,继续与P2P3P5比较,发现P2的need每一项都比它小(0 2 1 0)和(6 2 2 7)。
- 求出work+allocation。finish置为true。
- 同理,比较P3和P5,最终我们可以得出这样的结果:
其中安全序列就是在比较完成后的Process的顺序:P1 P4 P2 P5 P3。
第二小问是否可以分配,P1的request(0 0 1 0)比need(1 0 0 3)大,因此不能分配。
至此,这道就完成了。
结束语
今天对操作系统当中的银行家算法的讲解就到这里,希望对大家有所帮助,如果对您有帮助,希望您可以留下点赞、收藏或关注,这对我真的很重要,谢谢!