1、死锁原因:竞争资源、进程推进顺序不当
2、资源分配图(若死锁,则资源分配图中必有环路,但有环路时不一定死锁)
3、死锁的四个必要条件
①互斥
②占有且等待
③不可抢占
④循环等待
在死锁的四个必要条件中,破坏____A_____条件是不太实际的。
A. 互斥 B. 不可抢占 C. 占有并等待 D. 循环等待
4、三种处理方法:预防,避免,检测和恢复
①死锁预防:通过运用某种策略来消除产生死锁的四个必要条件之一,来保证不让死锁状态出现。
②死锁避免:通过限制进程启动或资源分配,来保证不让死锁状态出现。
③死锁检测:检测允许死锁出现,定期检测死锁的存在并从死锁中恢复出来。检测到死锁时,将系统从死锁状态中恢复的方法可以是:杀死进程和抢占资源.
在下列死锁的解决方法中,属于死锁预防策略的是____BC____。
A. 银行家算法 B. 资源有序分配 C. 剥夺资源 D. 资源分配图化简
解:银行家算法属于死锁避免策略;资源有序分配、剥夺资源属于死锁预防策略;资源分配图化简属于死锁检测(一个图可完全简化,则不会产生死锁。)
5、银行家算法:要求能够判断现在是否安全,某进程请求资源是否能够满足。
数据结构:
Available:当前空闲的资源数。
Claim:进程对某资源的最大需求量。
Allocation:进程已经分配的资源数。
Need:还需要的资源数。
Need=Claim-Allocation
已分配的资源数+当前空闲的资源数不能大于总的资源数。
安全性算法:用于确定计算机系统是否处于安全状态。
简单理解:Work可以理解成空闲的资源数,后面进程使用后的资源要释放回去。所以是Work:=Work+Allocation。
1)设Work和Finish分别是长度为m和n的向量,初始化
Work:=Available,Finish[i]=false(i=1,2…n)
2)查找 i 使其满足
a.Finish[i]=false
b.Needi<=Work
若没有这样的i存在,转到4)
3)Work:=Work+Allocation
Finish[i]:=true
返回到2)
4)如果对所有i,Finish[i]=true,则系统处于安全状态。
资源请求算法:
设Requesti 为进程Pi的请求向量
- 如果Requesti <= Needi ,那么转到第2)步。否则,产生
出错条件,因为进程已超过了其请求。- 如果Requesti <=Available,那么转到第3)步。否则,
Pi等待,因为没有可用资源。- 假定系统可以分配给进程Pi 所请求的资源,并按如下方式
修改状态:
Available:= Available – Requesti ;
Allocationi := Allocationi + Requesti ;
Needi := Needi – Requesti ;- 调用安全性算法确定新状态是否安全
安全—操作完成且进程Pi分配到其所需要的资源
不安全—进程Pi必须等待,并将数据结构恢复到原状态(即 3)的逆操作
题一:
问题:
(1)验证可用资源向量的正确性。
(2)计算需求矩阵
(3)指出一个安全的进程序列来证明当前状态的安全性。同时指出每个进程结束时可用向量资源向量的变化情况。
(4)假设P5请求资源(3,2,3,3),该请求应该被允许吗?请说明理由。
1)验证Allocation+Availabel是否等于资源总数。
2+0+4+1+1+1+6=15
0+1+1+0+1+0+3=6
2+1+0+0+0+1+5=9
1+1+2+1+0+1+4=10
因此,可用资源向量正确。
2)需求矩阵如下:
Need(A、B、C、D) | |
---|---|
P0 | 7 5 3 4 |
P1 | 2 1 2 2 |
P2 | 3 4 4 2 |
P3 | 2 3 3 1 |
P4 | 4 1 2 1 |
P5 | 3 4 3 3 |
3)判断是否为安全序列的表格有四个部分,Work、Allocation、Need、Work+Allocation、Finish.
Work首先存放的是空闲资源,且放在第一个其资源数比Need所需资源数大的进程中。一个进程结束,得到的Work和Allocation的值的和要放在第二个Work里,依次类推,看最后是否所有进程都能得到需要的资源,若能,则为安全序列。
系统处于安全状态,存在安全序列<P1,P2,P3,P4,P5,P0>
4) P5请求资源Request(3, 2, 3, 3), 执行银行家算法:
6、用信号量解决不死锁的哲学家就餐问题