五 操作系统基础之死锁
死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力,这些进程都将无法向前推进。
死锁产生的必要条件
死锁产生必须同时满足下面四个条件:
- 互斥条件:在某一时间段内某资源仅为一个进程占有。
- 不可剥夺条件:进程所获资源在未使用完之前不能被其他进程强行夺走。
- 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求。
- 循环等待条件:存在一种进程资源的循环等待链。(资源分配图含圈而系统又不一定有死锁的原因是同类资源数大于1)
死锁处理策略
1 预防死锁
效率低,进程初始化时间长
- 破坏互斥条件
- 破坏不剥夺条件
- 破坏请求和保持条件(静态资源分配法:进程在运行亲一次申请完它所需要的全部资源)
- 破坏循环等待条件(顺序资源分配法:给系统中资源编号,必须按编号递增顺序请求资源,同类资源一次申请完)
2 避免死锁
必须知道将来的资源需求
- 系统安全状态:存在一个安全序列使每个进程都可以顺序完成。(安全状态一定能避免死锁,不安全状态不一定是死锁状态,可能进入死锁状态。)
- 银行家算法
当request<need&&request<available时尝试分配,用安全性算法检测是否存在安全序列。
3 死锁的检测及解除
通过剥夺解除死锁,造成损失
- 资源分配图
圆圈代表进程,方框代表资源集,方框内是资源数。由进程指向资源的箭头代表申请一个资源,由资源指向进程的箭头代表已经分配一个资源。
- 死锁定理
死锁:资源分配图是不可完全化简的。
- 死锁解除
- 资源剥夺法
- 撤销进程法
- 进程回退法