operating system

思考如下问题

  1. 为什么会产生死锁?产生死锁有什么条件?
  2. 有什么方法可以解决死锁

1. 死锁的概念

1.1 死锁的定义

资源竞争导致僵局。需要外力干预。

1.2 死锁产生的原因

  1. 资源竞争
  2. 进程推进顺序非法
  3. 竞争非剥夺性资源

危险区,禁区

产生死锁的必要条件需要同时满足如下 4 个条件

  1. 互斥条件:请求的资源为临界资源
  2. 请求和保存条件:申请新资源、保持旧资源
  3. 不剥夺条件:已获得的资源,在使用完之前,不被外力剥夺
  4. 环路等待条件:互相等待资源

2. 死锁的处理策略

2.1 死锁预防

设置某些限制条件,破坏产生死锁的必要条件之一

  1. 一次将资源全部分配(摒弃 “请求和保持” 条件)
  2. 当请求的资源得不到满足时,放弃已分配资源(摒弃 “不剥夺” 条件)
  3. 对资源的申请必须按一定顺序进行(摒弃 “环路等待” 条件)

2.2 避免死锁

在资源的动态分配过程中,用某种方法去防止系统进入不安全状态。

2.3 死锁的检测与解除

检测 :检测出死锁原因,采取措施,接除死锁。

解除 :剥夺资源或通过撤销进程,收回一些资源。

3. 死锁预防

3.1 破坏互斥条件

3.2 破坏不剥夺条件

3.3 破坏请求并保持条件

3.4 破坏循环等待条件

4. 死锁避免

4.1 系统安全状态

4.2 银行家算法

  1. 进程需求资源数如果大于现有资源数,不分配
  2. 预分配,检查是否存在一个进程序列,可以安全执行完成。存在则分配,否则不分配。

银行家算法样例

4.3 安全性算法举例

5. 死锁检测和解除

5.1 资源分配图

5.2 死锁定理

  1. 在资源分配图中,找到一个可获得所有资源的进程结点Pi,使之变成孤立点(释放资源)
  2. 再找另一个可获得所有资源的进程结点 Pj ,使之变成孤立点
  3. 重复 2
  4. 如果所有进程都变成孤立点,则没有死锁;否则,存在死锁 。

5.3 死锁解除