Linux 您所在的位置:网站首页 死锁的概念和原因有哪些 Linux

Linux

2024-07-12 21:07| 来源: 网络整理| 查看: 265

1. 死锁的基本概念 1. 死锁的定义

这里写图片描述   所谓的死锁是指在多道程序系统中,一组进程中的每个进程都无限期地等待被该组进程中的另一个进程所占有且永远不会被释放的资源,这种现象称系统处于死锁状态,简称死锁。处于死锁状态的进程成为死锁进程。   系统发生死锁会大量浪费系统资源甚至会导致整个系统崩溃。

2. 产生死锁的原因

  产生死锁的原因主要有两个:一是竞争资源,系统提供的资源有限,不能满足每个进程的需求;二是多道程序运行时,进程的推进顺序不合理。

资源的概念   系统的资源分为两类:永久性资源(可重生资源),是指那些可供进程重复利用、长期存在的资源,如内存、CPU等硬件资源,以及数据文件、共享程序代码等软件资源。临时性资源(消耗性资源),是指由某个进程产生、只为另一个进程使用一次、或经过短暂时间后便不可再使用的资源,如 I/O 和时钟中断、消息等。   两种资源都可能导致发生死锁。

3. 产生死锁的必要条件

对于永久性资源,产生死锁有四个必要条件:

互斥条件。进程独占所分配到的资源且排他使用。进程互斥使用资源,即任意时刻一个资源只能被一个进程使用,其他进程申请一个正在被占有的资源时,申请者要等待直至资源被占用者释放。

不可剥夺条件。进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,只能由使用者自愿释放。

请求和保持条件。进程已经得到至少一个资源,但又提出了新的资源请求,而该资源又被其他进程所占有,此时进程会等待直至得到所需资源, 在等待期间继续占用已得到的资源。

循环等待条件。在发生死锁时,必然存在一个进程等待队列 p1,p2,p3,...,pn p 1 , p 2 , p 3 , . . . , p n ,其中 p1 p 1 等待 p2 p 2 占有的资源, p2 p 2 等待 p3 p 3 占有的资源,…, pn p n 等待 p1 p 1 占有的资源,形成一个进程等待环路。环路中每个进程已占有的资源同时被另一个进程所申请,即前一个进程占有后一个进程所申请的资源。

4. 解决死锁的方法

  解决死锁方法可分为两中:一是不让死锁发生;二是等死锁发生后再解决,具体有以下四种方法:

预防死锁。通过破坏产生死锁的必要条件(除第一个互斥条件外的其他条件)来防止死锁发生。此方法会导致系统资源利用率过低。

避免死锁。在资源的动态分配过程中,采取某种方法防止系统进入不安全状态,从而避免死锁发生。此方法只需以较弱的限制条件为代价,并获得较高的资源利用。

检测死锁。允许系统运行过程中发生死锁,事先不用采取预防、避免措施。但通过系统中设置检测机构,可以及时检测出死锁是否真的发生,并精准地确定与死锁有关的进程和资源,然后采取措施解除死锁。

解除死锁。与死锁检测相配套的措施,用于将进程从死锁状态下解脱出来。

2. 死锁预防 1. 破坏“不可剥夺”条件

  在允许进程动态申请资源的前提下做出如下规定:一个进程在申请新资源的要求不能立即得到满足,该进程进入等待状态。而处于等待状态下的进程的全部资源可以被他人剥夺,被剥夺的资源重新放到资源表中。

  该方法适合那些状态是容易保存和恢复的资源,例如,CPU、内存等。但此方法实现起来较为复杂,且代价很大。因为一个资源在使用一段时间后被强制剥夺会造成前阶段工作失效,甚至可能出现某个进程反复申请和释放资源的情况,使得进程执行无限期推迟,还增加了系统开销,延长了进程的周转时间,降低了系统的吞吐量和性能。

2. 破坏“请求和保持”条件

  实现这一操作可以用两种方法。 方法一:每个进程在执行前必须申请它所需的全部资源,仅当系统能满足进程的资源申请并把资源一次性分配给进程后,进程才能执行。这是静态资源分配策略。这种方法的缺点是会严重浪费系统资源,降低资源利用率。

方法二:仅当进程没有占有资源时才允许他去申请资源,如果进程已占用了某些资源而又要申请新的资源,那他必须先归还所占有的资源再申请新的资源。

3. 破坏“循环等待”条件

  采用资源有序分配策略,基本思想是将系统中所有的资源顺序编号,一般原则是紧缺、稀有的资源编号较大。进程申请资源时,必须严格按照编号顺序进行,否则不予分配。即一个进程只有得到编号较小的资源后,才能申请编号较大的资源。释放资源时应先释放编号较大的资源。   此方法硬性规定申请资源,会给用户编程带来限制,增加了资源使用者的不便;此外如何合理的编号也是一件让人头疼的事。如有进程违反了规定也会造成死锁。

3. 死锁避免

  上述几种死锁预防策略增加了较强的限制条件,从而实现较为简单,但严重影响了系统性能,所以在实际应用中这几种方法使用少之又少,更好地方法是死锁避免。

  死锁避免的基本思想:系统对进程发出的每个系统能满足的资源申请进行动态检测,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,反之予以分配。

1. 安全与不安全状态

  由于避免死锁策略中允许进程动态地申请资源,所以系统要提供某种方法,在分配资源前,先分析资源分配的安全性。当估计到可能有死锁发生时及时设法避免。   如果操作系统能保证所有进程能在有限时间内获得需要的全部资源,则称系统处于“安全状态”,否则就是不安全的。   所谓的安全状态是指,如果系统的所有进程构成了一个安全序列,则系统处于安全状态。那么什么又是安全序列呢?如果一个进程序列: p1,p2,...,pn p 1 , p 2 , . . . , p n ,对于其中每个进程 pi(1



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有