4.2.6 死锁

2025-08-03 17:00:10 更新

在计算机系统中有许多互斥资源(如磁带机、打印机和绘图仪等)或软件资源(如进程表、临界区等),若两个进程同时使用打印机,或同时进入临界区必然会出现问题。

(一)死锁

指两个以上的进程互相都要求对方已经占有的资源,导致无法继续运行下去的现象。

(二)死锁原因


死锁原因

说明

1

进程推进顺序不当

互相请求对方已占有资源

2

同类资源分配不当

共享资源不足导致资源竞争

3

PV操作使用不当

信号量

(三)进程资源图

进程资源有向图:方框(资源)、圆圈(进程)和有向边。

请求资源□→○

分配资源○→□

(四)死锁产生必要条件

产生死锁的4个必要条件

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

当发生死锁时,在进程资源有向图中必构成环路,其中每个进程占有了下一个进程申请的一个或多个资源,导致进程申请的资源无法满足。

(五)死锁处理


处理策略

说明

备注

1

鸵鸟策略(不理睬策略)



2

预防策略

采用某种策略限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件

预先静态分配法。

破坏了“不可剥夺条件”。预先分配所需资源,保证不等待资源。

缺点:降低了资源利用率,降低了并发程度;可能无法预先知道所需资源。

资源有序分配法。

破坏了“环路条件”。把资源分类按顺序排列,保证不形成环路。

缺点:限制了进程对资源的请求;资源排序占用了系统开销。


3

避免策略

不那么严格地限制产生死锁的必要条件,需要很大的系统开销

Dijkstra银行家算法,事先检测资源请求命令是否处于安全状态,不安全则不予分配。

提高了资源利用率,但检测增加了系统开销

4

检测与解除死锁

对资源分配不加限制,允许死锁产生。但系统定时地运行一个死锁检测程序,若检测到死锁,则设法解除。

死锁解除方法

资源剥夺法:从一些进程那里强行剥夺足够数量的资源分配给死锁进程

撤销进程法:根据某种策略逐个撤销死锁进程,直到解除死锁为止。


(六)银行家算法

银行家算法(Banker's Algorithm)是一种用于避免死锁的资源分配算法,由 Edsger Dijkstra 提出。它主要用于操作系统中,确保系统在分配资源时不会进入不安全状态,从而避免死锁的发生。银行家算法的核心思想是模拟资源分配,检查分配后系统是否仍然处于安全状态。

(七)安全状态

系统能按某种顺序如<P1,P2,…Pn>(安全序列)来为每个进程分配其所需资源,直到最大需求,使每个进程都可顺序完成。