好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

银行家算法实验报告.doc

13页
  • 卖家[上传人]:鲁**
  • 文档编号:446784834
  • 上传时间:2023-12-18
  • 文档格式:DOC
  • 文档大小:118KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 计算机学院《操作系统》课程设计报告设计题目:银行家算法的实现姓名: 学号:班级: 06网络工程班完成日期: 2009年 6 月13 日设计题目银行家算法的实现设计形式 独立完成 设计目的1.加深了解有关资源申请、避免死锁等概念2.体会和了解死锁和避免死锁的具体实施方法设计预备知识1.死锁的相关知识 2.银行家算法3.系统安全性检查设计内容1.设计进程对各类资源最大申请表示及初值的确定2.设定系统提供资源的初始状况 3.设定每次某个进程对各类资源的申请表示4.编制程序,依据银行家算法,决定其资源申请是否得到满足5.显示资源申请和分配时的变化情况小组成员分工无银行家算法分析、设计与实现一、 设计理论描述本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生要求如下:(1) 模拟一个银行家算法;(2) 初始化时让系统拥有一定的资源;(3) 用键盘输入的方式申请资源;(4) 如果预分配后,系统处于安全状态,则修改系统的资源分配情况;(5) 如果预分配后,系统处于不安全状态,则提示不能满足请求,设计的主要内容是模拟实现动态资源分配。

      同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生银行家算法. 顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态当进程在处于等待态时,表示系统不能满足该进程当前的资源申请资源需求总量”表示进程在整个执行过程中总共要申请的资源量显然,,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.二、算法描述及数据结构模型 1.银行家算法: 设进程i提出请求Request[n],则银行家算法按如下规则进行判断 (1)如果Request[n]>Need[i,n],则报错返回 (2)如果Request[n]>Available,则进程i进入等待资源状态,返回。

      (3)假设进程i的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Request(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待 2.安全性检查 (1)设置两个工作向量Work=Available;Finish[M]=False(2)从进程集合中找到一个满足下述条件的进程, Finish [i]=False Need<=Work 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全 3.数据结构#define False 0#define True 1int Max[100][100]={0};//各进程所需各类资源的最大需求int Avaliable[100]={0};//系统可用资源char name[100]={0};//资源的名称int Allocation[100][100]={0};//系统已分配资源int Need[100][100]={0};//还需要资源int Request[100]={0};//请求资源向量int temp[100]={0};//存放安全序列int Work[100]={0};//存放系统可提供资源int M=100;//作业的最大数为100int N=100;//资源的最大数为100void showdata()//显示资源矩阵三、源代码#include#include#include#define False 0#define True 1int Max[100][100]={0};//各进程所需各类资源的最大需求int Avaliable[100]={0};//系统可用资源char name[100]={0};//资源的名称int Allocation[100][100]={0};//系统已分配资源int Need[100][100]={0};//还需要资源int Request[100]={0};//请求资源向量int temp[100]={0};//存放安全序列int Work[100]={0};//存放系统可提供资源int M=100;//作业的最大数为100int N=100;//资源的最大数为100void showdata()//显示资源矩阵{ int i,j; cout<<"系统目前可用的资源[Avaliable]:"<";} cout<>i;//输入须申请的资源号cout<<"请输入进程 "<>Request[j];//输入需要申请的资源} for (j=0;jNeed[i][j])//判断申请是否大于需求,若大于则出错 { cout<<"进程 "<Avaliable[j])//判断申请是否大于当前资源,若大于则 { //出错 cout<<"进程"<

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.