操作系统---(25)死锁的发生与描述
回顾:哲学家就餐问题
什么是死锁
一组相互竞争系统资源或进行通信的进程间的永久阻塞
现象:
- 每个进程获得了一部分资源, 又申请另外的资源, 得不到而转入阻塞
- 若无外力作用,这些进程会-一直阻塞下去。
一种死锁状态的例子
此时:
P2又申请1个R2,阻塞
P1又申请1个R1,阻塞
结果:
P1和P2陷入死锁
死锁的危害
- 陷入死锁圈的进程无限期阻塞等待
- 陷入死锁圈的资源被浪费
- 更多进程卷入死锁
- 甚至系统死机
因此,操作系统必须采取措施处理死锁
分析—产生死锁的原因
- 动态资源分配策略
- 资源可用数量少于需求数量
- 进程并发过程的偶然因素
因有偶然性,所以无法给出死锁产生的充分条件
产生死锁的4个必要条件
(1)互斥条件
进程请求的资源属于临界资源,每一瞬间只能由一个进程使用,其它申请该资源的进程等待。
(2)不可剥夺条件
进程获得某资源后,便一直占有它,直到用完为止才可以释放,其它进程不可以剥夺。
(3)请求和保持条件
允许一个进程在保持已有资源不放弃的情况下,进一步请求新资源,被阻塞时也不会释放已占有的资。
(4)环路等待条件
一组进程{l…,Pn}的占有资源情况 与请求资源情况构成了一个环型链,比如P1等待P2的资源,P2等待P3的资源…等待P1的资源。
死锁状态的描述(1)----资源请求分配图
(1) 有死锁,图中一定有环
(2) 图中有环,不一定有死锁发生
死锁状态的描述(2)----资源请求分配矩阵
- 若n个进程、m类资源,则首先设置三个nX m的二维矩阵
- 需求总量矩阵Max[ ] [ ]
- 资源占有矩阵Allocation[ ][ ]
- 尚需矩阵Need[ ][ ]
如: Need[i] [j]=k,表示进程i尚需第谈资源的数量为k个。
- 另设几个一维数组
- 资源总量数组Total[ ]
- 可用(剩余)资源数组Available[ ]
- 申请资源数组Request[ ]
例如:Total=(10,5,7)
面对死锁
- 死锁是进程并发过程中可能发生的问题
- 死锁有危害,轻则死锁进程死住,重则系统死机
- 操作系统必须面对并解决死锁问题
死锁的解决办法
- 事前处理:针对性采取措施,让死锁没有机会发生
- 事后处理:及时检测,及时解除