死锁流程图

死锁流程图
复习画流程图一目了然。

死锁

死锁概述

	资源问题
		1.可重用性资源和消耗性资源
			可重用性资源:								重复供用户多次使用的资源			性质:1.每一个可重用性资源中的单元只能分配给一个进程使用,不允许多个进程共享。2.进程使用可重用性资源必须按照如下顺序:一,请求资源;二,使用资源;三,释放资源。	3.系统中每一类可重用资源中的单元书面是相对固定的,进程在运行期间既不能创建也不能删除。
			可消耗性资源:又称临时性资源。		性质:1.每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的,有时众多,有时为0;2.进程在运行过程中,可以不断创造可消耗资源的单元,将它们放入该资源类的缓冲区,以增加该资源类的单元数目;3.进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己消耗,不再将它们返回资源类中,通常由生产者进程创建,消耗者进程消耗。
		2.可抢占性资源&&不可抢占性资源
			可抢占性资源 如:CPU和主存
			不可抢占性资源 如:打印机,磁带机
	计算机系统中死锁问题
		竞争不可抢占性资源引起死锁:通常系统中的不可抢占性资源数量不足以满足多个进程运行 needs,导致程序在运行过程中会因争夺资源而陷入僵局。
		竞争可消耗性资源引起死锁:等待一条永远不会发出的消息,于是发生了死锁。
		进程推进顺序不当发生死锁:
	死锁的定义,必要条件处理方法
		定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那该组进程是死锁的(Deadlock)。
		产生死锁的必要条件:
			1.互斥条件
			2.请求和保持条件
			3.不可抢占条件
			4.循环等待条件
  		处理死锁方法

预防死锁
避免死锁
检测死锁
解除死锁

预防死锁 破坏“请求和保持“条件 第一种协议
规定在所有进程运行前,必须一次性地申请其整个运行过程中所需的全部资源
缺点:资源严重浪费,进程会常发生饥饿现象 第二种协议
允许一个进程只获得运行初期所需的资源,便开始运行。运行中逐步释放已经用毕的全部资源,然后再请求所需新的资源。
优化系统 提高设备利用率,减少饥饿率 破坏“不可抢占”条件 协议中规定某些不可被抢占资源的进程提出的新资源需求得不到满足,必须释放已经保持的所有资源,待以后需要重新请求,资源暂时被释放or被抢占,从而破坏了“不可被抢占”条件。
缺点:实现复杂,增加系统开销,降低系统吞吐量。 破坏“循环等待”条件 对所有资源类型进行线性排序,按照顺序请求资源。

问题:系统中的资源所规定的序号必须相对稳定,限制新设备的增加作业使用资源顺序与系统规定顺序不一。对用户限制大。

避免死锁 系统安全状态 安全状态:系统进行资源分配前,进行安全性计算,找到安全序列则安全,反之亦然。 安全序列
安全转不安全 利用银行家算法避免死锁
1.银行家算法中的数据结构关系:Need[i,j]=Max[i,j]-Allocation[i,j]
2.银行家算法 银行家算法
安全性算法
安全性算法

死锁的检查与解除 死锁的检验&&解除
前提:1.系统必须保存有关资源请求和分配信息;2.提供一种算法,利用这些信息来检测系统是否已进入死锁状态。 死锁解除
1.抢占资源
2.终止或撤销进程
终止方法:1.终止所有死锁进程;2.挨个终止

思维导图下载地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
银行家算法是一种避免死锁的方法,它将资源请求看作是一个系统状态,并通过安全性算法来确定是否应该分配资源。下面是一个简单的实现代码及注释,以及流程图。 ```python # 定义可用资源的数量 available = [3, 3, 2] # 定义进程数和资源数 n_processes = 5 n_resources = 3 # 定义每个进程已分配的资源数量 allocation = [[0, 1, 0], [2, 0, 0], [3, 0, 2], [2, 1, 1], [0, 0, 2]] # 定义每个进程还需要的资源数量 need = [[7, 4, 3], [1, 2, 2], [6, 0, 0], [0, 1, 1], [4, 3, 1]] # 定义一个标记列表,标记每个进程是否可以完成 finish = [False] * n_processes # 定义一个安全序列列表,用于存储安全序列 safe_sequence = [] # 定义一个函数,用于判断是否存在安全序列 def is_safe(): # 复制可用资源列表 work = available[:] # 遍历每个进程 for i in range(n_processes): # 如果当前进程未完成且所需资源小于等于可用资源 if not finish[i] and all(need[i][j] <= work[j] for j in range(n_resources)): # 将该进程标记为完成 finish[i] = True # 将已分配资源加回可用资源列表中 work = [work[j] + allocation[i][j] for j in range(n_resources)] # 添加当前进程到安全序列中 safe_sequence.append(i) # 重新遍历所有进程 return is_safe() # 如果所有进程都完成了,返回True return all(finish) # 如果存在安全序列,打印出安全序列 if is_safe(): print("安全序列为:", safe_sequence) else: print("不存在安全序列") ``` 流程图如下: ![银行家算法流程图](banker_algorithm.png) 首先定义了可用资源数量、进程数和资源数、已分配的资源数量、还需要的资源数量等变量。然后定义了一个函数is_safe(),用于判断是否存在安全序列。在该函数中,遍历每个进程,如果当前进程未完成且所需资源小于等于可用资源,则将该进程标记为完成,将已分配资源加回可用资源列表中,添加当前进程到安全序列中,重新遍历所有进程。如果所有进程都完成了,则返回True。最后,如果存在安全序列,打印出安全序列,否则打印出不存在安全序列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kokotao

你的鼓励就是的创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值