死锁的产生
两个进程争夺同一个资源这和它们申请资源的顺序有关,两个进程争夺同一个资源不一定会发生死锁。
如果发现系统有循环等待的进程队列就说明系统有可能发生死锁了。
所谓死锁是指计算机系统和进程所处的一种状态,在系统中,两个或多个进程无限期地等待永远不会发生的条件,我们称此系统处于死锁状态。
死锁的原因主要是: (1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等
产生死锁的两个原因:竞争资源、进程间推进顺序非法。
产生死锁的必要条件是:互斥、保持和等待(占有且等待资源)、不可剥夺(非抢占)、环路等待(循环等待)。
“系统出现死锁的原因: 1、 若干进程因竞争资源而无休止地等待其他进程释放已占有的资源; 2、当若干进程需求资源的总数大于系统所能提供的资源数时,进程间就会出现抢占资源的现象,如果对进程抢占的资源管理或分配不当就会引起死锁。”
设系统中有n个进程并发,共同竞争资源X,且每个进程都需要m个X资源,为使该系统不会发生死锁,资源x至少要有n*m-n+1
信号量作为一种资源对其操作不当,可造成系统的死锁。
15台绘图仪,有多个进程均需要使用3台,当给每个进程分配2台,系统中留1台时允许参与竞争的进程数最多,即(15-1) /2=7。
按照资源的使用性质,一般把系统中的资源分为永久性资源(可重用资源)和消耗性资源(临时性资源)
对临界资源应采取互斥访问方式来实现共享、进程的并发执行会破坏程的“封闭性”、进程的并发执行会破坏程序的“可再现性”
如果操作系统对资源管理不得当;或没有顾及进程并发执行时 可能出现的情况, 则就可能形成死锁。
可以证明,M个同类资源被n个进程共享时,只要不等式n(x-1)+1<m成立,则系统一定不会发生死锁, 其中x为每个进程申请该类资源的最大量。
死锁预防
资源的有序分配可以破坏环路等待条件。
资源的全部分配可以破坏请求和保持条件。
预先静态分配法是通过破坏占有且等待资源/循环等待资源条件,来达到预防死锁目的的。
可抢夺的资源分配策略可预防死锁,但它只适用于主存空间和处理器
若规定一个进程请求新资源之前首先释放已经占有的资源,则是破坏了不可剥夺
死锁的预防方法包括:摒弃请求和保持条件、摒弃不剥夺条件、摒弃环路等待
通常使用的死锁防止策略有静态分配资源、按序分配资源、剥夺式分配资源
为了防止死锁的发生,只要采用分配策略使四个必要条件中的一个条件不成立
使占有并等待资源的条件不成立而防止死锁常用两种方法:静态分配资源;释放已占资源
静态分配资源也称预分配资源;要求每一个进程在开始执行前就申请它需要的全部资源。
释放已占资源的分配策略是仅当进程没有占用资源时才允许它去申请资源。
抢夺式分配资源约定,如果一个进程E 经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以抢夺该进程已占有的资源。
什么叫系统处于安全状态?常用什么方法保持系统处于安全状态?
如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于安全状态。常用银行家算法动态地检测系统中的资源分配情况和进程对资源的需求情况进行资源分配,确保系统处于安全状态。
什么是资源有序分配法?请筒述此方法能够预防死锁的原因。
资源有序分配法是指对系统中所有资源顺序编号,规定任何一个进程申请两个以上资源时,按资源编号顺序申请,只有在得到编号小的资源之后,才能再申请编号大的资源。(2分)
资源有序分配法破坏了死锁的四个必要条件之一的循环等待条件达到预防死锁的目的。(2分)
死锁避免
用银行家算法避免死锁时,检测到( 进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存 资源能满足尚需的最大资源量)时才分配资源。
要实现死锁的避免, 只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。
三个进程A、B、C对某类资源的需求分别是7个、8个和3个且目前三个进程已分别得到了3个、3个和2个。为保证系统的安全,该系统目前剩余的资源至少是
本题考查死锁死锁避免。给进程C再分配1个资源就可以顺利完成,然后释放C所占有的3个资源,此时系统的可用资源变成3,而顺利完成进程A还需要1个资源,所以为保证系统的安全,该系统目前剩余的资源至少要有2个。
请简述死锁预防与死锁避免这两种死锁解决方法的含义。
死锁预防是系统预先确定资源分配策略,这些策略至少能破坏死锁四个必要条件中的一个,进程按规定申请资源,系统按预先规定的策略进行分配,从而防止死锁的发生。(2分)
死锁避免是当进程提出资源申请时,系统先测试资源分配后系统的安全状态,仅当能确保系统安全时才把资源分配给进程,便系统一直处于安全状态之中, 从而避免死锁。(2分)
死锁的检测与解除
系统死锁后可采用抢夺这些进程占用的资源,或强迫死锁进程结束等办法来解除死锁。一般不会采用“从非死锁进程处抢夺资源和“终止系统所有进程”的办法。
死锁检测方法对资源的分配不加限制,只要有剩余的资源,就可把资源分配给申请者。
死锁检测方法要解决两个问题,一是判断系统是否出现了死锁,二是当有死锁发生时怎样去解除死锁
对每个资源类中只有一个资源的死锁检测程序根据占用表;等待表两张表中记录的资源情况,把进程等待资源的关系在矩阵中表示出来,以判别是否出现死锁。
如果资源类中含有若干个资源,应根据进程对各类资源的占有量、尚需量和各类资源的剩余量来考虑是否有死锁存在。
解除死锁的方法有两种,一种是终止一个或几个进程的执行以破坏循环等待,另种是从涉及死锁的进程中抢夺资源
若检测后发现系统有死锁,则可通过剥夺资源或撤销进程 方法来解除死锁。
死锁的解除方法分为两大类即剥夺资源,撤销进程
中断某个进程并解除死锁后,此进程可从头开始执行,有的系统允许进程退到发生死锁之前的那个校验点开始执行。
简述解决死锁问题的三种方法。
解决死锁问题有以下三种方法:
(1 )死锁的防止。系统按预定的策略为进程分配资源,这些分配策略能使死锁的四个必要条件之一不成立, 从而使系统不产生死锁。 (2)死锁的避免。系统动态地测试资源分配情况,仅当能确保系统安全时才给进程分配资源。 (3)死锁的检测。对资源的申请和分配不加限制,只要有剩余的资源就可把资源分配给申请者,操作系统要定时判断系统是否出现了死锁,当有死锁发生时设法解除死锁。
用抢夺资源的方法解除死锁时要注意什么问题?
(1)抢夺进程资源时希望付出的代价最小。(2)为被抢夺者的恢复准备好条件,如返回某个安全状态,并记录有关信息。(3)防止被抢夺资源的进程‘饿死”,一般总是从执行时间短的进程中抢夺资源。
资源分配图
资源分配图是一张有向图。
如果处于环路中的每个资源类中均只包含一个资源实例,则环路的存在即意味着死锁的存在。此时,环路是死锁的充分必要条件
如果资源分配图中没有环路,则系统没有死锁
哲学家就餐问题
操作系统中要兼顾资源的使用效率和安全可靠,对不同的资源采用不同的分配策略,往往采用死锁的防止、避免和检测的混合
在五个哲学家就餐问题中,为保证其不发生死锁,可限定同时要求就餐的人数最多不超过4
如果进程申请个某类资源时, 可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是等价的
评论: