如题:2020年8月
分析:死锁,软考也是一个考点。可见还是挺重要的。答案详见《死锁避免部分》
如题:2020年10月
分析:这种题型实际在软考时经常遇到,条件就按题目给出的分析:进程并发的,考虑满足所有进程的情况是n*m,那么都不会发生死锁,但题目问的最小的个数,排除其实也能得出正确答案是B. 但这样显然是不够的,还得深入分析下原因。
当所需要资源总数,也就是说要满足所有的并发进程所需要的资源数(n*m) - 现有资源总数(这里可以设为未知的X) >= 并发进程数(n),这里要看不等式左边的部分代表什么含义呢?就是代表,不能满足的资源数量(或者说是还需要的资源数),这种情况下就会产生死锁,一个进程都运行不了。
整理下不等式: n*m-X >= n ----> X =< n*m-n=n*(m-1) ,这种情况下一个进程都运行不了,但再加上1,那至少可以有一个进程运行,从而解锁进程,所以答案选B.
再看一个类似题:2019年4月
分析,还是用上面的思想,还需要的资源数是否大于进程数,也就是 总共需要的资源 减去 现在已经有的资源 ,设进程数为x,则x*3-15>=x,也就是2x>15,这样一个进程都运行不了,要想运行必须小于15,所以x最大为7
什么是死锁?
死锁进程结合中的每个进程都在等待另一个死锁进程已经占有的资源。但是由于所有进程都不能运行,它们之中任何一个资源都无法释放资源,所以没有一个进程可以被唤醒。这种死锁也被称为资源死锁(resource deadlock)
。资源死锁是最常见的类型。
死锁的必要条件?
- 互斥条件:资源独占且排他使用,从资源角度来说
- 不可剥夺条件:分配给一个进程的资源不能强制剥夺,它只能由占有它的进程主动释放。从进程的角度来说
- 请求和保持条件:已经获取资源的进程被认为能够获取新的资源,并且继续占有已经获取的资源。从进程的角度来说
- 循环等待:死锁发生时,系统中一定有两个或者两个以上的进程组成一个循环,循环中的每个进程都在等待下一个进程释放的资源。从进程的角度来说
发生死锁时,上面的情况必须同时会发生。如果其中任意一个条件不会成立,死锁就不会发生。可以通过破坏其中任意一个条件来破坏死锁。
死锁预防及措施?
死锁预防是指任何系统操作前,事选评估系统的可能情况,破坏产生死锁的四个必要条件(破坏进程的2,3,4条件上,就是资源静态分配策略,这里的静态指的是并发性,极端可认为是没有并发,这样更好理解些)。注:实际系统实现静态分配策略是比较困难的,需要提前知道系统资源情况,及所有进程的可能情况。
- 破坏不可剥夺条件:处于等待状态的进程,被释放已经占有的资源。
- 破坏请求和保持条件(处于不新请求状态也不保持,而是一运行就完成状态):让所有的进程开始执行前请求全部的资源。如果所需的资源可用,进程会完成资源的分配并运行到结束。如果有任何一个资源处于频繁分配的情况,那么没有分配到资源的进程就会等待。问题是进程开始时并不能确定所需要的全部资源,,如果知道的话,就可以使用银行家算法。
- 破坏循环等待条件:资源有序分配(是属于死锁预防策略):进程可以在任何时间提出请求,但是所有的请求都必须按照资源的顺序提出。如果按照此分配规则的话,那么资源分配之间不会出现环。尽管通过这种方式来消除死锁,但是编号的顺序不可能让每个进程都会接受。
从资源角度破坏死锁条件?
破坏互斥条件:资源不被一个进程独占,那么死锁肯定不会产生。如,打印机的解决方式是使用 假脱机打印机(spooling printer)
,这项技术可以允许多个进程同时产生打印文件,在这种模型中,实际请求打印机的唯一进程是打印机守护进程,也称为后台进程。后台请求资源后,后台进程不会产生新的请求。
死锁避免?
考虑了并发性,所以叫避免。根据资源分配后会不会产生死锁,来决定分配与否。检测资源分配会不会产生死锁,用到“系统安全”概念。就是看进程运行所需要的资源量是不是超过剩余资源量与所有进程当前占用的资源量之和如下图:。不超过就是安全的。就是银行家算法的描述。
安全与死锁的关系(用概率论语言描述)。如下:
其实到这里,例题答案就出来了。11、C 12、C 13、A
死锁的检测与解除?相对来说贴进真实的系统处理方法
思想:不采取任何预防和避免措施,运行过程中不停的监督进程执行和资源占用情况,判断死锁并恢复。
死锁检测:定时或调度时,检测是进程是否处于循环等待状态。
死锁解除的实质:就是让释放资源的进程能够继续运行。
资源分配图:对死锁情况的建模
可见,书中已经把步骤解释的很清楚了。同时也给出了死锁判定定理:
处于死锁状态的充分条件是:当且仅当该系统资源分配图是不可完全简化的。(所谓简化就是从一个非请求进程(但进程并不是没有被分配资源,也就是非孤立)开始,依次消去请求边;看所有进程能否完全消去申请边的过程。