一 概念
一组进程中每个进程都等待此组进程中其他进程所占有的,因而永远无法得到的资源,这种现象称为进程死锁。
产生的条件
- 资源独占:一个资源在同一时刻只能被分配给一个进程。
- 不可剥夺:资源申请者不能强行的从资源占有者手中夺取资源。
- 保持申请:进程在占有部分资源后还可以申请新的资源。
- 循环等待:存在一个进程等待队列。
上述条件同时满足时,死锁才会发生。
根本原因是系统提供的资源个数小于并发进程所需的该类资源。
可分为竞争资源产生的死锁、进程通信产生的死锁、其他原因等。
二 死锁的处理
- 不让死锁发生:死锁预防、死锁避免。
- 允许死锁发生,当死锁发生时能检测出来加以消除:死锁检测、死锁恢复。
死锁预防
静态策略
-
预先分配策略:破坏了死锁产生的保持申请的条件。在进程运行前一次性的向系统申请它所需要的全部资源,满足则分配,不满足则进程不投入运行。
缺点:
资源利用率低
进程运行前可能不知道他需要的全部资源 -
有序分配策略:事先将所有资源类完全排序,进程必须按资源编号的由小到大的次序申请资源。如果所有进程申请资源时遵守上述规定,则系统不会死锁。破坏了循环等待。
死锁避免
动态策略,不是对申请进程有关资源的命令加以限制,而是对进程发出的每一个系统能够满足的资源申请命令实施动态检查,并根据检查结果决定是否实施资源分配。
- 银行家算法:资源分配算法+安全检测算法。
死锁检测
- 类似银行家的安全检测算法。
- 检测时刻:进程等待时(进程资源申请时可能发生死锁)、定时检测、资源利用率低时检测。
死锁恢复
- 系统重启、终止进程、剥夺资源、进程回退。
鸵鸟算法
- 对死锁采取视而不见的处理方法,目前实际系统采用最多的一种策略,当死锁真正发生且影响系统正常运行时再手动干预——重启。