操作系统——死锁

一、系统模型

利用资源方式:

request(请求)

use(使用)

release(释放)

二、产生死锁的四个条件(特征)

·互斥:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源

·请求和保持:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己获得的其他资源保持不放

·不可抢占:资源只能由占用的进程释放

·循环等待:是指进程发生死锁后,必然存在一个进程–资源之间的环形链

结论:

图中不含有循环—>没有死锁

图中含有循环—>每一个资源只有一个实例就会死锁,否则不会死锁

三、处理方法:

确保系统永远不会进入死锁状态:

·预防死锁

·避免死锁

允许系统进入死锁,然后恢复

四、死锁避免算法

(1)每种类型的资源只有一个实例(资源分配图)

·当进程请求资源时,边转化为资源请求边

·当资源被分配给进程时,资源请求边转化为资源分配边

·当资源被进程释放后,资源分配边转化为边

(2)每种类型的资源有多个实例(银行家算法)

Available:大小为m的向量(Vector,一个封装了动态大小数组的顺序容器)。如果available[j]=k, 那么资源Rj有k个实例可用

Max:n×m矩阵。如果Max[i,j]=k,那么进程Pi最多可以请求k个Rj资源的实例

Allocation:n×m矩阵。如果Allocation[i,j]=k,那么进程Pi当前被分配了k个Rj资源的实例

Need:n×m矩阵。如果Need[i,j]=k,那么进程Pi还需要k个Rj资源的实例

安全算法:

·Work 和 Finish 分别是大小为 m 和 n 的向量。初始化:

Work = Available

Finish [i] = false for i = 0, 1, …, n- 1

·找到一个i,同时满足:

 (a) Finish [i] = false

 (b) Needi≤Work

如果没有这样的i存在, 去往第4步。

·Work = Work + Allocationi

Finish[i] = true
去往第2步

·如果 Finish[i] == true 对于所有的 i 都成立, 那么系统处于安全状态

五、检测死锁

允许系统进入死锁状态

·死锁检测算法

·恢复策略:抢占资源(选择一个受害者)

回滚:返回到安全的状态,重新启动改状态的进程

饥饿:考虑到回滚的成本因素,同一进程可能总是被选为受害者

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值