操作系统——死锁

1.死锁的概念

死锁,是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。
举一个简单的例子进程1和进程2并发执行,两者皆需要资源A,B。进程1拿走资源A,进程2拿走资源B,进程1等待进程2释放资源B,进程2等待进程1释放资源A从而陷入无限的等待之中。
在这里插入图片描述

2.死锁排除方法

死锁的起因是因为并发进程的资源竞争。根本原因则是系统提供资源个数少于并发进程所要求的该类资源数。因为资源个数是有限的,所以我们可以采用适当的资源分配算法,以达到消除死锁的目的
死锁不可能凭空产生,需要以下几个必要条件:
(1)互斥条件
并发进程所要求和占有的资源是不能同时被两个或两个以上进程使用或操作的,进程对它所需要的资源进行排他性控制。
(2)不剥夺条件
进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。
(3)部分分配
进程每次申请它所需要的一部分资源,在等待新资源的同时继续占用已分配到的资源。
(4)环路条件
存在一种进程环链,链中每一个进程已获得的资源同时被下一个进程所请求。
我们这些条件进行一下解释:
互斥条件
并发进程所要求和占有的资源是不能同时被两个或两个以上进程使用或操作的,也就是说当一个资源看可以被两个进程同时使用就不会存在等待资源的过程,用上面那个例子来讲,进程1在拥有资源A时进程2也是可以拥有资源A的,那么将无法产生死锁。
不剥夺条件
当进程1拥有资源A时,进程2也需要资源A,我们假设进程2的优先级高于进程1,如果进程所获得的资源在未使用完毕之前,能被其他进程强行剥夺,那么资源A将被从进程1剥夺到进程2。那么就不会有等待资源的时候,那么将无法产生死锁。
部分分配
也就是所进程1在保持一个资源不放的情况下请求另一个新的资源,而这个新的资源又恰好是别的进程持有的资源,因此发生了死锁。
环路条件
进程1等待进程2释放资源,进程2等待进程1释放资源,这就形成了一种资源循环等待链,如果没有这种循环等待的话,死锁是不会发生的。

特别注意的是,发生死锁时一定有循环等待,但是发生循环等待时不一定死锁(循环等待是死锁的必要不充分条件)
解决死锁的方法
1.预防
a.打破资源的互斥和不可剥夺这两个条件,但是不能解决访问那些不允许被同时访问的资源时所带来的死锁问题。
b.打破资源的部分分配这个死锁产生的必要条件,但是预先分配各并发进程所需要的全部资源才能执行。
c.打破死锁的环路条件,但是限制了进程对资源的请求,而且对资源的分类编序也消耗了一定的系统开销。
2.避免
用某些方法防止系统进入不安全的状态(银行家算法 ),死锁避免可被称为动态预防,因为系统采用动态分配资源,在分配过程中预测出死锁发生的可能性并加以避免的方法。
死锁避免的一种基本模式是把进程分为多个步,其中每个步所使用的资源是固定的,且在一个步内,进程所保持的资源数不变。即进程的资源请求、使用与释放要依靠不同的步完成,因此死锁回避需要占去系统较大的开销。
3.检测与恢复
允许死锁发生,不过操作系统会检测出死锁的发生,并采取一些措施解除死锁。
a.检测并发进程是否构成资源的请求和保持回路。
b.恢复终止各锁住进程,按一定顺序终止进程序列,直至已释放到有足够的资源来完成剩下的进程时为止。从被锁住进程强迫剥夺资源以解除死锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值