死锁预防避免 银行家算法 必要条件
死锁:两个或两个以上进程由于竞争资源导致进程无法继续推进下去的现象。
具体的说是,进程A、B都需要x,y资源,A先持有了x资源,然后请求y资源,B先持有了y资源,然后请求x资源。这样的话两个进程都需要对方手中的资源才能继续进行,形成了环状。无论等待多长时间,在没有外界的帮助下,陷入死锁的进程都无法继续执行。
死锁产生的四个必要条件:
互斥条件:资源是互斥的,被进程独享。
保持与请求条件:进程持有了一些资源,当继续请求其他资源时,不会放弃持有的资源。
不可剥夺条件:进程在没有执行完之前,持有的资源不能被其他进程强行剥夺,只能自己主动释放。
循环等待条件:发生死锁时一定存在一个资源请求环,比如a请求b的资源,b请求c的资源,c请求a的资源。
死锁的预防:
破坏保持与请求条件:
1.进程在请求新的资源时要放弃持有的其他资源,即使这些资源很快就会用到。(破坏保持)
2.进程在创建时就分配给它在运行中所需要的全部资源。(破坏请求)
破坏不可剥夺条件:
进程请求资源被拒绝时,就会释放所有的资源,进入等待状态,只有在重新获得之前的资源及需要的资源才能重新执行。
破坏循坏等待条件:
给系统内资源编号,只有获得低级编号的资源才能申请高级别编号的资源(将紧缺的、稀有的资源设置为高级别的)。
死锁的避免:银行家算法
1.银行家算法如何避免死锁的?
某个进程请求资源时,操作系统会进行预分配,然后判断是否存在一条安全序列,如果存在则这次资源分配后不会进入死锁的局面,就满足这次资源请求,如果分配后不存在一个安全序列,则让进程进行等待。
算法的核心就一步:来资源请求,先预分配然后判断当前系统是否为安全状态,如果是就可以分配。
安全状态:当前线程都能成功执行完,不会由于资源不足而进入死锁状态,依据是能否找到一条安全序列。
安全序列:所有进程执行完的一个顺序。
(1)Available向量:系统中可利用的资源数目
(2)Max矩阵:每个进程对每种资源的最大需求 
(3)Allocation矩阵:每个进程已分配的各类资源的数目 
(4)Need矩阵:每个进程尚需的各类资源数 

判断安全状态的过程:
(1)将Available和Need对比,P0的Need>Available,不满足,往后找, 
(2)P1的Available小于Need,分配给P1,P1就能运行完成,最后释放资源{2,0,0} 
所以现在的资源就是{3,3,2}+{2,0,0}={5,3,2} 
(3)然后继续向下找,p2不满足条件,P3满足条件,将资源分配给P3,让其运行完成,并释放空间{2,1,1},所以现在的资源就是{5,3,2}+{2,1,1}={7,4,3} 
(4)依次类推得到安全序列为{P1,P3,P4,P2,P0} 
                    
                
                
            
        
浙公网安备 33010602011771号