2023-08-07 00:30:03
死锁
一、定义
死锁,是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
二、产生原因
系统资源(不可剥夺的资源)的竞争:
当系统中的不可剥夺资源(如磁带机、打印机)数量不足以满足多个进程运行的需要时,进程会在运行过程中因争夺资源陷入僵局。
进程推进顺序不合理:
进程在运行过程中,请求和释放资源的顺序不当,也会造成死锁。例如,进程P1和P2分别持有资源R1和R2,同时P1申请资源R2,P2申请资源R1,此时两个进程都会因对方持有自己所需的资源而陷入阻塞。
三、必要条件
要造成死锁,必须满足以下四个条件,缺一不可:
互斥条件:
进程所需的资源是不可剥夺资源,当该资源被一个进程占用时,其他进程必须等待该进程使用完才能使用。
不剥夺条件:
进程所获得的资源在未使用完之前,不能被其他进程强行夺走,只能由该进程释放。
请求并保持条件:
当进程A已经持有一种或多种资源时,它可能会继续请求其他资源。如果这些资源被其他进程占用,进程A会进入阻塞态,但不会释放之前所持有的资源。
循环等待条件:
存在一个进程集合{P1, P2, ..., Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,...,Pn等待P1占有的资源,形成一个循环等待链。
四、应对策略
预防死锁:
破坏产生死锁的四个必要条件中的一个或多个,以避免死锁的发生。
破坏互斥条件:允许系统资源共享使用,但不适用于所有资源(如打印机)。
破坏不剥夺条件:当一个进程请求新资源得不到满足时,释放之前所占有的资源。
破坏请求并保持条件:采用预先静态分配方法,进程在运行前一次性申请完所需全部资源。但这种方法可能导致资源浪费和“饥饿”现象。
破坏循环等待条件:采用顺序资源分配法,规定每个进程必须按照资源编号递增的顺序请求资源。但这种方法要求设备数量相对稳定,添加设备会比较麻烦。
避免死锁:
在资源分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。这种方法需要设计算法来判断系统是否处于安全状态,实现起来相对复杂。
死锁的检测及解除:
不采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时检测死锁的发生,并采取某种措施解除死锁。这种方法虽然灵活,但可能导致系统性能下降。
五、示例解析
下列情况中,可能导致死锁的是:
因此,正确答案是C。

以上就是对死锁相关知识的详细介绍,包括定义、产生原因、必要条件以及应对策略等。希望这些内容能够帮助大家更好地理解和解决死锁问题。