#### 参考资料

- 《操作系统的设计与实现》

#### 概述

两个进程相互请求对方占用的资源导致阻塞，这种情况称为死锁。

软、硬件资源都有可能产生死锁。

#### 资源

资源：在任何时刻只能被单个进程使用的任何对象。

可抢占资源：可以从拥有它的进程那里拿走的资源，且不产生任何有害的效果。

不可抢占资源：不可以从拥有它的进程那里拿走的资源，否则将导致计算错误。

死锁与不可抢占资源有关。

#### 死锁的原理

##### 死锁的条件

死锁发生的四个必要条件：

1. 互斥条件。
2. 持有且等待条件。
3. 不可抢占条件。
4. 环路等待条件。

只有四个条件都满足才能发生死锁。缺了一个都不会发生死锁。

##### 死锁的模型

使用资源分配图来作为描述死锁的模型。

- 圆形表示进程。
- 方形表示资源。
- 从方形到圆形的箭头线：资源被进程占用。
- 从圆形到方形的箭头线：进程正在请求该资源，并处理阻塞等待状态。

#### 处理死锁

##### 鸵鸟算法

处理死锁的代价通常很大，如果处理死锁的收益小于它的代价，那就不要管它，就像把头埋进沙子里的鸵鸟那样。

##### 死锁的检测和恢复

这种技术就是检查资源图里是否有环路。如果有，则关闭环里的一个进程。如果死锁还没打破，就再关闭进程，直到环路被打破。

##### 死锁的预防

让死锁的四个条件不要同时具备，这样死锁就不会发生了。

##### 避免死锁

通过小心的分配资源来预防死锁。