死锁处理策略学习卡片

🔄

死锁处理策略

  • 静态策略预防死锁,不允许死锁发生
  • 动态策略
    • 避免死锁
    • 允许死锁发生:
      • 死锁的检测
      • 死锁的检测和解除
      • 死锁的解除
📊

死锁检测数据结构

  • 两种结点
    • 进程结点:每个节点对应一个进程
    • 资源结点:每个节点对应一类资源(矩形表示,内部小圆表示资源数量)
  • 两种边
    • 请求边(进程→资源):表示进程申请几个资源(每条边对应一个资源)
    • 分配边(资源→进程):表示已为进程分配几个资源(每条边对应一个资源)
🔍

死锁检测算法

  • 核心思想:通过资源分配图的可完全简化性判断死锁
  • 步骤
    1. 找出既不阻塞又不是孤点的进程(即申请资源数≤可用资源数)
    2. 消去该进程所有请求边和分配边
    3. 重复上述过程直到无边可消
  • 简化结果判定
    • 可完全简化:能消除所有边→无死锁(相当于找到安全序列)
    • 不可完全简化:剩余边连接的进程即为死锁进程
📜

死锁定理

  • 定理内容:若某时刻系统的资源分配图不可完全简化,则系统发生死锁
  • 应用示例
    • 图中P1可满足请求→消去P1边→P2被唤醒→最终可消去所有边→无死锁
    • 修改后P1请求2个R2(已无空闲)→仅P3可执行→归还资源后仍无法满足P1/P2→死锁
🔓

死锁解除方法

  • 资源剥夺法
    • 挂起部分死锁进程并抢占其资源
    • 注意:需防止被挂起进程长时间饥饿
  • 撤销进程法
    • 强制终止部分/全部死锁进程
    • 缺点:已执行工作可能白费,代价较大
  • 进程回退法
    • 回退进程到避免死锁的状态(需系统记录执行历史)
    • 实现难点:需设置还原点
⚖️

牺牲进程选择依据

  • 进程优先级(优先牺牲低优先级)
  • 已执行时间(短时间进程优先)
  • 剩余完成时间(接近完成的优先)
  • 已占用资源量(持有资源多的优先)
  • 进程类型(优先牺牲批处理式进程)