博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统复习(三)处理机调度——三级调度体系 调度算法 死锁的概念及处理 c语言实现银行家算法
阅读量:4074 次
发布时间:2019-05-25

本文共 1934 字,大约阅读时间需要 6 分钟。

 


c语言实现银行家算法 

基本思想

在避免死锁的方法中,银行家算法是最具代表性的死锁算法。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。在分配资源之前,判断系统是否是安全的;若安全,才分配。

设计思路

1.调用init()函数初始化资源的基本信息(资源的种类数、资源的名字、每种资源的最大个数)和进程的基本信息(进程的个数、每个进程的名字、每个进程对每种资源的最大需求数)。如果输入的进程对资源的最大需求大于资源的最大数,则提示需求超过资源上限,并重新输入。

2.调用init_allocation()函数初始化分配状态,可以输入当前各个进程对各种资源的占有情况,如果输入大于该进程最大需求,则提示当前资源占用超过所需最大资源,并重新输入;如果输入大于资源最大数量,则提示当前资源占用超过资源上限,并重新输入。

3.更新需求矩阵和资源数量

4.输出资源矩阵、最大需求矩阵、已经分配矩阵和仍需分配矩阵。

5.调用allo方法,准备开始分配资源。首先输入进程名和所需各类资源数量,如果进程存在,请求资源数量小于仍需分配的数量,并且请求资源数量小于资源最大数量,则尝试分配,修改分配矩阵、仍需矩阵和资源矩阵,并调用safe方法判断是否安全,安全则分配成功,不安全则重置分配矩阵、仍需矩阵和资源矩阵。本程序尚未处理输入进程不存在的情况。

具体代码

//银行家算法#include
#include
#include
//函数声明void update();intallo();//全局变量int n; //n表示资源的种类数int m; //m表示进程//结构体struct info{ char name[20]; int claim[50]; //各个进程所需资源的最大需求 int allocation[50];//已经分配 int need[50]; //仍需分配 bool finish; //满足标记}pro[50];struct rescource{ char name[20]; int avaliable;//最大资源数}resc[50],work[50];void init() { int i,j; int flag; printf("请输入资源种类数"); scanf("%d",&n); for(i=0;i
resc[j].avaliable) flag=1; else { pro[i].allocation[j]=0; pro[i].need[j]=pro[i].claim[j]; flag=0; } if(flag==1) { i--; printf("\n需求超过资源上限,请重新输入\n"); } getchar(); } } printf("\n");}//初始分配状态void init_allocation() { int i,j; for (i = 0; i
resc[j].avaliable) flag = 1; if (pro[i].allocation[j]>pro[i].claim[j]) flag=2; } if (flag == 1) { i--; printf("\n当前资源占用超过资源上限,请重新输入\n"); } else if(flag==2) { i--; printf("\n当前资源占用超过所需最大资源,请重新输入\n"); } } update(); } //更新需求矩阵need和资源数allocation void update(){ int i,j=0; for (i = 0; i

 

参考结果

1.初始化时输入进程所需资源数大于资源最大数

2.初始化时进程对资源的占用情况大于进程所需

3.初始化时进程对资源的占用大于资源最大可用

4.初始化成功

5.进程请求资源时大于自己仍需资源数

6.分配失败

7.分配成功

你可能感兴趣的文章
[教程] Packt - Create a Game Environment with Blender and Unity by Darrin Lile
查看>>
[教程] Packt - Create a Game Environment with Blender and Unity by Darrin Lile
查看>>
详解Unity Profiler内存分析问题
查看>>
essential
查看>>
k8s安装
查看>>
c++ python 实现AES加密 基于openssl
查看>>
python正则提取mysql中文数据
查看>>
python刷赞
查看>>
python收集网页中的翻页
查看>>
成语接龙
查看>>
python3调用腾讯AI开放平台
查看>>
城市接龙
查看>>
Python操作Firefox
查看>>
python3调用OCR识别
查看>>
三个机器人尬聊
查看>>
世界杯买球算法
查看>>
阶乘、阶乘之和的函数式风格实现
查看>>
SVN部署(本地)
查看>>
SVN部署(远程)服务器篇
查看>>
SVN部署(远程)客户端篇
查看>>