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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于Linux的实现进程的信号量互斥申请操作系统课程设计说明书3.docx

1、基于Linux的实现进程的信号量互斥申请操作系统课程设计说明书3中北大学操作系统课程设计说 明 书学 院、系:软件学院专 业:软件工程学 生 姓 名:1121011042学 号:段俊伟设 计 题 目:基于Linux的实现进程的信号量互斥申请 起 迄 日 期:2013年11月22日- 2013年12月6日指 导 教 师:康珺2013 年 11月 6 日1 需求分析 基于Linux的进程同步与通信的模拟实现需要完成以下功能:(1)创建进程:手动创建几个进程,或者随即创建几个进程,都在界面上完成;要求包括进程的名称(不能重复)、执行时间和申请资源的等待时间等。在同一时刻可能有多个进行在内存申请某资源

2、,即可以输入多个进程的资源申请。(2)3类临界资源的管理,包括申请以及分配等。分别通过信号量实现或者管程实现。 (3)银行家算法,判断是否可以进行资源的分配。基于以上的功能,可以使用户选择操作,模拟临界资源的管理和银行家算法。 目的:实现临界资源的管理及死锁的避免。2 总体设计 进程同步与模拟实现系统分为4个模块:输入输出,进程对资源的随机申请及分配,临界资源管理,银行家算法避免死锁。 输入输出:包括系统运行所需要的进程的名称,执行时间,申请资源的等待时间,进程对资源的需要量等信息以及系统所要显示出的进程的创建信息,资源的分配信息,进行执行信息,进行动态申请资源信息等。 进程对资源的随机申请及

3、分配:根据所输入的进程、资源、以及进程对资源的最大申请情况,随机产生进程当前对资源的申请,输出相应的分配信息与进程执行信息并调用银行家算法对进程的资源申请进行判断。 临界资源的管理:创建相应个数的进程,完成进程的并发执行,使用互斥信号量使各进程互斥的进入各自的临界区对资源进行申请,进程执行完毕后,互斥的对资源进行恢复。 银行家算法避免死锁:对当前进程对资源的申请利用银行家算法进行判断,看系统分配后是否处于安全状态,若处于安全状态,则将资源分配给进程,并输出分配信息,否则对不予以分配。3详细设计在该系统中我主要实现了银行家算法避免死锁的模块,该模块中主要使用了数组的数据结构.3.1银行家算法:设

4、Requesti是进程i的请求向量,如果Requestij=k,表示进程i需要k各j类型的资源。当i发出资源请求后,系统按下述步骤进行检查:(1) 如果Requestij=Needij,便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2) 如果Requestij=Availableij,便转向步骤(3);否则表示尚无足够资源,进程i需要等待。(3) 系统试探着把资源分配给进程i,并修改下面数据结构中的数值: Availablej=Availablej-Requesttrj; Allocationtrj=Allocationtrj+Requesttrj; Needt

5、rj=Needtrj-Requesttrj;(4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态,若安全,才正式将资源分配给进程I,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让i等待。安全性算法步骤如下:(1)设置两个向量:工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m各元素,在执行安全算法开始时,Work:=Available;Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi:=false;当有足够自语啊分配给进程是,再令Finishi:=true.(2)从进程集合中找到一个能满足

6、下述条件的进程:Finishi=false;Needij=Workj;若找到,执行步骤(3),否则,执行步骤(4)。(3)当进程i获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj:=Workj+Allocationij;Finishi:=true;Go to step 2;(4)如果所有进程的Finishi=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。3.2数据结构int AvailableNUM; /可使用资源向量int Max10NUM; /最大需求矩阵int Allocation10NUM; /分配矩阵int Need10NUM; /需

7、求矩阵int WorkNUM; /工作向量int FinishNUM; /状态标志int Request10NUM; /进程申请资源向量3.3核心代码int request(int tr,int z,int r) /进程提出新申请的代码部分 int p=0,q=0,i,j,f=0,b,l,t=0,k=0;/g记录进程序号 if(u=0|a=0) printf(请先输入信息!n); return 0; else for(i=0;iNeedtri) p+; if(RequesttriAvailablei) q+; if(p) printf(n出错!进程申请的资源数多于它自己申报的最大量n); pr

8、int1(); if(z!=-1)/手动输入时不执行 for(i=0;ia;i+) if(Needtri=0) for(t=0;tz;t+) if(Yrt.index=i) Yrt.flag1=1; return 0; else if(q) printf(n进程%c必须等待n,JCtr.name); print1(); if(z!=-1) for(i=0;ia;i+) if(Needtri=0) for(t=0;tz;t+) if(Yrt.index=i) Yrt.flag1=1; return 0; else for(j=0;ja;j+) /以下是预分配 Availablej=Availab

9、lej-Requesttrj; Allocationtrj=Allocationtrj+Requesttrj; Needtrj=Needtrj-Requesttrj; Workj=Availablej; for(i=0;ia;i+) Worki=Availablei;/ Work i只是一个暂时寄存的中间变量,为防止在下面 /安全性检查时修改到Availablei而代替的一维数组 Finishi=0; for(k=0;ku;k+) for(i=0;iu;i+) b=0; /计数器初始化,记录进程中满足条件的资源数 for(j=0;ja;j+) if(Needij= Workj) b=b+1;

10、if(Finishi=0&b=a) for(l=0;la;l+) Workl= Workl+Allocationil; Finishi=1; printf($ %c ,JCi.name);/依次输出进程安全序列之一中每个元素 printf(n); for(i=0;iu;i+) if(Finishi=1) f=f+1;/统计Finishi1的个数 if(f=u) printf(安全性算法检查预分配后系统处于安全状态,以上为安全序列!可以将资源分配给进程%c,JCtr.name); f=0;/将计数器f重新初始化,为下一次提出新的进程申请做准备 print1(); if(z!=-1) for(i=

11、0;ia;i+) Requesttri=0; if(Needtri=0) for(t=0;tz;t+) if(Yrt.index=i) Yrt.flag1=1; Availablei=ZYi.n; for(i=0;ia;i+) Availablei=ZYi.n; else printf(安全性算法检查预分配后系统处于不安全状态,不能进行分配!);/以下代码为当系统被判定为不安全状态时 /返回提出申请前的状态 for(i=0;ia;i+) Availablei=Availablei+Requesttri; Allocationtri=Allocationtri-Requesttri; Needt

12、ri=Needtri+Requesttri; print1(); return 1;3.4运行结果图3.4.1图3.4.2图3.4.3图3.4.4图3.4.54.心得体会 经过这次的操作系统课程设计,让我经历了一次有意义的项目开发过程,让我了解了团队合作的重要性,起初我们只是在不停的各干各的,发现根本不可能完成预期的任务,后来我们坐下来讨论了系统的功能,然后各司其职,发现效果真的不一样,虽然在这两周的时间里我们做了很多,中间也遇到了一些问题,比如说临界资源管理模块和银行家模块怎样结合起来,起初是将两个交叉起来,可是效果不是很好,最后还是决定将它们分开,慢慢地其他问题也同样得到了解决,这就是团队合作的力量,这个系统需要完善的内容还有很多,我们以后还会在一起讨论完善并改进,在此过程中,我也发现了编程是需要绝对的耐心与细心的,不然会造成一些难以修改的错误,导致整个项目进展出现问题。这对我们真的是一次很好的锻炼。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1