现在的位置: 首页 > 综合 > 正文

银行家算法C++源程序及流程图

2012年12月18日 ⁄ 综合 ⁄ 共 5176字 ⁄ 字号 评论关闭

1  设计目的
1)了解多道程序系统中,多个进程并发执行的资源分配。
2)掌握银行家算法,了解资源在进程并发执行中的资源分配情况。
3)掌握预防死锁的方法,系统安全状态的基本概念。
2  设计内容
设计一个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)
3.1程序流程图 
初始化算法流程图 银行家算法流程图 
安全性算法流程图3.2源程序 

 

1. 测试数据与实验结果

2. 结果分析与实验体会
这次实验时通过模拟银行家算法避免死锁的发生,银行家算法是操作系统中避免死锁的典型算法。我设计的这个程序中包含了三大块,利用数据结构初始化,银行家算法,安全性算法。在初始化这一块,程序需要用到可利用资源向量Available[j]、最大需求矩阵Max[i.j]、分配矩阵Allocation[i,j]、需求矩阵Need[i,j]。它们之间有着一定的联系,Need[i,j]=Max[I,j]-Allocation[i,j],请求资源时需要用到银行家算法,检查资源的分配需要用到安全性算法。在将三大块结合起来就能很好的避免死锁的发生了。
通过这次的实验,我更进一步的了解了银行家算法,并对数据结构的用法理解的更透彻了,在实验的过程中我深刻的体会到了合作的意义,我遇到了一些困难,通过对书上所学的知识反复的思考与理解和与同学之间的相互讨论,最终将银行家算法真正的理解,并且将它用C++实现。在以后的学习当中我会更加努力的将这一门课程学好。这次课程设计时间上虽说仓促点,但是我依然学到了很多的实用性知识。除了更深的了解这个算法,而且对C语言进行了复习,而且其过程中有很多的知识点都不记得了,所以在此感谢在此过程中帮助过我的老师和同学。
3  思考题
1) 理解避免死锁在当前计算机系统中不常使用?
    2)现在的计算机系统是如何解决死锁问题的?

 

抱歉!评论已关闭.