一、避免死锁-动态策略
1.概述
安全序列-能使每个进程才能顺利完成的分配资源的序列,可有多种,此时系统处于安全状态下,系统一定不会发生死锁。
不安全状态-找不到一个安全序列时,系统处于不安全状态下,系统可能会发生死锁
关系-导致不安全状态的原因很多,但发生死锁时系统是处于不安全状态下的。
2.银行家算法
原理:在分配资源前对分配后系统安全状态进行判断,根据剩余可用资源数与进程需求资源数进行比较,再分配
二、检测和解除-允许死锁发生
1.检测
定义数据结构保存资源请求和分配信息,并用来检测系统是否已进入死锁状态
可完全简化:资源分配图最终能消除所有边,此时能找到一个安全序列,一定没有发生死锁。但若最终不能消除所有边,此时发生了死锁,还连着边的进程就是处于死锁状态的进程。
算法
找既不阻塞又非孤点的进程(非死锁进程),消去它所有的请求边和分配边,使之成为孤立的结点。
若不可完全简化,此时系统死锁。
2.解除
资源剥夺法-挂起(放入外存上)某些死锁进程并抢占其资源,将资源分配给其它死锁进程。
撤销进程法-强制撤销部分/全部死锁进程并剥夺其资源,代价较大
进程回退法-让一个/多个死锁进程回退到足以避免死锁的地步,要求记录进程历史信息。