僵局 Opera系统:什么是循环等待(示例)
什么是死锁?
僵局 是操作系统中发生的一种情况,即任何进程进入等待状态,因为另一个等待进程正在持有所需资源。死锁是多进程处理中的一个常见问题,其中多个进程共享一种特定类型的互斥资源,称为软锁或软件锁。
死锁示例
- 现实世界中的一个示例是仅朝一个方向行驶的交通。
- 在这里,桥梁被视为一种资源。
- 所以,当发生死锁时,只要有一辆车倒车(抢占资源并回滚)就可以轻松解决。
- 如果出现死锁情况,可能需要几辆车倒车。
- 因此饥饿是可能的。

什么是循环等待?
一个进程正在等待资源,而该资源被第二个进程所持有,第二个进程又在等待第三个进程所持有的资源,以此类推。这个过程将一直持续,直到最后一个进程正在等待第一个进程所持有的资源。这就形成了一个循环链。
例如,进程 A 被分配了资源 B,因为它正在请求资源 A。同样,进程 B 被分配了资源 A,但它正在请求资源 B。这就形成了一个循环等待。
循环等待示例
例如,一台计算机有三个 USB 驱动器和三个进程。这三个进程中的每一个都能够持有其中一个 USB 驱动器。因此,当每个进程请求另一个驱动器时,这三个进程将出现死锁情况,因为每个进程都将等待当前正在使用的 USB 驱动器释放。这将导致循环链。
操作系统中的死锁检测
资源调度程序可以检测到死锁的发生。资源调度程序帮助操作系统跟踪分配给不同进程的所有资源。因此,当检测到死锁时,可以使用以下方法解决:
操作系统中的死锁预防
在死锁发生之前防止它发生非常重要。系统会在执行每个事务之前对其进行检查,以确保它不会导致死锁情况。这样,即使发生一个可能导致死锁的操作的微小变化,它也永远不会允许进程执行。
它是一组用于确保至少一个条件不能成立的方法。
不采取先发制人的行动
不可抢占——资源只能由持有该资源的进程在完成其任务后自愿释放
- 如果持有一些资源的进程请求另一个不能立即分配给它的资源,在这种情况下,所有资源将被释放。
- 被抢占的资源需要等待进程的资源列表。
- 仅当进程能够重新获得其旧资源和所请求的新资源时,它才会重新启动。
- 如果进程正在请求某些其他资源,当这些资源可用时,就会将其提供给请求进程。
- 如果它被另一个等待其他资源的进程所持有,我们就释放它并将其交给请求进程。
相互排斥
互斥是 Mutex 的全称。它是一种特殊类型的二进制信号量,用于控制对共享资源的访问。它包含优先级继承机制,以避免扩展优先级反转问题。它允许当前优先级较高的任务在尽可能短的时间内处于阻塞状态。
共享的资源(例如只读文件)永远不会导致死锁,但诸如打印机和磁带驱动器之类的资源则需要单个进程的独占访问。
持有并等待
在这种情况下,必须停止进程持有单个或多个资源,同时等待一个或多个其他资源。
循环等待
它强制所有资源类型按顺序排列。循环等待还要求每个进程按照枚举的递增顺序请求资源。
避免死锁 Algorithms
最好是避免死锁,而不是在死锁发生后采取行动。它需要额外的信息,比如应该如何使用资源。死锁避免是最简单和最有用的模型,每个进程声明它可能需要的每种类型的最大资源数量。
躲避 Algorithms
死锁避免算法可以帮助您动态评估资源分配状态,从而避免出现循环等待的情况。
资源类型的单个实例。
- 使用资源分配图
- 循环是必要的,足以导致死锁
资源类型的多个实例。
- 循环对于死锁而言是必要的,但绝不是充分的。
- 使用 银行家算法
饥饿和死锁之间的区别
以下是死锁和饥饿之间的一些重要区别:
僵局 | 饥饿 |
---|---|
当其中一个进程被阻塞时,就会发生死锁情况。 | 饥饿是指所有低优先级进程被阻塞,而高优先级进程执行的情况。 |
死锁是一个无限的过程。 | 饥饿是一个漫长的等待,但不是一个无限的过程。 |
每个死锁总是存在饥饿。 | 每次饥饿并不一定都会出现僵局。 |
发生死锁,然后互斥,保持并等待。这里,抢占和循环等待不会同时发生。 | 这是由于优先级和资源管理不受控制而发生的。 |
死锁的优点
以下是使用死锁方法的优点/好处
- 这种情况对于执行单次突发活动的进程非常有效
- 死锁不需要抢占。
- 适用于可以轻松保存和恢复状态的资源的便捷方法
- 可以通过编译时检查来执行
- 由于问题已在系统设计中解决,因此无需运行时计算
死锁的缺点
以下是使用死锁方法的缺点
- 延迟流程启动
- 流程必须了解未来的资源需求
- 比必要情况更频繁地采取先发制人行动
- 不允许增量资源请求
- 固有优先购买权损失。
总结
- 死锁定义:这是一种发生在 OS 当任何进程进入等待状态,因为另一个等待进程正在持有所需资源
- 循环等待发生在一个进程等待第二个进程持有的资源,而第二个进程又在等待第三个进程持有的资源,等等。
- 资源调度程序可以检测到死锁的发生。
- 在死锁发生之前防止它非常重要。
- 仅持有资源的进程在完成其任务后才可以主动释放该资源。
- 互斥是 Mutex 的全称。它是一种特殊的二进制 信号 用于控制对共享资源的访问。
- 保持和等待是指必须停止进程持有单个或多个资源,同时等待一个或多个其他资源的情况。
- 避免死锁是最简单、最有用的模型,每个进程声明其可能需要的每种类型的最大资源数量。
- 死锁避免算法可以帮助您动态评估资源分配状态,从而避免出现循环等待的情况。
- 死锁是一个无限的过程,而饥饿是一个漫长的等待,但不是一个无限的过程。