1 死锁的基本概念
1.1 死锁
指多个进程在运行过程中因争夺资源而造成的一种僵局(deadly-Embrace),若无外力作用,这些进程都将无法向前推进。
1.2 产生死锁的原因
原因两点如下:
1. 竞争资源。
2. 进程间推进顺序非法。
其根本原因:是系统提供的资源个数少于并发进程所要求的该类资源数。
1.3 产生死锁的必要条件
产生死锁必须具备以下四个条件,这四个条件是Coffman首先提出的,所以称为Coffman 条件:
1. 互斥(Mutual exclusion):线程所使用的资源中至少有一个是不能共享的,它在同一时刻只能由一个线程使用。
2. 持有与等待(Hold and wait):至少有一个线程已经持有了资源,并且正在等待获取其他的线程所持有的资源。
3. 非抢占式(No pre-emption):如果一个线程已经持有了某个资源,那么在这个线程释放这个资源之前,别的线程不能把它抢夺过去使用。
4. 循环等待(Circular wait):假设有N个线程在运行,第一个线程持有了一个资源,并且正在等待获取第二个线程持有的资源,而第二个线程正在等待获取第三个线程持有的资源,依此类推……第N个线程正在等待获取第一个线程持有的资源,由此形成一个循环等待。
1.4 处理死锁的基本方法
目前处理死锁的基本方法有四种:
预防死锁:指通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。
避免死锁:指在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。
检测死锁:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。
2 预防死锁
2 .1 预防死锁
—— 破坏死锁的四个必要条件(常针对条件2,3,4)
3 死锁的避免
在死锁预防的几种方法中,都施加了较强的限制条件,严重降低了系统性能。在死锁避免的方法中,所施加的限制条件较弱,则可获得让人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态。
2.1 系统的安全状态
2.1.1 安全状态
概念:
指在某一时刻,系统能按某种进程顺序(p1,p2,…,pn)来为每个进程Pi分配其资源,直到满足每个进程对资源的最大需求,使每个进程都可顺利地完成,则称此时的系统状态为安全状态称序列(p1,p2,…,pn)为安全序列。
若某一时刻系统中不存在这样一个安全序列,则称此时的系统状态为不安全状态。
注:在死锁避免的方法中,允许进程动态申请资源,系统在进行资源分配之前,先计算资源分配的安全性,若此次分配不会导致系统进入不安全状态,便将资源分配给进程,否则进程等待。
基本事实
如果一个系统在安全状态,就没有死锁
如果一个系统处于不安全状态,就有可能死锁
避免死锁的实质:确保系统不进入不安全状态)
2.2 避免死锁的银行家算法
银行家算法的意义:银行家算法是用于避免死锁的,什么意思?就是一旦有进程提出资源请求,那可以用银行家算法来进行资源分配和检测,当分配后检测到系统是不安全状态(可能死锁),则不能进行分配;若是安全状态,则可按其请求给其分配资源。
2.3 死锁的检测和解除
如果在一个系统中,即未采用死锁预防方法,也未采用死锁避免方法,而是直接为进程分配资源,则系统中便有可能发生死锁。一旦死锁发生,系统应能将其找到并加以消除,为此需提供死锁检测和解除的手段。
2.3.1 资源分配图和死锁定理
检测死锁的基本思想: 是在操作系统中保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁。
2.3.2 死锁的解除
一旦检测出系统中出现了死锁,就应将陷入死锁的进程从死锁状态中解脱出来,常用的解除死锁方法有两种:
1, 资源剥夺法:当发现死锁后,从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态.
2, 撤消进程法:最简单的方法是使全部死锁进程都撤销;或者就是按某步骤来顺序的撤销进程,直到有资源可用,使死锁状态解除。
分享到:
相关推荐
这是和死锁有关的问题,和简单的一个例子!
【6-7】死锁相关、银行家算法.ppt
SQL server大并发时软件出现卡顿,需要查询是什么SQL执行时引起的卡顿,同时具有干掉死锁进程,非常实用
使用SHOW ENGINE INNODB STATUS命令来查看InnoDB存储引擎的状态,并查找死锁相关的日志信息。 启用innodb_print_all_deadlocks配置选项,将死锁信息记录到错误日志中,方便后续分析。 定期使用SHOW PROCESSLIST命令...
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而... 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。
前段时间遇到了一个Mysql 死锁相关的问题,整理一下。 问题描述:Mysql 的修改语句似乎都没有生效,同时使用Mysql GUI 工具编辑字段的值时会弹出异常。 什么是死锁 在解决Mysql 死锁的问题之前,还是先来了解一下...
有关死锁的介绍。包括死锁的定义,如何处理死锁,死锁如何预防,如何避免等
有许多操作系统的经典习题,而且每道题都有详细解释,很不错的资料啊
操作系统中有关预防死锁的问题
死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的。理解死锁首先需要对死锁所涉及的相关观念有一个理解。
实验二 死锁的避免 实验目的:通过使用银行家算法实现系统资源的分配和安全性检查模拟,深刻理解操作系统的死锁避免算法。 实验原理:银行家算法。 实验仪器:计算机一台。 实验安排:自选编程语言完成“银行家...
有关银行家算法的实现,它是用来解决操作系统中的死锁问题的有效方法!
(1)理解死锁避免相关内容 (2)掌握银行家算法主要流程 (3)掌握安全性检查流程
搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用Python直观的演示一下。 死锁的一个原因是互斥锁。假设银行系统中,用户a试图转账100块给用户b,与此同时用户b试图转账200块给用户...
银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次...
课程设计-模拟银行家算法避免死锁.doc
这个课件有关进程死锁的检测和解除,能帮助你更好的学习和理解死锁这一知识点
有关表死锁的详细图片 博文链接:https://meteor-1988.iteye.com/blog/1568695
本幻灯片主要介绍了分布式数据库相关死锁检测算法的分析研究
当一组进程请求当前正被保留/分配给某些其他进程的相同资源时,就会发生死锁情况。 处于死锁状态的进程将等待大量时间,并且它们将永远不会终止其执行,并且该组进程所拥有的资源无法提供给任何其他可能有时会导致...