死锁

定义:死锁是由于系统中的进程不断推进,而形成的一种互相等待、停滞不前的状态。是两个或两个以上的进程中的每一个进程都在等待其中的另一个进程释放其资源而被阻塞,导致这些进程都无法推进,这种状态就称为死锁状态。处于死锁状态的进程就是死锁进程。

原因:产生死锁的最根本的原因就是资源匮乏,不够使用。

            1)同类资源分配不当可能产生死锁
    2)进程推进顺序不当
死锁的防止
死锁防止的解决方法就是破坏死锁产生的必要条件,而死锁产生的4个必要条件如下:
<1>互斥使用资源条件:每一个资源任一时刻只能由一个进程使用,如果进程想申请被其他进程占用的资源,则该进程必须等待。
<2>占有且申请资源条件:一个进程占有了资源还需要申请新的资源。
<3>不可抢占式分配:一个进程不能从其他进程抢夺资源,一个资源只能由拥有该资源的进程使用完后主动释放。
<4>循环等待条件:必然存在着一个进程循环等待链,链中的每一个进程都在等待它前一个进程所占用的资源。
     三种死锁防止方法
1)资源的按序分配:将系统所有资源编号,规定进程申请资源时,总是从编号小的开始,然后再申请编号大的。缺点:给资源编号本身就是一项很费时的工作,并且资源的多少也是不断变动的;进程申请使用的资源与系统资源编号往往次序
不一致,这样就可能会出现先申请到的资源在相当长的时间内部使用,降低了资源的利用率。

2)资源的静态分配:是指在进程运行之前,就将所需资源分配给它,这样进程在运行过程中就不会再提出资源申请要求,因此,就不可能发生死锁,因为死锁的第2条和第4条不可能满足了。资源的静态分配使得资源的利用率大大降低,并且一些进程至于需要哪些资源也是不好确定的。

3)可抢夺式分配:破坏了死锁的第3个必要条件。当一个进程申请资源得不到满足,就可以从其他进程那你去抢夺。但这种策略只能适用于CPU和内存资源的分配,对其他资源不能使用。当一个系统中某个进程由于内存空间不够,无法运行下去,该进程就可以去从别的进程那里去抢夺,然后得到了内存资源就可以运行下去,当该进程运行完毕后,将所有内存资源归还。归还的内存资源就可以分配给被抢夺的进程,让该进程继续运行以完成任务。这样,死锁得到了防止。

死锁的检测:监视系统的资源和进程,找出是否有死锁存在。当系统发生了资源申请或者资源分配后,进程资源分配图就发生了改变,这时就需要对进程资源分配图进行检测,可以检测该图中是否存在进程循环等待链,如果存在,则说明可能发生了死锁;再如,如果系统中存在长时间被阻塞的进程,也可能是产生了死锁。死锁的检测程序需要定期经常运行,可能会影响系统效率,因此,死锁的检测频率应该考虑系统的效率。

死锁的解除:

1)进程撤销法:撤销所有死锁进程,但被撤销的进程前面所做的工作也就白费了,所以这种方式的代价较大。常用的进程撤销手段可以采用一种叫作“最小代价撤销法”,也就是在撤销进程时总是选择代价最小的进程予以撤销,不断进行。代价小的进程往往与进程的优先级、进程运行的时间等因素有关。可以将占用CPU时间最少、预计剩余执行时间最长的、优先级别最低的、产生输出最少的、、分得的资源数量最少的进程往往被认为代价最小的进程,应该予以撤销。

2)进程回退法:在系统中设定一个检查点,当发生死锁时,让所有进程回退,直到将所有死锁解除。

3)进程挂起法:将处于死锁状态的进程暂时挂起,并剥夺它们所占有的系统资源,然后解除死锁,当系统的可用资源充裕时,再将被挂起的进程激活,继续运行。

4)系统重启法:就是将操作系统重启。该方法能够将解除系统所有死锁,但该种方法使当前执行的结果未保存的全部作废,损失最大,应该慎重。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值