适合人群:
1.基本上理解主要概念:什么是死锁?
2.有一些编程经验。懂if …else… while/for.
2.期末复习人群。
简单来说就是 没搞懂, 属于一瓶子不满的人。
考试重点:数据结构, 安全状态检测 ,试探性分配。
1.考死锁的检测死锁的安全状态。写前两个,
2.考死锁的避免,写三个。
死锁的检测
数据结构:(说白了就是定义)
可用的资源数 available;
最大需求矩阵 Max
需求矩阵 need
分配矩阵 Allocation
方案:
安全检测:
1.设置俩个变量
工作变量:Work=Available,表示系统中有多个可用的资源。
完成变量:Finish 表式系统周继红有足够的资源提供给进程
2.从进程集合中 找出满足以下条件的进程
Finish[i]==0 &&Need i <work 如果找到则执行3,否则执行4
3.当进程pi获的资源之后,顺利执行,直至完成并且释放资源,故应执行:
work=work+Allocation i;
Fisish[i]=1;
go to step 2;
4. 如果所有的进程Finish[i]=1;那么系统处于安全状态,
如果不是那么进程处于不安全状态。
死锁避免方案:
设Requesti 是进程pi的请求向量,
Requesti[j]=k;表示进程pi需要k个rj的类型资源。
1.如过requesti<needi 并且requesti<avaliable,系统试探性的把要求的资源分配给pi进程并修改下面的数值:
Avaliable=Avaliale-Requesti;
Allocaition = Allociation+Requesti;
needi = needi-Requesti;
2.系统执行安全性算法,如果安全才将资源分配给pi进程,已完成分配
否则,将试探性分配作废,恢复原来的资源分配状态,让进程pi等待。
Avaliable=Avaliale+Requesti;
Allocaition = Allociation-Requesti;
needi = needi+Requesti;