银行家算法之安全性算法

简介: 安全性算法过程描述流程图例子代码实现运行截图1. 安全性算法过程描述(1) 设置两个向量:① 工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数量的多少,它含有m个元素,在执行安全算法开始时,Work = Available;② Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。

1. 安全性算法过程描述

(1) 设置两个向量:① 工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数量的多少,它含有m个元素,在执行安全算法开始时,Work = Available;② Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]= false;当有足够资源分配给进程时, 再令Finish[i]= true。

(2) 从进程集合中找到一个能满足下述条件的进程:
① Finish[i]= false; ② Need[i,j]≤ Work[j];
如果找到,那么,执行步骤(3);否则,执行步骤(4)。

(3) 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

 Work[j]= Work[i]+Allocation[i,j]; 
 Finish[i]= true;
 go to step 2; 

(4) 如果所有进程的Finish[i]= true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。

2. 流程图

Created with Raphaël 2.1.0 开始 STEP1:设置工作向量Work和Finish STEP2:找到一个满足条件进程Pi STEP3:执行进程Pi,释放资源 STEP4:all Finish[i]=true Output:securable... 结束 Output:not securable yes no yes no

3. 例子

  如果当前资源分配如下表:

进程 最大需求Max 已分配Allocation 可用Available
P1 10 5 3
P2 4 2
P3 9 2

  安全序列:P2->P1->P3

4. 代码实现

/**
 * Copyright ? 2016 Authors. All rights reserved.
 *
 * FileName: bankSecurable.cpp
 * Author: Wu_Being <1040003585@qq.com>
 * Date/Time: 09-10-16 00:39
 * Description: 银行家算法之安全性检查子算法 
 */
#include <iostream>
#define N 3         //进程数目 
#define M 1         //资源类数(为了好理解,这里令资源种类设为1种) 

using namespace std;

int Available[M];       //空闲资源向量Available
int Max[N][M];          //最大需求矩阵Max
int Allocation[N][M];   //分配矩阵Allocation
int Need[N][M];         //需求矩阵Need

bool bankSecurable(int allocation[N][M],int available[M]){

STEP1:  
    int finish[N];
    int work[M];
    int i=0;            //第i个进程 
    int j=0;            //第j个资源 

    for( i=0;i<N;i++){
        finish[i]=false;
    }   
    for( j=0;j<M;j++){
        work[j]=available[j];
    }   

STEP2:
    //for( j=0;j<M;j++)//(资源类数>1)
    for( i=0;i<N;i++){
        if(finish[i]==false&&Need[i][0]<=work[0]){//[i][j](资源类数>1)
            goto STEP3;
        }else{
            if(i==N-1){
            //从进程集合中找不到一个进程能满足条件时
                goto STEP4;
            }
        }
    }

STEP3:
    work[0]=work[0]+allocation[i][0];//[i][j](资源类数>1)
    //count[i]++(资源类数>1)
    //if count[i]==M(资源类数>1)
    finish[i]=true;
    //securable series[k]=i;
    goto STEP2;

STEP4:
    bool alltrue=true;
    for( i=0;i<N;i++){
        if(finish[i]==false){
            alltrue=false;
            break;
        }
    }

    return alltrue;
}

int main(int argc,char* argv[])
{
    /* 1、初始化*/
    Available[0]=3;
    Max[0][0]=10;Max[0][1]=4;Max[0][2]=9;
    Allocation[0][0]=5;Allocation[0][1]=2;Allocation[0][2]=2;
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            Need[i][j]=Max[i][j]-Allocation[i][j];
        }
    }       

    /* 2、安全性检查*/
    bool secure=bankSecurable(Allocation,Available);

    /* 3、结果输出*/
    if(secure)cout<<"is securable..."<<endl;
    else cout<<"is not securable!!!"<<endl;

    return 0;
}

5. 运行截图

这里写图片描述

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《银行家算法——安全性检查子算法》:
http://blog.csdn.net/u014134180/article/details/52762186

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

目录
相关文章
|
算法 安全
【操作系统】死锁处理-银行家算法
【操作系统】死锁处理-银行家算法
480 0
|
存储 算法 安全
操作系统:银行家算法
操作系统:银行家算法
381 0
|
存储 监控 算法
版本控制算法在文档管理软件中的关键作用:提升安全性与权限管理
版本控制算法是一种不可或缺的工具,这个家伙不仅能帮你记录文档的点点滴滴,还能在需要时穿越时空,让你回到过去的版本。这可是文档管理的大杀器,不仅让你不怕数据丢失,还能保证文档历史清清楚楚。接下来,就让我们来聊聊怎么样才能用版本控制算法来加强文档管理软件的安全性和权限管理吧——
294 1
|
运维 监控 算法
应用异常检测算法提升上网行为管理软件的安全性
异常检测算法在上网行为管理软件中真是大有用途,不过也不是没有一些小挑战。大家都知道的,上网行为管理软件的目标是看管和掌控网上用户的行径,就是要确保网络稳如狗,合规规规矩矩,资源还能玩得溜。咱们这领域里,异常检测算法的点子用法是找出那些潜伏的安全威胁,打压不合规的事情,还有就是揪出网络上的怪现象,然后惩罚掉。
178 2
|
存储 算法 安全
深入理解SHA系列哈希算法:安全性的保障与演进
深入理解SHA系列哈希算法:安全性的保障与演进
|
算法 安全
死锁相关知识点以及银行家算法(解题详细步骤)
死锁相关知识点以及银行家算法(解题详细步骤)
610 2
|
存储 算法 安全
深入解析RSA算法原理及其安全性机制
深入解析RSA算法原理及其安全性机制
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
|
算法 安全 Java
AES加解密算法:原理、应用与安全性解析
AES加解密算法:原理、应用与安全性解析
|
算法 安全 Java
银行家算法代码
银行家算法代码
197 0

热门文章

最新文章

下一篇
开通oss服务