操作系统常见死锁原因和处理策略
关注+星标公众号,不错过精彩内容
编排 | strongerHuang
微信公众号 | 嵌入式专栏
软件工程师在实现一些业务逻辑的时候,可能会出现两种事件互相锁住的尴尬局面,(就好比下图),最终导致死机。
下面我们就来说说操作系统的常见死锁的原因和处理策略。
嵌入式专栏
1
产生死锁的原因当进程需要以独占的方式访问资源时,可能会发生死锁(Deadlock)。死锁是指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进程等待一个已经被占用且永不释放的资源。若无外力作用,这些进程都无法向前推进。
资源竞争
进程推进顺序不合理
嵌入式专栏
2
产生死锁的四个必要条件:
互斥条件
涉及的资源是非共享的,即一次只能有一个进程使用。如果有另一个进程申请该资源,那么申请进程必须等待,直到该资源被释放。
不剥夺条件(非抢占)
进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自行释放。
占有并等待(部分分配)
进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源。
环路条件(循环等待)
存在一种进程收尾相接的循环链,链中每个进程都在等待下一个进程所持有的资源,造成这组进程处于永远等待状态。
注意:这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。反之,上述条件只要有一个不满足,就不会发生死锁。所以要避免发生死锁,只需要破坏其必要条件。
嵌入式专栏
3
对于死锁一般有三种处理策略:预防死锁、避免死锁、死锁的检测及解除
新进程进入系统时,它必须说明对各类资源的最大需求量,这一数量不能超过系统的资源总数。只有满足这一条件系统才接纳该进程。
当进程申请一组资源时,该算法需要检查进程对各类资源的最大需求量,如果系统现存的各类资源的数量可以满足此时的资源最大需求量时,就分配资源;否则进程必须等待,直到其他进程释放足够的资源为止。 进程需要在一定时间内无条件地归还它所申请的全部资源。
资源分配路径中没有环路,则系统不会出现死锁 资源分配路径中存在环路,则系统可能出现死锁 如果环路中的每个资料类中都只有一个资源,则系统存在死锁 如果环路中的每个资源类的资源个数不止一个,则环路的存在是产生死锁的必要条件但不是充分条件
一次性撤销陷入死锁的所有进程,回收所有占用的资源,等死锁解除后,再重新运行进程。
逐个撤销陷入死锁的进程,依次回收其资源并重新分配,直至死锁解除。可以优先撤销优先级低、预计剩余执行时间最长、CPU消耗时间少的进程。
免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
后台回复『操作系统』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。