银行家算法

目录

银行家算法(Banker's Algorithm)

死锁:

安全状态:

不安全状态:

银行家算法的数据结构:

银行家算法

例:银行家算法实施死锁避免的资源分配策略


银行家算法(Banker's Algorithm)

是一种避免死锁的著名算法,由艾兹格·迪科斯彻(Edsger Dijkstra)在1974年提出。它主要用于操作系统的资源分配系统中,通过确保系统在任何时候都不会进入一个死锁状态来实现资源的合理分配。

死锁:

        所谓死锁是指在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一个进程所占有且永远不会释放的资源;这种现象称系统处于死锁状态,简称死锁。处于死锁状态的进程称为死锁进程

安全状态:

        所谓安全状态,是指系统能按某种进程顺序如(P1,P2,…,Pn)(称<P1,P2,…,Pn>序列为安全序列)来为每个进程分配其所需资源,直至最大需求,使每个进程都可顺利完成。

不安全状态:

        若系统不存在这样一个安全序列,则称系统处于不安全状态。

由安全状态向不安全状态的转换:

        如果不按照安全顺序分配资源,则系统可能由安全状态进入不安 全状态 ,可能发生死锁

银行家算法数据结构

1.可利用资源向量Available

        是一个具有m个元素的数组,其中每一个元素代表一类可利用的资源数目 ,如果Available[j]=k,表示系统中现有Rj类资源有k个

2.最大需求矩阵Max

        是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程,对m类资源的最大需求,如果Max(i,j)=k,表示进程i需要Rj类资源的最大数目为k

3.分配矩阵Allocation

        一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一个进程的资源数,如果Allocation(i,j)=k,表示进程i当前已分得Rj类资源的数目为k

4.需求矩阵Need

        是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数,如果Need[i,j]=k,表示进程i还需要Rj类资源k个,方能完成其任务  Need(i,j)=Max(i,j)-Allocation(i,j)

银行家算法

1.  设Requesti是进程Pi的请求向量。如果Requesti[j]=k,表示进程Pi需要k个Rj类型的资源                      Requesti≤Needi   Requesti≤Available

2.系统试探把要求的资源分配给进程Pi并修改下面数据结构中的数值:
                 Available=Available–Requesti;
                 Allocationi=Allocationi+Requesti;
                 Needi=Needi–Requesti;

3.系统执行安全性算法若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

                Available=Available+Requesti;
                 Allocationi=Allocationi-Requesti;
                 Needi=Needi+Requesti;

Work = Available;
Finish[i] = {0};
flag = 1;
while(flag == 1){
    flag = 0;
    for(i=0;i<n;i++)
    {
        if(Finish[i] == 0 && Need[i]<=Work)
        {
            Work = Work + Allocation[i];
            Finish[i] = 1;
            flag = 1;
        }
    }
} 

例:银行家算法实施死锁避免的资源分配策略

        设系统中有3种类型的资源R1、R2、R3和5个进程P1、P2、P3、P4 、P5,R1资源的数量为10,R2资源的数量为5,R3资源的数量为7。在T0时刻系统状态如表4-1所示。

 work= Available;
    P2的Need2≤Work,可执行完, work=Work+Allocation2=[5,3,2];
    P4的Need4≤Work,可执行完, work=Work+Allocation4=[7,4,3];
    P5的Need5≤Work,可执行完;work=Work+Allocation5=[7,4,5];
    P1的Need1≤Work,可执行完;work=Work+Allocation2=[7,5,5];
    P3的Need3≤Work,可执行完,

 work= Available;
    P2的Need2≤Work,可执行完, work=Work+Allocation2=[5,3,2];
    P4的Need4≤Work,可执行完, work=Work+Allocation4=[7,4,3];
    P5的Need5≤Work,可执行完;work=Work+Allocation5=[7,4,5];
    P3的Need3≤Work,可执行完;我ork=Work+Allocation2=[10,4,7];
    P1的Need1≤Work,可执行完,    

若此时,P2请求资源Request(1,0,2),系统按银行家算法进行检查:
Request(1,0,2)≤Need(1,2,2)
Request(1,0,2)≤Available(3,3,2)

再利用安全性算法检查此时系统是否安全,如下表4-4所示

 P5发出资源请求Request(3,3,0),系统按照银行家算法进行检查:
Request(3,3,0)≤Need(4,3,1)
Request(3,3,0) ≥ Available(2,3,0)
所以让P4等待。

P1发出资源请求Request(0,2,0),系统按照银行家算法进行检查:
Request(0,2,0)≤Need(7,4,3)
Request(0,2,0)≤Available(2,3,0)

可用资源Available(2,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值