一、预防死锁
从前面的知识我们知道,死锁的产生必须同时具备四个条件,缺一不可。那么我们就可以从四个条件入手,破坏四个中某一个的条件,导致死锁不成立。但是预防死锁需要很大的资源开销,所以一般不考虑。
二、避免死锁
目前常用此方法来避免死锁。既然不是事先预防,那么如何在运行过程中避免死锁呢?提出一个“安全状态”的概念。假设当系统一直处于安全状态时,系统不会发生死锁。所谓安全状态,便是允许系统动态的申请资源,当给一组进程分配资源时,先进行计算,计算过程为:按一定的顺序(P1,P2,P3……Pn),先给P1分配资源,满足P1所需的最大资源,等P1运行完后释放资源并与其余资源一起给P2,看看满不满足P2所需的最大资源,若满足,则继续分配,以此类推,直到如果Pn也能满足其最大需求资源,此计算结果即证明是安全状态,可进行资源的分配。
安全状态来避免死锁的具体算法实现是银行家算法(2014年东南大学考研真题)。为实现该算法,必须设置四个数据结构。
1.可利用资源available,指明有多少可用资源。
2.最大需求max,指明进程最大需求资源数。
3.进程已获得资源数allocation,指明进程已经获得的资源数。
4.需求need,指明获得资源未达到最大需求的进程还需要多少资源才能到达最大需求。
算术关系为:need=max-allocation
三、检测死锁
资源分配图和死锁定理,感兴趣的可以自行查阅
四、解除死锁
要么把所有的死锁进程都撤销,要么一个一个地撤销直到进程不再死锁为止,但是先撤销谁后撤销谁,怎么样撤销能使得撤销代价最小,这是个需要深究的问题。本作者无力进行讨论。
菜鸡的计算机操作系统学习之路(七)如何解决死锁问题
最新推荐文章于 2023-05-11 09:00:00 发布