天天看点

操作系统知识——进程死锁

用自己理解的语言描述,如有错误,请疯狂打脸没关系,希望能够指出来。

0. 死锁定义

两个以上的进程要求使用对方已占有的资源,形成互相等待,导致无法继续运行。

1. 临界条件

设各个进程消耗的资源为 k1、k2、k3 ···,一共有n个进程。

则系统一定不产生死锁至少需要的资源数为(无论资源怎么分配都不会产生死锁):

k = (k1 + k2 + k3 + ··· + kn) - n + 1

主要思想就是,先给各进程分配资源,使其还差一个资源就可运行,然后给某一个进程分配资源使其运行,这个进程结束后释放的资源就可以供其他的进程使用(这个思想只是为了求出最少资源数,实际分配方法不一定是这样的)。

如下图,黄色为已分配资源,白色未分配资源,每个进程只差一个资源即可运行,然后为任何一个进程分配一个资源使其运行,待其结束释放资源,又为其他进程使用,这样一直不会产生死锁。

操作系统知识——进程死锁

这真的是肆意分配时需要的最少资源了,少一个也不行。

来看看少一个时,可能出现死锁的情况,,,额,很简单,就拿上图说吧。

有3个进程,n = 3

各进程所需资源为 k1 = 3,k2 = 6,k3 = 5

肆意分配时,系统一定不产生死锁至少需要的资源数为:

k = (3+6+5) - 3 + 1 = 12

如果系统只有11个资源,就如上图情况所示,各个进程只差一个资源,都在等待其他进程的资源,产生了死锁现象。

而这个11就是该系统发生死锁的最大资源数,用公式表示就是(k1 + k2 + k3 + ··· + kn) - n。

2. 产生死锁的必要条件

  1. 互斥条件
  2. 请求保持条件
  3. 不可剥夺条件
  4. 环路条件

3. 死锁的处理

  1. 鸵鸟策略,即不理睬策略
  2. 预防策略
  3. 避免策略:典型算法,银行家算法
  4. 检测与解除策略
未完待续,有新的理解再补充。

继续阅读