操作系统笔记(7)死锁

1. The Deadlock Problem

2. System Model

资源类型(resource type): R 1 , R 2 , . . . , R m R_1,R_2,...,R_m R1,R2,...,Rm
例如CPU cycle,内存空间,IO设备

认为每个资源类型Ri拥有Wi数量的实例,这些实例被process利用

每个进程使用一系列的protocol利用这些资源类型的实例:

  • request
  • use
  • release

3. Deadlock Characterization

如果以下情况同时发生,死锁就有可能出现

  • Mutual exclusion:对某种资源,在同一时间只有1个进程能够对它进行使用(同时刻的互斥性)。
  • hold and wait:
  • no preemption:除非进程完成工作并且主动释放资源,否则资源不会被释放
  • circular wait:在系统中存在一个环形回路集合:{P0,P1,…Pn},其中P0等P1,P1等P2,…Pn却在等P0.

Resource-Allocation Graph(资源分配图)

有两种类型的节点:

  • process:用圆表示
  • resource:用方块表示,方块内的小方块表示资源的instance

两种边:
操作系统笔记(7)死锁
实例:

操作系统笔记(7)死锁
此处没有死锁操作系统笔记(7)死锁
有死锁的情况
操作系统笔记(7)死锁
有cycle但没有死锁(没有hold and wait)
从这个例子中也能看出来,每个resource的instance是通用的
操作系统笔记(7)死锁

所以可发现:
有cycle是有死锁的必要不充分条件。要视资源的instance情况而定

4. Methods for Handling Deadlocks

可选的几条策略:

  • 防止死锁情况发生
  • 允许系统进入死锁情况,但是可以让这种情况恢复正常
  • 无视死锁情况,假装死锁从未发生(但却是在操作系统最常用的策略)

5. Deadlock Prevention

对应四种情况的策略:
见ppt

Circular wait:给所有资源编号,而每个进程只能从小到大申请资源

6. Deadlock Avoidance

需要系统添加 priori(先验) 的信息

  • 简单却最有用:每个进程事先申报一下它每种资源使用的最大数量

safe state

老师的解释:系统的进程可以以一种确定的排列方式,这样他们可以使用可用的资源而全部完成

重要的推论

  • 如果系统能够进入safe state => 必然没有deadlock
  • 如果系统处于unsafe state => 有可能出现deadlock
  • avoidance的目的就是防止系统进入unsafe state。

avoidance algorithm

分single和multiple instance

Resource-allocation Graph Scheme

  • 添加了Claim edge:如果Pj可能会请求Rj,那么画一条虚线:Pi → Rj
  • 如果确实请求了,Claim edge就变成了实线的Request edge

例子:

处于unsafe state的 RAG:
操作系统笔记(7)死锁
对应的算法见ppt

Banker`s Algorithm

前提条件:

  • multiple instances
  • 每个process必须提供一个先验的最大使用量
  • 当进程请求资源时,它可能需要等待
  • 当进程获得了它的所有所需资源后,它必须在有限时间内归还