操作系统总结系列之【死锁】

目录

死锁

what

why

形成原因:

产生死锁的四个必要条件:

how

预防死锁

避免死锁

检测死锁

解除死锁(恢复)


参考《操作系统精髓与设计原理》

死锁

what

多进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外部介入,它们都将无限等待下去。


why

形成原因:

客观因素,系统资源不足,如:两个进程都申请内存资源;

主观因素,进程(线程)执行顺序不当、资源分配不当。

产生死锁的四个必要条件:

  1. 互斥:任意时刻一个资源只能给一个进程使用;
  2. 不可剥夺:进程已获得资源,在未使用完之前,不能强行剥夺,只能在使用完成后由进程自己释放;
  3. 请求保持:当进程因请求资源而阻塞时,对已获得的资源保持不放;
  4. 循环等待:环路中每一个进程所占有的资源同时被另一个进程申请,形成一个环路,如下图所示。

事实上循环等待的成立蕴含了前三个条件的成立,可以通过破坏上述任意一个条件的成立来预防死锁发生

通常程序设计要求满足以上条件是正常的,如:为确保数据库的一致性和完整性,互斥是非常有必要的;进程间也不能随意进行资源的抢占。


how

预防死锁

间接预防:

  • 破坏互斥条件:一般来说不可以禁止,还要加以保证;
  • 破坏不可剥夺条件:1.当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源;2.允许一个进程抢占另一个进程的资源(进程优先级不同情况下适用)
  • 破坏请求保持条件:1.静态分配,一次性请求所有需要资源,并阻塞该进程直到所有请求都满足;2.动态分配,允许进程获得一部分资源后开始运行,在运行过程中逐步释放已经使用完毕的资源,再请求新的资源

直接预防:

  • 破坏循环等待条件:资源排序,将紧缺的资源编为大号,只有获得较小编号的资源后才能继续请求大号,释放过程相反,如下图。

避免死锁

由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全的状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法

检测死锁

见死锁检测算法。

解除死锁(恢复)

一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。
死锁解除的主要方法有:

  1. 取消所有死锁进程(最常用方法);
  2. 回滚重启所有进程(原来的死锁可能再次发生);
  3. 连续取消死锁进程直到不再存在死锁(每终止一个进程就需要重新检测死锁);
  4. 连续抢占资源直到不再存在死锁(每抢占一次资源就需要重新检测死锁);

方法3.4基于以下原则选择取消进程或抢占进程资源

运行完所需时间、进程优先级最低、已占用系统资源量、处理器消耗时间最少、产生的输出最少。

猜你喜欢

转载自blog.csdn.net/qq_37348221/article/details/113681547
今日推荐