死锁

死锁的定义

  • 一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
  • 如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

为什么会出现死锁?

资源数量有限、锁和信号量错误使用

资源的使用方式:

“申请—分配—使用—释放”模式

可重用资源:可被多个进程多次使用

  • 可抢占资源与与不可抢占资源
  • 处理器、IO部件、内存、文件、数据库、信号量

可消耗资源:只可使用一次、可创建和销毁的资源

信号、中断、消息

活锁——》就绪

  • 产生死锁的必要条件
  • 互斥使用(资源独占)
  • 占有且等待(请求和保持,部分分配)
  • 不可抢占(不可剥夺)
  • 循环等待

死锁定理:

  • 如果资源分配图中没有环路,则系统中没有死锁
  • 如果图中存在环路则系统中可能存在死锁
  • 环路是死锁存在的必要条件
  • 如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件

解决死锁的方法:

  • 不考虑此问题(鸵鸟算法)
  • 不让死锁发生
  • 死锁预防
  • 静态策略:设计核实的资源分配算法,不让死锁发生
  • 死锁避免
  • 动态策略:以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配
  • 让死锁发生
  • 死锁检测与接触

死锁预防

定义:

  • 在设计系统时,通过确定资源分配算法,排除发生死锁的可能性
  • 具体的做法是:防止产生死锁的四个必要条件中任何一个条件发生

银行家算法

Dijkstra提出(1965)

仿照银行发放贷款时采取的控制方式而设计的一种死锁避免算法

死锁的解除:

重要的是以最小的代价恢复系统的运行

方法如下:

  • 撤销所有死锁进程
  • 进程回退(Roll back)在启动
  • 按照某种原则逐一撤销死锁进程,直到....
  • 按照某种原则逐一抢占资源(资源被抢占的进程必须回退到之前的对应状态),直到....

哲学家就餐问题第一种解决方案

操作系统死锁相关知识点介绍_Linux

为防止死锁发生可采取的措施

  • 最多允许4个哲学家同时坐在桌子周围
  • 仅当一个哲学家左右两边的筷子都客用时,才允许他拿筷子
  • 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之

哲学家就餐问题第二种解决方案

操作系统死锁相关知识点介绍_操作系统_02

哲学家就餐问题第三种解决方案

使用管程解决哲学家就餐问题

操作系统死锁相关知识点介绍_Linux_03

操作系统死锁相关知识点介绍_解决方案_04

哲学家就餐问题第四种解决方案

操作系统死锁相关知识点介绍_Linux_05

操作系统死锁相关知识点介绍_解决方案_06

操作系统死锁相关知识点介绍_解决方案_07

本讲重点

操作系统死锁相关知识点介绍_算法_08