操作系统-银行家算法上机实验

操作系统原理实验报告

实验题目   实三银行家算法   

实验银行家算法

1.1 实验目的

多个进程动态地共享系统的资源可能会产生死锁现象。死锁的产生,必须同时满足四个条件,第一个是互斥条件,即一个资源每次只能由一个进程占用;第二个为请求和保持条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其它资源;第三个是不剥夺条件,任何一个进程不能抢占另一个进程已经获得且未释放的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源,防止死锁的机构只须确保上述四个条件之一不出现,则系统就不会发生死锁。在实验中假定系统中任一资源在每一时刻只能由一个进程使用,任何进程不能抢占其它进程正在使用的资源,当进程得不到资源时必须等待。因此只要资源分配策略能保证进程不出现循环等待,则系统就不会发生死锁。

1.2 实验内容及要求

  1. 模拟实现银行家算法
  2. 本实验要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效地防止和避免死锁的发生。
  3. 用银行家算法实现资源分配。
  4. 设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。
  5. 要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。

1.3 实验技术

1)一台运行Windows 操作系统的计算机

2)计算机中需安装Visual C专业版或企业版

1.4实验步骤

 1)初始状态安全性检查:

2)P1请求(1,0,2)

 3)P4请求(3,3,0)

4)P0请求(0,2,0)

 5)P0改为请求(0,1,0)

 程序设计的流程图如下:

1.5实验结果及分析说明

1)输入MAX,ALLOCATION矩阵和可利用资源后,进行安全性检查,经检查,安全。安全序列为 P1,P3,P0,P2,P4。可利用的资源为(3,3,2)

2)P1请求资源(1,0,2),经银行家算法检查后安全,输出资源分配。安全序列为P1,P3,P0,P2,P4,可利用的资源变为(2,3,0)

 3)P4请求资源(3,3,0),可利用的资源数不足,出错,P4等待,不予分配资源。

4)P0请求资源(0,2,0),经银行家算法,找不到安全序列,会引发死锁,不予申请,资源回收,可利用的资源仍为(2,3,0)。

5)P0请求资源(0,1,0),经银行家算法,找到安全序列,为P1,P3,P0,P2,P4不会引发死锁.可利用的资源变为(2,2,0).

 1.6实验体会(实验中遇到的问题及解决方法

1)实验反思操作系统的基本特征是并发与共享。系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。而我本次课程设计就是得用银行家算法来避免“死锁”。银行家算法就是-一个分配资源的过程,使分配的序列不会产生死锁。此算法的中心思想是:按该法分配资源时,每次分配后总存在着-一个进程,如果让它单独运行下去,必然可以获得它所需要的全部资源,也就是说,它能结束,而它结束后可以归还这类资源以满足其他申请者的需要。通过这次实验,我体会到银行家算法的重要性,银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我来学习借鉴。

2)实验收获

①切实加深对进程死锁的认识;

②正确理解系统的安全状态和不安全状态;

③更进一步地理解和掌握银行家算法;

银行家算法的描述如下:

在编写程序不断出现错误和改正的过程序中加深了我对银行家算法的理解。这个系统的功能满足要求,完成了对资源的修改还有用银行家算法和安全性算法来检查是否允许分配资源进程。程序主要由两部分组成。第一部分是银行家算法,第二部分是安全性算法。

①银行家算法

1如果Request<=Need,则转向2;否则,出错

2.如果Request<=Available,则转向3,否则等待

3.系统试探分配请求的资源给进程

4.系统执行安全性算法

②安全性算法

1.设置两个向量

(1).工作向量:Work=Available (表示系统可提供给进程继续运行所需

要的各类资源数目)

(2). Finish:表示系统是否有足够资源分配给进程(True:有;False:没

有).初始化为False。

2.若Finish[i]-Fal se&Need<-Work,则执行3;否则执行4(I为资源类别)

3.进程P获得第i类资源,则顺利执行直至完成!并释放资源:

Work=Work+Al locat ion;

Finish[i]=true;转2

4.若所有进程的Finish[i]=true,则表示系统安全;否则,不安全!

附录:

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
操作系统银行家算法是一种资源分配和安全性管理的算法,用于确保在多进程环境中系统能够安全地分配资源。 在实验中,我们可以使用C语言来实现操作系统银行家算法。首先,我们需要定义系统资源和进程的数据结构。 系统资源可以使用数组来表示,每个资源有一个初始值和可用值。例如,我们可以定义一个长度为n的资源数组available,表示系统有n个资源,available[i]表示第i个资源的可用值。另外,我们还需要定义一个长度为n的资源数组max,表示每个进程对各个资源的最大需求值。 进程也可以使用结构体来表示,包括进程的编号、各个资源的已分配值和还需值。例如,我们可以定义一个进程结构体Process,包括成员变量pid、allocation和need,其中allocation[i]表示第i个资源已分配给该进程的数量,need[i]表示第i个资源该进程还需要的数量。 在实验中,我们首先需要初始化系统资源和进程的初始值。然后,通过输入的方式获取进程对各个资源的最大需求值,同时更新每个进程的已分配值和还需值。 接下来,我们可以编写一个函数来判断系统是否处于安全状态。该函数可以对每个进程进行遍历,判断该进程是否能够满足其还需值,并且不会导致其他进程无法完成。如果所有进程都可以成功执行,则系统处于安全状态。 最后,我们可以编写一个资源分配的函数。在该函数中,首先判断分配的资源是否满足每个进程的需求,并且不会导致系统进入不安全状态。如果满足条件,则可以进行资源的分配。如果不满足条件,则需要等待或拒绝资源的分配。 通过以上的实现,我们可以模拟操作系统银行家算法的工作原理,实现资源的分配和安全性管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值