死锁预防
限制申请方式
互斥
占用并等待
不抢占
杀死占用资源的进程
循环等待 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请
死锁避免
需要系统具有一些额外的先验信息提供。
1. 最简单和最有效的模式是要求每个进程声明它可能需要的每个类型资源的最大数目。
2. 资源的分配状态是通过限定提供与分配的资源数量,和进程的最大需求。
3. 死锁避免算法动态检查的资源分配状态,以确保永远不会有一个环形等待状态。
判断分配之后是否是安全状态,若是,则分配
系统安全状态:指所有进程,存在安全序列
处于安全状态=》 没有死锁
不安全状态=》可能死锁
避免死锁的话=》确保系统永远不会进入不安全状态
银行家算法
前提条件
1. 多个实例
2. 每个进程都能最大限度的利用资源
3. 当一个进程请求一个资源,就不得不等待
4. 当一个进程获得所有资源,就必须再一段有限的时间内释放他们
基于上述条件,算法长师寻找每一个进程获得的最大资源并且结束的进程请求执行时序,来决定状态是否安全。不存在这样执行时序,就是不安全的。
数据结构
n=进程数量,m=资源类型数量
Max(总需求量):n*m矩阵,如果Max[i,j] = k,表示进程Pi最多请求资源类型Rj的k个实例
Available(剩余空闲量):长度为m的向量。如果Available[j]=k,有k个类型Rj的资源实例可用
Allocation(已分配量):n*m矩阵。如果Allocation[i,j]=k,则Pi当前非赔了k个Rj的实例
need(未来需要量):n*m矩阵,如果Need[i,j]=k,则Pi可能需要至少k个Rj实例完成任务
Need[i,j]=Max[i,j]-Allocation[i,j];