2.20死锁的概念

一,什么是死锁?

在并发环境下,各个进程因为竞争资源而造成的一种互相等待对方手里的资源,导致各个进程都堵塞,都无法向前推进的现象,就是死锁。发送死锁后无外力干涉,这些进程都无法向前推进

二,进程死锁,饥饿,死循环的区别

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

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

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

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

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

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

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

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

5注意:发生死锁时一定有循环等待,但是发生循环等待时未必是死锁(循环等待是死锁的必要不充分条件)。比如哲学家进程中,如果5个哲学家都在等待对方放下筷子二进入了循环等待,此时有一个神秘的第六人,它手上有一根树枝(可以替代筷子的资源),给其中一个哲学家他们就不会死锁了,即同类资源数大于1,则及时有循环等待,也未必发生死锁。如果系统中的没类资源只有1,那么循环等待就是死锁发生的充要条件。

四,什么时候会发生死锁

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

2,进程推进顺序非法:请求和释放资源的顺序不当,也同样会导致死锁。例如,并发执行的进程P1,P2分别申请并占有资源R1,R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有二阻塞,从而发生死锁

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

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

五,死锁的处理策略:

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_44841312/article/details/105339475
今日推荐