操作系统实验报告(三)

2019-01-10 13:02

XXXX大学

实 验 报 告

实验名称 实验三 银行家算法 课程名称 操作系统

专业班级: 学生姓名:

学 号: 成 绩:

指导教师: 实验日期: | |

| |

华 北 电 力 大 学 实 验 报 告

一、实验目的及要求 1、实验目的 熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。 2、实验要求 用高级语言编写和调试一个描述银行家算法的程序。 设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 二、所用仪器、设备 PC机 三、实验原理 利用银行家算法避免死锁 1、银行家算法中的数据结构 (1)可利用资源向量Available (2)最大需求规阵Max (3)分配矩阵Allocation (4)需求矩阵Need 2、银行家算法 (1)如果Requesti<或=Need,则转向步骤2;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<或=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,P1必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available:=Available-Requesti; Allocation:=Allocationi+Request; Needi:=Needi-request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法 系统所执行的安全性算法可描述如下: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:=Allocation; ②Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]:=false ②Need

华 北 电 力 大 学 实 验 报 告

(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work:=Work+Allocation; Finish[i]:=true; Go to step 2; (4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。 4、银行家算法之例 假设有五个进程{P0,P1,P2,P3,P4}和三种类型的资源{A,B,C},每一种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图1所示。 图1 (1)T0时刻的安全性 利用安全性算法对T0时刻的资源分配情况进行分析,可得下表所示的T0时刻的安全性分析,从中得知,T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的,如图2所示。 图2 (2) P1请求资源 P1发出请求向量Request(1,0,2),系统按银行家 算法进行检查: (1)Request1(1,0,2)≤Need(1,2,2) (2)Request1(1,0,2)≤Available(3,3,2) (3)系统先假定可为P1分配资源,并修改Aailable,Allocation1和Need1向量,由此形成的资源变化情况如图1中的圆括号所示。 第 页 共 页

华 北 电 力 大 学 实 验 报 告

(4)我们再利用安全性检查此时系统是否安全。 由所进行的安全性检查得知,可以找到一个安全序列{P1,P3,P4,P2,P0}。因此,系统是安全的,可以立即将P1所申请的资源分配给它。 (3)P4请求资源 P4发出请求向量Request(3,3,0),系统按银行家算法进行检查: (1)Request4(3,3,0)≤Need4(4,3,1)。 (2)Request4(3,3,0)>Available(2,3,0),让P4等待。 (4) P0请求资源 P0发出请求向量Request0(0,2,0),系统按银行家算法进行检查: (1)Request0(o,2,0)<或=Need0(7,4,3)); (5)进行安全性检查 可用资源Available{2,1,0}已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。 如果在银行家算法中,把P0发出的请求向量改为Request(0,1,0),系统是否能将资源分配给它,请读者考虑 四、实验方法与步骤 先定义好每个进程的MAX,ALLOCTION,NEED,AVAILABLE等: int P_finish[5]={0,0,0,0,0}; //已完成的进程序列 int P_work[5]; //进程工作序列 int P_max[][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //进程最大需求 int P_Alloctioan[][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; //进程已得到的 int P_need[][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; //进程还需分配的 int Sys_resource[3]={3,3,2}; 定义需要的向量: int test(int avaliable[m],int need[n][m],int allocation[n][m],int finish[n], int num,int request[m]) 判断安全性程序: for(i=0;i<5;i++) //(如果五个i都是一,则为安全的,否则不安全) bj=finish[i]+bj; if(bj==5) { cout<<\本次安全序列:\(安全的话,就输出信息) for(i=0;i<5;i++) cout<<\进程\ return 1; } else return 0; //(返回一个值,一次来作为分配资源时候系统是否安全) 第 页 共 页 华 北 电 力 大 学 实 验 报 告

检查分配以后系统是否处于安全状态: for(j=0;j<3;j++) { available1[j]=available1[j]-rq[1][2]; allocation1[i][j]=allocation1[i][j]+rq[i][j]; need1[i][j]=need1[i][j]-rq[i][j]; } } sf=safe(jcbh1,allocation1,need1,available1); 五、实验结果与数据处理 此程序的1为P0,2 为P1,以此类推。先让P0申请资源{1,0,2},结果发生死锁;再让P0申请资源{1,0,2},结果系统安全。 六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见) 七、所附实验输出的结果或数据 让P0申请资源{1,0,2},输出结果: 让p1申请资源{1,0,2},输出结果: 第 页 共 页


操作系统实验报告(三).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二年级数学复习题(苏教版)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: