操作系统2.4.1 死锁的概念

一、什么是死锁?

多个进程因竞争资源而导致各进程都阻塞(相互等待)。

若无外力作用,这些进程都将无法向前推进。

 

二、进程死锁、饥饿、死循环的区别(选择题)

死锁:各个进程互相等待对方手中的资源,导致各个进程都堵塞无法向前推进的现象

饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:短进程优先算法(SPF)中,若有源源不断的短进程到来,则长进程就一直得不到处理机,从而发生长进程的饥饿

死循环:某进程执行过程中一直跳不出某个循环的现象。有时候是因为程序逻辑bug,有时是程序员故意设计的

 

三、死锁产生的四个必要条件

1、互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子,打印机设备)。像内存,扬声器这样可以同时让多个进程使用的资源不会发生死锁(因为进程不需要阻塞等待这种资源)

2、不剥夺条件:进程所获得的资源在未使用完之前,不能由其它进程强行夺走,只能主动释放

3、请求和保持条件:进程已经持有了至少一个资源,但又提出了新资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己的资源不放

4、循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程请求

 

注意!发生死锁时一定有循环等待,但是发生循环等待时未必是死锁(循环等待是死锁的必要不充分条件)。

比如哲学家进程中,如果5个哲学家都在等待对方放下筷子而进入了循环等待。此时有一个神秘的第六人,它手上有一根树枝(可以替代筷子的资源),给其中一个哲学家他们就不会死锁了。

即同类资源数大于1,则即使有循环等待,也未必会发生死锁。如果系统中的每类资源只有1个,那么循环等待就必然会导致死锁了。

 

四、什么时候会发生死锁

1、对系统资源的竞争。各个进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU)的竞争是不会引起死锁的

2、进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。

例如,并发执行的进程P1,P2分别申请并占有资源R1,R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁

3、信号量的使用不当也会造成死锁。如生产者-消费者进程中,如果实现互斥的P操作在 实现同步的P操作之前,就可能导致死锁

总之,对不可剥夺资源的分配不合理,就可能导致死锁。

 

五、死锁的处理策略

1、预防死锁:破坏死锁产生的四个必要条件的一个或几个

2、避免死锁:用某种方法防治系统进入不安全状态,从而避免死锁(银行家算法)

3、死锁的检测和解除:允许死锁发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章