死锁

死锁:

定义:

在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不可用,那么该进程进入等待进程。如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态。这种情况称为死锁。

条件(同时满足):

1,互斥(资源):资源只能一个进程使用,其他进程申请只能等待

2,占有并等待(进程):一个进程必须占有一个资源并等待另一个资源,而等待的那个资源正在被使用

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

4,循环等待(进程):a等待的资源被b占有,b等待的资源被c占有,,,n等待的资源被a占有

处理方法:

一,使用协议以预防或避免死锁,确保系统不会进出入死锁状态:

死锁预防:确保死锁成立的至少一个条件不成立,通过限制如何申请资源的方法来预防死锁

1,互斥:不可解决,有的资源本身就是非共享资源。非共享资源必须要有互斥条件,共享资源不要求互斥访问

2,占有并等待:

1)每个进程执行前申请所有所需资源

2)进程没有占资源时才能申请

3,非抢占:等待申请的资源时,隐式释放已抢占资源,若分配到了所申请资源,则恢复隐式释放的资源

4,循环等待:对所有资源类型排序,每个进程只按资源类型递增顺序申请资源。

缺点:低设备使用率和吞吐率

死锁避免:获得以后如何申请资源的附加信息,有了每个进程的申请与释放顺序,可决定进程是否因申请而等待。每次申请要求系统考虑现有可用资源,现已分配给每个进程的资源和每个进程将来申请与释放的资源,以决定当前申请是否满足或必须等待,从而避免死锁发生的可能性

死锁避免动态地检测资源分配状态以确保循环等待条件不可能成立。资源分配状态是由可用资源和已分配资源,及进程最大需求决定的

常用的方法:安全状态,资源分配图算法,银行家算法

二,检测恢复:

检测:死锁检测算法:

等待图:从资源分配图中删除所有资源类型节点,合并适当边,就可以得到等待图

当且仅当等待图中有一个环,系统中存在死锁。为了检测死锁,系统需要维护等待图,并周期性地调用在图中进行搜索的算法

每次请求分配不能立即允许时就调用死锁检测算法,每次调用都会引起相当大的开销,另一个不太昂贵的方法就是以一个不太高的频率调用算法。

恢复:

1)通知操作员死锁已经发生,人工处理死锁

2)让系统从死锁状态中自动恢复过来

 

终止死锁的方法:

1)终止一个或者多个进程以打破循环等待

2)从一个或者多个死锁进程那里抢占一个或者多个资源(1,选择一个牺牲品进程;2,回滚;3,饥饿)

三,直接忽视

系统允许死锁发生


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章