2.4.1 死锁的概念
1.死锁的定义
所谓死锁,是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程将无法向前推进
2.死锁产生的原因
(1)系统资源的竞争
(2)进程推进顺序非法
(3)死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要其中任意一个条件不成立,死锁就不会发生
互斥条件
不剥夺条件
请求并保持条件
:进程已经保持了至少一个资源,但又提出新的资源请求
,而该资源已被其他进程所占有,此时请求进程被阻塞,但对自己以获得的资源保持不放。
循环等待条件
2.4.2 死锁的处理策略
1.死锁预防:破坏四个条件之一
2.避免死锁:在资源的动态分配过程中,用某种方法防止系统进入不安全状态
3.死锁的检测及解除
2.4.3 死锁预防
1.破坏互斥条件
2.破坏不剥夺条件
3.破坏请求并保持条件
4.破坏循环等待条件:可采用顺序资源分配法
给系统资源进行编号,规定每个进程必须按顺序请求资源
2.4.4 死锁避免
1.系统安全状态
安全状态:
系统能按某种进程推进顺序,为每个进程分配其所需的资源,直至满足所有进程对资源的最大需求,使每个进程都可以顺序完成。
并非所有的不安全状态都是死锁状态,不安全状态可能进入死锁状态,只要处于安全状态,系统便可避免进入死锁状态。
2.Banker’s Algorithm
(1)数据结构描述
可利用资源向量 Available:
含m个元素的数组,每个元素代表一类资源的数目。
最大需求矩阵Max:
n×m矩阵,定义系统中n个进程的每个进程对m类资源的最大需求。
分配矩阵 Allocation:
n×m矩阵,已分配的每个进程的资源数
需求矩阵 Need:
n×m矩阵,表示 每个进程接下来最多还需多少资源
Need = Max - Allocation
3.安全性算法举例
4.银行家算法举例
安全性算法是银行家算法的核心
2.4.5 死锁的检测和解除
1.资源分配图
R表示资源,P表示进程
在该资源分配图中,进程P1已分得两个R1资源,并又请求一个R2资源;进程P2获得一个R1资源和一个R2资源并又请求一个R1资源。
2.死锁定理
(1)在资源分配图中,找出既不阻塞又不孤点的进程Pi(即 找出一条有向边与他相连,且该有向边对应资源的申请数量小于等于系统中已有的空闲资源数量 )
P1是满足这一条件的进程结点,将P1的所有边消去,便得到(b)
(2)进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来阻塞的进程可以变为非阻塞进程,如图中(c)所示。
若能去掉图中所有的边,则称该图是可完全简化的
系统状态为死锁的条件是当且仅当系统状态资源分配图是不可完全简化的,该条件为
死锁定理
3.死锁解除
出现死锁时,死锁相应的解除方法主要有:
1)资源剥夺法 挂起某些死锁进程,并抢占它的资源。
2)撤销进程法 强制撤销部分甚至全部死锁的进程,并剥夺这些进程的资源。
3)进程回退法 让一(或多)个进程回退到足以避免死锁的地步。