在学习银行家算法之前,我们首先要了解以下几个概念:
死锁:多个进程在执行过程中,因为进程资源会造成相互等待的局面。如果没有外力作用,这些进程将永远无法向前推进。此时称系统处于死锁状态或者系统产生了死锁。
安全序列:某系统按某种顺序并发进程,并使它们都能达到获得最大资源而顺序完成序列为安全序列。
安全状态:能找到安全序列的状态称为安全状态。安全状态不会导致死锁。
不安全状态:在当前状态下不存在安全序列,则系统处与不安全状态。
注:安全状态一定不死锁,死锁一定不安全,但不安全 不一定死锁
我们需要了解到操作系统的中,进程的三态模型
这就要问了:什么是进程?
定义:系统总正在运行的一个程序,比如我们现在打开的浏览器就可以说是一个进程
接下来我们来说说进程的三种基本状态:
一、就绪状态(Ready):
进程以获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器资源,进程就可以执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进行就绪状态时,排入低优先队列;当进程有I/O操作完成而进入就绪状态时,排入高优先队列。
二、运行状态(Running):
进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。(空闲进程:Windows页面内存管理进程。)
三、阻塞状态(Blocked):
由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理器资源分配给该进程,也无法运行。
三种状态转换如下图所示:
银行家算法
介绍:银行家算法顾名思义是来源于银行的借贷业务,一定数量的本金要满足多个客户的借贷周转,
为了防止银行家资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。
在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须
保证得到的资源的进程能在有限的时间内归还资源,以供其它进程使用资源。如果资源分配不当,
就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
当一进程提出资源申请时,银行家算法执行下列步骤以决定是否向其分配资源:
1)检查该进程所需要的资源是否已超过它所宣布的最大值。
2)检查系统当前是否有足够资源满足该进程的请求。
3)系统试探着将资源分配给该进程,得到一个新状态。
4)执行安全性算法,若该新状态是安全的,则分配完成;若新状态是不安全的,则恢复原状
态,阻塞该进程。
以下是银行家算法所用到的主要数据结