




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告设计题目:银行家算法学院:信息科学与工程姓名:吴致远学号:0919140208 班级: 物联网工程1402班 银行家算法分析、设计与实现设计目的:增强学生对计算机操作系统基本原理、基本理论、基本算法的理解提高和培养学生的动手能力一、 设计理论描述本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。要求如下:(1) 模拟一个银行家算法;(2) 初始化时让系统拥有一定的资源;(3) 用键盘输入的方式申请资源;(4) 如果预分配后,系统处于安全状态,则修改系统的资
2、源分配情况;(5) 如果预分配后,系统处于不安全状态,则提示不能满足请求,设计的主要内容是模拟实现动态资源分配。同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。银行家算法. 顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继
3、续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.二、算法描述及数据结构模型 1.银行家算法: 设进程i提出请求Requestn,则银行家算法按如下规则进行判断。 (1)如果Requestn>Needi,n,则报错返回。 (2)如果Requestn>Available,则进程i进入等待资源状态,
4、返回。 (3)假设进程i的申请已获批准,于是修改系统状态: Available=Available-Request Allocation=Allocation+Request Need=Need-Request(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 2.安全性检查 (1)设置两个工作向量Work=Available;FinishM=False(2)从进程集合中找到一个满足下述条件的进程, Finish i=False Need<=Work 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
5、 Work=Work+Allocation Finish=True GO TO 2 (4)如所有的进程FinishM=true,则表示安全;否则系统不安全。 3.数据结构#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work1
6、00=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资源的最大数为100void showdata()/显示资源矩阵三、源代码 #include "stdafx.h"#include<iostream>#include<string.h>#include<stdio.h>using namespace std;#define False 0#define True 1int Max100100 = 0 ;/各进程所需各类资源的最大需求int Avaliable100 = 0 ;/系统可用资源cha
7、r name100 = 0 ;/资源的名称int Allocation100100 = 0 ;/系统已分配资源int Need100100 = 0 ;/还需要资源int Request100 = 0 ;/请求资源向量int temp100 = 0 ;/存放安全序列int Work100 = 0 ;/存放系统可提供资源int M = 100;/作业的最大数为100int N = 100;/资源的最大数为100void showdata()/显示资源矩阵int i, j;cout << "系统目前可用的资源Avaliable:" << endl;for
8、(i = 0;i<N;i+)cout << namei << " "cout << endl;for (j = 0;j<N;j+)cout << Avaliablej << " "/输出分配资源cout << endl;cout << " Max Allocation Need" << endl;cout << "进程名 "for (j = 0;j<3;j+) for (i = 0;i<
9、;N;i+)cout << namei << " "cout << " "cout << endl;for (i = 0;i<M;i+) cout << " " << i << " "for (j = 0;j<N;j+)cout << Maxij << " "cout << " "for (j = 0;j<N;j+)cout <<
10、; Allocationij << " "cout << " "for (j = 0;j<N;j+)cout << Needij << " "cout << endl;int changdata(int i)/进行资源分配int j;for (j = 0;j<M;j+) Avaliablej = Avaliablej - Requestj;Allocationij = Allocationij + Requestj;Needij = Needij - Reques
11、tj;return 1;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 <= Workj) apply+;if (apply = N) for (m = 0;m<N;m+)Workm = Wor
12、km + 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 << "分配的序列:"for (i = 0;i<M;i+) /输出运行进程数组cout &l
13、t;< tempi;if (i<M - 1) cout << "->"cout << endl;return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i = 0, j = 0;ch = 'y'cout << "请输入要求分配的资源进程号(0-" << M - 1 << "):"cin >> i;/输入须申请的资源号cout << "请输入进程 " &l
14、t;< i << " 申请的资源:" << endl;for (j = 0;j<N;j+)cout << namej << ":"cin >> Requestj;/输入需要申请的资源for (j = 0;j<N;j+) if (Requestj>Needij)/判断申请是否大于需求,若大于则出错cout << "进程 " << i << "申请的资源大于它需要的资源"cout << &
15、quot; 分配不合理,不予分配!" << endl;ch = 'n'break;else if (Requestj>Avaliablej)/判断申请是否大于当前资源,若大于则 /出错cout << "进程" << i << "申请的资源大于系统现在可利用的资源"cout << " 分配出错,不予分配!" << endl;ch = 'n'break;if (ch = 'y') changdata(i)
16、;/根据进程需求量变换资源showdata();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断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 >> Avali
17、ableflag+;showdata();safe();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 = namej
18、 + 1;Avaliablej = Avaliablej + 1;N = N - 1;showdata();safe();void changeresources() /修改资源函数cout << "系统目前可用的资源Avaliable:" << endl;for (int i = 0;i<N;i+)cout << namei << ":" << Avaliablei << endl;cout << "输入系统可用资源Avaliable:" &l
19、t;< endl;cin >> Avaliable0 >> Avaliable1 >> Avaliable2;cout << "经修改后的系统可用资源为" << endl;for (int k = 0;k<N;k+)cout << namek << ":" << Avaliablek << endl;showdata();safe();void addprocess() /添加作业int flag = M;M = M + 1;cout
20、<< "请输入该作业的最打需求量Max" << endl;for (int i = 0;i<N;i+) cout << namei << ":"cin >> Maxflagi;Needflagi = Maxflagi - Allocationflagi;showdata();safe();int main()/主函数int i, j, number, choice, m, n, flag;char ming;cout << "*单处理机系统进程调度实现*"
21、<< endl;cout << "请首先输入系统可供资源种类的数量:"cin >> n;N = n;for (i = 0;i<n;i+)cout << "资源" << i + 1 << "的名称:"cin >> ming;namei = ming;cout << "资源的数量:"cin >> number;Avaliablei = number;cout << endl;cout <&
22、lt; "请输入作业的数量:"cin >> m;M = m;cout << "请输入各进程的最大需求量(" << m << "*" << n << "矩阵)Max:" << endl;for (i = 0;i<m;i+)for (j = 0;j<n;j+)cin >> Maxij;do flag = 0;cout << "请输入各进程已经申请的资源量(" << m
23、<< "*" << n << "矩阵)Allocation:" << endl;for (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);showdata();/显
24、示各种资源safe();/用银行家算法判定系统是否安全cin >> choice;while (choice)cout << "*银行家算法演示*" << endl;cout << " 1:增加资源 " << endl;cout << " 2:删除资源 " << endl;cout << " 3:修改资源 " << endl;cout << " 4:分配资源 " << endl;cout << " 5:增加作业 " << endl;cout << " 0:离开 " << endl;cout << "*" << endl;cout << "请选择功能号:"cin >&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇科护理试题库及答案
- 了解考点分析纺织品设计师证书考试试题及答案
- 2024年纺织行业数字营销的实施案例试题及答案
- 刺猬原理面试题及答案
- 广告设计师考试2024年操作技能试题及答案
- 助理广告师效果监测试题及答案解读
- 2024年国际商业美术设计师考试试题及答案解读
- 宝安美术面试题及答案
- 2024广告设计师考试重点试题及答案
- 2024年纺织品检验员技能提升措施试题及答案
- 2025湖南建投集团春季校园招聘239人笔试参考题库附带答案详解
- 贷款合同授信协议
- 工程抗震考试试题及答案
- 2024年陕西延长石油有限责任公司管理人才招聘真题
- 思政微课红色教育
- 2025年安徽省马鞍山花山公安分局辅警岗位招聘48人历年自考难、易点模拟试卷(共500题附带答案详解)
- T-CNAS 12-2020 成人经口气管插管机械通气患者口腔护理
- 储能与燃机协同调峰:集成压缩空气储能与燃煤系统的建模与热力学分析
- FSC-COC体系管理手册
- 手术部位标识国家标准(2023版)
- 2025年重庆江北国际机场有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论