操作系统(OS)中的死锁

2025 年 3 月 22 日 | 阅读需 2 分钟

每个进程都需要一些资源来完成其执行。但是,资源是按顺序授予的。

  1. 进程请求某些资源。
  2. 如果资源可用,则操作系统授予该资源,否则让进程等待。
  3. 进程使用该资源并在完成时释放它。

死锁是一种情况,其中每个计算机进程都在等待一个被分配给另一个进程的资源。在这种情况下,没有一个进程可以执行,因为它们需要的资源被另一个也在等待释放其他资源的进程所持有。

让我们假设有三个进程 P1、P2 和 P3。有三个不同的资源 R1、R2 和 R3。R1 分配给 P1,R2 分配给 P2,R3 分配给 P3。

过了一会儿,P1 要求 P2 使用的 R1。P1 暂停执行,因为它无法在没有 R2 的情况下完成。P2 还要求 P3 使用的 R3。P2 也停止执行,因为它在没有 R3 的情况下无法继续。P3 还要求 P1 使用的 R1,因此 P3 也停止执行。

在这种情况下,三个进程之间形成了一个循环。没有一个进程在进展,它们都在等待。计算机变得无响应,因为所有进程都陷入了阻塞状态。

os Deadlock

饥饿与死锁的区别

序号。死锁饥饿
1死锁是一种情况,其中没有进程被阻塞,也没有进程能够继续执行。饥饿是一种情况,其中低优先级进程被阻塞,而高优先级进程继续执行。
2死锁是无限等待。饥饿是长时间等待,但不是无限的。
3所有死锁总是饥饿。并非所有饥饿都是死锁。
4请求的资源被其他进程阻塞。请求的资源被高优先级进程持续使用。
5当互斥、持有并等待、不可抢占和循环等待同时发生时,就会发生死锁。这是由于不受控制的优先级和资源管理而发生的。

死锁的必要条件

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

一个进程在等待某些资源的同时持有另一个资源。

一旦调度的进程将执行直到完成。在此期间,没有其他进程可以被调度器调度。

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

  1. 互斥
  2. 持有并等待
  3. 不可剥夺
  4. 循环等待
 
下一个主题处理死锁的策略