死锁:是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程将无法向前推进
死锁产生的原因:
1、系统资源的竞争
通常系统中的不剥夺的资源竞争,才可能产生死锁,对可剥夺的资源的竞争是不会引起死锁的。
2、进程推进顺序非法
进程在运行过程中,请求和释放的顺序不当,也同样会导致死锁。
3、死锁产生的必要条件,只要其中任一条件不成立,死锁就不会发生
互斥条件,不剥夺条件,请求和保持条件,循环等待条件。
互斥条件:某资源仅为一个进程所占有。此时若有其他资源请求该资源,则请求进程只能等待
不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走
请求和保持条件:进程已经保持了至少一个资源了,但又提出了新的资源请求,而该资源已被其他进程占用,此时请求被阻塞,但对自己已获得的资源保持不放
循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被链中下一个进程所请求。
死锁的处理策略:
1、破坏产生死锁的四个必要条件之一。预防死锁
2、避免死锁。银行家算法,如果系统现存的资源可以满足它的最大需求量,则按当前的申请量分配资源,否则就推迟分配。若测试该进程已占用的资源数与本次申请的资源数之和超过了该进程对资源的最大需求量,则拒绝分配资源。
2、死锁的检测及解除
资源剥夺法。挂起某些死锁进程,并抢占它的资源。
撤销进程法。强制撤销并剥夺这些进程的资源。可以按照优先级来撤销
进程回退法。进程回退时自愿释放资源而不是被剥夺。