1、1 课设简介: 1.1 课程设计题目 银行家算法的模拟实现 1.2 课程设计目的 通过编写和调试一个系统动态分配资源的简单模拟程序, 观察死锁产 生的条件,并采用适当的算法,有效地防止和避免死锁地发生。 1.3 课程设计内容 模拟实现动态资源分配。 同时要求编写和调试一个系统动态资源的简 单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止 和避免死锁的发生。 2 实验原理分析: 银行家算法是避免死锁的一种重要方法, 通过编写一个简单的银行家 算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解 死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条 件,即一个资源每次只
2、能由一个进程张勇;第二个为等待条件,即一 个进程请求资源不能满足时, 它必须等待, 单它仍继续宝石已得到的 所有其他资源; 第三个为非剥夺条件,即在出现死锁的系统中一定有 不可剥夺使用的资源; 第四个为循环等待条件,系统中存在若干个循 环等待的进程, 即其中每一个进程分别等待它前一个进程所持有的资 源。防止死锁的机构只能确保上述四个条件之一不出现, 则系统就不 会发生死锁。通过这个算法可以用来解决生活中的实际问题,如银行 贷款等。 3 程序结构分析: 3.2 程序模块划分 3.2.1.银行家算法: 设进程 i 提出请求 Requestn,则银行家算法按如下规则进行判断。 (1)如果 Reque
3、stnNeedi,n,则报错返回。 (2)如果 RequestnAvailable, 则进程 i 进入等待资源状态, 返回。 (3)假设进程 i 的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Request (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配 作废,系统恢复原状,进程等待。 3.2.2.安全性检查 (1)设置两个工作向量 Work=Available;FinishM=False (2)从进程集合中找到一个满足下述条件的进程, Finish i
4、=False Needi; if(i=A)coutAVAI LABLEj) /若请求的资源数大于可用资源数 coutflag; void main() /主函数 int i=0,j=0,p; coutA; coutB; coutALL_RESOURCEi;ALL_RESOURCEi; coutMAXij; if (MAXijALL_RESOURCEj)/最大需求 量小于资源的总数 coutALL_RESOURCEj); coutALLOCATIONij; if (ALLOCATIONijMAXij) coutMAXij); /初始化资源数量 for (j=0;j p=ALL_RESOURCEj; p=ALL_RESOURCEj; for (i=0;i p=p-ALLOCATIONij;/减去已经被占据 的资源 AVAILABLEj=p; if(AVAILABLEj0) AVAILABLEj=0; fo