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

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

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. 检测与解除策略

未完待续,有新的理解再补充。

发布了72 篇原创文章 · 获赞 87 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/maizousidemao/article/details/102290962