互联网面试——死锁的必要条件,怎么处理死锁

死锁的必要条件,怎么处理死锁

3.1 死锁概念

是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。

3.2 活锁

活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。

3.3 死锁条件

  1. 互斥条件:一个资源每次只能被一个进程使用
  2. 不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺
  3. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系.

3.4 死锁预防

  1. 破坏互斥条件。允许某些进程(线程)同时访问某些资源,但有的资源不允许同时被访问如打印机等。

例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。

  1. 破坏不可抢占条件:即允许进程强行从占有者那里夺取某些资源。这种预防方法实现起来困难,会降低系统性能。
  2. 破坏占有且申请条件。可以实行预先分配策略,即进程在运行前一次性地向系统申请它所需要的全部资源。如果当前进程所需的全部资源得不到满足,则不分配任何资源。只有当系统能够满足当前的全部资源得到满足时,才一次性将所有申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又重新申请资源的现象,因此不会发生死锁。但是有以下缺点:

1) 在许多情况下,一个进程在执行之前不可能知道它所需的全部资源。这是由于进程在执行时是动态的,不可预测的。

2)资源利用率低。无论所分配资源何时用到,一个进程只有在占有所需的全部资源后才能执行。即使有些资源最后才被该进程用到一次,但该进程在生存期间一直占有它们,造成长期占有。

3) 降低了进程的并发性。因为资源有限,又加上存在浪费,能分配到所需全部资源的进程个数必然少了。

  1. 破坏循环等待条件。实行资源有序分配策略。采用这种策略即把资源事先分类编号,按号分配。所有进程对资源的请求必须严格按资源需要递增的顺序提出。进程占用小好资源,才能申请大号资源,就不会产生环路。这种策略与前面的策略相比,资源的利用率和系统吞吐量都有很大提高,但是也存在以下缺点:

1)限制了进程对资源的请求,同时系统给所有资源合理编号也是件困难事,并增加了系统开销。

3.4 死锁的避免

  1. 银行家算法:该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。

3.5 死锁的解除

一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。
死锁解除的主要方法有:

1) 资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态。

2) 撤销进程法。强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。

3) 进程回退法。让一(多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

3.6 死锁检测与死锁恢复

死锁检测算法
死锁检测的基本思想是,如果一个进程所请求的资源能够被满足,那么就让它执行,否则释放它拥有的所有资源,然后让其它能满足条件的进程执行。

举报
评论 0