|
|
|
|
|
|
|
|
|
|
|
|
若系统中存在一组进程,它们中的每个进程都占用了某种资源,而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说明系统出现了死锁。只要下面4个条件中有1个不具备,系统就不会出现死锁。
|
|
|
(1)互斥条件:某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。
|
|
|
(2)不可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。
|
|
|
(3)占有且申请条件:进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源时,仍继续占用已占有的资源。(注:也称为保持与等待条件)
|
|
|
(4)循环等待条件:存在一组进程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一资源,……,而Pn等待P1所占有的某一资源,形成一个进程循环等待环。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
死锁是指两个以上的进程互相都因要求对方已经占有的资源,导致无法运行下去的现象。死锁是系统的一种出错状态,不仅浪费大量的系统资源,甚至会导致整个系统的崩溃,所以死锁是应该尽量预防和避免的。
|
|
|
|
|
|
|
(1)互斥条件。进程对其要求的资源进行排他性控制,即一次只允许一个进程使用。
|
|
|
(2)请求保持条件。零星地请求资源,即已获得部分资源后又请求资源被堵塞。
|
|
|
(3)不可剥夺条件。进程已获得资源在未使用完之前不能被剥夺,只能在使用完时由自己释放。
|
|
|
(4)环路条件。发生死锁时,在进程资源有向图中必构成环路,其中每个进程占有下一个进程申请的一个或多个资源。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当若干进程竞争使用资源时,可能每个进程要求的资源都已被另一进程占用,于是也就没有一个进程能继续运行,这种情况称为死锁。例如,P1进程占有资源R1, P2进程占有资源R2,这时,P1又需要资源R2, P2也需要资源R1,它们在等待对方占有的资源时,又不会释放自己占有的资源,因而使双方都进入了无限等待状态。死锁是系统的一种出错状态,不仅浪费大量的系统资源,甚至会导致整个系统的崩溃,所以死锁是应该尽量预防和避免的。
|
|
|
系统发生死锁时,死锁进程的个数至少为两个;所有死锁进程都有等待资源,其中至少有两个进程已占有资源。产生死锁的情况主要有:进程推进顺序不当;同类资源分配不当;PV操作使用不当。
|
|
|
|
产生死锁的原因:一是系统提供的资源数量有限,不能满足每个进程的使用;二是多道程序运行时,进程推进顺序不合理。发生死锁必须同时具备下述4个条件。
|
|
|
.互斥:进程互斥使用资源,任意时刻一个资源只为一个进程所独占,其他进程若请求一个已被占用的资源,只能等待占用者释放后才能使用。
|
|
|
.不可剥夺(不可抢占):进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
|
|
|
.请求保持:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。零星地请求资源,即已获得部分资源后再次请求资源时被阻塞。
|
|
|
.循环等待:在进程资源有向图中存在一个进程环路,环路中每一个进程已获得的资源同时被下一个进程所请求。
|
|
|
|
|
|
|
|
|
|
|