死锁产生的必要条件
- 互斥条件:进程独自占用资源,不与其他进程共享
- 不剥夺条件:资源只能由进程自己释放,不能被剥夺
- 请求保持条件:当进程因为请求的资源无法得到而被阻塞时,依然对自己已有的资源保持不放
- 环路等待条件:在发生死锁时,必然存在一个进程——资源环形链
解决死锁的基本方法
1. 预防死锁
- 破坏请求保持条件:一次性分配所有资源,如果无法做到就不给他分配资源
- 破坏不可剥夺条件:得到一部分但得不到其他资源,则释放已有资源
- 破坏环路等待条件:给每类资源赋予编号,每个进程按顺序请求资源,释放则相反
2. 检测死锁,避免死锁
银行家算法,按照一定次序去进行资源分配,使得每一个进程都可以在一个时间获得自己所需要的资源,通过算法调度资源,检测当前状态释放安全,不安全,有可能破产(也就是有可能发生环路等待)则拒绝进入这个状态
3. 解除死锁
- 资源剥夺:挂起某些死锁,抢占他的资源,将这些资源分配给其他的死锁进程
- 撤销进程:杀死一部分或全部死锁进程死锁进程
- 进程回退:让一个或多个进程回退到足以避免死锁的地步,进程回退是资源释放资源而不是剥夺,要求系统保持进程历史信息,设置还原点