死锁问题

死锁」是指操作系统中的一组进程,由于竞争系统资源或由于彼此通信而永远阻塞,称这些进程处于「死锁」状态。死锁的产生是与资源分配策略和并发进程的执行速度有关。

例如考虑一个独木桥

img-2024-04-12 18-35-51.png

桥可以看成一种资源,只能单向行驶。如上图,就发生了死锁。

如果死锁发生,可以通过一辆车倒退来解决问题,即释放已占有的资源。这一过程可能需要多辆车倒退,且可能发生饥饿现象。

或计算机系统中,假设有 A 进程和 B 进程都需要访问打印机和绘图仪

img-2024-04-12 18-41-35.png

其中,A 进程先申请打印机,在释放打印机前又申请了绘图仪。B 进程先申请绘图仪,在释放绘图仪前又申请了打印机。

原因

资源有限

进程竞争资源,而资源不足。当系统中供多个进程所共享的资源不足以同时满足进程的需要时,就可能引起进程对资源的竞争而产生死锁。

设系统某个资源有 个,有 个进程,每个进程需要 个该资源,则当满足

系统不会引起死锁。可以理解为,如果每个进程都已经消耗了 个资源,则共消耗了 份资源。此时只需要还有一份资源,就可以保证某一个进程满足所有 个需求顺利运行,从而释放资源,防止资源有限造成的死锁。

系统资源还可分为可剥夺资源非可剥夺资源。其中可剥夺资源不会引起系统错误,例如 CPU,内存资源等。

不可剥夺资源的数量不能满足各个进程的运行需求时,争夺资源陷入僵局,产生死锁。

进程推进顺序不合适

进程推进顺序不合适。在进程运行过程中,当请求和释放资源的顺序不当时,可能会导致进程死锁。

img-2024-04-12 19-13-08.png

(选择题)

必要条件

Coffman 等人总结了死锁产生的四个必要条件

  • 互斥条件:一个资源一次只能被一个进程所使用。
  • 不剥夺条件:一个资源仅能被占有它的进程所释放,而不能被其他的进程强行抢占。
  • 部分分配:一个进程已占有分给它的资源 ,但仍然要求其他资源。
  • 环路条件:在系统中存在一个由若干个进程形成的环形请求链,其中的每一个进程均占有若干种资源中的某一种,同时还要求下一个进程所占有的资源。

为了更好地分析是否出现死锁,可以通过进程-资源分配图分析

处理死锁的基本方法

分为预防,避免和检测