系统的两种状态

「死锁避免」是一种解决死锁的方法。即在分配资源时判断是否会出现死锁问题,如不会死锁,则分配资源。

注意区分与预先静态分配法的区别。死锁避免是一种动态分配,在对进程进行资源分配的过程中,通过检查每一步是否会导致死锁,来决定是否分配资源。而预先静态分配法是静态分配在进程开始运行前,预先分配其所需的所有资源。

「死锁避免」会对系统的状态进行分析,可分为安全状态不安全状态

银行家算法

可以通过银行家算法解决

例题

系统有 3 个进程(P1、P2 和 P3), 共有 12 台打印机,P1 总共要求 10 台打印机,P2 和 P3 分别要求 4 台和 9 台,在 时 刻,进程 P1、P2 和 P3 已分别获得 5 台、2 台和 2 台打印机,问此时,系统是否安全?

解:

时刻,系统还剩下 台打印机,此时 还需要 台, 还需要 台,此时 还需要 台。

根据安全状态的定义,需要尝试着找到一种资源分配方式,使得所有资源都能被释放。首先给 P2 分配 2 台打印机,此时系统还剩下 1 台打印机。P2 执行完毕后,释放所有 4 台打印机,此时剩下 5 台打印机。

然后将 5 台打印机分配给 P1,此时系统没有任何可用打印机。P1 执行完毕后,释放所有 10 台打印机,此时就可以满足 P3 需求。综上,系统安全。

例 2

某时刻系统 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

可以断言目前系统处于安全状态,因为此时刻序列 能满足安全性条件。