- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)