操作系统之死锁
一、死锁的概念
死锁是指在一个进程集合中的每个进程都在等待只能由该集合中的其它进程才能引起的事件,而无限期陷入僵持的局面。若无外力作用,这些进程都将无法向前推进。
二、产生死锁的原因
资源有限:当系统中多个进程共享资源时,如打印机、磁带机等,其数目不足以满足诸进程的需要,会引起进程对资源的竞争而产生死锁。通常是对不可剥夺资源的竞争才会引发死锁,可剥夺资源的竞争是不会引起死锁的。
并发进程间的推进顺序不当:进程在运行过程中,请求和释放资源的顺序不当,也会产生进程死锁。
三、产生死锁的必要条件
互斥条件:并发进程所要求和占有的资源是不能同时被两个以上进程的使用或操作的,进程对它所需要的资源进行排他性控制。
不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
部分分配(请求和保持条件):进程每次申请它所需要的一部分资源时,在等待新资源的同时继续占用已分配到的资源。
环路条件:存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程请求。
四、死锁的处理方法
预防死锁:破坏死锁的四个必要条件之一,从而预防死锁的发生。但这种方法可能会降低系统的并发性。
避免死锁:允许进程动态申请资源,但系统在资源分配之前会先计算资源分配的安全性。若分配不会导致系统从安全状态向不安全状态转换,则将资源分配给进程;反之,则不分配资源,进程必须阻塞等待。
检测死锁并恢复:系统定时运行一个“死锁检测”程序,如果检测到系统发生了死锁,再采取措施解除它。死锁检测算法可以提供程序最大的并发性。
鸵鸟策略:像鸵鸟一样对死锁视而不见,即不采取任何措施来预防、避免或检测死锁。这种策略在大多数操作系统中用于终端用户进程,当系统仅用于浏览和其他正常进程时,这种方法是适用的。但如果一个进程必须始终运行,并且发生死锁,则重新启动系统是推荐的最佳解决方案。