死锁

小明一家就是这么饿死的——死锁

我离成功只差一双匡威——死锁
  • 哲学家就餐问题
    五个哲学家围圆,哲学家需要思考休息吃饭,但只有5支筷子
    吃饭使用两支筷子,每次只取一支筷子,且只能取身边的筷子,吃完放下筷子。

  • 死锁的概念
    两个或多个进程无限期地等待永远不会发生地条件地一种系统状态,结果每个进程都永远阻塞。
    在两个或多个进程中,每个进程都持有某种资源,但又仅需申请其他进程已持有的某种资源。此时每个进程都拥有其运行时所需的一部分资源,但又都不够,从而每个进程都不能向前推进,陷于阻塞状态。

  • 死锁的起因
    进程对独占性资源(键盘,打印机等)的竞争而产生死锁
    并发进程的请求和释放资源的顺序不当而产生死锁
    不争取的PV操作也可能产生死锁
    ** 系统资源有限并不会导致死锁**

  • 死锁的一些结论
    参与死锁的进程至少是2个
    参与死锁的进程至少有2个已经占有资源
    参与死锁的所有进程都在等待资源
    参与死锁的进程是当前系统所有进程的子集
    死锁会浪费大量系统资源,甚至导致系统崩溃

  • 死锁的必要条件
    1.互斥条件:进程互斥使用资源,资源具有独占性
    2.不剥夺条件:进程访问完资源前不能被其他进程强制剥夺
    3.部分分配条件:区别于全部分配,进程边运行边申请资源
    4.环路条件:多个进程构成环路,环中每个进程已占有资源被前一个进程申请,想申请的资源被后一个进程占用

    逻辑环路

  • 解决死锁

策略 方法
预防策略 通过设置限制条件,破坏4个必要条件中的一个或多个来防止死锁
避免策略 不事先采取限制区破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估分配资源是否会让系统进入死锁状态,若是,则拒绝此次分配资源,从而避免死锁的方式
检测策略、恢复策略 允许死锁产生,但通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统已发生的死锁清除,将进程从死锁状态解脱出来
  • 预防策略
    破坏互斥条件(难),破坏不剥夺条件(代价大,不稳定),破坏部分分配条件(预先静态分配),破坏环路条件(有序资源分配)
    较易实现,早期广泛使用,但限制太严格,造成资源利用率和吞吐量降低

  • 预先静态分配,破坏部分分配条件
    策略:进程运行前将所需资源一次性全部分配给它,因此进程再运行过程中不再提出资源请求,从而避免出现阻塞或死锁。
    特点:所需资源不能全部满足时,执行会被延迟;运行前估算资源需求,应用开销增大;资源被占而不用,资源利用率低
    改进:可将资源分配的单位由进程改为程序步

  • 有序资源分配,破坏环路条件
    策略:系统中每个资源分配有以一个唯一序号,进程每次申请资源时,只能申请序号更大的资源,分配资源时检查资源序号是否复合递增规定

  • 避免策略
    银行家算法
    只需要较弱的限制条件,可获取较高的资源利用率和吞吐量,但算法难度大

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

  • Windows和Linux采用何种死锁解决方案
    死锁解决算法复杂,取得的效益差,因此现有操作系统认为死锁不会发生而不做处理 ,留给用户进行操作:类似鸵鸟策略,对危险视而不见。

你可能感兴趣的:(死锁)