死锁

1.死锁的定义:

         在多道程序系统中, 由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的并发执行也带来了新的问题------死锁。

  所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

2.死锁产生的原因:

        (1)、系统资源的竞争

                      通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因竞争资源而陷入僵局,如磁带机、打印机等。只有

                对不可剥夺的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。

        (2)、进程推进顺序非法

                      进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程P1 、 P2分别保持了 资源 R1 、R2 ,而进程P1申请资源R2  ,进程

                P2申请资源R1时,两者都会因为所需要资源被占用而阻塞。

                      信号量使用不当也会造成死锁。进程间彼此相互等待对方发送来的消息,结果也会使得这些进程间无法继续向前推进。例如,进程A 等待进程B 发的消息,

               进程B 又等待进程 A发的消息,可以看出进程 A 和 B不是因竞争同一资源,而是在等待对方的资源导致死锁。

3.死锁产生的必要条件: (产生死锁必须同时满足一下四个条件,只要其中任何一个不成立,死锁就不会发生)

          (1)、互斥条件:

                          进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占用。此时若有其他进程请求该资源,则请求进程

                      只能等待。

          (2)、不可剥夺条件:

                          进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能获得该资源的进程自己来释放(只能是主动释放)。

          (3)、请求和保持条件:

                           进程已经保持了至少一个资源,但又提出了新的请求资源,而该资源已被其他进程占用,此时请求进程被阻塞,但对自己已获得的资源保持不放。

          (4)、循环等待条件:

                            存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中的下一个进程请求。即存在一个处于等待状态的进程集合{P1,P2,...,Pn},

                          其中Pi 等待的资源被 P(i+1) 占用(i = 0,1,...,n-1) ,Pn 等待的资源被 P0 占用,如下图所示,

                           直观上看,循环等待条件似乎和死锁定义一样,其实不然。按死锁定义构成等待环所要求的条件更严,它要求Pi 等待的资源必须由 P(i+1)来满足,

               而循环等待条件则无此限制。例如,系统中有两台输出设备,P0占有一台,PK 占有另一台,且 K 不属于集合 {0,1,2,...,n}。Pn 等一个输出设备,它可以

               从P0 获得,也可能从 PK 获得。因此,虽然 Pn 、P0 和其他一些进程形成了循环等待圈,但 PK 不在圈内,若 PK 释放了输出设备,则可打破循环等待,

               如下图所示,因此循环等待只能是死锁的必要条件

                                                  

                   资源分配图含圈而系统又不一定有死锁的原因是同类资源数大于1。但是若系统中每类资源都只有一个资源,则资源分配图就变成了出现死锁的充分

         必要条件

                  要注意区分不可剥夺条件与请求和保持条件


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小达人Fighting

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

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

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

打赏作者

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

抵扣说明:

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

余额充值