计算机操作系统--死锁

一、死锁简介

死锁是每个计算机进程等待分配给另一个进程的资源的情况。在这种情况下,由于它所需的资源不被执行,因此其他进程也在等待其他资源被释放。

饥饿和死锁

<1>死锁是一种没有进程被阻塞而没有进程继续的情况;饥饿是低优先级进程被阻止并且高优先级进程继续进行的情况。

<2>死锁是一个无限的等待;饥饿是漫长的等待,但不是无限的。

<3>每一个死锁始终是一个饥饿;每一个饥饿不一定是死锁。

<4>请求的资源被其他进程阻塞;请求的资源不断被更高优先级的进程使用。

<5>当相互排斥,保持和等待,同时不发生抢占和循环等待时,发生死锁;它由于不受控制的优先权和资源管理而发生。

死锁的必要条件

相互排斥

资源只能以互斥方式共享。这意味着,如果两个进程不能同时使用相同的资源。

保持并等待

进程等待一些资源,同时持有另一个资源。

没有抢先

原定的过程将一直执行到完成。调度程序不能同时调度其他进程

循环等待

所有进程都必须以循环的方式等待资源,以便最后一个进程正等待第一个进程持有的资源。

二、如何处理死锁

死锁无知

死锁无知是所有机制中使用最广泛的方法。 许多操作系统主要为最终用户使用。 在这种方法中,操作系统假定永远不会发生死锁。 它只是无视死锁。 这种方法最适合用户使用系统仅用于浏览和所有其他常规内容的单个最终用户系统。

死锁预防

只有当相互排斥,持有和等待,没有抢先和循环等待同时成立时,才会发生死锁。如果有可能在任何时候违反四个条件之一,那么在系统中永远不会发生死锁。

避免死锁

在避免死锁时,操作系统会在操作系统执行的每一步中检查系统是处于安全状态还是处于不安全状态。该过程一直持续到系统处于安全状态。一但进入不安全状态,操作系统必须回溯一步。简而言之,操作系统审查每个分配,以便分配不会导致系统中的死锁。

死锁的检测和恢复

在这种方法中,OS不应用任何机制来避免或防止死锁。 因此,系统认为死锁肯定会发生。 为了摆脱死锁,OS定期检查系统是否存在死锁。 如果发现死锁,操作系统将使用一些恢复技术来恢复系统。
在这里插入图片描述

对于资源

抢占资源

我们可以从资源所有者(进程)中获取其中一个资源,并将其交给另一个进程,并期望它能够完成执行,并且会尽快释放该资源。那么,选择一个将被抢走的资源将会有点困难。

回滚到安全状态

系统通过各种状态进入死锁状态。操作系统将系统回滚到以前的安全状态。为此,操作系统需要在每个状态下执行检查指针。如果陷入死锁,将回滚所有分配以进入之前的安全状态。

对于进程

杀死一个进程

杀死一个进程可以解决问题,但更重要的是要决定杀死那个进程。一般来说,操作系统杀死迄今为止工作量最少的进程。

杀死所有进程

这不是一个可以接受的方法,如果问题变得非常严重,可以实施。杀死所有进程将导致系统效率低下,因为所有进程将从头开始重新执行。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52269550/article/details/117195570