关于操作系统——死锁
一、死锁的定义:
两个或多个进程在无限期的等待永远不会发生的条件系统处于停滞状态,这种现象称为进程死锁。
二、产生死锁的必要条件:
1:互斥使用(资源独占):一个资源每次只能给一个进程使用;
2:不可强占(不可剥夺):资源申请者不能强行的从占有者手中读取资源,资源只能有占有者资源释放;
3:请求和保持:一个进程在申请资源的同时保持对原有资源的占有
4:循环等待:存在一个等待队列{p1,p2,p3,......pn},其中p1等待p2占有的资源,p2等待p3占有的资源,.......pn等待p1的资源,形成一个进程等待的环路。
三、解决死锁的三种途径:
(1):死锁的预防——解决死锁的静态方法:
1。破坏“不可剥夺条件”
2。破坏”不可剥夺条件“
3。破坏”循环等待条件“
(2):死锁的避免——解决死锁的动态方法:
死锁的避免关键是区分安全状态与不安全状态。(如果存在一个由系统中所有进程构成的安全序列p1,p2,p3,......pn,则系统处于安全状态。)安全状态下一定是没有死锁发生的。相反,不安全状态就意味着不存在一个安全序列,但是不安全状态不一定导致死锁。
避免死锁的典型算法:银行家算法(又被称为“资源分配拒绝”法)。
算法的基本思路:
银行家有一笔周转资金为保证资金的安全,银行家规定:
1、 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
2、 顾客可以分期贷款,但贷款的总数不能超过最大需求量;
3、 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
4、 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
(3):死锁的检测与解除
1。死锁的检测:”进程-资源分配图“的有向工具来描述死锁是否发生,用有向图描述进程的死锁准确、形象。
”进程-资源分配图“:用方框表示资源类,用方框中的黑点表示资源的实例,用圆圈加进程名表示进程,用资源实例指向进程的一条有向边来表示分配边,用进程指向资源类的一条一条有向边来表示申请边。
Δ如果”进程-资源分配图“中无环路,则此时系统没有发生死锁。
Δ如果”进程-资源分配图“中有环路,且每个资源类中仅有一个资源,则此时系统发生死锁,此时环路是系统发生死锁的充要条件。若有多个资源,则有环只是死锁发生的必要条件不是充分条件。
2。死锁的解除:
Δ资源剥夺法(最根本的办法):当发生死锁时,从其他进程那里剥夺足够数量的资源给死锁进程,以解除死锁状态。
Δ撤销进程法:最简单的方法就是撤销所有死锁进程,使系统恢复到正常状态。