死锁

  1. 死锁
    指两个或两个以上的进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象,若没有外力的作用,这种现象会一直持续。
    官方定义如下:集合中的每一个进程都在等待本集合的其他进程才能触发的事件

  2. 产生的原因:
    一是系统提供的资源数量有限,不足以提供给进程使用。二是多道程序运行时,进程思维推进顺序不合理。

  3. 产生的条件
    (1)、互斥条件
    进程对于所分配的资源进行排他性使用,即某段时间某个资源只能由一个进程使用,如果此时还有其他进程请求资源,只能等待,直到占用该资源的进程释放。
    (2)、请求和保持条件
    进程已经保持了至少一种资源,又对新资源提出请求,此时新资源正在被其他进程占用,此时请求资源的进程被阻塞,但又对自己已获得的资源保持不放。
    (3)、不剥夺条件
    进程已经占有的资源,在未使用完之前,不能被剥夺,只能在使用完后右自己释放。
    (4)、环路等待条件
    指在发生死锁时,若干个进程之间形成一种头尾相连的环形等待资源关系。比如集合中的进程为(P0、P1、P2、P3……….),p0在等待p1的占用资源,p1在等待p2的占用资源…….

  4. 死锁的预防
    (1)、在系统里取消“互斥”,若一个资源不被进程单独占用就不会发生死锁。但互斥是无法取消的,所以只能去改其他三个。
    (2)、破坏“请求和保持”,在系统中不允许进程在获得某种资源的情况下,申请其他的资源,即要想出一个办法,阻止进程在持有资源的同时申请其他资源。
    方法一:创建进程时要求它申请所需的全部资源,系统或满足其所有要求,或者什么都不给,这就是所谓的“一次性分配”方案。
    方法二:要求每个进程在提出新的资源申请时,先释放其占用的资源。如果提出对资源R的申请,必须先释放其占用的资源S,才能得到新资源R,即使它很快就会使用到R资源。
    (3)、破坏“不剥夺”条件,就是允许对资源进行抢占。
    方法一:如果占有某些资源的进程进行进一步的资源请求时被拒绝,则该进程必须释放它最初占有的资源,如果有必要,可再次请求这些资源和另外的资源。
    方法二:如果一个进程请求被当前另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。只有在任意两个进程的优先级都不相同的条件下,方法二才能预防死锁。
    (4)、破坏“环路等待”条件,是将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出。这样做就能保证系统不出现死锁。

  5. 死锁的避免
    死锁避免允许死锁产生的条件,通过分析新的资源请求,确定它是否会产生死锁,只有在不可能产生死锁时才同意该请求。
    a.如果一个进程的请求会导致死锁,则不启动该进程;
    b.如果一个进程请求加载的资源会导致死锁,则不分配该资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值