-
死锁
-
两个及以上的进程,由于竞争资源或者彼此通信造成的一种阻塞现象,若无外力作用,都无法推进下去。
-
两个及以上并发进程在请求资源时,永远得不到资源,发生的无限期等待。除非有其他的干预。
-
参加死锁的进程至少有两个占有资源;死锁严重地影响系统资源的利用率。
-
死锁进程都处于等待态,一定发生了循环等待。
-
死锁的类型
-
竞争资源
-
同种资源
-
不同种资源
-
-
进程通信:循环等待消息
-
其他原因:After You
-
-
死锁的必要条件(资源竞争引起的)
-
资源独占,一个资源同时只能分给一个进程
-
不可剥夺,资源申请者不能夺取资源
-
保持申请,占有资源后还能申请新资源,申请时不释放占有资源
-
循环等待,等待其他资源
-
当每类资源只有一个实例时,coffman条件是充要条件
-
-
资源分配图
-
一个点和边构成的二元组,点包含进程和资源,边包含分配边和申请边(定义5-2)。申请边指向方框,分配边来自某一圆点。
-
如果每类资源只有一个实例,则环路是死锁的充要条件。否则,环路是死锁的必要条件。
-
约简:①寻找一个没有请求边的点,②去除它的分配边,③寻找所有请求边可以被满足的进程,把请求边改成分配边,④重复直到没有请求边。
-
死锁定理:死锁的充要条件是资源分配图不可完全约简。
-
-
-
死锁的处理
-
静态预防(不让死锁发生)
-
按某种协议限制活动,实现简单,但进程违反约束仍会死锁。
-
预先分配策略
-
进程一次性申请所有需要的资源。破坏了“保持申请”。
-
资源利用率低,进程无法预知它需要的全部资源(分支不同资源不同)。
-
-
有序分配策略
-
设R为资源的集合,对每个资源分配一个整数,进程只能按照编号从小到大申请资源。若先需要大资源,后需要小资源,则可先占有小资源。破坏“循环等待”。
-
分配编号时,按照大多数进程使用的资源的次序来编号,先使用者排前面。
-
分配编号困难,按编号申请增加了进程负担,可能增加进程对资源的占有时间。
-
-
-
-
动态避免(不让死锁发生)
-
提高了资源的利用率,增加了系统开销。
-
对命令进行实时监测,拒绝不安全的命令。
-
安全:所有进程都能依次进行,对每一个进程以后需要的资源数量不大于系统当前的剩余量,和所有序列号在前的进程当前的占有量之和。
-
不安全的状态不一定是死锁状态,某个安全的序列不一定是最后的执行序列。
-
银行家算法
-
判断需求的资源是否满足要求,分配后安全则继续,否则收回资源。
-
n个进程及其最大的资源需求量需要事先预知。
-
判断的是顺序执行的次序,不能够判断交叉执行的次序。
-
变量:系统可用资源,进程所需最大资源量(常数,确定困难),进程占有的资源量,进程尚需的资源量,进程当前申请的资源量。
-
算法5-1
-
算法5-2
-
例5-4
-
-
-
检测
-
检测算法与银行家算法基本相同。
-
检测时,忽略不占有资源的进程。
-
死锁检测结果为下一步恢复提供准确的信息。
-
例5.6
-
-
检测时刻的关键因素
-
死锁发生的频率
-
频率较高,检测频率也高,开销增加,影响系统执行效率。
-
-
死锁涉及的进程数
-
死锁发生迹象(如进程等待时间过久)
-
-
检测时刻
-
进程等待时检测:开销大
-
定时检测
-
资源利用率降低时检测:死锁使可运行的进程数降低
-
在CPU利用率降低到某一界限时检测
-
-
交互式任务无响应
-
-
-
恢复
-
系统重新启动
-
终止进程
-
撤销所有参加死锁的进程:代价高,如撤销不占有资源的进程
-
逐一撤销参加死锁的进程
-
-
剥夺资源
-
剥夺死锁进程的部分或全部资源
-
逐步剥夺
-
一次剥夺
-
-
进程回退
-
让参加死锁的进程回退到未发生死锁的某个点处
-
开销大
-
保存快照代价大
-
消除影响困难
-
可能发生饥饿
-
-
-
-
鸵鸟算法
- 对死锁视而不见
-
-
有关问题的讨论
-
如果系统还知道进程有关资源的活动序列,则存在充要算法,然而这一般是不可能的。
-
由于消耗性资源(如消息)的存在,死锁的处理会变得更加困难。
-
处理通信死锁的技术:超时
-
-
当占有内存的进程无法进行时,不让该进程等待,而是为其分配外存空间。
-
-
饥饿与饿死
-
可能只涉及一个进程,等待会被释放,但不会分配给自己的资源。
-
即使系统没有发生死锁,某些进程也可能因不公平的资源分配策略而长时间等待,即无限延迟。
-
定义5.5
-
忙式等待的进程可能被饿死,忙式等待下的饥饿进程称为活锁。活锁可能解除。
-
解决方式:改进资源分配算法,考虑公平性和系统效率。
-
-
可复用资源死锁的静态分析
-
同种组合资源:相同类型的子资源构成的组合资源。
-
算法5-4
-
例5-7
-
同种组合资源死锁的必要条件:死锁进程所需的资源总量≥实例数+总进程数
-
04-05
1722