死锁 deadlocks
死锁
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。
01 产生死锁的4个必要条件:
资源互斥条件
:一个资源每次只能被一个进程使用。请求与保持条件
:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不抢占条件
:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件
:若干进程之间形成一种头尾相接的循环等待资源关系。
02 死锁的解除与预防方法如下:
鸵鸟策略:把头埋在沙子里,假装根本没发生问题。
死锁预防:确保系统永远不会进入死锁状态。(理解了死锁的原因,破坏产生死锁的4个必要条件,就可以最大可能地避免、预防和解除死锁。)
破坏互斥条件
:把互斥的共享资源封装成可同时访问。
破坏占有和等待条件
:进程请求资源时,要求它不持有任何其他资源;仅允许进程在开始执行时,一次请求所有需要的资源。
破坏不可抢占条件
:如进程请求不能立即分配的资源,则释放已有占有资源;只在能够同时获得所有所需资源时,才执行分配操作。
破坏环路等待
:对资源排序,要求进程按顺序请求资源。
死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源。
银行家算法:
- 如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
- 如果一个状态不是安全的,需要拒绝进入这个状态。
死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复。
检测
:每种类型一个资源的死锁检测可采用有向图环路检测算法
;每种类型多个资源的死锁检测采用基于矩阵的算法。恢复
:进程终止;资源抢占;进程回退。
参考资料
- 王道考研