造成死锁的原因

it2022-06-28  77

1、产生死锁的四个必要条件:

• 互斥条件:一个资源每次只能被一个进程使用。 • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 一、死锁检测和恢复(deadlock detection and recovery): 死锁检测(deadlock detection)即探查和识别死锁的方法。这种策略并不采取任何动作来使死锁不出现,而是系统事件触发执行一个检测算法。,也即在系统运行过程中,及时地探查和识别死锁的存在,并识别出处于死锁之中的进程和资源等。死锁恢复(deadlock recovery)是指当检测并识别出系统中出现处于死锁之中的一组进程时,如何使系统回复到正常状态并继续执行下去。死锁恢复常采用下述两种方法。

二、死锁预防(deadlock prevention)

1、死锁预防(deadlock prevention)是在系统运行之前,事先考虑防止死锁发生的对策,即在最初设计各种资源调度算法时,就没法防止在系统运行过程中可能产生的死锁。Coffmman 等人[1971]曾提出进程在利用可重用性资源时产生死锁的四个必要条件:

1、互斥使用(mutual exclusion):系统中存在一次只能给一个进程使用的资源。 2、占用并等待(resource holding and waiting):系统中存在这样的进程,它(们)已占有部分资源并等待得到另外的资源,而这些资源又被其它进程所占用还未释放。 3、非抢占分配(nonpreemption):资源在占有它的进程自愿交出之前,不可被其它进程所强行占用。 4、部分地分配(partial allocation)或循环等待(circular waiting):存在一个两个或都个进程的循环链,链中每一个进程等待被链中下一个进程占有的资源。即在一定条件下,若干进程进入了相互无休止地等待所需资源的状态。

所有这四个必要条件都应该在死锁时出现。

1、每个进程必须一次性地请求它所需要的所有资源。若系统无法满足这一要求,则它不能执行。这是一种预分资源方法,它破坏了产生死锁的第三个必要条件。2、一个已占有资源的进程若要再申请新资源,它必须先释放已占资源。若随后它还需要它们,则需要重新提出申请。换言之,一个进程在使用某资源过程中可以放弃该资源,从而破坏了产生死锁的第二个必要条件。3、将系统中所有资源顺序编号,规定进程只能依次申请资源,这就是说,一个进程只有在前面的申请满足后,才能提出对其后面序号的资源的请求。这是一种有序使用资源法,它破坏了产生死锁的第四个必要条件。

三、死锁避免(银行家算法)

即在系统分配资源之前,就应该检测此次资源分配的安全性,如果此次分配资源会导致进程进入不安全状态,那就等待,如果不会,则分配资源。


最新回复(0)