`
bestxiaok
  • 浏览: 453864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

银行家算法

阅读更多

1. 安全状态: 在某时刻系统中所有进程可以排列一个安全序列:{P1,P2,`````Pn},刚称此时,系统是安全的.
所谓安全序列{P1,P2,`````Pn}是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(j<i)所占的资源之和.

2.不安全状态可能产生死锁.
            目前状态 最大需求 尚需
P1         3                9             6
P2       5                10            5
P3        2                4              2

在每一次进程中申请的资源,判定一下,若实际分配的话,之后系统是否安全.
3.银行家算法的思路:
1),进程一开始向系统提出最大需求量.
2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.
3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的
剩余资源量,若不超出,则分配,否则等待.
4.银行家算法的数据结构.
1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.
2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i
类资源最大需求.
3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.
4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目.
5.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:
1),判定E[n]是否大于D[j][n],若大于,表示出错.
2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.
3),若以上两步没有问题,尝试分配,即各变量作调整.
4),按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待.
6."安全性检测"算法
1),先定义两个变量,用来表示推算过程的数据.
F[n]=A[n],表示推算过程中,系统中剩余资源量的变化.
J[n]=False表示推算过程中各进程是否假设"已完成"
2),流程:
在"剩余"的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]<=F[n]的进程,找到后令J[j]=True
(假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行.
若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.
算法的实现

一、初始化

由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。

 

二、银行家算法

在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。

设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。

(1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则,出错。

(2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],则转(3);否则,出错。

(3)系统试探分配资源,修改相关数据:

         AVAILABLE[i]-=REQUEST[cusneed][i];

         ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];

         NEED[cusneed][i]-=REQUEST[cusneed][i];

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

 

三、安全性检查算法

(1)设置两个工作向量Work=AVAILABLE;FINISH

(2)从进程集合中找到一个满足下述条件的进程,

FINISH==false;

NEED<=Work;

如找到,执行(3);否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+=ALLOCATION;

Finish=true;

GOTO 2

(4)如所有的进程Finish= true,则表示安全;否则系统不安全

 

 

代码

分享到:
评论

相关推荐

    银行家算法pdf文献打包共9篇 银行家算法.rar

    银行家算法pdf文献打包 共9篇 解晨,王瑜.多资源银行家算法研究与实现[J].电脑知识与技术,2013,9(18):4229-4233. 摘要:在通常情况下,计算机的资源有限,比如只有一台打印机或者只有有限的内存,并且很多资源是独占性...

    银行家算法 银行家算法 银行家算法 银行家算法

    银行家算法是操作系统中进程管理领域的一个重要概念,主要用于避免死锁的发生,通过预先分配资源的方式确保系统的安全性。此算法由计算机科学领域的先驱之一、图灵奖得主Edsger Dijkstra提出,其核心思想是在系统...

    银行家算法报告

    ### 银行家算法详解 #### 一、引言 银行家算法是操作系统中用于避免死锁的一种重要策略,其基本思想源自于银行信贷体系的管理方式。在本篇报告中,我们将深入探讨银行家算法的核心原理及其具体实现过程,并通过一...

    银行家算法C语言实现

    《银行家算法C语言实现详解》 银行家算法是一种经典的资源分配策略,旨在预防系统中的死锁问题。在多道程序设计系统中,多个进程可能会同时请求多种资源,如果资源分配不当,可能导致进程无法继续执行,形成死锁。...

    银行家算法 银行家算法

    银行家算法银行家算法银行家算法银行家算法

    java实现银行家算法(GUI界面)A+报告

    Java实现银行家算法(GUI界面)A+报告 银行家算法是操作系统中避免死锁的一种经典算法,由Dijkstra提出。该算法可以有效地避免操作系统中出现死锁的问题。本文将详细介绍如何使用银行家算法来处理操作系统给进程分配...

    银行家算法找出所有安全序列.cpp

    银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有安全序列.cpp银行家算法找出所有...

    银行家算法、安全性算法

    《银行家算法与安全性算法详解》 银行家算法和安全性算法是操作系统中资源调度的重要理论,主要用于预防死锁的发生,确保系统的安全性。在多任务环境下,资源的合理分配至关重要,这两种算法为此提供了科学的解决...

    银行家算法采用银行家算法防止死锁

    用银行家算法防止死锁。 二、实验目的 死锁会引起计算机工作僵死,造成整个系统瘫痪。因此,死锁现 象是操作系统特别是大型系统中必须设法防止的。通过本次实验,使 学生掌握死锁的概念和产生死锁的原因和必要条件,...

    模拟银行家算法,用银行家算法实现资源分配

    (1)若进程P1请求资源,发出请求向量Request1(1,0,2),编写程序用银行家算法判断系统能否将资源分配给它; (2)若进程P2提出请求Request(0,1,0),用银行家算法程序验证系统能否将资源分配给它。

Global site tag (gtag.js) - Google Analytics