
操作系统银行家算法模拟实验(报告包含源代码)
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
【实验目的】1. 深入理解死锁的概念;2. 利用高级编程语言,实现并调试银行家算法程序,从而加深对死锁的理解。 【实验准备】1. 识别死锁产生的原因:主要归因于竞争资源造成的死锁以及进程推进顺序不当导致的情况。2. 确定产生死锁的必要条件:包括互斥条件、请求和保持条件、不剥夺条件以及环路等待条件。3. 掌握处理死锁的基本方法:主要包含预防死锁、避免死锁、检测死锁以及解除死锁等策略。 【实验内容】1. 实验原理:银行家算法通过逐个检查每个客户是否能够完成其工作,并假定其完成工作及归还全部贷款,再依次检查下一个可完成工作的客户来确定安全性。相比于预防死锁的方法,限制条件的设置更少,从而提高了资源利用率。然而,该算法对客户数量有固定不变的限制,在多道程序系统中难以满足;同时,该算法保证了所有客户在有限时间内得到满足,但对于实时系统而言需要考虑快速响应的要求;此外,寻找安全序列增加了系统的开销。银行家算法的核心在于确保操作系统的安全状态,这也被认为是操作系统判断是否分配给一个进程资源的依据。例如,一个进程需要申请8个资源(假设均为相同类型),已经申请了5个资源,还差3个资源。如果此时操作系统剩余2个资源,则无论如何分配都无法满足该进程的需求,因为即使全部分配也无法弥补缺口并可能导致死锁。相反,如果操作系统剩余3个资源,则可以满足该进程的需求,因为它能保证进程不会发生死锁只要不将剩余资源分配给其他进程。2. 实验题目设计五个进程{P0, P1, P2, P3, P4}共享三类资源{A, B, C}的系统,其中{A, B, C}的资源数量分别为10、5和7。系统允许各进程动态地申请和释放资源;系统根据各进程的申请动态地进行资源分配。要求程序能够显示和打印每个时刻各个进程的资源分配表以及安全序列;此外还需显示和打印各进程依次申请的资源编号以及为某进程分配资源后的相关数据信息。3. 算法描述我们引入了两个向量:Resourse(表示总资源量)、Available(表示剩余可用资源量) 以及两个矩阵:Claim(每个进程的最大需求量)、Allocation(已为每个进程分配的数量)。这些向量和矩阵共同构成了系统对资源的分配状态描述。我们定义了一个矩阵Need = Claim – Allocation (每个进程的最大需求量减去已分配的数量),用于计算每个进程尚需资源的量。银行家算法的核心步骤如下:(1)若Request[i] ≤ Need[i],则继续下一步检查;否则拒绝请求。(2)若Request[i] ≤ Available[i],则允许执行;否则等待。(3)尝试为请求者分配所需资源(采用回溯算法),并更新数据结构中的值:Available[i] = Available[i] - Request[i];Allocation[i] = Allocation[i] + Request[i];Need[i] = Need[i]-Request[i];(4)执行安全性检查:通过验证是否可以找到一个安全序列来判断系统是否处于安全状态。(安全性检查算法):首先从所有可运行的进程中选择一个满足以下条件的进程Pi:① Finish[i] == false (未确定) ② Need[i] ≤ Free (即尚需资源的量小于或等于剩余可用资源的量)。然后执行循环直到所有进程都被标记为完成为止。(1) 若可以找到这样一个Pi并且它获得足够的可用资源后就执行下一步(2) 将获得资源的Pi标记为完成并释放其占用的所有被占用的資源。(测试结果如下process number:5resource number:4resource series:6 3 4 2assined matrix:p0:3 0 1 1p1:0 1 0 0p2:1 1 1 0p3:1 1 0 1p4:0 0 0 0needed matrix:p0:1 1 0 0p1: 0 1 1 2p2 : 3 1 0 0 p3 : 0 0 - - - - - - - - p4 : - - - - p3-->p4-->p-> p2--> p!
It is safe and it has eight solutions
全部评论 (0)


