死锁
多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程无法继续推进
死锁产生的原因有系统资源的竞争以及进程推进顺序非法
死锁产生原因
- 互斥条件:共享资源只能被一个进程访问
- 不可剥夺条件:访问共享资源进程,资源不能被剥夺
- 请求并保持条件:保持当前的资源,并且请求其他资源
- 循环等待条件:存在共享资源的循环等待链
死锁预防
- 破坏互斥条件:将共享资源改为可以同时访问
- 破坏不可剥夺条件:请求新资源无法满足时必须释放已有资源
- 破坏请求并保持条件:进程开始运行时一次性申请所有需要资源
- 破坏循环等待链:对所有资源进行排序,所有进程必须要按照资源序号进行申请
死锁检测
- 利用资源分配图,图中有资源和节点
- 死锁原理:
- 当且仅当此状态下资源分配图不可完全简化
- 简化过程类似于“拓扑排序”算法
死锁的解除
- 资源剥夺:
- 挂起死锁进程
- 剥夺其资源
- 把资源分配给其他线程
- 撤销进程
- 进程回退:回退到足以避免死锁的地步