操作系统之银行家算法

简介: 银行家算法是学习计算机操作系统中最重要的算法之一,银行家算法又称资源分配拒绝法,是用来避免死锁的。

银行家算法是学习计算机操作系统中最重要的算法之一,银行家算法又称资源分配拒绝法,是用来避免死锁的。


以下用例题来解释银行家算法


题目假设:

有四家公司:进程P0、进程P1、进程P2、进程P3

一间银行:名叫系统的银行,银行有三个金库A、B、C


题目情景:四家公司因为企业发展需要,都需要向银行进行贷款,每个公司需要贷款金额不同,银行贷款给各个公司所使用的金库也不同。


此时此刻,各公司所需要的参数如公司总贷款(Claim)、公司已贷金额(Allocation)的表格所示:

公司 公司总贷款(Claim) 公司已贷金额(Allocation)



A    B   C
A   B   C
P0 3    2   2 1   0   0
P1 6   1   3 5   1   1
P2 3   1   4 2   1   1
P3 4   2   2 0   0   2


银行还剩金额(Available):

          银行还剩金额(Available)

                     A  B  C

                     1  1  2

银行(系统)为什么要给公司(进程)这样分配金额(资源)?

为了避免分配金额(资源)出现公司(进程)循环等待(死锁)的情况


什么是循环等待?就是P0公司在等待着银行分配金额,但银行的钱不够了,银行的钱都在公司P1了,但公司P1需要完成项目的钱还远远不够,要等公司P2的项目完成了把钱还给银行才可能够。


银行现在手里三个金库A、B、C都还有钱,但银行把钱分给哪个公司最合理,能最快收回资金呢?如图所示,各个公司的还需贷款(Claim-Allocation)为


公司还需贷款(Claim-Allocation)

A  B  C
P0 2  2  2
P1 1  0  2
P2 1  0  3
P3 4  2  0

因为银行剩余金额(Available)=(1,1,2)>公司P1还需要的贷款金额(Claim-Allocation)=(1,0,2)

所以银行可以把手上剩余的钱分配给公司P1


假设当银行把手上的剩余金额(Available)分配给公司P1,即银行Available=(1,1,2)-公司P0(Claim-Allocation)=(1,0,2)=(0,1,0)


此时,公司P1获得了项目所需的全部资金,即公司已经获得的资金(Calim)=(6,1,3)。当公司P1完成项目后,就把贷款的金额还给银行了。


此时银行三个金库的金额为(0,1,0)加上刚刚公司P1还回来的金额(6,1,3),即(6,2,3)

        银行还剩金额(Available)

                     A   B    C

                     6    2    3

此时,各公司的情况如下

公司 公司总贷款(Claim) 公司已贷金额(Allocation)

A    B   C
A   B   C
P0 3   2   2 1   0   0
P2 3   1   4 2   1   1
P3 4   2   2 0   0   2



公司还需贷款(Claim-Allocation)

A  B  C
P0 2  2  2
P2 1  0  3
P3 4  2  0


因为银行剩余金额(Available)=(6,2,3)>公司P0(Claim-Allocation)=(2,2,2)和公司P2(Claim-Allocation)=(1,0,3)和公司P3(Claim-Allocation)=(4,2,0)所以银行可以把手上剩余的钱分配给公司P0或者公司P2或者公司P3


假设当银行把手上的剩余金额(Available)分配给公司P0,即银行Available=(6,2,3)-公司P0(Claim-Allocation)=(2,2,2)=(4,0,1)


此时,公司P0获得了项目所需的全部资金,即公司已经获得的资金(Calim)=(3,2,2)。当公司P0完成项目后,就把贷款的金额还给银行了。


此时银行三个金库的金额为(4,0,1)加上刚刚还剩下的(3,2,2),即(7,2,3)

         银行还剩金额(Available)

                    A    B    C

                    7    2    3

此时,各公司的情况如下

公司 公司总贷款(Claim) 公司已贷金额(Allocation)

A    B   C
A   B   C
P2 3   1   4 2   1   1
P3 4   2   2 0   0   2



公司还需贷款(Claim-Allocation)

A  B  C
P2 1  0  3
P3 4  2  0


因为银行剩余金额(Available)=(7,2,3)>公司P2(Claim-Allocation)=(1,0,3)和公司P3(Claim-Allocation)=(4,2,0)

所以银行可以把手上剩余的钱分配给公司P2或者公司P3


银行分配给公司P2后,收回来的钱又可以分配给公司P3还需贷款的钱,这样,就把四个公司的项目所需资金都解决了


解决顺序是公司P1→公司P0→公司P2→公司P3,或者公司P1→公司P0→公司P3→公司P2,或者其他,有很多


这个顺序就是银行家算法中的安全序列,此时银行处于安全状态


至此,整个计算过程就结束了。


在操作系统的计算题考试中,常出现的几个问题是:

①系统是否处于安全状态,即看一开始的时候银行(系统)还剩下的金额(资源)够不够分配给其中的一个公司(进程),或者分配之后返还的金额够不够再进行下一轮的分配(一般题目不会这样出,这是死题)


②求出系统的安全序列,就如上面的解释进行计算即可


③问某个公司(假设还需贷款(Claim-Allocation)=(1,1,1))能不能申请金额(资源),但银行(系统)只有(0,1,0)的储备资金,所以是不能申请


④各个进程还需要的资源数,即(Claim-Allocation)


本例题是采用

操作系统教程(第五版)费翔林 骆斌 编著

P184 23题

如有问题可私聊博主或私邮博主


感谢!


相关文章
|
2月前
|
算法 Linux 数据处理
《操作系统》—— 处理机调度算法
《操作系统》—— 处理机调度算法
197 0
|
2月前
|
算法
操作系统LRU算法(最近最少使用算法)
操作系统LRU算法(最近最少使用算法)
34 0
|
2月前
|
存储 算法
【操作系统】虚拟存储管理-页面置换算法
【操作系统】虚拟存储管理-页面置换算法
351 0
|
2月前
|
算法 安全
【操作系统】死锁处理-银行家算法
【操作系统】死锁处理-银行家算法
114 0
|
2月前
|
算法 调度
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
2187 0
|
2月前
|
存储 算法 安全
操作系统:银行家算法
操作系统:银行家算法
78 0
|
2月前
|
算法 调度
深入理解操作系统之进程调度算法的设计与实现
【5月更文挑战第27天】 在多任务处理的现代操作系统中,进程调度算法是核心组件之一,负责决定哪个进程将获得CPU资源。本文不仅探讨了几种经典的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)和轮转调度(RR),还分析了各自的优势、劣势及适用场景。此外,文章将深入讨论如何根据系统需求设计自定义调度算法,并提供了基于伪代码的实现示例。最后,通过模拟实验比较了这些算法的性能,以指导读者在实际操作系统设计时的选择与优化。
|
2天前
|
算法 调度 云计算
操作系统中的调度算法:从理论到实践
在计算机科学领域,操作系统的调度算法是决定任务执行顺序的关键。本文首先概述了调度算法的基本概念和重要性,随后深入探讨了几种主要的调度算法,包括先来先服务、短作业优先、轮转与优先级调度等。通过引用最新的科研数据和实验证据,文章揭示了不同调度算法的性能表现和适用场景。此外,本文还讨论了现代操作系统中调度算法面临的挑战和未来的发展方向,强调了在多核处理器和云计算环境下调度策略的复杂性。最后,通过案例分析,展示了如何在实际系统中应用这些理论知识,以及在设计高效调度系统时需要考虑的因素。
|
3天前
|
算法 物联网 调度
操作系统调度算法的演进与性能评估
本文深入探讨了操作系统中进程调度算法的发展轨迹,从早期的先来先服务(FCFS)到现代的多级队列和反馈控制理论。通过引用实验数据、模拟结果和理论分析,文章揭示了不同调度策略如何影响系统性能,特别是在响应时间、吞吐量和公平性方面。同时,本文也讨论了在云计算和物联网等新兴领域,调度算法面临的挑战和未来的发展方向。
|
3天前
|
机器学习/深度学习 人工智能 算法
操作系统调度算法的演变与性能分析
操作系统作为计算机硬件和软件之间的桥梁,其调度算法的效率直接影响到系统的响应速度和资源利用率。本文将探讨从简单到复杂的各类调度算法,包括先来先服务、短作业优先、轮转法以及多级反馈队列等,通过数据分析揭示各算法的性能特点,并结合现代操作系统设计的需求,讨论未来调度算法的发展趋势。