文章目录
死锁问题
都抢同一个车道,卡住了,都无法进行接下来的行动
系统模型
有多个环存在
P2 和 P4,分别拥有资源R1 R2. P2有R1资源,但是不需要等待其他资源,P2运行一段时间后,一定会释放 R1,释放后,P1的sleep会被打破
死锁特征
吃着碗里看着锅里
只能自愿free,不存在抢占
这四个条件是死锁的必要条件,不是充分条件。死锁是因,会有四种4条件的果
基于上述四个特征分析上图
死锁处理方法
Deadlock Prevention(死锁预防)
防止死锁的出现,打破死锁的条件
资源不共享,可以免死锁,相当于静态分配,会导致效率很低,饥饿现象产生
Deadlock Avodidance(死锁避免)
这里比死锁避免条件放松了一些,这里不是设计一种方法一定不死锁,而时当进程运行过程中会申请资源,在申请的时候就会判断该不该给
如何判断?首先知道进程需要某一个类型的资源的最大数量是多少,第二个能够把资源分配的状态通过一种方法,来限制提供给分配资源的数量
什么是安全状态?当系统处于安全状态是指针对所有进程,存在一个时间序列,代表每个进程的结束时间顺序
银行家算法
Need代表当前所需要进程的情况
Available vector当前系统还剩下多少资源的向量
Alloction当前系统已经拥有的资源
Rescource vector表示当前系统中总的资源的个数
假定P1-P4四个进程都没有结束,有没有一个序列可以让他们都正常的结束
四个进程中找一个进程,他所需要资源的个数是小于当前Alloction的资源011,P1-P4哪一个资源的个数小于011?
很明显P2的001满足,把P2的不能结束改为可以结束,P2结束后把资源返回给Available,P2原来所拥有的资源是6 1 2
6 1 2 加到 0 1 1
Available变成了6 2 3,找下一个小于6 2 3的P,P1满足
Deadlock Detection(死锁检测)
- 允许系统进入死锁状态
- 死锁检测算法
- 恢复机制
之前的资源分配图简化变成一个等待图,去掉资源节点,只留下进程节点。
开销还是很大的,所以很少使用,对于银行家算法来说,需要知道每一个进程所需要的最大空间是多少,这一点对于一般的程序来说很难获得。
更多的是来调试系统
Recovery from Deadlock(死锁恢复)
大部分情况下对于死锁还是鸵鸟心态,不去管