「死锁避免」是一种解决死锁的方法。即在分配资源时判断是否会出现死锁问题,如不会死锁,则分配资源。
注意区分与预先静态分配法的区别。死锁避免是一种动态分配,在对进程进行资源分配的过程中,通过检查每一步是否会导致死锁,来决定是否分配资源。而预先静态分配法是静态分配在进程开始运行前,预先分配其所需的所有资源。
可以通过银行家算法解决
系统有 3 个进程(P1、P2 和 P3), 共有 12 台打印机,P1 总共要求 10 台打印机,P2 和 P3 分别要求 4 台和 9 台,在
解:
根据安全状态的定义,需要尝试着找到一种资源分配方式,使得所有资源都能被释放。首先给 P2 分配 2 台打印机,此时系统还剩下 1 台打印机。P2 执行完毕后,释放所有 4 台打印机,此时剩下 5 台打印机。
然后将 5 台打印机分配给 P1,此时系统没有任何可用打印机。P1 执行完毕后,释放所有 10 台打印机,此时就可以满足 P3 需求。综上,系统安全。
某时刻系统 ABC 资源可用数分别为 3,3,2,此时各个进程有
进程 | 已分配A | 已分配B | 已分配C | 还需要A | 还需要B | 还需要C |
---|---|---|---|---|---|---|
P0 | 0 | 1 | 0 | 7 | 5 | 3 |
P1 | 2 | 0 | 0 | 3 | 2 | 2 |
P2 | 3 | 0 | 2 | 9 | 0 | 2 |
P3 | 2 | 1 | 1 | 2 | 2 | 2 |
P4 | 0 | 0 | 2 | 4 | 3 | 3 |
判断系统是否处于安全状态
解:计算每个进程还需要的资源数
进程 | 还需要A | 还需要B | 还需要C |
---|---|---|---|
P0 | 7 | 4 | 3 |
P1 | 1 | 2 | 2 |
P2 | 6 | 0 | 0 |
P3 | 0 | 1 | 1 |
P4 | 4 | 3 | 1 |
可以断言目前系统处于安全状态,因为此时刻序列