操作系统2.4.3 避免死锁(银行家算法)

一、什么是安全序列

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

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

如果分配资源后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有的进程都无法顺利执行下去。

当然,如果有进程提前归还了一些资源,那么系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。

如果系统处于安全状态,就一定不会发生死锁

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

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

三、避免死锁——银行家算法

数据结构:

长度为m的一位数组Available表示系统还有多少可用资源

n*m的矩阵Max表示各个进程对资源的最大需求数

n*m的矩阵Allocation表示对所有进程的资源分配情况

Max-Allocation=Need矩阵表示各个进程最多还需要多少资源

用长度为m的一位数组Request表示进程此次申请的各种资源数

银行家算法的步骤:

1)检查此次申请是否超过之前声明的最大需求数

2)检查此时系统剩余可用资源是否还能满足此次请求

3)试探分配,更各个改数据结构

4)用安全型算法检查此次分配是否会导致系统进入不安全状态

安全性算法的步骤:

1)检查当前剩余可用资源是否能满足某个资源的最大需求,如果可以,就将该进程加入安全序列

2)等到这个进程执行完毕就将它占有的全部资源回收

3)不断重复上述过程,看看最终是否能让所有进程都加入安全序列

系统处于不安全状态未必死锁,但是死锁一定处于不安全状态。

系统处于安全状态一定不会死锁。

猜你喜欢

转载自blog.csdn.net/dyw_666666/article/details/106976257