清楚易懂的死锁~操作系统

学计算机的人都知道操作系统的重要性,下面利用简单易懂的阐述死锁的内容。。。

      首先,什么是死锁?

简单来说,就是我一个进程占有A资源想要申请B资源,但却被你另一个进程所占用不肯给我,而你也恰好需要我占用的A资源,所以就造成互相等待对方释放资源,结果大家都不能得到所需资源往下干活造成歇业。

       举个例子:我手中有一把铁锤,你手中有一盒钉子,大家都想把房子钉牢固,我向包工头要钉子,但却被你拿走了,我只能等待你把钉子拿回给包工头,你向包工头要一把铁锤,但是唯一的一把铁锤在我手里,你也只能等待我把铁锤拿回给包工头。大家互相等待,造成没活干,也就是进程运行不下去。通过这么一个栗子,你懂了把?

        接着,死锁为什么会产生呢?传说中产生死锁的4个必要条件是什么?

(1)互斥条件。 互斥就是在某个时间内某个资源只能被某一个进程使用,一旦那个资源被占用,那么其他进程就不能再使用了,只能等待原进程释放该资源,随即请求使用该资源。

(2)不可剥夺条件。简单来说,就是没有优先级可言,管你是多么厉害的人物,只要我在使用某资源,你就不能强行夺走。

(3)请求和保持条件。说白了,就是吃着碗里的看着锅里的,明明已经正在使用A资源了,还要申请B资源,并且B资源还被其他人占用了,贪心+花心。

(4)循环等待条件。就是存在一种进程资源的圆形循环等待链,在链中一个进程所占有的资源是下一个进程所要请求的。例如错存在循环链进程P0,P1.......Pn,其中P0进程所占用的资源是P1进程所请求的。

       这里注意一点,不可剥夺条件和请求和保持条件的区别。举个例子,如果你手上已经有了一个苹果,无论如何别人都不可能从你手中夺走,这是不可剥夺条件。如果你左手拿了一个苹果,右手还空着还想去拿其他苹果,这是请求和保持条件。

 

既然会产生死锁,那么我们就得处理死锁现象,怎么处理呢?

1.预防死锁。

       把矛头指向产生死锁的四个条件,就是设置某些限制条件。

2.避免死锁。

      在资源动态分配过程中,用某种方法防止系统进入不安全状态。

3.死锁检测及解除。

     不用提前预知进程是否发生死锁,直接让进程运行。如果进程运行过程中产生了死锁,可通过系统的检测机构检测出来,然后采取某种措施解除死锁。

下面来对三大策略做一个详细介绍:

死锁避免:

1.破环互斥条件。更改设置允许系统资源能够共享,但这个效果能不用就不用,因为有时候一些资源不能被共享,只能互斥使用,比如打印机。

2.破坏不可剥夺条件。一个进程已占有一部分资源,现请求新的资源但不被满足时,设置主动释放掉已占有的资源,相当于破坏了不可剥夺条件。

3.破坏请求和保持条件。一个进程运行前就申请完所有所需资源,不再运行时动态申请资源,一旦运行后,运行所需资源就一直归它所有,也不能再申请新的资源。

4.破坏循环等待条件。采用顺序资源分配法,就是提前给系统资源编号,然后规定每个进程必须按照编号递增的顺序请求资源,同类的资源一次性请求完。

死锁避免:

      就是在系统动态分配资源时防止系统进入不安全状态,这里主要涉及到怎么要使用一个较好的安全性算法去避免死锁的发生,这里举例银行家算法。

     算法思想:操作系统=银行家,    操作系统管理的资源=银行家所拥有的资金,   进程向操作系统请求分配资源=用户向银行家申请贷款。当进程首次请求资源时,操作系统会计算该进程所需的最大资源需求量Max,等同于银行家计算出用户所需贷款的最大额度,当系统总资源量Total>Max时,马上进行资源分配,否则推迟等条件合适了再分配。当进程运行过程中向继续申请资源时,先计算此次申请资源数NowRequest和已有资源数Current相加起来是否超过了最大资源需求量Max,若超过则拒绝分配资源,否则对系统总资源量Total中剩余资源数Surplus 与该次申请资源数Request作比较,若Surplus >NowRequest,则马上分配,否则推迟分配。转换来说,用户已经贷了一部分的款项,仍想继续贷款,银行家会计算他续贷款数+已贷款数是否超过了他刚开始总共要贷的款数,这是第一个条件,若符合第一个条件再对银行家还剩下的钱数与用户续贷的钱数作比较,这是第二个条件。只要符合了两个条件才可以继续给用户贷款。

 

理解上面的就差不多了,死锁的定理肯定能够掌握了。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值