第九节 死锁的避免
1,系统状态的安全性
安全序列:如果某一时刻,系统能够按照某种进程循序,
如 {p1,p2,…,pn},来为每个进程分配其所需的资源,直至最大需求,使得每个进程均可顺利完成,则进程序列
{p1,p2,…,pn} 叫安全序列 。
安全状态:在某一时刻,若系统中存在一个安全序列,
能使所有的进程都顺利完成,则称系统处于安全状态。
第九节 死锁的避免
1,系统状态的安全性注意:
系统在某一时刻的安全状态可能不唯一;
安全状态是非死锁状态,而不安全状态不一定是死锁状态;
为了避免死锁,进程可能会在资源可用的情况下进入等待状态。
第九节 死锁的避免
2,银行家算法--数据结构
可用资源向量 Av;
最大需求矩阵 Max;
分配矩阵 Al;
需求矩阵 Need;
请求向量 Re;
工作向量 Work;
布尔向量 Finish。
第九节 死锁的避免
2,银行家算法--资源请求算法描述当第 i个进程需要请求资源时,就将其需要的各个资源的数量送入向量 Rei中。
① 如果 Rei<=Need[i],进程 pi继续,否则转出错处理;
② 如果 Rei<=Av,则进程 pi可继续执行,否则等待;
③ 满足 pi的请求,执行如下操作:
Av=Av-Rei
Al[i]=Al[i]+Rei
Need[i]=Need[i]-Rei
④ 执行安全算法:如果处于安全状态,分配可进行;否则,回复资源的原状态,同时让 Pi等待。
Av=Av+ Rei
Al[i]=Al[i]- Rei
Need[i]=Need[i]+ Rei
第九节 死锁的避免
2,银行家算法--安全性算法计算 pi进程提出的资源请求后,系统状态是否安全。
① Work= Av; Finish[i]=false; i=1,2,…,n;
② 否则等待;
③ 满足 pi的请求,执行如下操作:
Av=Av-Rei
Al[i]=Al[i]+Rei
Need[i]=Need[i]-Rei
④ 执行安全算法:如果处于安全状态,分配可进行;否则,回复资源的原状态,同时让 Pi等待。
Av=Av+ Rei
Al[i]=Al[i]- Rei
Need[i]=Need[i]+ Rei
第九节 死锁的避免
1,系统状态的安全性注意:
安全状态:在某一时刻,若系统中存在一个安全序列,
能使所有的进程都顺利完成,则称系统处于安全状态。