银行家算法学习笔记

要想说银行家,首先得说死锁问题,因为银行家算法就是为了死锁避免提出的。

问什么叫做银行家算法呢?因为这套算法适用于银行贷款业务,适用于银行家的决策。

一个银行家共有20亿财产
第一个开发商:已贷款15亿,资金紧张还需3亿。
第二个开发商:已贷款5亿,运转良好能收回。
第三个开发商:欲贷款18亿

银行家是资源,开发商是进程。在操作系统中,有内存,硬盘等等资源被众多进程渴求着,那么这些资源怎么分配给他们才能避免“破(si)产(suo)”的风险?


我还是从头讲起,这样也能复习以前的的知识点。

首先,为什么会产生死锁,产生死锁的必要条件是什么?

(1)互斥:至少有一个资源必须处于非共享模式,即一次只能有一个进程使用。如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止。

(2)占有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源被其他进程所占有。

(3)非抢占:资源不能被抢占,即资源只能在进程完成任务释放后,才能被其他进程占有。

(4)循环等待:有一组等待进程{P0,P1,···,Pn},P0等待的资源为P1所占有,P1等待的资源为P2所占有,…,Pn-1等待的资源为Pn所占有,Pn等待的资源为P0所占有。

  注:强调所有4个条件必须同时满足才会出现死锁。循环等待意味着占有并等待,这样四个条件并不完全独立。

资源分配图描述:

如果分配图没有环,那么系统就没有进程死锁,如果分配图有环,那么可能存在死锁。

这里写图片描述

图一存在死锁, 图二存在环但没有死锁。

死锁预防

出现死锁要满足4个必要条件,只要确保一个必要条件不成立,就能预防死锁发生。下面通过讨论这4个必要条件来研究死锁预防方法。

  • 互斥:共享资源不是必须的,而非共享资源必须保持互斥
  • 占有并等待:必须保证进程申请资源的时候没有占有其他资源;要求进程在执行前一次申请全部的资源,只有没有占有资源时才可以分配资源;利用率低,可能出现饥饿
  • 非抢占:如果一个进程的申请没有实现,它要释放所有占有的资源
  • 循环等待:将所有的资源类型放入资源列表中,并且要求进程按照资源表中递增的顺序申请资源

为了实现银行家算法,必须要有几个数据结构:

注:设n为系统进程的个数,m为在资源类型的种类。

  • Available:长度为m的向量。表示每种资源的现有实例的数量。

  • Max:n * m矩阵。定义每种进程的最大需求。

  • Allocation:n * m矩阵。定义每个进程现在所分配的各种资源类型的实例数量。

  • Need:n * m矩阵。表示每个进程还需要的剩余的资源。

定义如下的数据结构:

int n,m; //系统中进程总数n和资源种类总数m
int Available[1..m]; //资源当前可用总量
int Allocation[1..n,1..m]; //当前给分配给每个进程的各种资源数量
int Need[1..n,1..m];//当前每个进程还需分配的各种资源数量
int Work[1..m]; //当前可分配的资源
bool Finish[1..n]; //进程是否结束
安全判定算法
  • 1.初始化

Work = Available(动态记录当前剩余资源)
Finish[i] = false(设定所有进程均未完成)

  • 2.查找可执行进程Pi(未完成但目前剩余资源可满足其需要,这样的进程是能够完成的)

Finish[i] = false
Need[i] <= Work

如果没有这样的进程Pi,则跳转到第4步

  • 3.(若有则)Pi一定能完成,并归还其占用的资源,即:

Finish[i] = true
Work = Work +Allocation[i]

GOTO 第2步,继续查找


  • 4.如果所有进程Pi都是能完成的,

即Finish[i]=ture
则系统处于安全状态,否则系统处于不安全状态
举栗子

考虑这样一个系统,有5个进程P0~P4,3种资源类型A、B、C。资源类型A有10个实例,资源类型B有5个实例,资源类型C有7个实例。假定在时刻T0,系统状态如下:

-AllocationMaxAvaliable
A B CA B CA B C
P00 1 07 5 33 3 2
P12 0 03 2 2
P23 0 29 0 2
P32 1 12 2 2
P40 0 24 3 3

矩阵Need的内容定义成Max-Allocation:

-Need
A B C
P07 4 3
P11 2 2
P26 0 0
P30 1 1
P44 3 1

可认为系统现在处于安全状态,因为存在一个安全序列 P1,P3,P4,P2,P0 。

现在假定进程P1再请求1个A类资源和两个C类资源,这样Request1 = (1,0,2)。为了确定这个请求是否可以立即允许,首先检测Request1 <= Available(即,(1,0,2) <= (3,3,2)),其值为真。接着假定这个请求被满足,会产生如下新状态:

-AllocationNeedAvaliable
A B CA B CA B C
P00 1 07 4 32 3 0
P13 0 20 2 0
P23 0 26 0 0
P32 1 10 1 1
P40 0 24 3 1

  必须确定这个状态是否安全。为此,执行安全算法,并找到顺序 P1,P3,P4,P0,P2 满足安全要求。因此,可以立即允许进程P1的这个请求。

  然而,可以发现当系统处于这一状态时,是不能允许P4的请求(3,3,0)的,因为没有那么多资源可用。也不能允许P0的请求(0,2,0);虽然有资源可用,但是这会导致系统处于不安全状态。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 算法个人学习笔记pdf是一种以电子文档形式呈现的算法学习笔记资源。在这个pdf中,个人学习者可以记录和整理自己在学习算法过程中的思考、心得和解题方法。在这个学习笔记pdf中,个人学习者可以自由地添加和编辑自己的学习内容,包括算法的原理、算法实现的代码以及相应的思路和分析。通过这种方式,个人学习者可以更系统地学习和理解算法,并且能够随时查看自己的学习进展和学习成果。 通过编写和整理算法个人学习笔记pdf,个人学习者可以更好地理解和应用学习到的算法知识。这种记录和整理的过程可以帮助个人学习者更深入地思考问题和解决问题的方法,同时也可以帮助个人学习者更好地复习和回顾已学习的算法知识。 对于其他学习者来说,算法个人学习笔记pdf也是一个宝贵的学习资源。其他学习者可以通过查阅个人学习者的学习笔记pdf,借鉴和学习其中的思路和方法。这样可以帮助其他学习者更好地理解和应用算法知识,同时也可以促进知识的分享和交流。 总的来说,算法个人学习笔记pdf是一个为个人学习者提供记录和整理学习过程的工具,同时也是一个为其他学习者提供学习资源和参考的媒介。通过编写和整理算法个人学习笔记pdf,个人学习者可以更好地学习和理解算法知识,同时也可以促进算法知识的分享和交流。 ### 回答2: 算法个人学习笔记pdf是一份记录个人学习算法的文档,具有以下特点和优势。 首先,这份学习笔记是以PDF格式保存的,这意味着可以在任何设备上方便地查看和阅读,无需依赖特定的平台或软件。无论是在电脑、平板还是手机上,都可以轻松地浏览和学习。 其次,这份学习笔记是个人整理的,因此具有个性化的特点。不同的人在学习算法时可能会关注和理解的重点有所不同,通过个人学习笔记,可以反映出个人对算法知识的理解和思考。这样的学习笔记对于个人的学习和复习过程非常有帮助。 此外,这份学习笔记应当具有清晰的结构和逻辑。算法知识通常是有层次结构的,基本的知识点和概念通常是必须掌握的基础,而进阶的知识则需要在掌握基础知识的基础上构建。学习笔记应当按照这个结构和逻辑进行组织,便于学习者理解和掌握。 最后,这份学习笔记应当具有实例和练习题。算法知识的学习不能仅仅停留在理论层面,还需要通过实际的例子和练习题进行实践和巩固。学习笔记应当包含这些实例和练习题,并给出相应的解析和答案,方便学习者进行练习和巩固。 总而言之,算法个人学习笔记pdf是一份方便、个性化、结构清晰、包含实例和练习题的文档,对于学习者来说非常有价值。 ### 回答3: 算法学习笔记PDF是一份用于记录个人学习算法的文档。通过编写学习笔记,我可以对算法的理论和实践有更深入的理解和掌握。 首先,在学习算法的过程中,理论与实践结合是非常重要的。在学习笔记中,我可以记录下算法的原理和相关的数学推导,以及对应的代码实现和应用场景。通过这样的记录方式,我可以更好地理解算法的本质和使用方式。 其次,学习笔记可以帮助我回顾和巩固所学的知识。通过整理和总结学习笔记,我可以梳理出算法的基础知识和重要思想,并将其记忆固定下来。同时,学习笔记也可以作为复习的资料,提供方便快捷的回顾方式。 此外,学习笔记还可以促进自我思考和学习方法的改进。在编写笔记的过程中,我可以思考和提出自己的问题,并通过查阅相关资料和与他人讨论,来找到问题的答案和解决方案。这样的思考过程可以帮助我提高问题解决的能力和学习效果。 最后,学习笔记可以与他人分享和交流。通过分享学习笔记,我可以与其他学习者进行交流和讨论,互相学习和提高。同时,学习笔记也可以作为自己学习和成长的见证,激励自己坚持学习和进步。 总之,算法个人学习笔记PDF是一份记录、回顾、思考和分享的文档,对于个人的算法学习具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

askunix_hjh

谢谢请我吃糖~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值