死锁

最大可能地避免、预防和解除死锁 -------运行

如何确定资源的合理分配算法。使系统获得较好的资源利用率和吞吐量,避免进程永久占据系统资源

系统设计、进程调度

如何不让这四个必要条件成立,[只要打破四个必要条件之一就能有效预防死锁的发生:
打破互斥 条件:改造独占性资源为虚拟资源,大部分资源已无法改造。
打破不可抢占 条件:当一进程占有一独占性资源后又申请一独占性资源而无法满足,则退出原占有资源。
打破占有且申请 条件:采用资源预先分配策略,即进程运行前申请全部资源,满足则运行,不然就等待,
打破循环等待 条件:实现资源有序分配策略]

死锁的四个必要条件

互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

*死锁产生原因

1竞争资源引起进程死锁,争夺资源而陷于僵局
2可剥夺资源和不可剥夺资源:资源可以再被其他进程或系统剥夺。优先权高的进程可以剥夺优先权低的进程的处理机。|||||||不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放
3竞争不可剥夺资源=等待对方释放自己所需要的资源,因不能继续获得自己所需要的资源而不能继续推进,从而也不能释放自己所占有的资源,以致进入死锁状态。
4竞争临时资源:可顺序重复使用型资源------永久资源.临时资源:无用的资源------消耗性资源,如硬件中断、信号、消息、缓冲区内的消息等,它也可能引起死锁
#进程推进顺序不当引起死锁 1) 进程推进顺序合法2) 进程推进顺序非法 不安全状态

¥网络的死锁:控制技术方面的某些缺陷所引起
¥存储转发死锁及其防止:每个分组都是按照编号递增规则分配缓冲区,不会相互等待。空闲缓冲区发生死锁现象,造成了缓冲区和链路的浪费 。 携带一个全局性的惟一的"时间戳。链路的队列上分组按时间戳顺序排队 不受阻挡地转发
¥重装死锁及其防止:缓冲区空间有限 绕道从其它途径传送,但目的被死锁,其周边区域也由此发生了拥塞。

避免死锁

(1).按同一顺序访问对象。(注:避免出现循环)
(2).避免事务中的用户交互。(注:减少持有资源的时间,较少锁竞争)
(3).保持事务简短并处于一个批处理中。(注:同(2),减少持有资源的时间)
(4).使用较低的隔离级别。(注:使用较低的隔离级别(例如已提交读)比使用较高的隔离级别(例如可序列化)持有共享锁的时间更短,减少锁竞争)
(5).使用基于行版本控制的隔离级别:
(6).使用绑定连接。(注:绑定会话有利于在同一台服务器上的多个会话之间协调操作。绑定会话允许一个或多个会话共享相同的事务和锁(但每个回话保留其自己的事务隔离级别),并可以使用同一数据,而不会有锁冲突

死锁解决方法

1、撤消陷于死锁的全部进程;
2、逐个撤消陷于死锁的进程,直到死锁不存在;
3、从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。
4、从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

解除死锁(僵局|瘫痪|不安全):撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
1kill spid
2设定锁请求超时
3锁监视器线程执行死锁检查 会标识线程正在等待的资源;然后查找特定资源的所有者 会话作为死锁牺牲品:事务并释放该事务持有的所有锁,使其他线程的事务可以请求资源并继续运行。

死锁预防。
这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。

死锁避免。
系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,否则予以分配。这是一种保证系统不进入死锁状态的动态策略。

死锁检测和解除。
先检测:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源 。检测方法包括定时检测、效率低时检测、进程等待时检测等。
解除死锁:采取适当措施,从系统中将已发生的死锁清除掉
这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,分配给就绪运行的进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值