银行家算法c++课程设计

本次课程设计旨在实现银行家算法以防止死锁。通过流程图设计、算法编写,包括安全性检测和资源请求处理,确保系统安全。设计中考虑了不同数据输入方式,并提供了图形界面代码参考。
摘要由CSDN通过智能技术生成

课程设计报告名称

 

 

1. 课程设计内容

 本实验实现“银行家算法”

银行家算法的作用是防止发生死锁,提前检测出系统是否安全,如果系统安全,银行家算法还会求出系统的安全序列。银行家算法中银行家对客户相当与系统对进程,系统对进程有一定的约束条件:每个进程必须预先说明所要的最大资源量;可以对操作者提出某进程资源量的申请并判断能否成功,如果系统满足进程对资源的最大需求量,那么进程在资源运行后,应在有限时间内全部归还系统,释放资源。

2. 背景知识

如果一个进程集合中每个进程都在等待只能由此集合中的其他进程才能引发的事件,而无限期陷入僵持的局面称为死锁。

产生死锁的原因主要是: 
1) 因为系统资源不足。 
2) 进程运行推进的顺序不合适。 
3) 资源分配不当等。

银行家算法的安全序列主要是从改变进程运行推进的顺序入手,从而得出安全序列。

3. 设计步骤与方法

3.1. 步骤1

3.1.1 步骤1流程图设计

 

 

3.1.2 步骤1初始化 

本程序设计了两个数据输入的方式,一个是通过文件流读取txt文件,另一个是通过控制台直接输入数据,由此可得到以下几种数据,

m,代表进程的数目

n,代表进程的资源的种类

int AVAILABLE[MAXRESOURCE];                    /*可用资源数组*/  

int MAX[MAXPROCESS][MAXRESOURCE];            /*最大需求矩阵*/  

int ALLOCATION[MAXPROCESS][MAXRESOURCE];    /*已有的资源分配矩阵*/  

并由上述的数组之间的关系得到:

设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。要求: 1) 简单的选择界面; 2) 能显示当前系统资源的占用和剩余情况。 3) 为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分配不成功; 4) 撤销作业,释放资源。 编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。 银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。 银行家算法中的数据结构 (1)可利用资源向量Available(一维数组) 是一个含有m个元素,其中的每一个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。如果Available[j]=k, 表示系统中现有Rj类资源k个。 (2)最大需求矩阵Max(二维数组) m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k, 表示进程i需要Rj类资源的最大数目为k。 (3)分配矩阵Allocation(二维数组) 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值