第七章:死锁
作者:互联网
第七章:死锁
在多道程序系统中,由于多个进程并发执行,大大改善了系统资源的利用率并提高了系统处理能力,但也带来了新的问题--死锁。
死锁
在多道程序环境中,多个进程可以竞争有限数量的资源。当一个进程申请资源的时候,如果此时无可用资源,则该进程进入waiting state。有时如果所申请的资源被其他进程占有,则该进程有可能再也无法改变其状态,这种情况叫做死锁。多个进程由于竞争有限资源导致僵局(互相等待),若无外力作用,则这些进程都无法向前推进。
ps: 此处注意理解 “互相等待” 的具体含义。同时注意:一般 os 不提供死锁预防措施。
7.1 系统模型
系统资源:有限种类,有限实例。
正常模式下,进程按照, 申请(request),使用(use) ,释放(release)来使用资源。
7.2 死锁特征
死锁的识别和检测是有一定难度的,因为它只在某些调度情况下出现。
四个死锁的必要不充分条件
-
互斥(mutual exclusion):
-
占有并等待(hold and wait):
-
非抢占(no preemption):
-
循环等待(circular wait):
资源分配图:(Resource Allocation Graph)--- to describe the deadlock
黑点表示资源实例,注意下分配边和申请边。
要求:通过观察图判断是否有deadlock,下面列举三个例子
结论:(a),(c) 无死锁,(b)有死锁
我们可以总结发现: 如果分配图中无环则系统无死锁,若有环则可能存在死锁。如果每种资源的实例只有一个,则存在环 等价于 出现死锁(环上的进程出现死锁)。如果每种资源有多个实例,则有环不一定会出现死锁,此时为必要不充分条件。
7.3死锁处理方法
-----设备利用率低,系统吞吐率低
-
Deadlock Prevention // Deadlock Avoidance 确保系统不进入死锁状态。
-
允许系统进入死锁状态,然后 Deadlock Detection Recovery from Deadlock
-
直接忽略问题,认为死锁不会发生。
7.4 Deadlock Prevention
确保死锁的四个必要条件至少有一个不成立即可预防死锁。
-
互斥(mutual exclusion):通常不能通过否定互斥条件预防死锁。因为有些资源本省就是非共享的,例如一个互斥锁。
-
持有并等待(hold and wait):保证每个进程在申请资源的时候不能占有其他资源。(all or none)缺点:资源利用率低且可能会出现starvation
-
无抢占(no preemption):如果一个进程持有资源并申请另一个不能立即分配的资源,那么这个进程的资源都可被抢占(隐形释放)。
可能会导致 live lock
-
循环等待(circular wait):对所有资源全排序,要求进程按递增顺序申请资源。
7.5 Deadlock Avoidance
一个最简单的模型:算法检查资源分配状态(进程可分配资源,已分配资源,最大需求),确保循环等待条件不会成立。
安全状态(safe state):如果系统能按一定顺序为每个进程分配资源(不超过它的最大需求),仍然避免死锁,那么系统的状态就是安全的(safe)。更为正式地说,只有存在一个安全序列(safe sequence),系统才处于安全状态。进程序列〈P1,P2,…,Pn.〉在当前分配状态下为安全序列是指:对于每个Pi,,Pi,仍然可以申请的资源数小于当前可用资源加上所有进程Pj(其中j<i)所占有的资源。在这种情况下,进程pi需要的资源即使不能立即可用,那么pi,可以等待直到所有pj,释放资源。当它们完成时,pi;可得到需要的所有资源,完成给定任务,返回分配的资源,最后终止。当pi.终止时,pi +="" 1可得到它需要的资源,如此进行。如果没有这样的序列存在,那么系统状态就是非安全的(unsafe)。<="" span="">
标签:系统,互斥,死锁,第七章,进程,Deadlock,资源 来源: https://www.cnblogs.com/Ivessas/p/14748167.html