`
talentluke
  • 浏览: 600849 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

死锁的原因 预防 和避免

 
阅读更多

一、构成死锁的必要条件是什么,如何检测死锁,解除死锁

操作系统中的死锁被定义为系统中两个或者多个进程无限期
地等待永远不会发生的条件,系统处于停滞状态,这就是死锁。
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。

3.银行家算法的思路: 
1),进程一开始向系统提出最大需求量. 
2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量. 
3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的
 剩余资源量,若不超出,则分配,否则等待.

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

死锁避免和死锁预防的区别在于,死锁预防是设法至少破坏产生死锁的四个必要条件之一,严格的防止死锁的出现,而死锁避免则不那么严格的限制产生死锁的必要条件的存在,因为即使死锁的必要条件存在,也不一定发生死锁.死锁避免是在系统运行过程中注意避免死锁的最终发生.

预防死锁 

该策略旨在创造条件预防死锁。对7.3节中讨论的Coffman4个条件的研究表明如果任一条件不满足,就不会出现死锁。Havender最先推荐使用这种策略。本小节将讨论实现该策略的方法以及实现中遇到的问题。

1. 互斥条件

如果系统中的资源可以由多个进程共享,那么就永远不会发生死锁。然而,这种共享不切实际。例如,磁带机、绘图仪或打印机就不能在多个进程之间共享使用。这其中最好的情形就是对打印机使用假脱机技术,即所有打印请求都由一个单独的程序处理。这样可以消除共享请求。当假脱机程序占用打印机时,其他任何进程都不能发送打印机请求,也不能管理打印机。他们可以做的工作就是将数据提交给假脱机程序,以便以后打印。

不幸的是,并非所有的设备都可以使用相同的技术。而且,死锁涉及的除外部I/O设备之外,还包括各种操作系统表、磁盘区和记录等大量资源。此外,不是所有资源都可以采用假脱机这样简单的应用程序进行处理。因此,很难保证避免该条件。

2. 等待条件

禁止进程在已经占用某些资源时等待更多资源,这样可以预防死锁。

这要求进程一开始就声明它期望使用的全部资源。操作系统会检查这些资源是否全部可用,只有可用的时候,才允许该进程开始执行。这种情况下,显然操作系统在分配完资源之后必须更新自己的空闲及可用资源链表。该解决方案很吸引人,但显而易见的是,它不能达到预期效果而且很浪费。如果进程为了更新某些文件需要用8个小时时间,而最后只使用磁带机一分钟以更新控制记录,在整个过程中磁带机都要分配给那个进程。因此,磁带机会空闲8个小时。这期间没有其他的进程可以使用该磁带机。

可以采用该方法的另一种形式。操作系统必须让请求某些资源的进程先放弃已经占用的资源,然后再尝试请求所有要用的资源。如果尝试成功,被放弃的资源才可以重新分配给该进程,这样该进程才可以继续运行。如果失败,被放弃的资源恢复空闲,而进程则必须一直等到那些资源可用为止。每次检查后,进程都放弃已占用的资源,这样就永远不会出现死锁。

该方案也存在很多问题。当进程放弃现有资源之后,也许会有其他一些进程长时间占用一个或多个资源。很容易想象,该策略会导致长时间的延迟、无限期的推迟以及其他不可预测的问题。同样地,这种技术可用于表、信号量等共享资源,但不适用于打印机和磁带机这类资源。想象一下,某个进程在打印到一半的时候放弃使用打印机,而某个其他进程占用该打印机将产生什么样的后果。

3. 非抢占条件

确保不满足"非抢占"条件很困难。如果允许将资源分配给可以强制夺取该资源的进程,也许可以解决死锁问题,但会出现更糟糕的问题。从一个只处理了部分记录的进程强制性地夺走磁带机--因为其他进程请求使用该资源,由此带来的加载/卸载、定位等问题一定令人无法接受。对打印机而言,情形更糟糕。

4. 循环等待条件

显然,克服前三个条件很难,这样就只留下了最后一个条件。如果阻止了循环等待条件,那么也可以阻止死锁。

一种方法是强制进程每次只能占用一种资源。如果它希望使用另一种资源,就必须先放弃占用的资源,然后再请求其他资源。显然,该方法也存在第(3)点中提到的相同缺点。如果进程P占用R1,并且想要使用R2,它就必须先放弃R1,因此另一个进程P2可以获取资源R1。这时将再次出现在进程P1处理了记录的一半之后,将磁带机分配给P2的问题。因此,该解决方案也不能令人满意。

解决该问题的一个更好的方法就是对所有的资源编号,如图7-10所示。

图7-10  对资源的编号

编号

资源名称

0

磁带机

1

打印机

2

绘图仪

3

读卡机

4

卡片穿孔机

现在可以采用一个简单的规则处理循环等待条件。任何进程都必须在执行期间按照编号递增的顺序请求所需的资源。这里再次假定一开始就能获取所有资源的解决方案并不存在。例如,如果进程P1在执行期间的某个时刻需要使用打印机和绘图仪,它必须先请求打印机,然后是绘图仪,因为1<2。

分享到:
评论

相关推荐

    实验二:死锁的检测和预防.doc

    为了避免死锁的发生,需要对进程的资源申请和分配进行检测和预防。本实验的目的是进一步了解进程的并发执行,并加强对进程死锁的理解。通过银行家算法,可以模拟进程组的执行情况,检测死锁的发生,并预防死锁的发生...

    分布式计算系统中死锁的预防与检测.pdf

    为了解决死锁问题,通常可以采用以下几种策略:死锁预防、死锁避免、死锁检测和死锁恢复。死锁预防通过破坏死锁的四个必要条件中的至少一个来预防死锁的发生。例如,通过破坏互斥条件,可以将资源设计成可以共享的;...

    银行家算法死锁的避免.doc

    【银行家算法】是操作系统中用于预防死锁的一种策略,由艾兹格·迪杰斯特拉提出。在银行家算法中,系统模拟银行贷款的过程来管理资源,确保系统始终能够避免死锁的发生。该算法的核心思想是预先分配资源,但不超过...

    死锁避免——银行家算法

    这个程序主要通过模拟系统死锁避免的实现,使用银行家算法来避免死锁加深对死锁避免,系统安全状态等的理解。 (1)输入1执行算法,输入2退出程序,其他输入无效。算法要用到的资源种类有10种,每种资源的数目为1~10...

    模拟银行家算法实现死锁避免

    这个算法由艾兹格·迪杰斯特拉提出,它借鉴了银行贷款系统的概念,通过对资源分配进行预检查,来避免系统进入死锁状态。 死锁是指两个或多个并发进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力...

    操作系统中有关预防死锁的问题

    死锁预防侧重于确保死锁的必要条件不成立,而死锁避免则是在系统运行时动态监测资源分配情况,以避免可能的死锁状态。前者更倾向于规则制定,后者则依赖于实时分析和决策。 ### 结论 在操作系统的资源管理中,死锁...

    有关于哲学家进餐死锁问题及预防的课程设计报告

    - **用户界面**: 可以采用简单的文本界面或者图形界面(如WPF)来展示哲学家的状态(思考、饥饿、进食)和死锁预防/恢复的情况。 - **核心模块**: - **进程模块**: 创建多个线程模拟哲学家的思考和进食过程。 - **...

    谈操作系统中死锁的避免

    处理死锁的基本策略包括预防、避免以及检测与恢复。其中,避免死锁是一种动态策略,它不对进程申请资源的行为进行严格限制,而是通过对每次资源申请进行检查来确保系统安全。 #### 四、银行家算法详解 **4.1 原理*...

    java多线程死锁预防机制研究

    ### Java多线程死锁预防机制研究 #### 摘要 随着计算机技术的发展和软件系统日益复杂的背景下,多线程编程技术得到了广泛的应用。多线程能够显著提高程序的执行效率,但也随之带来了诸如死锁等问题。死锁是指两个或...

    银行家算法-模拟预防和避免死锁的处理过程

    《银行家算法:模拟预防和避免死锁的处理过程》 银行家算法是操作系统中用于预防和避免死锁的一种经典算法,由艾兹格·迪杰斯特拉在1965年提出。它以银行贷款审批流程为模型,通过预先分配资源并确保系统能安全地...

    死锁的预防检车和解除 银行家算法

    总结来说,死锁的预防、检测和解除是操作系统设计中的重要组成部分,银行家算法作为一种有效的避免策略,通过预先分配和动态管理资源,能够在保证系统安全的同时,提高资源利用率。理解和应用这些概念对于构建高效、...

    操作系统实验三 预防进程死锁的银行家算法

    实验三"预防进程死锁的银行家算法"旨在让学生理解和实践如何避免死锁的发生。在这个实验中,会模拟一个银行系统,其中的资源分配和请求类似于操作系统中的进程对资源的需求。通过模拟银行贷款的过程,可以形象地理解...

    操作系统避免死锁的银行家算法课程设计

    死锁的解决方案可以分为两类:死锁预防和死锁避免。死锁预防是指在系统设计时确定资源分配算法,保证不发生死锁。死锁避免是指在系统运行时,避免死锁的发生。 在死锁预防中,我们讨论了破坏产生死锁的四个必要条件...

    操作系统 模拟实现死锁避免实验报告

    通过编程实现银行家算法,检验系统状态的安全性,掌握如何预防死锁的发生,为未来在实际操作系统环境中解决此类问题奠定理论与实践基础。 #### 实验内容 本实验具体包括以下几个部分: 1. **资源类型与进程数量的...

    死锁预防避免检测处理

    银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现...

    SQL Server死锁产生的原因及解决办法

    理解死锁的原因和解决策略对于优化数据库性能至关重要。 首先,我们要深入理解死锁的基本原理。死锁的根本原因是资源竞争。在SQL Server中,当两个或更多事务按不同顺序请求并持有资源时,就可能发生死锁。举个例子...

    2.4_3_死锁的处理策略—避免死锁.pdf

    为了解决或避免死锁的发生,操作系统采取了多种策略,通常可以归纳为以下四种:死锁预防、死锁避免、死锁检测和恢复以及死锁忽略。 首先,死锁预防是指通过破坏产生死锁的四个必要条件中的至少一个来预防死锁的发生...

    死锁的检测和预防实验报告

    实验旨在帮助学生深入理解并发执行的进程以及死锁的概念,并通过实际操作,掌握银行家算法在死锁预防中的应用。 【实验目的】 1. 增进对并发进程执行的理解。 2. 加深对进程死锁现象的认识。 3. 学习并运用银行家...

Global site tag (gtag.js) - Google Analytics