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

一、什么是安全序列

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

 

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

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

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

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

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

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

 

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

数据结构:

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

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

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

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

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

 

银行家算法的步骤:

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

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

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

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

 

安全性算法的步骤:

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

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

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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值