第五章 死锁与饥饿
死锁定义:一组并发进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的,因而永远无法得到的资源,这种现象称为进程死锁。
死锁的条件
资源独占:一个资源在同一时间只能分给一个进程(输出设备等)
不可剥夺:资源只能由其占有者在使用完后资源释放(已占不能被抢)
保持申请:进程在占有部分资源后还可以申请新的资源,而且在申请新资源的时候并不释放它已经占有的资源(不满足的已占也不释放)
循环等待:存在一个循环等待链(你等我,我等你)
死锁的处理方法(预防、避免、检测、恢复)
死锁预防:通过破坏死锁产生的必要条件实现,对进程有关资源的活动加限制,所有进程遵循这种限制,即可保证没有死锁发生。
预防方法:
(静态)预先分配法:运行前申请所需全部资源(破坏保持申请条件);
系统:能够满足,全部分配;否则,一个也不分配。
缺点:资源利用效率低;一次提出申请困难。
(动态)有序分配法:按申请次序(破坏循环等待链)
(动态)死锁避免:在进程运行之前,为其分配所需的全部资源(预先分配策略)
银行家算法
死锁检测算法