进程管理之死锁

进程管理(5):死锁 死锁的基本概念 为什么会发生死锁? 其实在前面进程管理的总结中,已经多次出现了死锁的概念,比如在信号量机制中,如果信号量使用不慎,就会出现死锁。实际上,在现实生活中,死锁现象也经常会出现,比如两个胖子过独木桥,比如哲学家就餐问题。比如我去清华面试,面试老师和蔼地让我陈述一下自己的科研经历,我说<我很厉害的,真的!你们先答应录我我就跟你们讲我的科研经历>,老师说<那不行,你得先... 阅读详情

前面两篇博客

1.进程同步之临界区域问题及Peterson算法

2.进程同步之信号量机制(pv操作)及三个经典同步问题

介绍了进程管理中进程同步的诸多问题,下面为大家详细解读进程管理中死锁的问题及其解决方案。


1.什么是死锁?

在多道程序设计环境下,多个进程可能竞争一定数量的资源。一个进程申请资源,如果资源不可用,那么进入等待状态。如果所申请的资源被其他等待进程占有,那么该等待进程有可能无法改变状态,这种情况称为死锁(deadlock)

设系统有一台打印机(R1),一台读卡机(R2),两进程共享这两台设备。
        用信号量S1表示R1是否可用,初值为1;
        用信号量S2表示R2是否可用,初值为1;
                             
这两个进程在并发执行过程中,可能会发生如下的情况。

即P1占用R1,P2占用R2,同时P1和P2又分别申请R2和R1的资源。于是造成了死锁。

大家可以思考一下,如何修改A、B进程才不会发生死锁。带着这个问题我们往下看。


2.产生死锁的原因

  • 竞争系统资源
如循环图所示:
系统中只有一台打印机R1和一台读卡机R2,可供进程P1和P2共享。R1、R2已经分别分配给P1、P2使用,当P1、P2在不释放资源R1、R2而又同时分别申请R2、R1(如图),形成环路,这样会产生死锁。

  • 进程的推进不当
如前面的例子可知他只是可能发生死锁,也就是说进程的推进不同会导致不同的结果。

3.产生死锁的必要条件

互斥条件

进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。

占有并等待条件

当进程因请求资源而阻塞时,对已获得的资源保持不放。

非抢占条件

进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。

循环等待条件

在发生死锁时,必然存在一个进程--资源的环形链。


4.解决死锁的基本方法

1.预防死锁

前面我们降到了死锁的必要条件,那么只要一个条件不满足的话,就不会发生死锁了。所以我们可以从必要条件的角度来预防死锁。
a.互斥条件
对于非共享资源,必须有互斥条件。而共享资源是不会涉及死锁。所以通常不能通过否定互斥条件来预防死锁:有些资源本身是非共享的。
b.占有并等待
为了确保该条件不在系统内出现,必须保证:当一个进程申请一个资源时,它不能占有其他资源。
资源一次性分配 可以解决这个问题。实现这一分配有两种协议
1.每个进程在执行前申请并获得所有资源。
2.允许进程在没有资源时才可申请资源。

两种协议的缺点:
1.资源利用率不高
2.可能发生饥饿(磁带用到一般被抢了)
c.非抢占
允许当前进程被其他进程抢过去。
缺点:可能发生饥饿(磁带用到一般被抢了)
d.循环等待条件
确保此条件不成立的方法就是对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。
实现方法:资源有序分配法
遵循两种协议:
1.每个进程只按递增顺序申请资源。(第一次可以申请多个,但之后申请编号必须比前面大)
2.进程申请编号比拥有资源编号小时必须先释放大编号资源。
             

这样进程如果需要磁带机和绘图机,那进程必须先申请磁带机,再申请绘图机。如果再想申请打印机,则必须先释放绘图机。

2.避免死锁

通过前面介绍想必大家也看到了在预防死锁的过程中会严重系统性能。因此在避免死锁中我们不得不施加较弱的限制,从而获得比较满意的性能。

由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算 资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。
最具代表性的避免死锁的算法是银行家算法。由于银行家算法比较复杂,我将在下篇博客中详细解读。




一般来说,由于操作系统有并发,共享以及随机性等特点,通过预防和避免的手段达到排除死锁的目的是很困难的。这需要较大的系统开销,而且不能充分利用资源。
为此,一种简便的方法是系统为进程分配资源时,不采取任何限制性措施,但是提供了检测和解脱死锁的手段:能发现死锁并从死锁状态中恢复出来。
因此,在实际的操作系统中往往采用死锁的检测与恢复方法来排除死锁。 死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。

1.一个用来检查系统状态从而确定是否出现了死锁算法。即死锁检测
2.一个用来从死锁状态中恢复的算法。即恢复算法

3.死锁检测

首先可以通过画分配图来判断是否发生了死锁。但如何用算法来判断呢?

死锁检测算法。算法使用的数据结构是如下这些:      

       占有矩阵A:n*m阶,其中n表示并发进程的个数,m表示系统的各类资源的个数,这个矩阵记录了每一个进程当前占有各个资源类中资源的个数。
       申请矩阵R:n*m阶,其中n表示并发进程的个数,m表示系统的各类资源的个数,这个矩阵记录了每一个进程当前要完成工作需要申请的各个资源类中资源的个数。
       空闲向量T:记录当前m个资源类中空闲资源的个数。
       完成向量F:布尔型向量值为真(true)或假(false),记录当前n个并发进程能否进行完。为真即能进行完,为假则不能进行完。
       临时向量W:开始时W:=T。

算法步骤:
     (1)W:=T,
     对于所有的i=1,2,...,n,
     如果A[i]=0,则F[i]:=true;否则,F[i]:=false
     (2)找满足下面条件的下标i:
     F[i]:=false并且R[i]〈=W
     如果不存在满足上面的条件i,则转到步骤(4)。
     (3)W:=W+A[i]
     F[i]:=true
     转到步骤(2)
     (4)如果存在i,F[i]:=false,则系统处于死锁状态,且Pi进程参与了死锁。什麽时候进行死锁的检测取决于死锁发生的频率。如果死锁发生的频率高,那麽死锁检测的频率也要相应提高,这样一方面可以提高系统资源的利用率,一方面可以避免更多的进程卷入死锁。如果进程申请资源不能满足就立刻进行检测,那麽每当死锁形成时即能被发现,这和死锁避免的算法相近,只是系统的开销较大。为了减小死锁检测带来的系统开销,一般采取每隔一段时间进行一次死锁检测,或者在CPU的利用率降低到某一数值时,进行死锁的检测。 


4.死锁的恢复  

  一旦在死锁检测时发现了死锁,就要消除死锁,使系统从死锁状态中恢复过来。  

    (1)最简单,最常用的方法就是进行系统的重新启动,不过这种方法代价很大,它意味着在这之前所有的进程已经完成的计算工作都将付之东流,包括参与死锁的那些进程,以及未参与死锁的进程。

    (2)撤消进程,剥夺资源。终止参与死锁的进程,收回它们占有的资源,从而解除死锁。这时又分两种情况:一次性撤消参与死锁的全部进程,剥夺全部资源;或者逐步撤消参与死锁的进程,逐步收回死锁进程占有的资源。一般来说,选择逐步撤消的进程时要按照一定的原则进行,目的是撤消那些代价最小的进程,比如按进程的优先级确定进程的代价;考虑进程运行时的代价和与此进程相关的外部作业的代价等因素。 

  此外,还有进程回退策略,即让参与死锁的进程回退到没有发生死锁前某一点处,并由此点处继续执行,以求再次执行时不再发生死锁。虽然这是个较理想的办法,但是操作起来系统开销极大,要有堆栈这样的机构记录进程的每一步变化,以便今后的回退,有时这是无法做到的。



转载请注明出处:http://blog.csdn.net/speedme


10 操作系统第二章 进程管理 死锁死锁的处理策略 银行家算法 文章目录1 死锁1.1 死锁定义1.2 死锁、饥饿、死循环的区别1.3 死锁产生的必要条件1.4 什么时候会发生死锁1.5 死锁的处理策略1.6 死锁的概念小结2 死锁预防2.1 破坏互斥条件2.2 破坏不剥夺条件2.3 破坏请求和保持条件2.4 破坏循环等待条件2.5 预防死锁小结3 死锁避免3.1 安全序列3.2 银行家算法3.2.1 手动实现银行家算法3.2.2 代码实现银行家算法4 死锁的检测和解除4.1 死锁的检测 1 死锁 1.1 死锁定义 产生条件:每个人都占有一个资源,同时又在等待另 阅读详情

相关推荐

基于UC3842的反激电源的全面深入解析与MATLAB仿真

内置电流检测,可实现电流模式控制,提高系统的动态响应性。多种保护功能,如欠压锁定、过温保护、短路保护等,确保系统的安全可靠运行。宽工作电压范围,适应不同的电源设计需求。简单的外部元件配置,易于实现。UC3842的典型应用包括开关电源、DC-DC转换器和反激式电源等,其稳定性和可靠性在实际应用中得到了广泛验证。

qq_38334677的博客 1048

操作系统——死锁(银行家算法)

银行家算法实例

樱缘之梦 5422

从 ABAP 后端到 AEX,Local Integration Engine 下的 Business System 配置全景

本文围绕SAP PI AEX配置中ABAP后端系统与AEX的连接问题,梳理了关键概念和技术脉络。重点指出基于ABAP 6.20及更高版本的业务系统内置了本地集成引擎(Local Integration Engine),负责与AEX的消息交互。配置要点包括:1)在SM59中创建HTTP类型RFC目标连接AEX;2)配置SAP_PROXY_ESR供设计时代理生成;3)通过SXMB_ADM设置业务系统角色为应用系统;4)确保SLD注册和SICF服务激活。文章特别强调运行时代理消息传递与设计时代理生成的区分,以及H

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 59

操作系统之死锁

在看死锁之前,先来看一张表格,这张表格对死锁,饥饿和死循环做了共同点和不同点的概述。 共同点 区别 死锁 都是进程无法顺利向前推进的现象(故意设计的死循环除外) 死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁进程一定处于阻塞态。 饥饿 可能只有一个进程发生饥饿。发生饥饿的进程既可能是阻塞态(如长期得不到需要的I/O设备),也可能是就绪态(长期得不到处理机) 死循环 可能只有一个进.

拿头去拼啊 938

操作系统概念学习笔记 14 死锁(二)

操作系统概念学习笔记 14 死锁(二) 死锁避免(deadlock-avoidance) 在上篇博客中讨论的死锁预防问题中,通过限制资源申请的方法预防死锁。这种限制保证4个必要条件之一不会发生,保证不会发生死锁,然而通过这种方式预防死锁的副作用是低设备使用率和系统吞吐率。 避免死锁的另外一种方法是获得以后如何申请资源的附加信息...

weixin_34368949的博客 513

操作系统练习题(2)第三章存储器管理

第三章 处理机调度与死锁 本章学习要点 【1】掌握调度的类型与方式 【2】掌握常用的进程调度算法 【3】掌握死锁的相关知识 【4】深入领会银行家算法 本章学习重点和难点 【1】进程调度算法 【2】银行家算法 习题分析 一.判断改错题(判断由下划线标明的关键词的叙述是否正确,正确的打√,错误的打×并改正。) 1.产生死锁的原因之一是对计算机操作不当,造成计算机死机。( ) 2.死锁产生,必须要满足四个必要条件,所以,为避免死锁产生,主要注意如何不让这四个必要条件成立,并打破循环等待资源的环路。(

VAN 3616

操作系统第三章——处理机调度与死锁

进程P1和P2分别申请完R1和R2,当P1再去申请R2时,P2未将R2资源释放,P1处于等待状态,因此,P1和P2都申请不到资源而造成死锁。更新:Need = Need-Request(3,2,0-1,2,0=2,0,0)更新:Need = Need-Request(6,6,2-1,1,0=5,5,2)(3)在上面基础上,P3请求(1,1,0),则Request=(1,1,0),(2)若这时P4请求资源(1,2,0),是否实施资源分配?(2)P4请求(1,2,0),则Request=(1,2,0),

qq_63278226的博客 2191

进程管理-死锁问题

软件设计师考试题型,操作系统-进程管理-死锁

YeYeCcc的博客 670

(二)进程管理——死锁

操作系统学习笔记 思维导图 第二章 进程管理 第四部分 死锁

小鹅仔的博客 158

2.1.4操作系统-进程管理死锁死锁的产生条件、死锁资源数计算

破坏保持和等待,B等待一会儿,没有资源,就释放调自己占用的资源🍓,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。破坏互斥条件,资源不再是不可共享的,也就是说B的🍓可以给A用,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。破坏不剥夺,A去抢B的🍓,抢到后,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。假设资源是🍍🍍🍓,现在有两个进程A、B,进程A需要🍍🍍🍓,进程B需要🍍🍓,现在状态是A🍍🍍,B🍓。

郝开的博客 1305

进程管理(四)死锁

死锁是指两个或多个进程在执行过程中,由于竞争资源而造成的一种互相等待的现象,导致它们都无法继续执行下去的情况。当进程处于死锁状态时,系统中的所有进程都无法继续执行,形成了一个僵局。eg:假设有个狭窄的单行道,只允许左右单向通过。此时,左右两边各有一辆车,相向而行,这样就会发生冲突。左边车要向右走出单行道,但是右边有辆车卡死了位置,使其无法通过,。同理右边车也无法从左边驶出。

qq_44348970的博客 1060

操作系统之进程管理(3)——进程死锁

进程管理进程死锁 进程管理(Course 4) 一、死锁的概念 1、死锁定义 【死锁】是指各并发进程互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源(排除管理干预)。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。(如下图) 一般地,可以把死锁描述为:有并发进程P1,P2,……,Pn,它们共享资源R1,R2,……,Rm(...

weixin_30565327的博客 218

OS实验:进程管理死锁

一. 实验目的 理解进程/线程的概念和应用编程过程 理解进程/线程的同步机制和应用编程 二. 实验内容 三. 实验过程 3.1 在Linux 下创建一对父子进程 分别输出各自的进程号,父进程号和特别的提示字符串信息 让父进程提前结束或后结束,观察子进程的父进程ID 使用PS命令查看进程列表信息,核对进程号,父进程号 创建一个c文件 使用命令vim fork.c,输入以下代码 #include <stdio.h> #include <unistd.h> #include &lt

WWWzq_的博客 1320

RK-04进程管理,PV操作,死锁,操作系统

RK-04进程管理,PV操作,死锁,操作系统

shroud096的博客 464

《计算机操作系统》| 第二章 进程管理死锁) 知识梳理

目录 2.4_1_死锁的概念 2.4_2_死锁的处理策略—预防死锁 2.4_3_死锁的处理策略—避免死锁 2.4_4_死锁的处理策略—死锁的检测与解除 2.4_1_死锁的概念 2.4_2_死锁的处理策略—预防死锁 破坏四大条件 2.4_3_死锁的处理策略—避免死锁 2.4_4_死锁的处理策略—死锁的检测与解除 ...

12 26 25 的博客 2392

进程管理——死锁检测和解除

这里的“代价”通常综合考虑多个因素:进程的优先级(优先终止低优先级进程,避免高优先级任务丢失)、进程已运行的时间(优先终止刚启动的进程,减少已完成工作的损失)、进程已占用的资源数量(优先终止占用资源少的进程,以最小资源释放打破死锁)、进程还需运行的时间(优先终止还需运行久的进程,减少后续资源占用)。:被剥夺资源进程会暂时陷入“资源不足”的等待状态,但不会被终止。例如,死锁集合中有P₁、P₂、P₃三个进程,P₁占用R₁,P₂占用R₂,P₃占用R₃,且P₁请求R₂、P₂请求R₃、P₃请求R₁。

分享人工智能领域原创文章 732

【操作系统】进程管理(六)—— 死锁

为什么会产生死锁? 产生死锁的条件; 解决死锁的方法。在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。发生死锁后若无外力干涉,这些进程都将无法向前推进。死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。死循环:某进程执行过程中一直跳不出某个循环

haoweixl的博客 1766

基于热电偶的测温系统设计 毕业设计完整版.docx

基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx基于热电偶的测温系统设计 毕业设计完整版.docx

上一篇: 进程同步之信号量机制(pv操作)及三个经典同步问题
下一篇: 避免死锁之银行家算法
SpeedMe
博客等级 码龄15年 779粉丝 142原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值