操作系统学习笔记:死锁

死锁现象,无须多言,人人明白。

一、死锁必要条件

形成死锁有四个必要条件:

1、互斥:

一个进程占用的资源必须被释放才可被其他进程访问。

2、占有并等待:

一个进程必须占有至少一个资源,并等待另一个资源,而该资源被其他进程占有。

3、非抢占

资源不能被抢占,只能在进程完成任务后自动释放

4、循环等待

大家都捧着自己碗看着别人的碗,不占点便宜都不吃饭。


二、死锁处理方法

使用协议预防或避免死锁

允许系统死锁,一旦检测到,加以恢复

认为死锁不会发生。万一死锁,人工重启。事实上,这正是目前绝大多数操作系统采用的策略,包括UNIX、WINDOWS,问你死未。究其原因,是因为死锁预防、避免、检测,都很消耗资源。


1、死锁预防

针对死锁四条件,只要确保至少一个条件不成立即可。

1)互斥

非共享资源设为共享资源,比如只读文件。但并非所有非共享资源都能共享。

2)占有并等待

两种策略:进程执行前申请所有资源,或者在申请资源时必须释放现已分配资源。

缺点是资源利用率比较低,或者是可能会有进程发生饥饿。

3)非抢占

可抢占。进程处于等待状态时,已分配给它的资源可被抢占。

4)循环等待

对资源类型进行完全排序,要求每个进程按递增顺序进行申请。


2、死锁避免

申请资源的时候,要求系统综合考虑,包括可用资源、已分配资源及将要申请与释放的资源,以决定当前申请是否满足或等待。

1)资源分配图算法

避免资源图出现环。适合每种资源只有一个实例的情况。


2)银行家算法

适合每种资源存在多个实例的情况。该算法可用于银行系统,故而得名。

算法采用几个矩阵(或曰二维数组)来代表可用资源、已分配资源、最大需求、剩余需求。

当进程申请一组资源时,系统就检查这些矩阵,是否处于安全状态,或者假设可以分配,修改相关矩阵,考察是否安全,以此决定进程等待或可以资源分配。


3、死锁检测

如果一个系统既不采用死锁预防或避免算法,那么可能会出现死锁。这时,系统应提供:

1)死锁检测

也分为资源是否单个或多个实例两种情况。

单例可以采用等待图进行考察。等待图是去掉资源环节,将进程相连,出现环形即存在死锁。

多例采用类似银行家算法。

何时进行检测取决于死锁发生的频率以及死锁的影响程度。


2)死锁恢复


4、死锁恢复

如果死锁已经存在,那么一种措施是人工处理,另一种是自动恢复。

自动恢复,打破死锁有两个方法:

(1)终止一个或多个进程

终止哪些进程,需要多方面的考虑,比如优先级,进程已运行时间等


(2)从死锁进程抢占资源

有三个问题需要考虑:
谁被抢?
被抢占后做何安排?
确保不发生饥饿

版权声明:本文为博主原屙文章,喜欢你就担走。

posted on 2015-04-08 23:36  左直拳  阅读(211)  评论(0编辑  收藏  举报

导航