




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统第七次实验张焓1. 实验名称:项目:银行家算法实现2. 实验目的:初始化由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。银行家算法银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。设进程cusneed提出请求REQUEST i,则银行家算法按如下规则进行判断。(1)如果
2、REQUEST cusneed i<= NEEDcusneedi,则转(2);否则,出错。(2)如果REQUEST cusneed i<= AVAILABLEi,则转(3);否则,等待。(3)系统试探分配资源,修改相关数据:AVAILABLEi-=REQUESTcusneedi;ALLOCATIONcusneedi+=REQUESTcusneedi;NEEDcusneedi-=REQUESTcusneedi;(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。银行家算法安全性检查算法(1)设置两个工作向量Work=AVAILABLE;FINI
3、SH(2)从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED<=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+ALLOCATION;Finish=true;GOTO 2(4)如所有的进程Finish= true,则表示安全;否则系统不安全。3. 实验方法(1) 首先编写客户进程:包含需要用到的头文件,声明一些数据结构为全局变量用于纪录系统(资源或进程)的当前状态:#include<iostream>#include<string.h> #include<st
4、dio.h> using namespace std;#define False 0 #define True 1 int Max100100 = 0 ;/各进程所需各类资源的最大需求int Avaliable100 = 0 ;/系统可用资源char name100 = 0 ;/资源的名称int Allocation100100 = 0 ;/系统已分配资源int Need100100 = 0 ;/还需要资源int Request100 = 0 ;/请求资源向量int temp100 = 0 ;/存放安全序列int Work100 = 0 ;/存放系统可提供资源int M = 100;/作
5、业的最大数为100int N = 100;/资源的最大数为100 (2) 定义showdata()函数用于记录当前系统状态的数据结构的内容:void showdata()/显示资源矩阵int i, j;cout << "系统目前可用的资源Avaliable:" << endl;for (i = 0; i < N; i+)cout << namei << " "cout << endl;for (j = 0; j < N; j+)cout << Avaliablej <
6、;< " "/输出分配资源cout << endl;cout << "tMaxtAllocationtNeed" << endl;cout << "进程名: "for (j = 0; j < 3; j+) for (i = 0; i < N; i+)cout << namei << " " cout << "t"cout << endl;for (i = 0; i < M; i
7、+) cout << " "cout << " " << i << " "for (j = 0; j < N; j+)cout << Maxij << " "cout << "t"for (j = 0; j < N; j+)cout << Allocationij << " "cout << "t"for (j = 0; j
8、< N; j+)cout << Needij << " "cout << endl;(3) 定义函数changdata(int),进行资源分配后的状态更新,用于资源申请函数中资源申请成功后的状态更新。其中,函数参数i为进程编号:int changdata(int i)/进行资源分配 int j;for (j = 0; j<M; j+)Avaliablej = Avaliablej - Requestj;Allocationij = Allocationij + Requestj;Needij = Needij - Reques
9、tj;return 1;(4) 安全性检测函数,用于判断当前计算机系统是否处于安全状态,并输出进程根据银行家算法得出的运行顺序:int safe()/安全性算法 int i, k = 0, m, apply, Finish100 = 0 ;int j;int flag = 0;Work0 = Avaliable0;Work1 = Avaliable1;Work2 = Avaliable2;for (i = 0; i<M; i+)apply = 0;for (j = 0; j < N; j+)if (Finishi = False&&Needij <= Work
10、j)apply+;if (apply = N)for (m = 0; m < N; m+)Workm = Workm + Allocationim;/变分配数Finishi = True;tempk = i;i = -1;k+;flag+;for (i = 0; i<M; i+)if (Finishi = False)cout << "系统不安全" << endl;/不成功系统不安全return - 1;cout << "系统是安全的!" << endl;/如果安全,输出成功cout <&
11、lt; "分配的序列:"for (i = 0; i<M; i+)/输出运行进程数组cout << tempi;if (i<M - 1) cout << "->"cout << endl;return 0;(5) 定义资源申请函数,用于录入下一时刻哪个进程对计算机系统申请哪些资源,并且会对该申请进行判断;如果当前可用资源足以满足申请(不大于当前可用资源,不大于目前所需要的资源),则给予,如不能满足,则不分配并提醒用户,并在满足进程申请的情况下进行安全性判定:void share()/可用此函数询问需要为
12、某进程分配哪些资源,并利用银行家算法对申请资源的可行性对进行判定char ch;int i = 0, j = 0;ch = 'y'cout << "请输入要求分配的资源进程号(0 - " << M - 1 << ") :"cin >> i;/输入须申请的资源号cout << "请输入进程" << i << "申请的资源:" << endl;for (j = 0; j<N; j+)cout <&
13、lt; namej << ":"cin >> Requestj;/输入需要申请的资源for (j = 0; j<N; j+)if (Requestj>Needij)/判断申请是否大于需求,若大于则出错cout << "进程" << i << "申请的资源大于它需要的资源"cout << "分配不合理,不予分配!" << endl;ch = 'n'break;elseif (Requestj>Aval
14、iablej)/判断申请是否大于当前资源,若大于则/出错cout << "进程" << i << "申请的资源大于系统现在可利用的资源"cout << "分配出错,不予分配!" << endl;ch = 'n'break;if (ch = 'y')changdata(i);/根据进程需求量变换资源showdata();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断(6) 资源增加函数,为计算机系统增加新的种类资
15、源,并指定其数量,并展示系统状态、进行安全性检测:void addresources()/添加资源int n, flag;cout << "请输入需要添加资源种类的数量:"cin >> n;flag = N;N = N + n;for (int i = 0; i<n; i+)cout << "名称:"cin >> nameflag;cout << "数量:"cin >> Avaliableflag+;showdata();safe();(7) 资源删除函数,
16、为计算机系统删除某种种类资源,并展示系统状态、进行安全性检测:void delresources() /删除资源char ming;int i, flag = 1;cout << "请输入需要删除的资源名称:"do cin >> ming;for (i = 0; i<N; i+)if (ming = namei)flag = 0;break;if (i = N)cout << "该资源名称不存在,请重新输入:" while (flag);for (int j = i; j<N - 1; j+)namej =
17、 namej + 1;Avaliablej = Avaliablej + 1;N = N - 1;showdata();safe();(8) 资源修改函数,为计算机系统修改所有资源的数量,并展示系统状态、进行安全性检测:void changeresources() /修改资源函数cout << " 系统目前可用的资源Avaliable:" << endl;for (int i = 0; i<N; i+)cout << namei << ":" << Avaliablei <<
18、endl;cout << "输入系统可用资源Avaliable:" << endl;for (int i = 0; i < N; i+)cin >> Avaliablei;cout << "经修改后的系统可用资源为" << endl;for (int k = 0; k<N; k+)cout << namek << ":" << Avaliablek << endl;showdata();safe();(9) 作业增加
19、函数,为计算机系统增加作业进程,并指定其最大需求量,并展示系统状态、进行安全性检测:void addprocess() /添加作业int flag = M;M = M + 1;cout << "请输入该作业的最打需求量Max" << endl;for (int i = 0; i<N; i+)cout << namei << ":"cin >> Maxflagi;Needflagi = Maxflagi - Allocationflagi;showdata();safe();(10) 主函数
20、,首先,将资源名称、数量,进程的最大需求量、当前占用量进行定义:int main()int i, j, number, choice, m, n, flag;char ming;cout << "*资源管理系统的设计与实现*" << endl;cout << "请首先输入系统可供资源种类的数量:"cin >> n;N = n;for (i = 0; i<n; i+)cout << "资源" << i + 1 << "的名称:"
21、cin >> ming;namei = ming;cout << "资源的数量:"cin >> number;if (number < 0 | number>100)cout << "错误输入,请输入0-100内的常数n"Avaliablei = number;cout << endl;cout << "请输入作业的数量:"cin >> m;M = m;cout << "请输入各进程的最大需求量(" <
22、< m << "*" << n << "矩阵)Max:" << endl;for (i = 0; i<m; i+)for (j = 0; j<n; j+)cin >> Maxij;do flag = 0;cout << "请输入各进程已经申请的资源量(" << m << "*" << n << "矩阵)Allocation:" << endl;fo
23、r (i = 0; i<m; i+)for (j = 0; j<n; j+)cin >> Allocationij;if (Allocationij>Maxij)flag = 1;Needij = Maxij - Allocationij;if (flag)cout << "错误:申请的资源大于最大需求量,请重新输入!n" while (flag);(11) 随后更新可用资源量,并展示系统状态、进行安全性检测:for (i = 0; i < n; i+)for (j = 0; j < m; j+)Avaliablei =
24、 Avaliablei - Allocationji;if (Avaliablei < 0)cout << "错误:申请的资源大于系统资源总量!n"exit(EXIT_FAILURE);showdata();/显示各种资源safe();/用银行家算法判定系统是否安全(12) 进入功能选择菜单,并可按照提示进一步执行其他操作:choice = 1;while (choice)cout << "*银行家算法演示*" << endl;cout << "1:增加资源" << e
25、ndl;cout << "2:删除资源" << endl;cout << "3:修改资源" << endl;cout << "4:分配资源" << endl;cout << "5:增加作业" << endl;cout << "0:离开" << endl;cout << "*" << endl;cout << "请选择功能号:"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司付款委托书的撰写要点3篇
- 员工股权激励合同3篇
- 传真授权委托书模板3篇
- 全年采购合作协议达成3篇
- 产科实习工作总结(5篇)
- 农行主管述职报告
- 保险退保委托书中的退保流程介绍3篇
- 员工股权协议书范本3篇
- 安全责任书确保演出顺利进行3篇
- 初中本周工作计划怎么写(33篇)
- 2025陕西汉中汉源电力(集团)限公司招聘56人易考易错模拟试题(共500题)试卷后附参考答案
- 南京师范大学自主招生个人陈述范文与撰写要点
- 铁粉运输合同协议
- 计算机网络安全知识试题及答案2025年计算机二级考试
- 浙江省A9协作体2024-2025学年高二下学期4月期中联考语文试卷(含答案 )
- (四调)武汉市2025届高中毕业生四月调研考试 语文试卷(含答案详解)
- 广州广州市天河区华阳小学-毕业在即家校共话未来-六下期中家长会【课件】
- 第4单元 亮火虫(教学设计)-2024-2025学年粤教花城版(2024)音乐一年级下册
- 车间生产材料管理制度
- 西师大版小学五年级数学(下)期中测试题(含答案)
- 广东省深圳市龙华区2023-2024学年七年级下学期期中数学试题(含答案)
评论
0/150
提交评论