深入理解操作系统[7]:死锁

死锁产生的原因

1. 竞争资源
  非剥夺性资源数量不能满足需求时,就可能产生死锁。
  竞争临时性资源引起死锁:由一个进程产生由另一个进程使用短暂时间后便无法使用的资源,比如进程产生的消息。
2. 进程间推进顺序的非法
  如请求和释放资源的顺序不当。


Tips
可剥夺性资源:进程获得该资源后,该资源可以被其他进程或系统剥夺。如CPU,主存;
非可剥夺性资源:系统把资源分配给进程后不能强行回收,智能等待进程用完后自行释放。如磁带机,打印机。



产生死锁的充分必要条件

  1. 互斥:一个资源不允许多个进程同时使用;
  2. 请求和保持(占用且等待):进程已经拥有部分资源,又提出新的资源请求;
  3. 剥夺条件(不可抢占):已获得资源未用完不释放;
  4. 环路等待:发生思索时必然存在一个进程资源环形链。
  前三个是必要而非充分条件,第四个条件是前三个条件的潜在结果。这四个条件共同构成了死锁的充分必要条件。


处理死锁的方法

1. 预防死锁
  加较强的限制条件,想办法打破至少一个必要条件。
    1. 互斥条件不可打破
    2. 摒弃“请求和保持”条件(间接预防)
      进程运行前一次性申请全部资源
      缺点:1资源严重浪费,恶化系统利用率;2使进程延迟运行
    3. 摒弃“不剥夺”条件(间接预防)
      申请新资源时要释放当前拥有资源
      缺点:1实现复杂,代价大;
         2反复申请和释放导致进程无限推迟,降低系统吞吐量。
    4. 摒弃“环路等待”条件(直接预防)
      系统把资源按类型进行线性排队,所有进程请求资源时严格按照资源序号的递增次序提出,防止出现环路。
      缺点:1序号必须相对稳定,限制了新设备类型的增加
         2作业/进程使用资源顺序与系统规定顺序不同时造成资源浪费
         3限制了用户编程。

2. 避免死锁
  允许三个必要条件的发生,在资源的动态分配过程中通过明智的选择确保永远不会到达死锁点。
  在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可避免发生死锁。避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态

进程启动拒绝:若一个进程的请求会导致死锁,则不启动它;
资源分配拒绝:若一个进程增加的资源请求会导致死锁,则不允许这一资源分配。(银行家算法)


Tips
安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称〈P1,P2,…,Pn〉序列为安全序列),来为每个进程 Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。


3. 死锁检测
  不限制资源访问或约束进程行为,只要可能就会给进程分配请求的资源。操作系统周期性的执行检测算法检测循环等待条件情况。检测到死锁后,需要某种策略来恢复死锁,称死锁恢复(比如取消所有死锁进程…)。

.
.
.
.
.
.


桃花仙人种桃树,又摘桃花换酒钱_

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值