造成死锁的原因

1、产生死锁的四个必要条件:

• 互斥条件:一个资源每次只能被一个进程使用。
• 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
• 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
• 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
一、死锁检测和恢复(deadlock detection and recovery):
死锁检测(deadlock detection)即探查和识别死锁的方法。这种策略并不采取任何动作来使死锁不出现,而是系统事件触发执行一个检测算法。,也即在系统运行过程中,及时地探查和识别死锁的存在,并识别出处于死锁之中的进程和资源等。死锁恢复(deadlock recovery)是指当检测并识别出系统中出现处于死锁之中的一组进程时,如何使系统回复到正常状态并继续执行下去。死锁恢复常采用下述两种方法。

二、死锁预防(deadlock prevention)

1、死锁预防(deadlock prevention)是在系统运行之前,事先考虑防止死锁发生的对策,即在最初设计各种资源调度算法时,就没法防止在系统运行过程中可能产生的死锁。Coffmman 等人[1971]曾提出进程在利用可重用性资源时产生死锁的四个必要条件:

1、互斥使用(mutual exclusion):系统中存在一次只能给一个进程使用的资源。
2、占用并等待(resource holding and waiting):系统中存在这样的进程,它(们)已占有部分资源并等待得到另外的资源,而这些资源又被其它进程所占用还未释放。
3、非抢占分配(nonpreemption):资源在占有它的进程自愿交出之前,不可被其它进程所强行占用。
4、部分地分配(partial allocation)或循环等待(circular waiting):存在一个两个或都个进程的循环链,链中每一个进程等待被链中下一个进程占有的资源。即在一定条件下,若干进程进入了相互无休止地等待所需资源的状态。

所有这四个必要条件都应该在死锁时出现。

  • 1、每个进程必须一次性地请求它所需要的所有资源。若系统无法满足这一要求,则它不能执行。这是一种预分资源方法,它破坏了产生死锁的第三个必要条件。
  • 2、一个已占有资源的进程若要再申请新资源,它必须先释放已占资源。若随后它还需要它们,则需要重新提出申请。换言之,一个进程在使用某资源过程中可以放弃该资源,从而破坏了产生死锁的第二个必要条件。
  • 3、将系统中所有资源顺序编号,规定进程只能依次申请资源,这就是说,一个进程只有在前面的申请满足后,才能提出对其后面序号的资源的请求。这是一种有序使用资源法,它破坏了产生死锁的第四个必要条件。

三、死锁避免(银行家算法)

即在系统分配资源之前,就应该检测此次资源分配的安全性,如果此次分配资源会导致进程进入不安全状态,那就等待,如果不会,则分配资源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值