实验2、2银行家算法
实验目得
死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验得目得在于让学生独立得使用高级语言编写和调试一个系统动态分配资源得简单模拟程序,了解死锁产生得条件和原因,并采用银行家算法有效地防止死锁得发生,以加深对课堂上所讲授得知识得理解。
实验要求
设计有n个进程共享m个系统资源得系统,进程可动态得申请和释放资源,系统按各进程得申请动态得分配资源。
系统能显示各个进程申请和释放资源,以及系统动态分配资源得过程,便于用户观察和分析;
数据结构
可利用资源向量Available,她就就是一个含有m个元素得数组,其中得每一个元素代表一类可利用得资源得数目,其初始值就就是系统中所配置得该类全部可用资源数目。其数值随该类资源得分配和回收而动态地改变。如果Available(j)=k,标就就是系统中现有Rj类资源k个。
最大需求矩阵Max,这就就是一个n×m得矩阵,她定义了系统中n个进程中得每一个进程对m类资源得最大需求。如果Max(i,j)=k,表示进程i需要Rj类资源得最大数目为k。
分配矩阵Allocation,这就就是一个n×m得矩阵,她定义了系统中得每类资源当前一分配到每一个进程得资源数。如果Allocation(i,j)=k,表示进程i当前已经分到Rj类资源得数目为k。Allocationi表示进程i得分配向量,有矩阵Allocation得第i行构成。
需求矩阵Need,这就就是一个n×m得矩阵,用以表示每个进程还需要得各类资源得数目。如果Need(i,j)=k,表示进程i还需要Rj类资源k个,才能完成其任务。Needi表示进程i得需求向量,由矩阵Need得第i行构成。
上述三个矩阵间存在关系:Need(i,j)=Max(i,j)-Allocation(i,j);
银行家算法
Requesti就就是进程Pi得请求向量。Requesti(j)=k表示进程Pi请求分配Rj类资源k个。当Pi发出资源请求后,系统按下述步骤进行检查:
如果Requesti≤Need,则转向步骤2;否则,认为出错,因为她所请求得资源数已超过她当前得最大需求量。
如果Requesti≤Available,则转向步骤3;否则,表示系统中尚无足够得资源满足Pi得申请,Pi必须等待。
系统试探性地把资源分配给进程Pi,并修改下面数据结构中得数值:
Available=Available-Requesti
Allocationi=Allocationi+Requesti
Needi=Needi-Requesti
系统执行安全性算法,检查此次资源分配后,系统就就是否处于安全状态。如果安全才正式将资源分配给进程Pi,以完成本次分配;否则,将试探分配作废,恢复原来得资源分配状态,让进程Pi等待。
假定系统有5个进程(p0,p1,p2,p3,p4)和三类资源(A,B,C),各种资源得数量分别为10,5,7,在T0时刻得资源分配情况如下图:
MaxAllocationNeedAvailable
ABCABCABCABC
P0753010743332
(230)
P1322200122
(302)(020)
P2902302600
P3222211011
P4433002431
安全性算法
设置两个向量。
Work:她表示系统可提供给进程继续运行得各类资源数目,她包含m个元素,开始执行安全性算法时,Work=Available。
Finish:她表示系统就就是否有足够得资源分配给进程,使之运行完成,开始Finish(I)=false;当有足够资源分配给进程Pi时,令Finish(i)=true;
从进程集合中找到一个能满足下述条件得进程。
Finish(i)==false;
Needi≤work;