




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机操作系统课程设计报告书 选题:银行家算法模拟姓名: 包玉霞 学号: 101306101 班级: 软件1001 指导老师: 徐向英 2012年6月 目录一. 课程设计目的二. 课题内容三. 设计思路四. 源代码五. 运行与测试 六. 心得体会 1.设计目的 计算机系统中有很多资源,在多道程序设计环境中,若干程序往往要共享这些资源,而一个进程所需的资源不止一个,这样,系统就会容易发生死锁现象。然而系统产生死锁不仅浪费大量的系统资源,甚至导致整个系统的崩溃,带来灾难性的后果。而银行家算法是最具有代表性的避免死锁的一种重要方法,如果在并发执行的进程中能够寻找一个安全序列,则系统按照此序列分配资源,系统就不会产生死锁现象。2.课题内容1复习银行家算法,设计一个具有若干(不少于3种)资源和若干(不少于5个)进程的系统。2定义系统的初始状态,即进程获得的资源数,还需要的资源数以及系统可用的资源数。3以用户输入的方式提出资源请求,并用银行家算法避免可能发生的死锁,若系统安全,允许用户继续申请资源。4设计的系统要求结构清晰,与用户的交互界面友好,能动态地实现资源的申请和分配。3.设计思路银行家算法可分为几个主要的功能模块,其描述如下:1.初始化由用户输入数据,分别对运行的进程数、总的资源种类数、总资源数、各进程所需要的最大资源数量(Max),已分配的资源数量赋值。初始化算法流程图: 2.安全性检查算法(1)设置两个工作向量Work=AVAILABLE;FINISH=false;(2)从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work+=ALLOCATION;Finish=true;(4).如所有的进程Finish= true,则表示安全;否则系统不安全。安全性算法流程图: 3.银行家算法在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。设进程j提出请求REQUEST i,则银行家算法按如下规则进行判断。(1).如果REQUEST j i= NEEDji,则转(2);否则,出错。(2).如果REQUEST j i= AVAILABLEji,则转(3);否则,出错。(3).系统试探分配资源,修改相关数据: AVAILABLEi-=REQUESTji; ALLOCATIONji+=REQUESTji;NEEDji-=REQUESTji;银行家算法流程图:4.源代码#include#include#include#define FALSE 0 #define TRUE 1 #define W 10#define R 20int M ; /总进程数int N ; /资源种类int ALL_RESOURCEW;/各种资源的数目总和int MAXWR; /M个进程对N类资源最大资源需求量int AVAILABLER; /系统可用资源数int ALLOCATIONWR; /M个进程已经得到N类资源的资源量int NEEDWR; /M个进程还需要N类资源的资源量int RequestR; /请求资源个数void showdata() /函数showdata,输出资源分配情况 int i,j; printf(nn各种资源的总数量(all):n); for (j=0;jN;j+) printf( 资源 %d: %dn,j+1,ALL_RESOURCEj); printf(nn); printf(系统目前各种资源可用的数为(available):n); for (j=0;jN;j+) printf( 资源 %d: %dn, j+1, AVAILABLEj); printf(nn); printf(各进程还需要的资源量(need):nn); printf( 进程 ); for(i=0;iN;i+) printf( 资源%d ,i+1); printf(n); for (i=0;iM;i+) printf(进程p%d:,i+1); for (j=0;jN;j+) printf( %d ,NEEDij); printf(n); printf(nn); printf( 各进程已经得到的资源量(allocation): nn); printf( 进程 ); for(i=0;iN;i+) printf( 资源%d ,i+1); printf(n); for (i=0;iM;i+) printf(进程p%d: ,i+1); for (j=0;jN;j+)printf( %d ,ALLOCATIONij); printf(n); printf(n); void changdata(int k) /函数changdata,改变可用资源和已经拿到资源和还需要的资源的值 int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj;void rstordata(int k) /函数rstordata,恢复可用资源和已经拿到资源和还需要的资源的值int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj;int chkerr(int s) /函数chkerr,检查是否安全 int WORK,FINISHW; int i,j,k=0; for(i=0;iM;i+)FINISHi=FALSE; for(j=0;jN;j+) WORK=AVAILABLEj; i=s; do if(FINISHi=FALSE&NEEDij=WORK) WORK=WORK+ALLOCATIONij; FINISHi=TRUE; i=0; else i+; while(iM); for(i=0;iM;i+) if(FINISHi=FALSE) printf(n); printf( 系统不安全! 本次资源申请不成功!n); printf(n); return 1; printf(n); printf( 经安全性检查,系统安全,本次分配成功。n); printf(n); return 0; void bank() /银行家算法 int i=0,j=0; char flag=Y; while(flag=Y|flag=y) i=-1; while(i=M) printf( 请输入需申请资源的进程号(从P1到P%d,否则重输入!):,M); printf(p); scanf(%d,&i); if(iM)printf( 输入的进程号不存在,重新输入!n); printf( 请输入进程P%d申请的资源数:n,i); for (j=0;jNEEDi-1j) /若请求的资源数大于进程还需要i类资源的资源量j printf( 进程P%d申请的资源数大于进程P%d还需要%d类资源的资源量!,i,i,j); printf(申请不合理,出错!请重新选择!nn); flag=N; break; else if(RequestjAVAILABLEj) /若请求的资源数大于可用资源数 printf(进程P%d申请的资源数大于系统可用%d类资源的资源量!,i,j); printf(申请不合理,出错!请重新选择!nn); flag=N; break; if(flag=Y|flag=y) changdata(i-1); /调用changdata(i)函数,改变资源数 if(chkerr(i-1) /若系统安全 rstordata(i-1); /调用rstordata(i)函数,恢复资源数 showdata(); /输出资源分配情况 else /若系统不安全 showdata(); /输出资源分配情况 else /若flag=N|flag=n showdata(); printf(n); printf(是否继续银行家算法演示,按Y或y键继续,按N或n键退出演示: ); scanf(%c,&flag); void main() /主函数 int i=0,j=0,p; printf( * n); printf( 银行家算法的模拟实现 n); printf( * nn); printf(请输入总进程数:); scanf(%d,&M); printf(请输入总资源种类:); scanf(%d,&N); printf(请输入总资源数(all_resource):); for(i=0;iN;i+) scanf(%d,&ALL_RESOURCEi); printf(依次输入各进程所需要的最大资源数量(max):n); for (i=0;iM;i+) for (j=0;jALL_RESOURCEj) printf(n占有资源超过了声明的该资源总数,请重新输入!n); while (MAXijALL_RESOURCEj); printf(依次输入各进程已经占据的资源数量(allocation):n); for (i=0;iM;i+) for (j=0;jMAXij) printf(n占有资源超过了声明的最大资源,请重新输入n); while (ALLOCATIONijMAXij); /初始化资源数量 for (j=0;jN;j+) p=ALL_RESOURCEj; for (i=0;iM;i+) p=p-ALLOCATIONij;/减去已经被占据的资源 AVAILABLEj=p; if(AVAILABLEj0) AVAILABLEj=0; for (i=0;iM;i+) for(j=0;jN;j+) NEEDij=MAXij-ALLOCATIONij; showdata();bank();5.运行与测试 系统中的进程和资源数:系统目前可用资源和各进程所需资源:资源申请:安全性检测:下一次的资源申请:6.心得体会 一周的操作系统课程设计,我学到了很多课本上没有的知识。想要完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年终止不定期劳动合同的规定与操作流程
- 项目立项案例题目及答案
- 叉车考试科目一的题目及答案
- 物体打击试题及答案
- 2024译林版八年级英语上册Unit 1 课时4 Grammar 分层作业(含答案)
- 营销策划岗位知识培训课件
- 2025年高考化学试题分类汇编:化学实验基础(解析版)
- 物流考试试题及答案2025
- 2025型钢租赁合同
- 物流的试题及答案
- 列管式换热器课程设计
- 体育与健康《立定跳远》教学课件
- 煤炭贸易基础知识
- 中医养生秋季篇课件
- 老旧小区加装电梯施工合同范本
- 金属冶炼中的成本管理与控制
- 华为战略规划BLM业务领导力模型应用实战
- SMT主管岗位工作职责
- 2024年甘肃省武威市中考数学真题含解析
- 2024年分割公司股权离婚协议正规范本
- 苏教版四上劳技表格式教案
评论
0/150
提交评论