操作系统之死锁预防

163 阅读2分钟

一、死锁产生的必要条件

要预防死锁,首先需要了解死锁产生的四个必要条件: 1、互斥条件:资源不能被多个进程同时占有,即资源是互斥的。 2、占有并请求条件:已经占有资源的进程可以申请新的资源。 3、不可剥夺条件:已经分配给进程的资源,在尚未使用完毕之前,不能被剥夺,只能由占有它的进程自己释放。 4、循环等待条件:系统中存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。

二、预防死锁的方法

为了预防死锁,需要破坏上述四个必要条件中的一个或多个。在实际系统中,通常的做法是破坏占有并请求条件、不可剥夺条件和循环等待条件,因为互斥条件是无法破坏的。

破坏占有并请求条件

方法:采用资源一次性分配策略,即进程在开始执行前就申请它所需要的全部资源。系统若能满足其全部资源的需求,则为之分配资源并启动进程;否则,进程暂不启动,继续等待。 优点:实现简单,易于理解。 缺点:可能会降低系统的并发性,因为进程在启动前需要等待所有资源都被分配给它。

破坏不可剥夺条件

方法:允许进程在占有资源的情况下被剥夺资源。当进程因为申请新的资源而被阻塞时,它必须释放已经占有的所有资源,以便其他进程使用。 优点:可以有效地防止死锁的发生。 缺点:可能会导致进程频繁地释放和重新申请资源,增加系统的开销。此外,进程在释放资源后可能需要重新等待资源的分配,从而降低系统的性能。

破坏循环等待条件

方法:采用资源有序分配法。对所有资源排序编号,所有进程对资源的请求必须严格按资源编号递增的次序提出。 优点:可以有效地破坏循环等待条件,从而预防死锁的发生。 缺点:需要预先对资源进行排序编号,这可能会增加系统的复杂性。此外,当系统中资源种类较多时,排序编号可能会变得非常困难。