目录
1.死锁的定义
2.死锁产生的时间
2.1系统资源的竞争
2.2进程推进顺序非法
2.3信号量使用不当也会造成死锁。
3.死锁产生的必要条件
4死锁预防
5.安全状态与不安全状态
1.死锁的定义
所谓死锁,是指多个进程因竞争资源而造成的一种僵局(互相等待)若无外力作用,这些进程都将无法向前推进。
2.死锁产生的时间
2.1系统资源的竞争
通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如此赛季、打印机等。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的
2.2进程推进顺序非法
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。
例如:并发进程P1,P2分别保持了资源R1,R2,而进程P1申请资源R2、进程P2申请资源R1时,两者都会因为所需资源被占用而阻塞。
2.3信号量使用不当也会造成死锁。
进程间彼此相互等待对方发来的消息,也会使得这些进程间无法继续向前推进。
例如:进程A等待进程B发的消息,进程B又在等待进程A发的消息,可以看出进程A和B不是因为竞争同一资源,而是等待对方的资源导致死锁
3.死锁产生的必要条件
产生死锁必须同时满足以下4个条件,只要其中任意一个条件不成立,死锁就不会发生
1互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占有,此时若有其他进程请求该资源,则请求进程只能等待。
2不剥夺条件:进程所获得的资源在未使用完之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放
3请求并保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
4循环等待条件:存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。(死锁产生的必要不充分条件)
为使系统不发生死锁,必须设法破坏产生死锁的4个必要条件之一,或允许死锁产
生,但死锁发生时能检测出死锁,并有能力实现恢复。
4死锁预防
设置某些限制条件,破坏产生死锁的4个必要条件中的一个或几个,以防止发生死锁。
(1)破坏互斥条件
若允许系统资源都能共享使用,则系统不会进入死锁状态。但有些资源根本不能同时访问如打印机等临界资源只能互斥使用。所以,破坏互斥条件而预防死锁的方法不太可行,而且在有的场合应该保护这种互斥性。
(2)破坏不可剥夺条件
当有一个已保持了某些不可剥夺资源的进程请求新的资源而得不到满足,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着,一个进程已占有的资源会被暂时释放,或者说是被剥夺,从而破坏了不可剥夺条件。该策略的反复申请和释放资源会增加系统开销,降低系统吞吐量。
(3)破坏请求并保持条件
采用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。一旦投入运行,这些资源就一直归它所有,不再提出其他资源请求,这样就可以保证系统不会发生死锁。该策略浪费系统资源,甚至导致饥饿现象,个别资源长期被其他进程占用时,将致使等待该资源的进程迟迟不能开始运行。
(4)循环等待条件
采用顺序资源分配法,给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源R1,则该进程在以后的资源申请中就只能申请编号大于R2的资源
5.安全状态与不安全状态
所谓安全状态,是系统能按某种进程推进顺序(P1, P2, …, Pn),为每个进程Pi分配其所需的资源,直至满足每个进程对资源的最大需求,进而使每个进程都可顺利完成的一种系统状态。此时,称进程推进顺序(P1, P2, …, Pn)为安全序列。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。虽然并非所有不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,就有可能进入死锁状态。而只要系统处于安全状态,其就不会进入死锁状态。因此,避免死锁的实质在于,使系统在进行资源分配时不进入不安全状态。