死锁定义
多个进程在并发执行过程中因争夺互斥资源而造成的一种僵局。当这种僵局出现时,其中一组进程或所有进程都处于永远等待的状态,若无外力作用,这组进程或所有进程都无法继续推进,这种僵局就是死锁。
死锁与死循环的区别
- 死锁具有偶然性,死循环具有必然性
- 进程处于死锁状态时处于阻塞状态,不占用CPU,死循环占用CPU
- 死锁是由于并发进程之间争夺资源产生的,死循环是由于程序设计不当产生的
死锁与饥饿的区别
死锁状态的进程是除了CPU以外的资源还有其他的资源也未得到,即使将CPU分配给它也不能执行;而饥饿状态时其他资源已经获得只是没有CPU进行调度,一旦将CPU分配给它就能够执行
死锁产生的原因
- 根本原因是系统资源不足
- 进程推进顺序不当
死锁的四个必要条件
- 互斥条件。进程对所获得的资源进行排他性使用,任一时刻的一个资源只能被一个进程占用
- 请求和保持条件。一个进程请求资源得不到满足而阻塞自己时并不释放已经分配给它的资源
- 不可抢占条件。进程所获得的资源在没有使用完毕以前不能被其他进程抢占,只能由占用该资源的进程自己释放
- 循环等待条件。若干个进程形成一个循环等待链,链中每一个进程都在等待该链中下一个进程所占用的资源
死锁的预防
1.破坏请求和保持条件
每个进程在运行之前一次性申请所需要的全部资源,资源未获得不运行
2.破坏不可抢占条件
采用抢占式资源分配策略
3.破坏循环等待条件
死锁的避免之银行家算法
思想:运行进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性,保证至少有一个进程能够运行到结束,并在安全运行过程中不断地回收已经运行结束地的进程的资源,再安全地分配给其他需要改资源的进程,直至全部进程都能够运行结束,只有再满足这种情况下系统才进行资源分配。