`
- 浏览:
91200 次
- 性别:
- 来自:
长沙
-
本文围绕以下四个部分展开:
一、死锁的概念
二、产生死锁的原因
三、产生死锁的必要条件
四、处理死锁的基本方法
一、死锁的概念
指:多个进程在运行过程中,因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
二、产生死锁的原因
1. 竞争资源。
当系统中供多个进程共享的资源,如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
2. 进程间推进顺序非法。
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
三、产生死锁的必要条件
1. 互斥条件。
指:进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源的进程用完释放。
2. 请求和保持条件。
指:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3. 不剥夺条件。
指:进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4. 环路等待条件。
指:在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,…,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源;……;Pn正在等待已被P0占用的资源。
四、处理死锁的基本方法
1. 预防死锁
通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁。
预防死锁是一种较易实现的方法,已被广泛使用。但由于所施加的限制条件往往太严格,因而可能会导致系统资源利用率和系统吞吐量降低。
预防死锁的方法是使四个必要条件中的第2、3、4个条件之一不能成立,来避免发生死锁。至于必要条件1,因为它是由设备的固有特性所决定的,不仅不能改变,还应加以保证。
(1)摒弃“请求和保持”条件
采用这种方式时,系统规定所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源。此时,若系统有足够的资源分配给某进程,便可把其需要的所有资源分配给该进程,这样,该进程在整个运行期间便不会再提出资源要求,从而摒弃了请求条件。
但在分配资源时,只要有一种资源不能满足某进程的要求,即使其它所需的各个资源都空闲,也不分配给该进程,而让该进程等待。由于在该进程的等待期间,它并未占有任何资源,因而也摒弃了保持条件,从而可以避免发生死锁。
1)优点:简单、易于实现、很安全。
2)缺点:
A. 资源被严重浪费。
因为一个进程是一次性地获得其整个运行过程所需的全部资源的,且独占资源,其中可能有些资源很少使用,甚至在整个运行期间都未使用,这就严重地恶化了系统资源的利用率。
B. 使进程延迟运行。
仅当进程在获得了其所需的全部资源后,才能开始运行,但可能因有些资源已长期被其它进程占用而致使等待该资源的进程迟迟不能运行。
(2)摒弃“不剥夺”条件
采用这种方式时,进程是逐个地提出对资源的要求的。当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。这意味着,某一进程已经占有的资源,在运行过程中会被暂时地释放掉,也可认为是被剥夺了,从而摒弃了“不剥夺”条件。
1)缺点:
实现比较复杂,且要付出很大的代价。因为一个资源在使用一段时间后,它的被迫释放可能会造成前段工作的失效,即使是采取了某些防范措施,也还会使进程前后两次运行的信息不连续;此外,还可能因为反复地申请和释放资源,致使进程的执行被无限地推迟,这不仅延长了进程的周转时间,而且也增加了系统开销,降低了系统吞吐量。
(3)摒弃“环路等待”条件。
采用这种方法时,系统将所有资源按类型进行线性排队,并赋予不同的序号。例如:输入机序号为1,打印机序号为2,磁带机为3,磁盘为4。所有进程堆资源的请求必须严格按照资源序号递增的次序提出,这样,在所形成的资源分配图中,不可能再出现环路,因而摒弃了“环路等待”条件。
1)优点:与前两种方法相比,这种方法的资源利用率和系统吞吐量都有较明显的改善。
2)缺点:
A. 为系统中各类资源所分配(确定)的序号必须相对稳定,这就限制了新类型设备的增加。
B. 尽管在为资源的类型分配序号时,已经考虑到大多数作业在实际使用这些资源时的顺序,但也经常发生这种情况:作业(进程)使用各类资源的顺序与系统规定的顺序不同,这就会造成对资源的浪费。
例如:某进程先用磁带机,后用打印机,但按系统规定,该进程应先申请打印机后申请磁带机,致使先获得的打印机被长时间闲置。
C. 为方便用户,系统对用户在编程时所施加的限制条件应尽量少。然而这种按规定次序申请的方法,必然会限制用户简单、自主地编程。
2. 避免死锁。
该方法同样属于事先预防的策略,但它并不需要事先采取各种限制措施去破坏产生死锁的四个必要条件。而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
这种方法只需要事先施加较弱的限制条件,便可获得较高的资源利用率及系统吞吐量,但在实现上有一定的难度。
最著名的避免死锁的算法:Dijkstra的银行家算法。
3. 检测死锁。
这种方法不需要事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,而是允许系统在运行过程中发送死锁。
但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源;然后,采取适当措施,从系统中将已发生的死锁清除掉。
4. 解除死锁。
它是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,需将进程从死锁状态中解脱出来。
方法(1):剥夺资源。从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
方法(2):撤销进程。使全部死锁进程都夭折掉;或者,按照某种顺序逐个地撤销进程,直至有足够的资源可用,使死锁状态消除为止。
死锁的检测和解除措施有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
整理时重点参考:《计算机操作系统》(第三版) -- 汤小丹、梁红兵、哲凤屏、汤子瀛 编著
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在SQL Server数据库管理系统中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将详细介绍如何在...
进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...
从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...
"SQL Server死锁的解除方法" SQL Server死锁是指在多个事务之间的资源竞争时,出现的循环等待资源的现象。死锁会导致系统性能下降,甚至会导致系统崩溃。因此,解决SQL Server死锁是非常重要的。 SQL Server死锁的...
Oracle数据库解决死锁 Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle...
一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...
在SQL数据库管理中,死锁和阻塞是常见的问题,特别是在多用户环境下,它们可能导致系统性能下降甚至数据丢失。理解并有效地处理这些问题至关重要。本文将深入探讨“sql数据库死锁查询工具”及其在解决数据库死锁和...
ANR的产生原因多种多样,其中包括CPU负载过高、输入事件未及时处理以及我们重点关注的——死锁。本文将通过一个具体的死锁导致的ANR实例,解析如何利用Android trace文件来分析和解决这类问题。 当Android系统检测...
本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...
在操作系统领域,死锁是指两个或多个并发进程互相等待对方持有的资源而无法继续执行的状态。本实验报告关注的是死锁的检测与解除,通过C语言实现。实验的主要目的是理解操作系统如何检测死锁的发生,并在发生死锁时...
操作系统中的死锁问题是一个复杂而重要的概念,它涉及到并发进程之间的资源分配和同步问题。死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。这个...
在IT领域,尤其是在多线程编程中,死锁是一个常见的问题,它发生在两个或多个并发执行的线程互相等待对方释放资源,导致它们都无法继续执行的状态。为了解决这一问题,开发者需要具备对死锁的理解以及如何检测和避免...
### DB2死锁问题分析及解决方案 #### 一、引言 在数据库管理与维护过程中,死锁问题是一个常见的挑战,特别是在使用IBM DB2这样的大型关系型数据库管理系统时。本文将详细探讨DB2中死锁问题的分析方法及有效的解决...
在SQL Server数据库管理系统中,死锁是常见的并发问题,它发生在两个或多个事务相互等待对方释放资源,导致它们都无法继续执行。"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决...
MySQL数据库在处理并发事务时,可能会遇到一种特殊的情况,即死锁。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。死锁是数据库系统中常见的问题,...
在“上海大学操作系统实验二(死锁)”中,学生将深入研究死锁产生的原因、条件以及避免和解除死锁的方法。 死锁的四个必要条件包括: 1. **互斥条件**:某些资源一次只能被一个进程使用,即资源在一段时间内非...
银行家算法避免死锁 VM软件 Linux系统 C语言 成功编译 成功运行 内附完整课设报告,代码,运行cpp 附有哲学家进餐简略一题 原课设要求:死锁避免 (1)请设计一个程序演示死锁避免算法(银行家算法)。 (2)要求该...
### Oracle死锁原因及解决办法 #### 一、Oracle死锁概述 在Oracle数据库系统中,死锁是一种常见的并发问题,它会导致多个事务之间互相等待对方释放资源而无法继续执行,最终导致整个系统的运行效率降低甚至停滞。...
在SQL Server数据库管理中,死锁是一个常见的性能问题,它发生在两个或多个事务相互等待对方释放资源时。本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,...