死锁(5.1)

死锁

1 死锁的基本概念

1.1 死锁的定义

死锁是发生在一组相互合作或竞争的线程或进程中的一个问题。因此可以定义为:一组竞争系统资源或相互通信的进程相互的“永久”阻塞。若无外力作用,这组进程将永远不能继续执行。
在这里插入图片描述

1.2死锁产生的原因进程

(1)资源数小于要求该种资源的进程数

//A、B分别代表某种资源
进程P
......
get(A);
......
get(B);
......
release(A);
......
release(B);
......

进程Q
......
get(B);
......
get(A);
......
release(B);
......
release(A);
......

当进程P占用资源A,进程Q占用资源B,接下来导致进程P无法获得B资源,进程Q无法获得A资源。即双方都占用对方所需要的资源,这样就发生了死锁。
(2)进程的推进顺序非法
在这里插入图片描述
在这里插入图片描述

2 死锁的预防与避免

2.1 产生死锁的四个必要条件
  • 互斥条件
  • 请求保持条件
  • 不剥夺条件
  • 环路条件
2.2 死锁的预防

采用资源的有序分配:令所有资源排队,并赋予不同的序号。当进程请求资源时,必须严格按递增的次序提出,从而消除了环路。
缺点:

  • 定好序号后,增加新设备类型受到限制。
  • 尽管定序号时考虑大多数作业使用资源的顺序。但会发生使用顺序与规定顺序不一致的情况,造成资源浪费。
  • 限制用户简单、自主地编程。死锁的预防措施低效!
    可以去掉“请求保持条件”,“不剥夺条件”,“环路条件”,但不能去掉“互斥条件”。
2.3 死锁的避免

避免死锁是通过明智的选择,确保系统永远不会到达死锁点。即动态地决定是否分配资源给进程!

  • 安全状态是指系统至少存在一个安全序列<P1, P2, …, Pn>,按照这个序列为进程分配资源,直到满足最大需求,每个进程都可顺序完成。
  • 若系统不存在这样一个安全序列,则系统处于不安全状态。

在这里插入图片描述

2.4 死锁的检测与解除

资源分配图的简化

  • 在图中找出一个既不阻塞又非独立的进程结点pi,消去pi所有的请求边和分配边,使之成为孤立结点。
  • 在进行一系列简化后,能消去图中所有的边,使所有进程都成为孤立结点,则称该图是可以完全简化的,否则若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。

在这里插入图片描述
死锁的解除
当发现死锁时,应立即把它们从死锁中解脱出来,常采用的两种方法是:

  • 剥夺资源:从其它进程剥夺足够数量的资源给死锁进程。
  • 撤消进程:撤消的原则是
      为解除死锁状态所需撤消的进程数目最小。
      撤消进程所付出的代价最小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值