因为今年要备考架构师,自己的时间又不宽裕,只能见缝插针地有时间就学习一个小片段。这几天一直在学习操作系统知识,今天主要是进程管理的死锁问题。单纯听课效果不理想,还是启动老习惯——记笔记,虽然慢一点,但效果明显。
进程管理是操作系统的核心,如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,就会发生死锁。而如果一个或多个进程产生死锁,就会造成系统的死锁。
例题:例如系统有3个进程A,B,C,三个进程都需要5个资源,则系统如果有13个资源即不会发生死锁。这是因为假设3个进程都分配到了4个资源(共12个),那么最后一个资源无论分配给哪个进程都能保证该进程执行完成并释放资源,从而满足其他两个进程的需要。当然,如果是其他的分配方式,则总能有一个进程先获取所有需要的资源而先得到执行,从而不会发生死锁。所以这里有个公式,假设系统有k个进程,每个进程需要n个资源,那么系统至少有k*(n-1)+1个资源,能保证不发生死锁。
系统的进程发生死锁,需要满足四个必要条件:互斥、保持和等待、不剥夺、环路等待。所以要避免死锁,则需要从这四个条件上入手解决。
重点理解一下银行家算法。
银行家算法的思路就像是银行放贷一样,如果评估一个贷款者没有资金偿还能力,那么银行就不会将贷款放给这个贷款者。同样的,银行家算法也是这样一种分配资源的原则:
(1) 当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程;
(2) 进程可以分期请求资源,但请求的总数不能超过最大需求量;
(3) 当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源。
一个例题:
假设系统中有三类互斥资源R1、R2和R3,总数目分别为9、8、5。在T0时刻系统中有P1、P2、P3、P4和P5共5个进程,他们对资源的最大需求量和已经分配到的资源数见下表。问这些进程按哪个序列执行,系统是安全的,也就是不会发生死锁。
首先,知道了每个进程的资源最大需求量和已经分配的数量,我们需要计算出5个进程缺少的资源数量,以及三种资源的剩余数量。
这样很直观了,第一个能够执行的进程只能是P2,所以答案在B或C之间。P2得到资源并执行完后,释放资源,此时,三种资源的数量变成了4、2、1。第二个可执行的进程为P4。依次类推。