银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。用C#语言编写和调试一个处理机调度的银行家算法的模拟程序。通过本实验可以对死锁和银行家算法有更深刻的认识。
银行家算法的基本思想是系统收到进程的资源请求后在安全状态下试探性的把资源分配给他,然后判断系统是否是安全的;若是,才真正完成这次资源分配,否则,拒绝本次资源分配,该进程等待。
可利用资源向量Available:这是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个
最大需求矩阵Max:这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K
分配矩阵Allocation:这是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K
需求矩阵Need:这是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。Need[i,j]=Max[i,j]-Allocation[i,j]
(1) 设置两个工作向量Work(其初始值=Available)和Finish(其初始值都是false)
(2) 从进程集合中找到一个满足下述条件的进程i:
Finish[i] == false; Need[i] <= Work;如找到,执行(3);否则,执行(4)
(3) 该进程获得资源,可顺利执行,直至完成,从而释放资源
Work = Work + Allocation[i]; Finish[i] = true;转到步骤(2)
(4) 如所有的进程Finish == true,则表示安全;否则系统不安全 详细文档及源码:https://www.write-bug.com/article/3166.html