您的位置:首页 > 其它

死锁的发生与处理

2014-12-07 19:22 148 查看
(内容来自《现代操作系统》)

《现代操作系统》里叙述了进程死锁发生的四个必要条件:

1.互斥条件、每个资源要么已经分配给了一个进程,要么就是可用的

2.占有和等到条件、已经得到了某个资源的进程可以再请求新的资源。

3.不可抢占条件。已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放。

4、环路等待条件。死锁发生时,系统中一定有两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源、

也就是说,当进程发生死锁时,上面所说的四个条件移动同时满足,那么我们可以这样说,当上面四个条件任意一个不成立时,死锁一定不会发生。那么给我们的启示是,我们可以通过破坏上述条件的方式来防止系统发生死锁的事件。

其中一个防止死锁发生的办法是"鸵鸟算法"。该算法的主要思想是,系统默认死锁存在,并且允许死锁的发生。但是当死锁发生的时候,系统采取对策来破坏死锁四个条件中的一个来破坏死锁,从而使进程继续运行。

另一个防止死锁发生的算法是有Dijkstra提出的"银行家算法"。该算法主要思想是让系统预先收集进程运行过程中所需要的全部资源的信息,然后通过一些优化算法使能够运行完成的进程继续运行,让其他进程因为资源不足进入等待状态。然后已经运行完成了的进程会释放它占有的资源,系统再把这些资源收集分配给下一个可能运行完成的进程。"银行家算法"涉及到了系统对资源分配的两种状态,“安全状态”和“不安全状态”。“银行家算法”每次能够为进程分配资源的前提是“分配完资源后这些进程进入安全状态”,否则就不会为此进程分配资源,而是寻找其他合适的进程进行分配。

但是“银行家算法”应用很少,因为系统很少能够提前得知所有进程所需要的全部资源有多少,并且进程数也不是固定的,所以该算法实际应用不乐观。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: