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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统原理课程设计.docx

1、操作系统原理课程设计操作系统原理课程设计银行家算法模拟 指导老师:周 敏 唐洪英 杨宏雨 杨承玉 傅由甲 黄贤英 院 系:计算机学院计算机科学与技术 班 级: 0237-6 学 号: * * * * * * 同 组 者: 杨 志 时 间: 2005/1/10-2005/1/14 银行家算法模拟一、设计目的本课程设计是学生学习完计算机操作系统课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。二、设计要求银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深

2、了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:两人一组,每组从所给题目中任选一个(如自拟题目,需经教师同意),每个学生必须独立完成课程设计,不能相互抄袭,同组者文档不能相同;设计完成后,将所完成的工作交由老师检查;要求写出一份详细的设计报告。三、设计内容编制银行家算法通用程序,并检测所给状态的系统安全性。1)银行家算法中的数据结构假设有n个进程m类资源,则有如下数据结构:可利用资源向量Available。这是一个含有m个 元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该

3、类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。Availablej=K,则表示系统中现有Rj 类资源K个。最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Maxi,j=K,则表示进程i需要Rj类资源的最大数目为K。分配矩阵Allocation。这也是一个n*m的矩阵,它定义了系统中每一类资源 当前已分配给没一进程的资源数。如果Allocationi,j=K,则表示 进程i当前已分得Rj类资源的数目为K。需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Needi,j=K,则表示进程i还需要

4、Rj类资源K个,方能完成其任务。上述三个矩阵存在如下关系: Needi,j= Maxi,j- Allocationi,j2)银行家算法 设进程I提出请求RequestN,则银行家算法按如下规则进行判断。 (1)如果RequestN=NEEDI,N,则转(2);否则,出错。 (2)如果RequestN=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分

5、配作废,系统恢复原状,进程等待。3)安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISHM=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISHi=FALSE NEED=WORK 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程FinishM=true,则表示安全;否则系统不安全。四、算法实现通过程序实现定义的进程,为各进程分配资源,具体过程是:首先在程序中定义了3类资源,数量分别为10,5,7。然后定

6、义进程p0,p1,p2,p3,p4,接着为各进程申请各资源,然后在程序执行并比较申请的资源数量与各资源所剩数量,若前者大于后者则申请失败,反之则成功。同时该程序可以撤消新建进程,也可以查看资源分配情况。五、程序流程图 银行家算法程序流程图如下:六、模块间调用关系本程序的主要函数模块为:void changdata(int k) /为进程申请资源并修改数据int chkerr(int s) /检查分配是否成功void showdata() /查看资源情况 void main() /主函数其中主函数中调用了void changdata(int k) 、int chkerr(int s)、void

7、showdata()函数模块。七、源程序清单#include string.h#include iostream.h#define M 5 /总进程数#define N 3 /总资源数#define FALSE 0#define TRUE 1/M个进程对N类资源最大资源需求量int MAXMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/系统可用资源数int AVAILABLEN=10,5,7; /M个进程已经得到N类资源的资源量int ALLOCATIONMN=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/M个进程还需要N类资源的资源量int NEEDMN=

8、7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int RequestN=0,0,0;void main()int i=0,j=0;char flag=Y;void showdata();void changdata(int);void rstordata(int);int chkerr(int);showdata();while(flag=Y|flag=y)i=-1;while(i=M) cout 请输入需申请资源的进程号(从0到M-1i; if(i=M)cout 输入的进程号不存在,重新输入!endl; cout 请输入进程i申请的资源数endl; for (j=0;jN;j+

9、) cout 资源jRequestj; if(RequestjNEEDij) cout进程i申请的资源数大于进程i还需要j类资源的资源量!; cout申请不合理,出错!请重新选择!endlAVAILABLEj) cout 进程i申请的资源数大于系统可用j类资源的资源量!; cout申请不合理,出错!请重新选择!endlendl; flag=N; break; if(flag=Y|flag=y) changdata(i); if(chkerr(i) rstordata(i); showdata(); else showdata(); else showdata(); coutendl; cout

10、flag; void showdata() int i,j; cout 系统可用的资源数为:endlendl; cout ; for (j=0;jN;j+)cout 资源j: AVAILABLEj; coutendl;/ coutendl; / cout 各进程资源的最大需求量:endlendl; / for (i=0;iM;i+) / / cout进程i:; / for (j=0;jN;j+)cout 资源j: MAXij; / coutendl; / coutendl; cout 各进程还需要的资源量:endlendl; for (i=0;iM;i+) cout进程i:; for (j=0

11、;jN;j+)cout 资源j: NEEDij; coutendl; coutendl; cout 各进程已经得到的资源量: endlendl; for (i=0;iM;i+) cout进程i:; for (j=0;jN;j+)cout 资源j:ALLOCATIONij; coutendl; coutendl;void changdata(int k) int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj; ;void r

12、stordata(int k) int j; for (j=0;jN;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj; ;int chkerr(int s) int WORK,FINISHM,tempM; int i,j,k=0; for(i=0;iM;i+)FINISHi=FALSE; for(j=0;jN;j+) WORK=AVAILABLEj; i=s; while(iM) if (FINISHi=FALSE&NEEDij=WORK) WORK=W

13、ORK+ALLOCATIONij; FINISHi=TRUE; tempk=i; k+; i=0; else i+; for(i=0;iM;i+) if(FINISHi=FALSE) coutendl; cout 系统不安全 本次资源申请不成功endl; coutendl; return 1; coutendl; cout 经安全性检查,系统安全,本次分配成功。endl; coutendl; cout 本次安全序列:; for(i=0;iM;i+)cout进程tempi; coutendlendl; return 0;八、运行结果操作说明:开始运行界面,如图:根据提示输入本次申请资源的进程号和

14、申请资源数,如图:如资源申请成功,显示本次的申请后的一个进程安全执行序列。如图:如对I类申请数大于进程还需要I类资源的资源量或大于系统可用I类资源数。如图:对I类申请数大于进程还需要I类资源的资源量或大于系统可用I类资源数。如图:如资源申请不成功,则恢复申请前的资源状况。如图:九、实验总结 本实验所使用的软件工具为:Microsoft Visual C+ 6.0。操作系统是计算机系统中必不可少的系统软件。它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。银行家算法是为了使系统保持安全状态。我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配

15、资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 通过上面这个例子,我们看到银行家算法确实能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。 本次实验为时五天多,总体上来说实验是比较成功的。由于时间仓促,做的不是很完美,敬请老师谅解。 十、参考资料计算机操作系统 西安电子科技大学出版社 汤小丹 哲风屏 计算机操作系统原理及应用上机指导 重庆工学院计算机学院 C+语言程序设计 清华大学出版社 郑莉 董渊

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

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