(二)避免死锁
(1)安全序列与不安全状态
- 安全序列: 指如果系统按照这种序列分配资源,则每个进程都能顺利完成。
只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。
- 不安全状态: 如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。
这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。
——与死锁的联系:
如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁。
(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。
(2)银行家算法
由 Dijkstra 提出,涉及深搜、回溯等。
- 核心思想: 在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
通过不断循环检查最终得到安全序列的算法即安全性算法。
手算在一轮比较中,只要看到 Available 大于 Need 的进程,可以直接把 Available 与他们的 Allocation 相加然后就不用管它们(已完成),继续拿新的 Available 和其他新的进程比较。
标签:Available,状态,避免,安全,死锁,序列,进程 From: https://www.cnblogs.com/Wind730/p/18534483/2-avoid-dead-locks-36lho