《现代操作系统》—— 第12章 死锁
- 死锁的基本概念:
- 死锁定义:在一组进程中,每个进程都无限等待该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
- 危害:如果死锁发生,会导致系统资源大量浪费,甚至导致系统崩溃
- 发生死锁的原因:资源有限,或锁和信号量使用错误
- 产生死锁的必要条件:
- 互斥使用(资源独占):一个资源每次只能给一个进程使用
- 占有且等待(请求和保持,部分分配):进程在申请新的资源的同时保持对原有资源的占有
- 不可抢占(不可剥夺):资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
- 循环等待:存在一个进程等待队列{P1,P2,...,Pn},其中P1等待P2占有的资源,P2占有P3的资源,...,Pn等待P1占有的资源,形成一个进程等待环路
- 用图判断进程组内是否存在死锁:
- 资源分配图:
- 资源分配图画法说明:
- 死锁定理:
- 资源分配图的化简:
- 画至最简后,如果图中所有节点都是孤立的,则说明没有死锁;否则说明系统中存在死锁
- 资源分配图:
- 死锁的预防
- 解决死锁的方法:
- 预防死锁:
- 死锁避免
- 关于死锁避免的讨论——根据资源限制
- 死锁避免的定义:
- 安全序列的概念
- 死锁避免的典例——银行家算法
- 银行家算法也是基于上面对死锁避免的讨论,资源受限时,实时计算当前申请是否会导致不安全状态,从而决定是否进行资源分配。
- 关于死锁避免的讨论——根据资源限制
- 解决死锁的方法:
- 死锁的检测与解除
- 死锁检测:
- 一个简单的死锁检测算法:
- 死锁的解除
- 一个简单的死锁检测算法:
- 死锁检测: