死锁:
1.概念: 多个并发进程 因争夺(互斥)资源 而产生 相互等待 的现象。
2.产生死锁的本质原因:
1)资源有限;(如:2人抢夺一个苹果)
2)进程推进顺序不合理。(如:2人抢夺一个苹果,
都看到对方拿到了,都在等待,谁也没有拿到)
3.产生死锁的必要条件:
1)资源互斥。(只能同时被一个线程访问)
2)资源占有并等待,指一个进程必须占有至少一个资源,同时又等待另一资源,而该资源已被其它进程占有。
3)不能抢占资源。
4)循环等待。存在等待进程集合{P0,P1,P2,···,Pn},其中的P0正在等待一个P1占用的资源;
P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。(包含条件2)
3.死锁避免
通过动态的资源分配状态 以及 合理的资源分配算法 以确保 循环等待的条件不会成立,从而避免死锁。
安全状态:针对当前状态,即下面四个条件,如果能够按照某个次序调度资源使得每个进程都能够运行完毕,则称此状态是安全状态。
四个条件:现有各类资源的数目,已分配的资源数目,可用的各类资源数,每个进程对各类资源的最大需求数。
5.死锁恢复(回收资源)
一是终止进程,包括终止环中的进程(即死锁进程)和终止环外进程(牺牲品)(目的是释放资源)。
二是抢占资源,被抢占资源的进程要利用回滚恢复,一般回滚到一个安全状态。通常是完全回滚,即终止进程并重启进程。