死锁的处理策略之避免死锁

1. 死锁的处理

在这里插入图片描述

2. 安全序列、不安全状态、死锁的联系

在这里插入图片描述

所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。

如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。

如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)

因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。

3. 小结

数据结构
长度为m的一维数组Avilable表示还有多少可用资源
nxm矩阵Max表示各进程对资源的最大需求数
nxm矩阵Alocation表示已经给各进程分配了多少资源
Max - Alocation= Need矩阵表示各进程最多还需要多少资源
用长度为m的一维数组Request表示进程此次申请的各种资源数

银行家算法步骤:
①检查此次申请是否超过了之前声明的最大需求数
②检查此时系统剩余的可用资源是否还能满足这次请求
③试探着分配,更改各数据结构
④用安全性算法检查此次分配是否会导致系统进入不安全状态

安全性算法步骤:
检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。
不断重复上述过程,看最终是否能让所有进程都加入安全序列。

发布了168 篇原创文章 · 获赞 1 · 访问量 2967

猜你喜欢

转载自blog.csdn.net/yrx420909/article/details/104460290