死锁概念
所谓死锁,是指 两个以上 的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象
理解
两个以上进程,要用 对方已经占用的资源,但是都不给对方使用,导致都无法继续执行
PV操作 与 死锁
PV操作可以实现进程的 互斥、同步、前趋图,但是,因为PV操作,当一个进程占用资源,另一个进程就要等待,所以才导致的死锁
死锁的四大条件
- 互斥
- 保持和等待
- 不剥夺(不抢资源)
- 环路(互相等待对方)
死锁的处理
死锁的预防
打破四大条件
死锁的避免
银行家算法
死锁的检测与解除
鸵鸟策略
不予理睬
死锁与资源的计算公式
死锁的最大资源数
(w - 1) * m <= n
解释:
- m为进程的个数
- w为每个进程所需的资源数
- n为可用资源数
不会死锁的最小资源数
(w - 1) * m + 1 <= n
解释:
- m为进程的个数
- w为每个进程所需的资源数
- n为可用资源数
例子-对上面公式的理解
系统有 5 个进程,每个进程都需要 4 个系统资源,有以下3钟情况
当 可用资源<4 时
当 可用资源<4 时,没有一个进程能执行,必然死锁;
| 进程1 | 进程2 | 进程3 | 进程4 | 进程5 |
|---|---|---|---|---|
| 资源1 | X | X | X | X |
| 资源2 | X | X | X | X |
| 资源3 | X | X | X | X |
| X | X | X | X | X |
当 15>=可用资源>=4 时
当 15>=可用资源>=4 时,可能死锁,也可能不会死锁
总结:15 是导致死锁的最大资源数
不会死锁
4 个资源都分配给一个进程,不会产生死锁,如下图:
| 进程1 | 进程2 | 进程3 | 进程4 | 进程5 |
|---|---|---|---|---|
| 资源1 | X | X | X | X |
| 资源2 | X | X | X | X |
| 资源3 | X | X | X | X |
| 资源4 | X | X | X | X |
死锁
15个资源 平均分配给 5个进程,都无法执行,产生死锁
| 进程1 | 进程2 | 进程3 | 进程4 | 进程5 |
|---|---|---|---|---|
| 资源1 | 资源4 | 资源7 | 资源10 | 资源13 |
| 资源2 | 资源5 | 资源8 | 资源11 | 资源14 |
| 资源3 | 资源6 | 资源9 | 资源12 | 资源15 |
| X | X | X | X | X |
当 可用资源>=16 时
当 可用资源>=16 时,不可能产生死锁,一定能执行下去。即使将 16个资源 平均分配给 5个进程,那也有 1个进程用 4个资源,满足执行条件
总结: 16 是不会死锁的最小资源数
| 进程1 | 进程2 | 进程3 | 进程4 | 进程5 |
|---|---|---|---|---|
| 资源1 | 资源5 | 资源8 | 资源11 | 资源14 |
| 资源2 | 资源6 | 资源9 | 资源12 | 资源15 |
| 资源3 | 资源7 | 资源10 | 资源13 | 资源16 |
| 资源4 | X | X | X | X |
参考:
https://blog.csdn.net/qq_71654538/article/details/132819749