操作系统------死锁产生的必要条件

        现有一双筷子每支标为1,2(分开放)。有A,B两人竞争筷子来吃饭。当A拿到1后,要去拿2,此时却发现B已经拿到了2。而B要拿1时却发现它已经被A拿到。双方都希望对方能够放弃他所拥用的的一支筷子。而不愿放弃自己所拥有的。此时,二者便陷入了僵持状态,从而形成了死锁。

计算机中死锁的产生

        计算机中的资源通常分为两类:一类叫可重用资源,一类叫可消耗资源

可重用资源

        一次只能供给一个进程安全的使用,并不会因为使用而耗尽。当一个进程使用完后,该资源就被归还。然后可以再供给其他进程或线程使用。例如内存,外设,处理器等资源

可消耗资源

        指可以被创建和销毁的资源。例如在生产者消费者模型中,生产者生产产品创建了资源,消费者取走产品从而销毁了资源。常见的有:信号,消息等资源。

竞争可重用资源产生死锁

        例如现在内存大小共有4G。进程1总共需要3G,进程2总共需要3.5G。进程1首先申请了2G内存,进程2首先申请了1.5G内存,此时内存总量还剩余0.5G。

        当进程1想要在申请剩余的1G时,内存资源不够了。进程2想要在申请2G时,内存当然也不够了。此时,进程1希望进程2释放它所拥有的1.5G内存。进程2希望进程1释放它所拥有的2G内存。双方都占着自己所拥有的资源等待着对方释放资源,此时二者便陷入了死锁状态。

竞争可消耗资源产生死锁

        进程1和进程2之间通过消息进行通信。

(1)进程1发送消息m1给进程2

(2)进程2发送消息m2给进程1

(3)进程1接收消息m2

(4)进程2接收消息m1

        如果按上述的(1)~(4)顺序执行,二者之间便可以进行正常通信。但是如果执行顺序为:(3)(4)(1)(2),此时二者都会发生阻塞而造成死锁。

        通过上述的例子,可以得到以下死锁的结论。

死锁的定义

        当一组进程中中的各进程都在等待某个事件发生(通常是等待资源的释放),但能够触发该事件的进程正处于阻塞中。此时,这组进程就发生了死锁。

死锁产生的四个必要条件

        通过上述的几个例子可以得出死锁产生的四个必要条件,当以下四个条件均满足时,才会产生死锁。只要有一个不满足。就不会产生:

(1)互斥条件:各进程对某一资源必须是互斥的访问,当一个进程在访问时,请他进程只能等待

(2)请求和保持条件:指进程已经拥有了一个资源,还要在申请另一个资源。

(3)不可抢占条件:资源在只能被申请它的进程使用完后自动释放,请他进程不能抢占

(4)循环等待条件:如进程1等待进程2所拥有的资源,进程2等待进程3所拥有的资源,进程3等待进程1所拥有的资源。

 有关避免死锁的算法理论见银行家算法一文

猜你喜欢

转载自blog.csdn.net/sandmm112/article/details/80080658