在计算机系统中有许多互斥资源(如磁带机、打印机和绘图仪等)或软件资源(如进程表、临界区等),若两个进程同时使用打印机,或同时进入临界区必然会出现问题。
(一)死锁
指两个以上的进程互相都要求对方已经占有的资源,导致无法继续运行下去的现象。
(二)死锁原因
死锁原因 | 说明 | |
1 | 进程推进顺序不当 | 互相请求对方已占有资源 |
2 | 同类资源分配不当 | 共享资源不足导致资源竞争 |
3 | PV操作使用不当 | 信号量 |
(三)进程资源图
进程资源有向图:方框(资源)、圆圈(进程)和有向边。
请求资源□→○
分配资源○→□
(四)死锁产生必要条件
产生死锁的4个必要条件
- 互斥条件
- 请求保持条件
- 不可剥夺条件
- 环路条件
当发生死锁时,在进程资源有向图中必构成环路,其中每个进程占有了下一个进程申请的一个或多个资源,导致进程申请的资源无法满足。
(五)死锁处理
处理策略 | 说明 | 备注 | |
1 | 鸵鸟策略(不理睬策略) | ||
2 | 预防策略 | 采用某种策略限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件 | ①预先静态分配法。 破坏了“不可剥夺条件”。预先分配所需资源,保证不等待资源。 缺点:降低了资源利用率,降低了并发程度;可能无法预先知道所需资源。 ②资源有序分配法。 破坏了“环路条件”。把资源分类按顺序排列,保证不形成环路。 缺点:限制了进程对资源的请求;资源排序占用了系统开销。 |
3 | 避免策略 | 不那么严格地限制产生死锁的必要条件,需要很大的系统开销 | Dijkstra银行家算法,事先检测资源请求命令是否处于安全状态,不安全则不予分配。 提高了资源利用率,但检测增加了系统开销 |
4 | 检测与解除死锁 | 对资源分配不加限制,允许死锁产生。但系统定时地运行一个死锁检测程序,若检测到死锁,则设法解除。 | 死锁解除方法 资源剥夺法:从一些进程那里强行剥夺足够数量的资源分配给死锁进程 撤销进程法:根据某种策略逐个撤销死锁进程,直到解除死锁为止。 |
(六)银行家算法
银行家算法(Banker's Algorithm)是一种用于避免死锁的资源分配算法,由 Edsger Dijkstra 提出。它主要用于操作系统中,确保系统在分配资源时不会进入不安全状态,从而避免死锁的发生。银行家算法的核心思想是模拟资源分配,检查分配后系统是否仍然处于安全状态。
(七)安全状态
系统能按某种顺序如<P1,P2,…Pn>(安全序列)来为每个进程分配其所需资源,直到最大需求,使每个进程都可顺序完成。