死锁现象,无须多言,人人明白。
一、死锁必要条件
形成死锁有四个必要条件:
1、互斥:
一个进程占用的资源必须被释放才可被其他进程访问。
2、占有并等待:
一个进程必须占有至少一个资源,并等待另一个资源,而该资源被其他进程占有。
3、非抢占
资源不能被抢占,只能在进程完成任务后自动释放
4、循环等待
大家都捧着自己碗看着别人的碗,不占点便宜都不吃饭。
二、死锁处理方法
使用协议预防或避免死锁
允许系统死锁,一旦检测到,加以恢复
认为死锁不会发生。万一死锁,人工重启。事实上,这正是目前绝大多数操作系统采用的策略,包括UNIX、WINDOWS,问你死未。究其原因,是因为死锁预防、避免、检测,都很消耗资源。
1、死锁预防
针对死锁四条件,只要确保至少一个条件不成立即可。
1)互斥
非共享资源设为共享资源,比如只读文件。但并非所有非共享资源都能共享。
2)占有并等待
两种策略:进程执行前申请所有资源,或者在申请资源时必须释放现已分配资源。
缺点是资源利用率比较低,或者是可能会有进程发生饥饿。
3)非抢占
可抢占。进程处于等待状态时,已分配给它的资源可被抢占。
4)循环等待
对资源类型进行完全排序,要求每个进程按递增顺序进行申请。
2、死锁避免
申请资源的时候,要求系统综合考虑,包括可用资源、已分配资源及将要申请与释放的资源,以决定当前申请是否满足或等待。
1)资源分配图算法
避免资源图出现环。适合每种资源只有一个实例的情况。
2)银行家算法
适合每种资源存在多个实例的情况。该算法可用于银行系统,故而得名。
算法采用几个矩阵(或曰二维数组)来代表可用资源、已分配资源、最大需求、剩余需求。
当进程申请一组资源时,系统就检查这些矩阵,是否处于安全状态,或者假设可以分配,修改相关矩阵,考察是否安全,以此决定进程等待或可以资源分配。
3、死锁检测
如果一个系统既不采用死锁预防或避免算法,那么可能会出现死锁。这时,系统应提供:
1)死锁检测
也分为资源是否单个或多个实例两种情况。
单例可以采用等待图进行考察。等待图是去掉资源环节,将进程相连,出现环形即存在死锁。
多例采用类似银行家算法。
何时进行检测取决于死锁发生的频率以及死锁的影响程度。
2)死锁恢复
4、死锁恢复
如果死锁已经存在,那么一种措施是人工处理,另一种是自动恢复。
自动恢复,打破死锁有两个方法:
(1)终止一个或多个进程
终止哪些进程,需要多方面的考虑,比如优先级,进程已运行时间等
(2)从死锁进程抢占资源
版权声明:本文为博主原屙文章,喜欢你就担走。