11.死锁(deadlocks)

死锁的特征

  1. 哲学家用餐死锁问题
  • 哲学家死锁当所有人同时拿到一侧的筷子的时候,就会发生永久等待的现象
  1. DEADLOCK(死锁的定义)
  • In a multiprogramming environment(多道程序设计环境),several(一些) process may compete(竞争) for a finite(有限) number of resources.(在多道程序设计环境中,一些进程可能会竞争有限数量的资源。)
  • A process requesets resources;if the resources are not available at the that time ,the process enters a waiting state.
  • Sometimes a waiting process is never again able to change state,because the resources it has requested are held by other waiting process.
  • this situation is called a deadlock.
  1. 死锁与饥饿
  • 饥饿:进程长时间的等待。
    • e.g低优先级进程总是等待高优先级所占有的进程。
  • 死锁:循环等待资源
    • A和B分别占有打印机和扫描仪
    • 同时分别申请扫描仪和打印机
  • 死锁=>饥饿(但是饥饿无法推出死锁)
    • 饥饿可能终止
    • 如果无外部干扰,死锁无法终止
  1. 产生死锁的四个必要条件
  • 互斥使用
    • 一个时刻,一个资源仅能被一个进程占有。
  • 不可剥夺
    • 除了资源占有进程主动释放资源,其他进程都不可抢夺其资源。
  • 占有和等待
    • 一个进程请求资源得不到满足,等待时不释放已占有资源。
  • 循环等待(上面三个条件同时存在产生的结果)
    • 每一个进程分别等待它前一个进程所占有的资源
  1. methonds for handling deadlocks(处理死锁的方法)
  • Deadlocks are NOT allowed(允许) to appear(出现).We must prevent(预防) or avoid(避免) deadlock state.
  • Deadlocks are allowed to appear,but the system can detect(检测) them and recover(恢复).
  • We pretend that deadlocks never occur(发生) in the system.(我们假装系统从未发生死锁)
  1. 死锁的解决方案
  • 死锁的防止(Prevention)
    • 破坏四个必要条件之一
  • 死锁的避免(avoidance)
    • 允许四个必要条件同时发生,在并发进程中做出妥善安排避免死锁的发生
  • 死锁的检测和恢复(dectection && recovery)
    • 允许死锁的发生,系统及时地检测死锁并解除它。

死锁的预防

  1. 破坏死锁任一必要条件
  • 互斥使用=>允许资源共享使用
    • 这不太可行,锁就是为了解决这个问题。
  • 不可剥夺=>资源可被抢夺
    • 虽然是有时间片,cpu的调度的方式,但是在软件上去实现还是不可以行的。
  • 占有和等待=>(一开始就把所有资源都申请了,或者是一个资源都不申请)
  • 循环等待=>(去对所有资源进行一个排序,高等级资源的申请的前提是已经拥有所有低等级的资源)

死锁的避免

  1. 安全状态(safe state)
  • A state is safe if the system can allocate(分配) resource resource to each process(up to its maximum(分配最大的资源)) in some order(以某一个特定的顺序) and still avoid a deadlock.More formally ,a system is in a safe state only if there exists a safe sequence(安全序列).
  • If no such sequence exists,then the system state is said to be unsafe.(如果不存在任何一个安全序列,那么系统就是不安全状态)
    • A safe state is NOT a deadlocked state.(如果一个系统被评估为安全状态,那么它就不会存在死锁状态)
    • An unsafe state MAY lead to a deadlock.(一个不安全状态的系统可能会导致死锁)
  1. 死锁的避免概念
  • 系统对进程的每一次资源申请都进行详细的计算,根据结果决定是分配资源还是让其等待,确保系统始终处于安全状态,避免死锁的发生。
  • 银行家算法(Banker's algorithm)
    • 已知系统中所有资源的种类和数量
    • 已知进程所需要的各类资源最大需求量
    • 该算法可以计算出当前的系统状态是否安全(寻找安全序列)
  • 安全算法:只需要找到一个安全序列,那么系统就处于安全状态。
  1. 银行家算法的优缺点
  • 优点:允许死锁必要条件同时存在
  • 缺点:缺乏实用价值
    • 进程运行前就要求知道其所需资源的最大数量。
    • 要求进程是无关的,若考虑同步情况,可能会打扰安全序列。
    • 要求进入系统的进程个数和资源固定。

死锁的检测

  1. 死锁的检测与恢复
  • 允许死锁发生,操作系统不断监测系统进展情况,判断死锁是否发生
  • 一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行
  • 死锁检测时机
    • 当进程等待时检测死锁(系统开销大):如果系统检测到开销很大,很多进程都在等待。
    • 定时检测
    • 系统资源利用率下降时检测死锁
  1. 资源分配图表示法
  • 资源类(资源的不同类型)(方框,几个方框就有几个类)
  • 资源实例(存在于每个资源中)(方框中的黑点)
  • 进程(圆形)
  • 申请边(进程指向资源)
  • 分配边(资源指向进程)
  1. 资源分配图图例
  • 无环一定不会出现死锁,有环才有可能出现死锁
  • 对于这个图例,p3执行完成之后,就会释放r2资源,那么就不会形成死锁现象了
  • 在该图中一共有三个申请边,然后都陷入循环等待状态中,产生死锁状态。
  • 对于申请边,r1的资源会被p2进程释放出来,不会陷入一直循环等待状态。
  1. 资源分配图的简化
  • 消除申请边和分配边
  • 根据进程的结束去释放分配边,然后去满足申请边,并消去申请边。
  1. 死锁定理
  • 如果能在“资源分配图”中消去某进程的所有请求边和分配边,则称该进程为孤立节点
    • 可完全简化
    • 不可完全简化
  • 系统为死锁状态的充分条件是:当前仅当该状态的“进程-资源分配图”是不可完全简化的。该充分条件称为死锁定理。
  1. 死锁的解除
  • 中止进程,强制回收资源
    • 交通问题:将某列火车吊起来
    • 哲学家问题:将某个哲学家射死
  • 剥夺资源,但是不终止进程
  • 进程回退(roll back)
    • 就像DVD的回退,好像最近一段时间什么事情都没发生
    • 交通问题:让某列火车倒车
    • 哲学家问题:让某个哲学家放下一个筷子
  • 重新启动
    • 没有办法的办法,但是一个肯定有效的问题
  1. 其实window系统态度是佛系态度,并不会干预进程。只是提供一个按键,给我们关闭它。
posted @ 2024-04-28 00:51  zhudachang  阅读(4)  评论(0编辑  收藏  举报