3 实验三 模拟银行家算法.docxVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
实验三 模拟银行家算法 一、实验目的 模拟实现银行家算法,用银行家算法实现资源分配和安全性检查。通过本次实验,使学生加深对死锁概念的理解和掌握,并培养学生对操作系统课程的兴趣与高级语言设计的能力。? 二、实验内容及要求 实验内容:用C语言编写程序,模拟实现银行家算法分配过程; 实验要求: 设计五个进程{P0,...P4}共享三类资源{A,B,C}的系统,每一种资源数量为10,5,7。进程可动态的申请和释放资源,系统按各进程的申请动态地分配资源,在T0时刻的资源分配情况如下表: Name Max Allocation Need Available P0 7,5,3 0,1,0 7,4,3 3,3,2 P1 3,2,2 2,0,0 1,2,2 P2 9,0,2 3,0,2 6,0,0 P3 2,2,2 2,1,1 0,1,1 P4 4,3,3 0,0,2 4,3,1 银行家算法流程 (1) 银行家算法的数据结构 ?Resource:一个长度为m向量,表示系统拥有的资源数目。 ?Available:一个长度为m向量,表示每类资源的可用数目。 ?Max:一个m×n矩阵,定义每个进程的最大资源需求数。 ?Allocation:一个m×n矩阵,定义当前分配给每个进程每类资源的数目。 ?Need:一个m×n矩阵,表示每个进程还需多少资源。 (2) 实现银行家算法 设:Requesti是进程Pi的请求向量。 当Pi发出资源请求后,系统按如下步骤进行检查: ?如果Request[j] Need[i][j] 则go to 2,否则认为出错。 ?如果Request[j] < Available[i][j] 则go to 3,否则表示无足够资源, Pi等待。 ?系统进行试探分配,并求该相应数据结构数据 Available:= Available- Requesti Allocationi:= Allocationi+ Requesti Needi:= Needi-Requesti ?系统执行安全性算法:安全,把资源分配给Pi,否则, Pi等待。 (3) 实现安全性算法 ?设Work 和 Finish是长度分别为m,n的向量 初试值Work =Available ,Finishi = False(所有) ?从进程集合中找到一个能满足下列条件的进程 a. Finishi= False b. Needi Work 如找到go to 3 否则 go to 4 ?当进程Pi 获得资源后,顺利执行,直至完成,并释放分配给它的资源。 Work = Work+ Allocationi Finishi:= True go to 2 ?如果所有进程的Finishi= True 则表示系统安全,否则为不安全。 ———————————————— 3.参考程序及注释 (注:创建程序源文件的后缀不加.c系统默认生成.cpp文件) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //系统中每种资源的可利用资源数 int available[100] = { 0 }; //进程的最大需求资源数 int max[100][100] = { 0 }; //系统刚开始每个进程已占用资源数 int allocation[100][100] = { 0 }; //每个进程还需要的资源数 int need[100][100] = { 0 }; //判断每个进程是否安全 int Finish[100] = { 0 }; //安全序列号 int safeSeries[100]; //进程请求资源量 int request[100]; //资源计数变量,便于判断安全性 int num; //系统当前可分配资源量 int work[1000]; //资源种类数和进程数 int resourseType, customerNumber; //作为是否输入数据的判断变量 int flag = 0; //函数声明 int isFinish(int row); void SafeInfo(int* work, int index); int judSystemSecurity(); int judSystemSecurity_1(); void judRequestSecurity(); void showMenu(); v

文档评论(0)

181****6039 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

认证主体唐**

1亿VIP精品文档

相关文档

相关课程推荐