什么是操作系统死锁:条件和检测算法

操作系统的主要目标是在硬件和软件资源之间提供适当的通信,并为程序提供公共服务。bob的是什么网站当一个操作系统进程想要访问任何资源时,它首先向它想要访问的特定资源发送请求,然后使用该资源,并在使用后释放该资源。假设许多进程同时访问一个资源,在这种情况下,很难同时向所有进程提供一个资源,这就产生了死锁的概念。因此,本文将描述死锁是如何发生的,以及如何克服这种死锁情况。

操作系统中的僵局是什么?

定义:Dead-Lock是指两个或多个处理器在等待某个事件发生,但这些事件没有发生就是死锁状态,处理器处于死锁状态。例如,让我们假设一个实时场景,有两辆车a和B,由两个单独的司机在一条单向道路上驾驶。现在的情况是,车A的司机说他向北移动是正确的方向,车B的司机说他向南移动是正确的方向。但双方都不后退以让另一辆车前进,这种情况称为死锁情况。


汽车示例
汽车示例

为了更好地理解,让我们考虑另一个例子,其中有两个资源R1、R2和两个进程P1和P2,其中R1分配给P1, R2分配给P2。现在如果P1想要访问R2,我们已经知道R2是由P2控制的,现在P2想要访问R1,也就是P1只在访问R2时执行,P2也只在访问R1时执行这种情况是死锁状态。

Processor-Example
处理器 - 示例

死锁条件

以下是,如果所有条件同时发生,则发生四种重要的死锁条件,以发生僵局。

互斥

这意味着无论我们使用什么资源都必须以一种相互排斥的方式使用。在同一时间只有一个进程使用一个资源。例如,打印过程正在进行,突然另一个进程试图中断打印过程。所以在互斥情况下,只有在打印任务完成后,才会处理下一个任务。互斥可以通过同时共享资源来消除,但这在实际中是不可能的。

相互排斥
相互排斥

没有抢先

根据先发制人基于算法,​​如果有优先级任务尝试中断当前任务。先发制人的算法它包含当前任务,首先执行优先级任务并重返其第一个任务。根据上述示例解释的情况,其中一个过程保持资源,只要其执行,即P1即可释放R1,仅在执行之后才能释放R2。如果没有抢占,可能会发生死锁。


No-Preemption-Example
禁止抢占 - 例子

举行等待

进程持有一些资源并等待额外的资源,但这些资源被其他进程获取。在上面的例子中,P1持有R1并等待R2, R2被P2获得,P2持有R2并等待R1, R1被P1获得是一个持有等待的情况,系统中可能会发生死锁。

保持和等级
hold-and-wait-example

循环等待

如果一个进程正在等待分配给另一个进程的资源,而该进程正在等待资源,则称一组进程处于死锁状态,这类似于上面解释的处于循环形式的示例。P1在等待R2, R2被分配给P2, P2在等待R1, R1被分配给P1,如果这个条件满足死锁,这是一个循环等待形式。

Circular-Wait-Example
circular-wait-example

死锁检测算法

当我们将资源分配给进程时,操作系统会使用两种主要的死锁检测算法来重新检查系统中是否发生了死锁

  • 单一实例
  • 资源类型的多个实例

单一实例

单个实例是系统具有所有资源的单个实例的情况。它也称为等待图形算法或资源分配图。资源分配图表由一组进程和一组资源组成,其表示为两个不同的顶点。资源分配图中的资源被修改,并表示为等待图形表单。等待图形表单的进程只有如下所示的顶点所示的进程,其中

  • 资源分配图:处理P1,P2,P3和资源R1,R2,R3在资源分配图中表示。
  • 等待图:仅提到P1,P2,P3等待图形。
  • 如果存在循环条件,则如果在一个方向上存在一个过程的连续流程,则意味着循环条件离开并等待图形处于死锁状态。

示例1:下面的示例显示不存在死锁状态,因为在等待图表时没有观察到连续的流。

Single-Instance-Example1
single-instance-example1

示例2:由于P1到P4有一个连续的循环流,所以发生了死锁情况。

单实例——Example2
single-instance-example2

如果在系统中非常经常发生死锁,则经常使用检测算法。如果有更多使用检测算法,则将有更多的开销和更多的计算时间。因此,为了克服这一点,我们在举例中调用算法,给出了相同的时间,这就是图形的权重如何用于检测死锁。

多个资源类型实例

资源类型的多个实例是指系统拥有所有资源的多个实例,它也被称为Bankers算法。根据Bankers算法,流程一旦获得所有所需资源,就会释放资源。

让我们考虑下面的例子,假设有3个进程P0, P1, P2,和资源类型A, B, C,其中A可以是CPU, B可以是打印机,C可以是键盘列中的数字“0”表示资源的可用性。

案例(i):假设如果我们采取条件请求是P0和P2中存在的“000”条件,我们应该检查是否满足哪个请求,过程P0在分配后释放进程,然后在分配后下一个P2进程释放。如此,在序列中,一个接一个地在序列中释放P0,P2,P3,P1,P4。最后,我们将可用资源作为P7,P2,P6获得。可用序列是没有死锁的条件。

银行家算法 - 例1
银行家算法 - 例1

案例(ii):假设如果p2是001而不是000,现在应用银行家的算法检查死锁条件,其中唯一的P0在所有5个进程中都会被执行。因此,除了P0之外,P1,P2,P3,P4处于死锁状态。

银行家 - 举例2
bankers-example2

应用程序死锁的

僵局的应用可以通过考试在线结果的实时例子来解释,其中几个学生试图在发布时间访问他们的大学网站。有时可以观察到网页不加载多个用户,这是一个死锁条件。这可以使用任何一个算法克服。

优点

死锁的优势

  • 在避免死锁中没有观察到抢占
  • 在这个过程中没有延迟

缺点

死锁的缺点是

  • 必须提前使用要使用的资源
  • 过程长时间堵塞
  • 先发制人的损失是继承的。

本文概述了在有两个或多个进程的情况下,死锁是如何发生的,以及导致死锁发生的三种条件,以及两种类型的算法,即资源共享算法死锁条件和银行家的算法是死锁避免算法。这是“如果忽略了死锁会发生什么?”。

添加评论