OS学习笔记八:死锁

一、死锁的基本概念

1、死锁的定义

  • 一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为 进程死锁 ,这一组进程就称为死锁进程

  • 如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃

参与 死锁的所有进程都在等待资源

参与死锁的进程是当前系统中所有进程的子集

2、活锁

活锁指的是线程不断重复执行相同的操作,但每次操作的结果都是失败的。尽管这个问题不会阻塞线程,但是程序也无法继续执行。

活锁通常发生在处理事务消息的应用程序中,如果不能成功处理这个事务那么事务将回滚整个操作。解决活锁的办法是在每次重复执行的时候引入随机机制,这样由于出现的可能性不同使得程序可以继续执行其他的任务。

活锁不会被阻塞,而是不停检测一个永远不可能为真的条件。除去进程本身持有的资源外,活锁状态的进程会持续耗费宝贵的CPU时间。

3、产生死锁的必要条件

  • 互斥使用( 资源独占)

    一个资源每次只能给一个进程使用

  • 占有且等待( 请求和保持,部分分配)

    进程 在申请新的资源的同时保持对原有资源的占有

  • 不可抢占( 不可剥夺)

    资源 申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

  • 循环等待

    存在 一个进程等待 队列 {P 1 , P 2 , … , Pn},其中P 1 等待P 2 占有的资源,P 2 等待P 3 占有的资源,… ,Pn 等待P 1 占有的资源,形成一个进程等待环路

4、死锁定理

  • 如果 资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统中可能存在死锁

  • 如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件

这里写图片描述

5、死锁避免定义

在系统运行过程中, 对进程 发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或可能发生死锁,则不予分配,否则予以分配。

安全状态:

如果 系统中存在一个由所有进程构成的安全序列P 1 ,… ,P n ,则称系统处于安全状态

6、安全序列

一 个进程序列 {P 1 1 ,… ,P P n n } } 是安全的,如果对于每一个进程P P i i (1 ≤i i ≤n n ):它以后还需要 的资源量不超过系统当前剩余资源量与所有进程P P j j (j < i i ) ) 当前占有资源量之 和则称系统处于安全状态。

安全状态一定没有死锁发生

7、银行家算法

详见讲义

8、哲学家就餐问题

详见讲义

本文整理自:《操作系统原理》北京大学_陈向群 讲义

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值