lightblueme

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

银行家算法

在操作系统的运行当中,多个进程由于对于临界资源的竞争或者进程推进的顺序不对可能会产生死锁现象。

一、产生死锁的四个条件

1、互斥条件

2、保持和请求条件

3、不剥夺条件

4、环路等待条件

二、处理死锁的基本方法

1、预防死锁(不会发生死锁)

2、避免死锁()

3、监测死锁

4、解除死锁(死锁已经发生之后的补救措施)

三、预防死锁

去掉产生死锁的后三个条件,这样死锁不会产生

四、避免死锁

死锁可能会产生,但是我们要去避免它。这里需要介绍银行家算法。

1、所谓银行家算法是是指,系统在为进程分配资源之前,首先计算此次资源分配的安全性,如果是安全的,则进行分配;如果这次分配会导致进入不安全状态,不进行分配。所谓的安装状态是指存在一个进程序列,如果按照这个顺序为各个进程分配资源,则所有的进程都能顺利运行完成,这是我们说系统是安全的,这个序列叫做安全序列。

2、银行家算具体过程

这里首先是几个符号定义

可用资源向量$available_{i},i=1,2,3,...,N$

资源需求矩阵$need_{i}^{j},i=1,2,3,...,N.j=1,2,3,...,K$,表示第j个进程对第i种资源的最多还需要多少资源,也就是系统最多还可以分给这个进程多少个资源i。

资源分配矩阵$allocation_{i}^{j},i=1,2,3,...,N.j=1,2,3,...,K$,表示第j个进程目前所占有的第i种资源的数量。

最大需求矩阵$max_{i}^{j},i=1,2,3,...,N.j=1,2,3,...,K$,表示第j个进程对第i种资源的最多的需要资源总量。

上面的矩阵有下面的关系

allocation+need=max

所以在下面的算法当中实际上并没有用到max矩阵

假设现在有个进程发出了资源请求$request_{i}$,i表示第i个进程

step 1、判断$request_{i}$是否小于$need_{i}$,如果是转入step 2,否则,exit,因为进程在说谎

step 2、判断$request_{i}$是否小于$available$,如果是则进入step 3,否则将进程挂起,因为没有足够资源

step 3、首先假设满足进程i的资源请求

$available=available-request$

$need=need-request$

$allocation=allocation+request$

step 4、进行安全性监测

找到一个进程它的need小于available,则表明可以首先运行这个进程,这个进程运行完之后,会释放资源,所以增加available。这样进行下去,直到所有的进程都可假设执行完毕,我们说这是找到了一个安全路径,所以本次资源分配是可行的。否则挂起进程等待。

五、监测死锁

六、解除死锁

posted on 2020-03-29 18:04  lightblueme  阅读(1544)  评论(0编辑  收藏  举报