📜  操作系统中的死锁无知

📅  最后修改于: 2021-08-24 04:36:06             🧑  作者: Mango

如果集合中的每个进程都在等待一个事件,而该事件只有集合中的另一个进程可以引起,则称为死锁。

假设进程A拥有资源C,而进程B拥有资源D。
现在,进程A对资源D的请求和进程B对资源C的请求,但是由于两个资源已经都在忙于其他某个进程,因此任何一个进程都不会获得这些资源,因此它们都无法继续进行。这种情况称为死锁。

导致死锁的条件有4个。他们如下

  1. 互斥条件
  2. 保持并等待条件
  3. 没有抢占条件
  4. 循环等待条件

以上所有四个条件均应存在,以使发生死锁。

死锁无知:
将您的头埋在沙子里,假装根本没有问题,这种解决任何问题的方法称为鸵鸟算法。解决问题的方法因人而异。

全世界的科学家认为,处理死锁的最有效方法是预防死锁。但是处理该系统的工程师认为,死锁预防应该受到较少的关注,因为死锁发生的可能性非常小。

应该更加关注每周发生一次的系统故障,编译器错误,编程错误,硬件崩溃,而不是每年发生一次的死锁问题。因此,大多数工程师在消除僵局方面并没有付出太多。

许多操作系统都遭受死锁的困扰,甚至无法检测到死锁,然后死机。作为解释,我们知道进程数由进程表确定。现在我们知道,进程表中只有有限数量的插槽,因此当表已满时,派生操作将失败。现在,当进程表中的插槽为空时,新叉子的合理方法必须等待并重试。

另外,在打开和关闭文件时会注意到这样的问题。文件的最大打开时间受到限制,并在i节点表中提及,因此在填充表时会观察到类似的问题。提到了另一个有限的资源作为交换空间。实际上,操作系统中所有存储数据的表都有有限的资源限制。可能会出现n个进程的集合可能每个都声称总数的1 / n,我们是否应该清除所有这些,然后每个都尝试声明另一个?

包括UNIX和WINDOWS,所有操作系统都首先忽略死锁,前提是假定用户只能使用一个进程。死锁的无知经常引起人们的注意,因为通过这种方法可以免费消除死锁,而不是在其他防止死锁的方法上花费很多,这也给流程带来了一些不便的限制。因此,我们必须在解决死锁的不同方法之间确定正确性和便利性之间。