3.5 死锁概述

L18

学习目标

死锁是多个进程因竞争资源而造成的僵局,需理解其产生条件与处理方法。

  • 资源分类:可重用性资源(固定数量、可重复使用)和消耗性资源(动态创建和消耗);可抢占资源和不可抢占资源。
  • 死锁的定义:多个进程因竞争资源而造成僵局,若无外力干预都无法推进。
  • 产生死锁的四个必要条件:互斥条件、请求和保持条件、不剥夺条件、环路等待条件。
  • 处理死锁的方法:预防死锁、避免死锁、检测和解除死锁。

原理 · 深入理解

资源分配图与死锁环 P1 P2 R1 R2 环路 ⇒ 可能死锁 银行家:只把系统留在安全序列上 · 预防:破坏占有且等待

3.5 死锁概述

本节概览:先建立「死锁概述」的框架,再依次展开下列小节。

  1. 资源问题
  2. 计算机系统中的死锁
  3. 死锁的定义、必要条件和处理方法

3.5.1 资源问题

可重用性资源可供进程重复使用多次,具有如下性质。

  1. 每个单元只能分配给一个进程,不允许多进程共享
  2. 使用顺序:请求→使用→释放,请求失败则阻塞
  3. 每类资源单元数目相对固定,运行期间不能创建或删除

可消耗性资源又称临时性资源,在进程运行期间动态创建和消耗。

  1. 单元数目在运行期间不断变化,有时为 0
  2. 进程可不断创造单元放入缓冲区
  3. 进程可请求若干单元用于消耗,不再返回

资源按是否可抢占分为两类。

可抢占性资源

进程获得后可被其他进程或系统抢占。

不可抢占性资源

分配后不能强行收回,只能由进程用完后自行释放。

3.5.2 计算机系统中的死锁

不可抢占性资源数量不足时,进程会因争夺资源而陷入僵局。

例:P1 先打开 F1 再打开 F2,P2 先打开 F2 再打开 F1,两者互相等待——死锁。

用资源分配图描述死锁:方块代表可重用资源(文件),圆圈代表进程,请求边和分配边表示资源占用关系。

图3-12 共享文件时的死锁情况 P1 P2 R1 R2 两个进程互相等对方占用的文件
图3-12 共享文件时的死锁情况

三个进程利用消息通信机制通信时也可能形成死锁:各进程都在等待对方发送消息,谁也不先发送。

图3-13 进程之间通信时的死锁 P1 P2 R1 R2 都在等对方的消息
图3-13 进程之间通信时的死锁

进程推进顺序不当也会引起死锁。

进程推进顺序合法

不会引起死锁的推进顺序,如曲线 1、2、3。

进程推进顺序非法

引起死锁的推进顺序,如曲线 4。

图3-14 进程推进顺序对死锁的影响 顺序推进 交错推进 → 死锁 同一组申请,次序不同结果不同
图3-14 进程推进顺序对死锁的影响

3.5.3 死锁的定义、必要条件和处理方法

产生死锁必须同时具备四个必要条件,任一个不成立死锁就不会发生。

  1. 互斥条件
  2. 请求和保持条件
  3. 不剥夺条件
  4. 环路等待条件

做 · 实验

  • 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
  • 完成 06-heap 或等价练习:分配-释放-再分配观察。

打开工作台

死锁概述

load-link

用控件单步操作;日志区记下每一步发生了什么。

代码导读

本课在工作台编译烧录。先读 user 实验入口,再对照 kernel / HDF 中被调用的函数,不要一上来改链接脚本。

总结与提升

  • 能区分内碎片与外碎片。
  • 能用自己的话复述学习目标,并指出概念与板上实验的对应。
  • 能结合动画解释一次分配失败原因。
  • 能说出 Flash 与 DRAM 在链接中的角色。
  • 能画出嵌入式常见两级(SRAM/Flash)。
  • 能默写死锁四条件,并举一个固件中的例子。

延伸思考

  • 固定分区适合固件里的什么对象?
  • 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
  • 静态池为何在固件更受欢迎?
  • 为何 app 起始常是 0x42000020?

← 本阶段封面 · 课程列表