死锁?
系统中多个进程由于竞争资源而造成的阻塞,若无外力,无法继续向前推进进程
进程占有自身资源,并请求对方资源时
产生死锁的根本原因就是资源有限且进程间推进顺序不当
死锁产生的条件?
1、互斥: 当资源被(占有)时,别的资源请求者不能使用
2、不剥夺: 资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
3、请求与保持:当资源请求者(进程)在请求其他的资源的同时保持对原有资源的占有。
4、循环等待:指在发生死锁时,存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源,形成了一个等待环路。
如何避免死锁?
银行家算法【在动态分配资源的过程中,银行家算法防止进入不安全状态,从而避免死锁】
银行家算法:
**当进程首次申请资源时,**要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
**当进程在执行中继续申请资源时,**先测试该进程已占用的资源数与本次申请资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源。若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若满足则按当前的申请量分配资源,否则也要推迟分配。
安全序列:
是指系统能按某种进程推进顺序(P1, P2, P3, …, Pn),为每个进程 Pi 分配其所需要的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序地完成。这种推进顺序就叫安全序列【银行家算法的核心就是找到一个安全序列】。
系统安全状态 :
如果系统能找到一个安全序列,就称系统处于安全状态,否则,就称系统处于不安全状态