win32中的c语言编程-银行家算法教程.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
win32中的c语言编程-银行家算法教程

操作系统第七次实验 张焓 实验名称: 项目:银行家算法实现 实验目的: 初始化 由用户输入数据,分别对可利用资源向量 HYPERLINK /view/10337.htm \t /_blank 矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。 银行家算法银行家算法 在避免 HYPERLINK /view/121723.htm \t /_blank 死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生 HYPERLINK /view/121723.htm \t /_blank 死锁。 银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免 HYPERLINK /view/121723.htm \t /_blank 死锁的算法。 设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。 (1)如果REQUEST [cusneed] [i]= NEED[cusneed][i],则转(2);否则,出错。 (2)如果REQUEST [cusneed] [i]= AVAILABLE[i],则转(3);否则,等待。 (3)系统试探分配资源,修改相关数据: AVAILABLE[i]-=REQUEST[cusneed][i]; ALLOCATION[cusneed][i]+=REQUEST[cusneed][i]; NEED[cusneed][i]-=REQUEST[cusneed][i]; (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 银行家算法安全性检查算法 (1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程, FINISH==false; NEED=Work; 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 Work=Work+ALLOCATION; Finish=true; GOTO 2 (4)如所有的进程Finish= true,则表示安全;否则系统不安全。 实验方法 首先编写客户进程:包含需要用到的头文件,声明一些数据结构为全局变量用于纪录系统(资源或进程)的当前状态: #includeiostream #includestring.h #includestdio.h using namespace std; #define False 0 #define True 1 int 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;//作业的最大数为100 int N = 100;//资源的最大数为100 定义showdata()函数用于记录当前系统状态的数据结构的内容: void showdata()//显示资源矩阵 { int i, j; cout 系统目前可用的资源[Avaliable]: endl; for (i = 0; i N; i++) cout name[i] ; cout endl; for (j = 0; j N; j++) cout Avaliable[j] ;//输出分配资源 cout endl; cout \tMax\tAllocation\tNeed endl; cout 进程名: ; for (j = 0; j 3; j++) { for (i = 0; i N; i++) cout name[i] ; cout \t; } cout endl; for (i = 0; i M; i++) { cout ; cout i ; for (j = 0; j N; j++) cout Max[i][j] ; cout \t;

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档