操作系统-死锁


#操作系统-死锁

categories: 操作系统

这是我个人在学习操作系统的笔记。。。

死锁

定义:一组竞争系统资源或相互通信的进程,相互的“永久阻塞”。若无外力作用,这组进程将永远不能继续执行。

PS:简单的说,一组阻塞的进程持有一种资源,等待获取另一个进程所占有的一个资源。

可重复使用的资源
  • 在一个时间内,只能一个进程使用且不能被删除
  • 进程获得资源,在使用一段时间后就释放,释放的资源给其他进程重用
  • 资料类型有:I/O通道,处理器,文件,数据结构,设备等
  • 如果每个进程拥有一个资源,并请求其它资源,死锁就可能发生
使用资源
  • 创建和销毁
  • 在I/O缓冲区的中断,信号,消息,信息
  • 如果接收消息阻塞,可能会发生死锁
  • 可能少见的组合时间会引起死锁

基本情况

如果资源分配图不包括循环 ==>没有死锁
如果资源分配图包括循环 ==>

  1. 如果每个资源类只有一个实例,那么死锁
  2. 如果每个资源类有几个实例,可能死锁
    死锁可能出现,如果下面四个条件同时成立
  • 互斥:在一个时间内,只能有一个进程使用资源
  • 持有并等待:进程保持至少一个资源正在等待获取其他进程持有的额外资源
  • 无抢占:一个资源只能被进程资源释放,进程已经完成了它的任务之后
  • 循环等待:存在等待进程集合{P0,P1…Pn},P0正在等待P1所占用资源,以此类推,Pn正在等待P0所占用的资源
    PS:上面四个条件,是死锁的必要条件。就是说,死锁出现后,会有这四个条件。同时,这四个条件出现,不一定是死锁。

死锁处理的办法
  • 确保系统永远不会进入死锁状态
  • 运行系统进入死锁状态,然后恢复
  • 忽略这个问题,假装系统中没有发生过死锁;目前大多数系统采用这种方法

死锁的预防和避免
  1. 限制申请方式
  • 互斥 — 共享资源部署必须的,必须占用非共享资源。----->互斥变成不互斥的
  • 占用并等待 — 必须保证当一个进程请求的资源,它不持有任何其他资源

需要进程请求并分配其所有资源,它开始执行前或运行进程请求资源时,仅当进程没有资源
导致资源利用率,可能发生饥饿

  • 无抢占 —

如果进程占有某些资源,并请求其它不能被立即分配的资源,则释放当前正占有的资源
被抢占资源添加到资源列表中
只有当它能够获得旧的资源以及它请求新的资源,进程可以获得执行

  • 循环等待 — 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请
  1. 需要系统具有一些额外的先炎信息提供
  • 最简单和最有效的模式,是要求每个进程声明它可能需要的每个类型资源的最大数目
  • 资源的分配状态是通过限定提供和分配的紫竹院数量,和进程的最大需求
  • 死锁避免算法动态检查的资源分配状态,以确保永远不会有一个环形等待状态
  • 当一个进程请求可用资源,系统必须判断;立即分配是否能使系统处于安全状态
    -系统处于安全状态:针对所有进程,存在安全序列
  • 序列<P1,P2…Pn>是安全的:针对每个Pi,Pi要求的资源能够有当前可用的资源 + 所有Pj持有的资源来满足,其中中J<i

如果Pi资源的需求不是立即可用,那么Pi可以等到所有Pj完成
当Pi完成后,Pi+1可以得到所需要的资源,执行,返回所分配的资源,并终止
同样的,Pi+2,Pi+3和Pn都能获得其所需的资源
PS:如果系统处于安全状态 ==>无死锁
如果系统处于不安全状态 ==>可能死锁
避免死锁:确保系统永远不会进入不安全状态


避免死锁-银行家算法

  1. 可利用资源向量Available:这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。
  2. 最大需求矩阵Max:这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
  3. 分配矩阵Allocation:这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。
  4. 需求矩阵Need:这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要R j类资源K个,方能完成其任务。
  5. 上述三个矩阵间存在下述关系:Need[i, j] = Max[i, j] - Allocation[i, j]

    死锁的恢复
  • 终止所有的死锁进程
  • 在一个时间内终止一个进程直到死锁消除
  • 终止进程的顺序应该是:

进程的优先级
进程运行了多久,以及需要多少时间才能完成
进程占用的资源
进程完成需要的资源
多少进程需要被终止
进程是交互还是批处理
2.通过资源抢占
选择一个受害者 - 最小成本
回滚- 返回到一些安全状态,重启进程到安全状态
饥饿 - 同一进程可能一直被选作受害者,包括回滚的数量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值