操作系统之死锁

目录

1.必要条件

2.处理方法

3.鸵鸟策略

4.死锁检测与死锁恢复

(1)每种类型一个资源的死锁检测

(2)每种类型多个资源死锁检测​

(3)死锁恢复

5.死锁预防

(1)破坏互斥条件

(2)破坏占有和等待条件

(3)破坏不可抢占条件

(4)破坏环路等待

6.死锁避免

(1)安全状态

(2)银行家算法


1.必要条件

  • 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。
  • 占有和等待:已经得到了某个资源的进程可以再请求新的资源。
  • 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
  • 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。

 

2.处理方法

主要有以下四种方法:

  • 鸵鸟策略
  • 死锁检测与死锁恢复
  • 死锁预防
  • 死锁避免

 

3.鸵鸟策略

假装根本没有发生。

当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。

大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。

 

4.死锁检测与死锁恢复

不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。

(1)每种类型一个资源的死锁检测

通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

(2)每种类型多个资源死锁检测

每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

  1. 寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A。
  2. 如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。
  3. 如果没有这样一个进程,算法终止。

(3)死锁恢复

  • 利用抢占恢复
  • 利用回滚恢复
  • 通过杀死进程恢复

 

5.死锁预防

在程序运行之前预防发生死锁。

(1)破坏互斥条件

(2)破坏占有和等待条件

一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。

(3)破坏不可抢占条件

(4)破坏环路等待

给资源统一编号,进程只能按编号顺序来请求资源。

 

6.死锁避免

在程序运行时避免发生死锁。

(1)安全状态

定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。

安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。

(2)银行家算法

如果一个状态不是安全的,需要拒绝进入这个状态

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值