操作系统之银行家算法

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

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


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


题目假设:

有四家公司:进程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题

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


感谢!


相关文章
|
1月前
|
算法 调度 UED
探索操作系统的心脏:调度算法的奥秘与影响
【10月更文挑战第9天】 本文深入探讨了操作系统中至关重要的组件——调度算法,它如同人体的心脏,维持着系统资源的有序流动和任务的高效执行。我们将揭开调度算法的神秘面纱,从基本概念到实际应用,全面剖析其在操作系统中的核心地位,以及如何通过优化调度算法来提升系统性能。
|
20天前
|
算法 大数据 Linux
深入理解操作系统之进程调度算法
【10月更文挑战第24天】本文旨在通过浅显易懂的语言,带领读者深入了解操作系统中的进程调度算法。我们将从进程的基本概念出发,逐步解析进程调度的目的、重要性以及常见的几种调度算法。文章将通过比喻和实例,使复杂的技术内容变得生动有趣,帮助读者建立对操作系统进程调度机制的清晰认识。最后,我们还将探讨这些调度算法在现代操作系统中的应用和发展趋势。
|
1月前
|
算法 调度 UED
深入理解操作系统的进程调度算法
【10月更文挑战第7天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。它不仅影响系统的性能和用户体验,还直接关系到资源的合理分配。本文将通过浅显易懂的语言和生动的比喻,带你一探进程调度的秘密花园,从最简单的先来先服务到复杂的多级反馈队列,我们将一起见证算法如何在微观世界里编织宏观世界的和谐乐章。
|
1月前
|
边缘计算 算法 调度
探究操作系统的心脏:调度算法的进化与影响
【10月更文挑战第2天】 本文深入探讨了操作系统中核心组件——调度算法的历史演变、关键技术突破及其对现代计算的影响。通过详细回顾从单任务到多任务、实时系统及分布式计算环境下调度算法的发展,文章揭示了这些算法如何塑造我们的数字世界,并对未来的趋势进行了展望。不同于传统的摘要,本文特别聚焦于技术细节与实际应用的结合点,为读者提供一幅清晰的技术演进蓝图。
46 4
|
1月前
|
算法 调度 UED
探索操作系统的心脏:进程调度算法
【9月更文挑战第32天】在数字世界的每一次心跳中,都隐藏着一个不为人知的英雄——进程调度算法。它默默地在后台运作,确保我们的命令得到快速响应,应用程序平稳运行。本文将带你走进操作系统的核心,一探进程调度的奥秘,并通过代码示例揭示其背后的智慧。准备好跟随我一起深入这趟技术之旅了吗?让我们开始吧!
|
2月前
|
算法 调度
操作系统的心脏:深入解析进程调度算法
本文旨在深入探讨现代操作系统中的核心功能之一——进程调度。进程调度算法是操作系统用于分配CPU时间片给各个进程的机制,以确保系统资源的高效利用和公平分配。本文将详细介绍几种主要的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及优先级调度(PS)。我们将分析每种算法的基本原理、优缺点及其适用场景。同时,本文还将讨论多级反馈队列(MFQ)调度算法,并探讨这些算法在实际应用中的表现及未来发展趋势。通过深入解析这些内容,希望能够为读者提供对操作系统进程调度机制的全面理解。
|
2月前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
2月前
|
人工智能 算法 大数据
探究操作系统的心脏:调度算法的进化与影响
本文深入探讨了操作系统中核心组件——调度算法的发展及其对系统性能的影响。通过分析先来先服务、短作业优先、时间片轮转等传统调度算法,阐述了它们的原理和优缺点。同时,讨论了现代调度算法如多级队列和优先级调度在提高系统响应速度和处理能力方面的作用。文章还探讨了实时系统中的调度挑战,以及如何通过优化调度策略来满足不同应用场景下的性能需求。
|
2月前
|
机器学习/深度学习 算法 物联网
探究操作系统的心脏:调度算法的演变与优化
本文旨在深入探讨操作系统中核心组件——调度算法的发展脉络与优化策略。通过分析从单任务到多任务、实时系统的演进过程,揭示调度算法如何作为系统性能瓶颈的解决关键,以及在云计算和物联网新兴领域中的应用前景。不同于传统摘要,本文将注重于概念阐释与实例分析相结合,为读者提供直观且全面的理解视角。
|
2月前
|
算法 调度 UED
深入理解操作系统的调度算法
【9月更文挑战第22天】本文通过深入浅出的方式,介绍了操作系统中的核心概念——调度算法。文章首先解释了调度算法的基本定义和重要性,然后详细分析了先来先服务(FCFS)、短作业优先(SJF)以及时间片轮转(RR)三种常见的调度算法。每种算法都配有简单的代码示例,帮助读者更好地理解其工作原理。最后,文章探讨了这些调度算法在现代操作系统中的应用及其优缺点,旨在为读者提供对操作系统调度机制的全面认识。