进程死锁(Deadlock)是指一组进程在等待彼此持有的资源,导致所有进程都无法继续执行的情况。这种相互等待的状态使得所有相关进程都被永久阻塞。
进程资源图是资源分配图的另一种称谓,是用有向图表示系统中进程与资源之间的请求和分配关系的图。
软考中,这两个考点都是关于死锁的。
关注公众号“月上老狗”,发送“软件设计师”,获取历年软件设计师软考真题。
死锁的产生需要同时满足以下四个条件:
如何判断进程会不会死锁? 判断进程是否会陷入死锁,常用的方法包括:
资源分配图(Resource Allocation Graph, RAG):
要计算导致死锁的资源数,需要分析如下几个数字:
有了这几个数字之后,即可确定系统资源是否满足进程运行,从而是否造成死锁、死锁最小的进程等等。
这里计算时,我们可以认为:如果只需要额外引入一个资源即可满足所有进程的运行,则这个系统不会死锁,否则。则会死锁。
有了这个条件,就可以利用小学只是计算死锁相关的问题了。
如:已知共有8个资源,相同的N个进程,每个进程需要3个资源,则最大可以运行多少个进程?
计算:(8 + 1) / 3 = 3
刚好等于3,所以3个进程可以正常运行,4个进程则会死锁。
如果每个线程占用4个资源呢?
(8 + 1) / 4 = 2.25
,不到3,则最大能运行2个进程,3个进程就会造成死锁。
8 + 1 / 2 = 4.5
,则占用4个资源不会死锁,5个则会死锁。
进程组原图一般是线框图,其中节点代表进程(Process
)和资源(Resource
),箭头表示已分配资源或请求组员,具体介绍:
常用圆形图标,字母P表示,如:P1, P2, ...
)和资源(常用矩形图标,字母R表示,如:R1, R2, ...
)。判断进程资源图中是否存在死锁,可以通过以下步骤:
实际例子
假设系统中有两个进程P1和P2,以及两个资源R1和R2。P1持有R1,等待R2。P2持有R2,等待R1。则资源分配图如下:
consoleP1 → R2(P1请求R2分配资源) R1 → P1(R1已分配资源给P1) P2 → R1(P2请求R1分配资源) R2 → P2(R2已分配资源给P2)
分析:
通过理解这些概念和方法,可以有效地分析和处理进程死锁问题。
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!