第一范文网 - 专业文章范例文档资料分享平台

操作系统实验二-银行家算法02

来源:用户分享 时间:2020-06-08 本文由清风徐来 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

操作系统实验二 银行家算法

实验二 银行家算法

一、实验目的:

运用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地避免死锁的发生,以加深对课堂上所讲授的知识的理解。

二、实验内容:

完成银行家算法的模拟实现:设计有m个进程共享n个系统资源的系统,进程可动态的申请和释放资源。系统按各进程的申请动态的分配资源时,采用银行家算法有效地避免死锁的发生。

三、实验准备:

1.相关理论知识: (1)银行家算法的思路

对进程的资源请求进行合法性检查;若请求合法,则进行试分配。试分配后,调用安全性检查算法进行安全性检查。若安全,则满足该进程请求,分配资源;若不安全,则拒绝该进程申请,不分配资源,并恢复系统试分配前的资源状态。

(2)银行家算法中用到的主要数据结构

可利用资源向量 int Available[j] // j为资源的种类。 最大需求矩阵 int Max[i][j] // i为进程的数量。 分配矩阵 int Allocation[i][j]

需求矩阵 int Need[i][j]= Max[i][j]- Allocation[i][j] 申请各类资源数量 int Requesti[j] //i进程申请j资源的数量 工作向量 int Work[x] int Finish[y] (3)银行家算法Bank()

进程i发出请求申请k个j资源,Requesti[j]=k ① 检查申请量是否小于等于需求量:

Requesti[j]<=Need[i,j],若条件不符重新输入,不允许申请大于需求量。 ② 检查申请量是否小于等于系统中的可利用资源量:

Requesti[j]<=Available[j],若条件不符就申请失败,阻塞该进程,用goto语句跳转至重新申请资源。

③ 若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:

Available[j]= Available[j]- Requesti[j]; Allocation[i][j]= Allocation[i][j]+ Requesti[j];

1

操作系统实验二 银行家算法

Need[i][j]= Need[i][j]- Request i[j];

④ 试分配后,执行安全性检查,调用Safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。

⑤ 用while循环实现输入字符Y/y判断是否继续请求资源分配。 (4)安全性检查算法(Safe()函数) ① 设置两个向量:

工作向量Work:表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,令Work= Available。

Finish:表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=false;当有足够的资源分配给进程时,再令Finish[i]=true。

② 在进程集合中查找符合以下条件的进程: 条件1:Finish[i]=0 条件2:Need[i][j]<=Work[j]

若找到,则执行步骤③;否则,执行步骤④

③ 当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

Work[j]= Work[j]+ Allocation[i][j] Finish[i]=true 跳至 ②

④ 若所有进程的Finish[i]=true都满足,则表示已找到安全序列,系统处于安全状态,试分配成功;否则,系统处于不安全状态,不予分配。

2.测试数据:

系统有5个进程(p0,p1,p2,p3,p4)和4类资源(A,B,C,D),在T0时刻的资源分配情况如下表所示:(课本P115 22) Process P0 P1 P2 P3 P4 Max 0 0 4 4 2 7 5 0 3 6 10 10 0 9 8 4 0 6 6 10 Allocation 0 0 3 2 1 0 0 0 1 3 5 4 0 3 3 2 0 0 1 4 Need 0 0 1 2 1 7 5 0 2 3 5 6 0 6 5 2 0 6 5 6 Available 1 6 2 2 试问:(1)该状态是否安全? (2)如果进程P2提出请求Request2(1,2,2,2)后,系统能否将资

源分配给它?

四、实验过程:

1.流程图

2

操作系统实验二 银行家算法

开 始 输入进程数目m 输入资源种类数n,及各进程对各类资源的最大需求量Max 和已分配到的资源量Allocation 初始化need 矩阵 输入系统可用资源数Available 调用安全性算法 N 系统安全吗? Y 输入进程i的资源请求量Requesti[j] N Request i[j]<=need[i,j] N Y Request i[j]<=Available[i,j] Y 资源试分配: 撤销资源试分配:修改 Available[j]= Available[j]- Requesti[j]; Allocation[i][j]= Allocation[i][j]+ Requesti[j]; Need[i][j]= Need[i][j]- Request i[j]; Available[j] Allocation[i][j] Need[i][j]值 调用安全性算法 N 系统安全吗? Y Y N 是否继续请求资源分配? 结束 3

操作系统实验二 银行家算法

2. 源代码

#include #include #include

#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 void showdata()//显示资源矩阵 { int i,j;

cout<<\系统目前可用的资源[Avaliable]:\ for(i=0;i

cout<

Max Allocation Need\ cout<<\进程名 \ for(j=0;j<3;j++){ for(i=0;i

4

操作系统实验二 银行家算法

cout<<\ \ }

cout<

cout<<\ \ for(j=0;j

cout<

int changdata(int i)//进行资源分配 { int j; for (j=0;j

Avaliable[j]=Avaliable[j]-Request[j]; Allocation[i][j]=Allocation[i][j]+Request[j]; Need[i][j]=Need[i][j]-Request[j]; } return 1; }

int safe()//安全性算法 {

int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0;

Work[0]=Avaliable[0];

5

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新IT计算机操作系统实验二-银行家算法02 全文阅读和word下载服务。

操作系统实验二-银行家算法02 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1077857.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top