死锁:算法
定义:安全
在多道程序环境下,多个进程可能竞争必定数量的资源。某个进程申请资源,若是这时资源不可用,那么该进程进入等待进程。若是所申请的资源被其余等待进程占有,那么该等待进程有可能再也没法改变其状态。这种状况称为死锁。ide
条件(同时知足):spa
1,互斥(资源):资源只能一个进程使用,其余进程申请只能等待排序
2,占有并等待(进程):一个进程必须占有一个资源并等待另外一个资源,而等待的那个资源正在被使用进程
3,非抢占(资源):资源不能被抢占,资源只能在进程完成任务后自动释放资源
4,循环等待(进程):a等待的资源被b占有,b等待的资源被c占有,,,n等待的资源被a占有it
处理方法:class
一,使用协议以预防或避免死锁,确保系统不会进出入死锁状态:搜索
死锁预防:确保死锁成立的至少一个条件不成立,经过限制如何申请资源的方法来预防死锁
1,互斥:不可解决,有的资源自己就是非共享资源。非共享资源必需要有互斥条件,共享资源不要求互斥访问
2,占有并等待:
1)每一个进程执行前申请全部所需资源
2)进程没有占资源时才能申请
3,非抢占:等待申请的资源时,隐式释放已抢占资源,若分配到了所申请资源,则恢复隐式释放的资源
4,循环等待:对全部资源类型排序,每一个进程只按资源类型递增顺序申请资源。
缺点:低设备使用率和吞吐率
死锁避免:得到之后如何申请资源的附加信息,有了每一个进程的申请与释放顺序,可决定进程是否因申请而等待。每次申请要求系统考虑现有可用资源,现已分配给每一个进程的资源和每一个进程未来申请与释放的资源,以决定当前申请是否知足或必须等待,从而避免死锁发生的可能性
死锁避免动态地检测资源分配状态以确保循环等待条件不可能成立。资源分配状态是由可用资源和已分配资源,及进程最大需求决定的
经常使用的方法:安全状态,资源分配图算法,银行家算法
二,检测恢复:
检测:死锁检测算法:
等待图:从资源分配图中删除全部资源类型节点,合并适当边,就能够获得等待图
当且仅当等待图中有一个环,系统中存在死锁。为了检测死锁,系统须要维护等待图,并周期性地调用在图中进行搜索的算法
每次请求分配不能当即容许时就调用死锁检测算法,每次调用都会引发至关大的开销,另外一个不太昂贵的方法就是以一个不过高的频率调用算法。
恢复:
1)通知操做员死锁已经发生,人工处理死锁
2)让系统从死锁状态中自动恢复过来
终止死锁的方法:
1)终止一个或者多个进程以打破循环等待
2)从一个或者多个死锁进程那里抢占一个或者多个资源(1,选择一个牺牲品进程;2,回滚;3,饥饿)
三,直接忽视
系统容许死锁发生