死锁
死锁预防(prevention)
死锁的必要条件
- 互斥
- 不可剥夺: 别的进程不能强行夺走资源
- 请求并保持: 可以一边夺走
- 循环等待
循环等待不一定死锁: 同类资源数可以>1 如果同类资源数=1且循环等待,则一定死锁
Warning
\(n\)个进程 \(m\) 个 资源, 每个进程最多请求\(k\)个资源。则一定不发生死锁的条件是 \(m>n(k-1)\)
因为假设每个进程都获取了k-1个, 都在等第k个, 造成死锁。如果此时多1个资源,那必然会有某个进程拿到全部资源,运行完毕后释放资源,解除死锁
破坏死锁的条件
- 破坏互斥: 很难
- 破坏不可剥夺: 请求新的资源且得不到的时候, 释放所有已占有的资源
- 破坏请求并保持: 在开始执行前申请并获得所有资源。或者,只允许进程在没有资源时才能申请资源。
- 破坏循环等待: 对所有资源类型进行排序,要求每个进程按照递增顺序申请资源。
死锁避免(avoidance)
在运行时判断是否可能死锁
系统安全状态
安全序列
- 如果系统处于安全状态,一定不会发生死锁。
- 如果死锁一定处于不安全状态。不安全状态 可能 发生死锁