【操作系统】死锁总结

【是什么】

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。若无外力作用,它们将无法推进下去。

【怎么形成的】(傻傻的进程)

要了解形成过程,需要明白以下前提:(以进程为中心进行的阐述)

①  进程只有有了资源才能执行,就像人必须吃饭才能生存下去。

②  操作系统是用来分配资源的,分配的原则是进程申请,只要有就给。这类似“被啃老”的父母的行为。

③  进程的上一级是作业。N个进程组成作业,也就是说要想完成一个作业,要将其分块(分进程)进行。比如要想完成今天的homework,分别需要完成语文,数学,英语。这“homework”就是作业,“语数外”就是进程。

正文

现有T1、T2两个进程和R1、 R2两个资源,两个进程要想完成,均必须使用R1R2两个资源。

正常情况下:

T1用完R1,R2,自身完成,释放资源。T2用完R1,R2,自身完成,释放资源。

非正常情况:

T1执行,需要R1,申请成功。紧接着T2执行,需要R2,申请成功。

T1执行到一半,需要R1了,再申请,操作系统也没此资源了,所以T1只有等待。同理,T2在等待着R2资源。

进程哪有人类这么聪明,它可不知道“舍得”的道理,所以就会一直傻等着操作系统给它分配指定资源。

等着等着,如果无外界干预,就会等到地老天荒

这种现象就叫做“死锁”。

 

由上,我们可总结出产生死锁的必要条件

①  互斥地使用资源

②  占有且等待资源

③  非抢夺式分配

④  循环等待资源

挺容易理解,在这就不进一步解释了。需要指出一点的是:如果产生了死锁,肯定4个条件都被满足了。可如果这4个条件被满足了,不一定会产生死锁。

【怎么解决】

形成了死锁,进程就搁置了,作业也就完成不了了。怎么解决呢?

防止

防止防止,在根源上制止。也就是说,采取了这些策略,死锁肯定不会发生

①  静态分配资源

在进程开始之初,需申请完其所需的所有资源。系统如果能满足,就给了进程让其执行。如果不能满足,进程等待。像上栗中,T1如果要执行,需要把R1R2资源都申请到,然后执行。此时,即使T2要执行,因没有资源,也需等待。

②  按序分配资源

将资源编号,规定进程申请资源时必须从小开始。像上栗中,先将R1R2分别编号为1、2。T1先申请了1号去执行了,此时,T2要想执行,必须也是先申请1号,结果没有,所以T2必须等待。这样,等T1需要2号资源时,也能成功申请到。

③  剥夺式分配资源

顾名思义,如果进程T1和T2之间能互相抢,弱肉强食,也能让进程继续下去。

避免

可以明显感觉到,用“防止”策略时,对资源的利用率下降了。所以我们再找找别的方法:

避免,就是还按以前资源分配的方式,等估计可能会发生死锁时,采取策略

其可采取“银行家算法”。以一个例题为例解释。


此时,系统只有2个资源可被调用了,可把资源给了进程2,满足了其最大需求量,然后进程2完成,同时释放6个资源。然后进程1和进程3依次进行。

检测


“死锁检测”程序定时检查这两张表,如上图中就发生了死锁。P1在等P2释放r3,P2在等P3释放r2,P3在等P1释放r5。形成了循环,形成了死锁。

【小结】

死锁就是进程像毛毛虫围圈,形成了死循环。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的熊kfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值