1 / 19
文档名称:

操作系统实验报告.docx

格式:docx   大小:80KB   页数:19页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统实验报告.docx

上传人:wwlgqnh 2020/8/30 文件大小:80 KB

下载得到文件列表

操作系统实验报告.docx

相关文档

文档介绍

文档介绍:操作系统实验报告学院: 信息科学与工程学院指导老师: 胡小龙实验目的增强学生对计算机操作系统基本原理、基本理论、基本算法的理解提高和培养学生的动手能力实验题目银行家算法模拟题目分析银行家算法中的数据结构可利用资源向量Available,其中每个元素代表一类可利用资源数目,其初始值是系统中所配置的该类的全部可利用资源的数目最大需求矩阵Max,它定义系统中n个进程中的每一个进程对m类资源的最大需求分配矩阵Allocation,它定义系统中每一类资源当前已分配给每一进程的资源数需求矩阵Need,表示每一进程尚需的各类资源数上述算法结构存在下述关系Need[i,j]=Max[i,j]-Alocation[i,j]银行家算法设Requesti是进程Pi的请求向量,当pi发出资源请求后,系统按照下述步骤进行检查:如果Requesti[j]<=Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值;如果Requesti[j]<=Available[j],便转向步骤(3);否则表示尚无足够资源,pi须等待系统试探着把资源分配给进程pi,并修改下面的数据结构中的数值:-=res->i; Allocation[process].i+=res->i; Need[process].i-=res->i;系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程pi,已完成此次分配;否则,将本次的试探分配作废,分配回滚。+=res->i; Allocation[process].i-=res->i; Need[process].i+=res->i;//资源分配请求boolrequest(intprocess,RESOURCE*res){ //request向量需小于Need矩阵中对应的向量 if(res->A<=Need[process].A&&res->B<=Need[process].B&&res->C<=Need[process].C) { //request向量需小于Available向量 if(res->A<=&&res->B<=&&res->C<=) { //试探分配 ProbeAlloc(process,res); //如果安全检查成立,则请求成功,否则将分配回滚并返回失败 if(SafeCheck()) { returntrue; } else { printf("安全性检查失败。原因:系统将进入不安全状态,有可能引起死锁。\n"); printf("正在回滚...\n"); RollBack(process,res); } } else { printf("安全性检查失败。原因:请求向量大于可利用资源向量。\n"); } } else { printf("安全性检查失败。原因:请求向量大于需求向量。\n"); } returnfalse;}安全性算法设置两个向量:i工作向量Work,表示系统可提供给进程继续运行所需的各类资源数目,在执行安全算法开始时:Work=AvailableiiFinish,表示系统是否有足够的资源分配给进程,是指运行完成。开始时:Finish[i]=false;当有足够资源分配给进程时,再令Finish[i]=true从进程集合中找到一个满足下述条件的进程:iFinish[i]=false;iiNeed[i,j]<=Work[j];若找到,执行步骤(3),否则,执行步骤(4)当进程pi获得资源后,可顺利执行,直至完成,并释放出分配给他的资源Work[j]=Work[j]+Allocation[i,j];Finish[i]=true;Gotostep2;如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。//安全性检查boolSafeCheck(){ RESOURCEWork=Available; boolFinish[PROCESSES_NUMBER]={false,false,false,false,false}; inti; intj=0; for(i=0;i<PROCESSES_NUMBER;i++) { //是否已检查过 if(Finish[i]==false) { //是否有足够的资源分配给该进程 if(Need[i].A<=&&Need[i].B<=&&Need[i].C<=) { //有则使其执行完成,并将已分配给该进程的资源全部回收 +=Allocation[i].A; +=Allocation[i].B; Wo