1.死锁产生的原因
通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。信号量使用不当也会造成死锁。进程间彼此相互等待对方发来的消息,也会使得这些进程间无法继续向前推进。
2.死锁产生的必要条件
- 互斥条件:进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程所占有。如果此时还有其他进程请求该资源,则请求进程只能等待,直至占有该资源的进程用毕释放。
- 不可抢占条件:进程已获得的资源在未使用完之前不能被其他进程抢占,即只能在进程使用完时由自己释放。
- 请求并保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
- 循环等待条件:在发生死锁时,必然存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。即进程集合{P0,P1,P2...Pn},其中P0正在等待一个P1占有的资源,P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
3.处理死锁的方法
目前处理死锁的方法可归结为四种:
- 预防死锁:这是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁四个必要条件中的一个或几个来预防产生死锁。预防死锁是一种较易实现的方法,已被广泛使用。
- 避免死锁:同样是属于事先预防策略,但它并不是事先采取各种限制措施,去破坏产生死锁的四个条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而可以避免发生死锁。
- 检测死锁:这种方法无需事先采取任何限制性措施,允许进程在运行过程中发生死锁。但可通过检测机构及时地检测出死锁的发生,然后采取适当的措施,把进程从死锁中解脱出来。
- 解除死锁:当检测到系统中已发生死锁时,就采取相应的措施,将进程从死锁状态中解脱出来。常用的方法是撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其能继续运行。
登录后开始许愿
暂无评论,来抢沙发