ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:83.08KB ,
资源ID:5234449      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5234449.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计实验报告用C实现银行家算法Word下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计实验报告用C实现银行家算法Word下载.docx

1、死锁避免却与此相反,通过合适的资源分配算法确保不会出现进程循环等待链,从而避免死锁。本实验旨在了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生。三、实验内容:利用C+,实现银行家算法四、实验要求:1.完成银行家算法的设计2.设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。五、实验原理:系统中的所有进程放入进程集合,在安全状态下系统收到进程的资源请求后,先把资源试探性的分配给它。之后,系统将剩下的可用资源和进程集合中的其他进程还需要的资源数作比较,找出剩余资源能够满足的最大需求量的进程,从而保证进程运行完毕并归还全部资源。这时,把

2、这个进程从进程集合中删除,归还其所占用的所有资源,系统的剩余资源则更多,反复执行上述步骤。最后,检查进程集合,若为空则表明本次申请可行,系统处于安全状态,可以真正执行本次分配,否则,本次资源分配暂不实施,让申请资源的进程等待。银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列P1,Pn是安全的,如果对于每一个进程Pi(1in),它

3、以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j s.R1) return false; if(R2 s.R2) return false; if(R3 s.R3) return false; return true;class Data/封装所有数据 Process *p;/进程指针 Source sum;/总资源量 Source available; /可获得量 Source ask;/请求量 int pLength; /进程个数 int * ruler; /逻辑尺 void clearProcess() /进程currentAvail清零 for(int i=0;ipLen

4、gth;i+) pi.currentAvail.setSource(0, 0, 0);class DataInit/封装初始化数据函数类 DataInit()/构造函数 void initLength(Data *db)/设置进程个数 int n; coutn; db-pLength = n;p = new Processn; if(!db-p) coutruleri.currentAvail.add(db-available); /将当前系统可用资源量赋给该序列的第一个进程ruleri.claim_allocation.lower(db-ruleri.currentAvail) /若当前进程

5、currentAvail小于该进程需求量(claim-allocation),返回false return false; for(i=1; i i+) /当前进程的可获得资源量currentAvail获得前一个进程的未释放资源前可获得资源量currentAvail db-ruleri-1.currentAvail); /当前进程的可获得资源量currentAvail获得前一个进程的释放的资源量ruleri-1.allocation); /若当前进程currentAvail小于该进程需求量(claim-allocation),返回false if(!ruleri.currentAvail) re

6、turn false; /若当前进程currentAvail大于该进程总资源量,返回falseruleri.currentAvail.lower(db-sum) /该序列进程安全。返回true bool exsitSafeList(Data *db) /判断是否存在安全序列 int i = 0; for(i = 0; i ruleri = i; while(1) /该循环将检测逻辑尺刻度值的全排列 if(checkList(db) /找到一个安全序列,返回true return true;clearProcess(); /将所有进程的currentAvail清零next_permutation

7、(db-ruler,db-ruler+db-pLength) /所有排列完毕后退出生成排列库函数的调用 return false; int findSafeList(Data *db, int i=0) /寻找安全序列 /请求值大于系统当前可用资源值,返回0ask.lower(db-available) return 0; /请求值大于当前进程需求资源值,返回1pi.claim_allocation) return 1; Source s(db-pi.allocation); /根据请求,分配资源值available.sub(db-ask);pi.allocation.add(db-pi.cl

8、aim_allocation.sub(db-exsitSafeList(db) /判断是否存在安全序列available.add(db- /不存在安全序列,回滚,恢复分配前状态,并返回2pi.allocation.sub(db-pi.claim_allocation.add(db- return 2;ask.setSource(0,0,0); /找到安全序列,将请求资源置零,返回3 return 3; 3.功能模块设计class Display/封装显示方法void main() /主函数8、实验运行结果:输入进程数,及相关资源数量分配选择算法完成的操作:1 查看进程情况2 请求分配 2.1分

9、配失败2.2 分配成功2.3 继续分配失败,退出九、实验心得:通过此次实验,我能够更加深入的理解银行家算法的执行过程,也懂得用银行家算法去防止发生死锁,有效地解决了资源利用率低的问题,保证了系统的安全性。当然在实验过程中,我也遇到了一些困难,但是我通过及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,我将会在今后学习中更加努力。源代码(部分)#includealgorithmusing namespace std; void setAsk(Data *db) /设置请求资源量 int r1,r2,r3; r1=0; r2=0; r3=0;ask.setSource(r1,r2,r3)

10、; void initSum(Data *db) /设置总资源量 Available (R1,R2,R3):r1r2r3;sum.setSource(r1,r2,r3); void initAvail(Data *db) /设置可获得量输入初始分配 Allocation:navailableR1,R2,R3:n available.setSource(r1,r2,r3); void initProcess(Data *db) /设置各进程属性值输入t0时分配 Allocation:i+)/设置进程pi 的 allocation coutpi.allocation.setSource(r1,r2

11、,r3); max allocation(claimR1,R2,R3):/设置进程pi 的 claimpi.claim.setSource(r1,r2,r3); r1=db-pi.claim.R1-db-pi.claim.R1;/设置进程pi 的 claim_allocation r2=db-pi.claim.R2-db-pi.claim.R2; r3=db-pi.claim.R3-db-pi.claim.R3;pi.claim_allocation.setSource(r1, r2, r3); Display() /构造函数 void displaySource(Source s) /设置基

12、本资源显示方式 couts.R1s.R2s.R3; displayAvailable(Source s) /显示可获得资源量 displaySource(s); void displayProcess(Process *p,int length) /显示进程基本信息length; pt displaySource(pi.claim);tt displaySource(pi.allocation);endl; void displaySafeList(Data *db) /显示安全序列ruleriruleri.currentAvail);ruleri.claim);ruleri.allocati

13、on);ruleri.claim_allocation); true void displayAskResult(Data *db,int n) /显示请求资源结果 if(n=0)不分配,请求量大于当前可获得量! n if(n=1) if(n=2)不分配,找不到安全序列! if(n=3)存在安全序列: for(int i=0; cout char c=N查看安全序列详情?(Y/N) c; if(c=Y|c=y) cout 进程 currentavail claim allocation claim-allocation possiblen displaySafeList(db); return; int

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2