死锁相关知识学习"/>
死锁相关知识学习
闭环是死锁的必要条件
所有线程都等待
如果图中不包含循环=》没有死锁
如果图中包括循环==》
如果每个资源类只有一个实例,那么死锁。
如果每个资源类有几个实例,那么可能死锁。
如果以下四个条件同时成立,则可能发生死锁:
1.互斥:在一个时间只能有一个进程使用资源
2.持有并等待:进程保持至少一个资源正在等待获取其他进程持有的额外资源
3. 无抢占:一个资源只能被进程资源释放,进程已经完成了它的任务之后
4. 循环等待:存在等待进程集合{P0,P1,…PN},P0正在等待P1所占用的资源,P1正在等待P2占用的资源,…PN-1在等待PN所占用资源,PN正在等待P0所占用的资源。
死锁预防:让死锁不会出现,
死锁避免:
限制申请方式
互斥-共享资源不是必须的,必须占用非共享资源。
占用并等待-必须保证当-个进程请求的资源,它不持有任何其他资源。
➢需要进程请求并分配其所有资源,它开始执行之前或允许进程请求资源仅当进程没有资源。
➢资源利用率低;可能发生饥饿。
◆无抢占-
➢如果进程占有某些资源,并请求其它不能被立即分配的资源,则释放当前正占有的资源
➢被抢占资源添加到资源列表中
➢只有当它能够获得旧的资源以及它请求新的资源,进程可以得到执行
◆循环等待-对所有 资源类型进行排序,并要求每个进程按照资源的顺序进行申请。
需要系统具有-些额外的先验信息提供。
◆最简单和最有效的模 式是要求每个进程声明它可能需要的每个类型资源的最大数目。
◆资源的分配状态是 通过限定提供与分配的资源数量,和进程的最大需求。
◆死锁避免算法动态检查的资源分配状态,以确保永远不会有-个环形等待状态。.
如果系统处于安全状态==>无死锁。
◆如果系统处于不安全状态=>可能死锁。
避免死锁:确保系统永远不会进入不安全状态。
银行家算法(Banker’s Algorithm)是-一个死锁避免的著名算法,是由艾茲格●迪杰斯特拉在1965年为T.H.E系统设计的–种避免死锁产生的算法。
它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
背景
在银行系统中,客户完成项目需要申请贷款的数量是有限的,每个客户在第-次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求并完成项目时,客户应及时归还。
银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。
这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要请资源的进程。
Banker’s Algori thm前提条件
◆多个实例。
◆每个进程都必须能最大限度地利用资源。
◆当一个进程请求一个资源,就不得不等待。
◆当一个进程获得所有的资源就必须在-段有限的时间释放它们。
基于上述前提条件,银行家算法通过尝试寻找允许每个进程获得的最大资源并结束(把资源返还给系统)的进程请求的一一个理想执行时序,来决定-个状态是否是安全的。
不存在这满足要求的执行时序的状态都是不安全的。
◆
终止所有的死锁进程
◆
在一个时间内终止一个进程直到死锁消除
终止进程的顺序应该是
➢进程的优先级
➢进程运行了多久以及需要多少时间才能完成
➢进程占用的资源
➢进程完成需要的资源
➢多少进程需要被终止
➢进程是交互还是批处理
更多推荐
死锁相关知识学习
发布评论