死锁

一、死锁概念

定义:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态。(每个进程都永远阻塞)

另一定义:在两个或多个进程中,每个进程都持有某种资源,但又继续申请其他进程已持有的某种资源。此时每个进程都拥有其运行所需的一部分资源,但是又都不够,从而每个进程都不能向前进行,陷入阻塞状态。

 

二、死锁起因

系统资源有限

     资源数目不足,进程对资源的竞争二产生死锁

并发进程的推进顺序不当

     进程请求资源和释放资源的顺序不当,导致死锁

不正确的P-V操作也可能带来死锁

 

三、死锁预防策略

1、死锁的必要条件

互斥条件

  • 进程互斥使用资源,资源具有独占性

不剥夺条件

  • 进程在访问完资源前不能被其他进程强行剥夺

部分分配条件

  • 进程边运行便申请资源,临时需要临时分配(区别于全部分配)

环路条件

  • 多个进程构成环路(每个进程已占有的资源被后一个进程申请,而自己所申请的资源被前一个进程所占用)

 

2、解决死锁的策略

预防死锁

  • 通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个来防止死锁。

破坏互斥条件(难)、破坏不剥夺条件(代价大)

破坏部分分配条件(预先静态分配)、破坏环路条件(有序资源分配)

 

较易实现,(早期)广泛使用

缺点:由于限制太严格,导致资源利用率和吞吐量降低

 

避免死锁

不事先采取限制区破坏产生死锁条件,而是在资源分配过程中,用某种方法(可以是算法)去评估若分配资源是否会让系统进入死锁状态,若是,则拒绝此次分配资源,从而避免死锁发生。

只需要较弱的限制条件,可获得较高的资源利用率和系统吞吐量。缺点:实现较难。

 

检测和恢复死锁

允许死锁发生,但可通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。

缺点:

  • 检测方法复杂,实现难度大
  • 恢复方法靠人工。撤销一些进程,回收资源再分配

 

预先静态分配法

目的:破坏部分分配条件

策略:

进程运行前将所需资源一次性全部分配给它。

特点:

  • 执行可能被延迟:所需资源不能全部满足时。
  • 应用开销增大:运行前估计资源需求。
  • 资源利用率低:资源被占用而不用。

改进

资源分配的单位由进程改为程序步。

 

有序资源分配法

目的:破坏环路条件,使环路无法构成

策略:

  • 系统中的每个资源分配有一个唯一序号
  • 进程每次申请资源时只能申请序号更大的资源

 

windows和Linux没有解决死锁,需要用户自行处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值