死锁的基本概念

一、死锁的基本概念

1、死锁的定义:一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到资源,这种现象叫做进程死锁,这一组进程就被称为死锁进程

2、如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃

从死锁的定义中可以得到几个推论:

1、参与死锁的所有进程都在等待资源(处于等待状态、阻塞状态)
2、参与死锁的进程是当前系统中所有进程的子集(是部分进程首先发生的死锁现象,如果有更多的新的进程进入到死锁中,那么这个子集就会一直扩大,就会导致系统的崩溃)

二、死锁的现象

在这里插入图片描述
如果没有交通控制,随意让这些车往前走的话,就有可能出现这样的现象
在这里插入图片描述
大家都在等待其他车给自己让位置,这就形成了死锁现象。

三、为什么会产生死锁

1、资源数量有限、锁和信号量错误使用

2、从资源的使用方式来看:
“申请–分配–使用–释放”模式

可重用资源:可被多个进程多次使用
(1)可抢占资源(处理器CPU)与不可抢占资源(打印机)
(2)处理器、I/O部件、内存、文件、数据库、信号量
可消耗资源:只可以使用一次、可创建和销毁的资源
(1)信号、中断、消息

四、进程竞争可重用资源

第一个例子:
在这里插入图片描述
进程Q可能要先申请一个磁带,然后使用的时候先上锁,不受别的进程的干扰,然后又去申请一个磁盘文件,有可能是把磁盘文件读到磁带上,或者是把磁带上的文件读到磁盘上,一样的要先上锁,然后执行相应的过程,比如拷贝数据的操作,最后用完资源就就锁这样一个过程。那么如果另外一个进程也要使用这种资源,当进程P拿到了磁盘这个资源,而进程Q拿到了磁带这个资源,而进程P又想要磁带,进程Q又想要磁盘,那么实际上这两个进程就是在互相等待,就导致了死锁的发生。

第二个例子:以内存分配为例
在这里插入图片描述
首先可分配的内存就一共200KB,对于P1进程,他要先申请80K,在申请60K。而对于P2进程,他要先申请70K,在申请80K。那么两个进程所需要资源的总和超过了可分配的资源数量,如果P1申请到了80K,P2申请到了70K,他们要在申请剩余他们要的资源,就都不能满足,因为系统的可以资源已经没了,所以P1、P2就要等待,如果系统中没有剩余的资源了,那么这两个进程就处于死锁了。

五、进程竞争可消耗资源

在这里插入图片描述
首先,P1要做的事是从P2得到一个消息,然后再给P2发一个信息,而P2是要从P1得到一个消息,然后给P1发一个信息,如果代码是这个一个编写过程,那么P1没有得到P2发过来的消息的时候,P1就等待,P2没有得到P1发过来的消息的时候,P2也等待,于是他们两就互相等待,都等对方给自己发消息,就产生了死锁现象。

六、活锁和饥饿

在这里插入图片描述
在一个并发系统中,因为两个进程是并发执行的,如果恰好出现了这样一种情况,PA已经拿到了资源1的使用权,然后他被切换,下面是PB上CPU执行,他获取了资源2的使用权,之后,不管是PA执行还是PB执行,资源1或资源2都会导致这个进程在CPU上盲等待,Peterson算法是一个盲等待的算法,就是如果PA上CPU了,他想获得资源2,他就会不断的探寻资源2是不是能获得,PB也是一样。这两个进程的特点是都能上到CPU执行,但都没有向前进展,

活锁总结:
(1)先加锁(获得这个资源就加锁)
(2)在轮询(想要获得其他资源的锁,就要去轮询)
—>他们的状态就是每个进程可以上CPU,时间片到了就下CPU,但是无进展也没有阻塞

**饥饿:**一个进程所申请的资源总是被优先于自己的其他进程占用,而长时间处于不能被调度执行的状态(长时间处于就绪或者阻塞状态),这种现象叫做“饥饿”。即使是由资源分配的策略决定的。

七、产生死锁的必要条件

1、互斥使用(资源独占):
一个资源每次只能给一个进程使用(打印机)

2、占有且等待(请求和保持,部分分配)
进程在申请新的资源的同时保持对原有资源的占有。即一个进程请求资源得不到满足而阻塞自己时,并不释放自己已经分配得到的资源

3、不可抢占(不可剥夺)
进程所获得的资源在未使用完毕之前不能被其他进程 抢占,而只能由占有该资源的进程自己释放

4、循环等待
存在一个进程等待队列{P1,P2,…Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。

小结:当出现死锁时,这四个条件都成立,其中任何一个条件不成立,就一定没有死锁发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值