电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

操作系统编程模拟多进程共享临界资源linuc语言

  • 资源ID:476944200       资源大小:130.10KB        全文页数:21页
  • 资源格式: DOCX        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

操作系统编程模拟多进程共享临界资源linuc语言

一、课程设计目的本课程设计是学生学习完计算机操作系统课程后,进行的一次全面的 综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深 对操作系统基础理论和重要算法的理解,加强学生的动手能力。二、课程设计要求从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求 每位同学从所给题目中任选一个(如自拟题目,需经教师同意),且必须独立完 成课程设计,不能相互抄袭。设计完成后,将所完成的作品交由老师检查。 要求写出一份详细的设计报告。三、课程设计题目编程模拟多进程共享临界资源1、要求产生至少 3 个进程:2、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区.”,同时向管理进程提出申请;在临界区中等待一段 随机时间,并显示:“进程x正在临界区.”;当时间结束,显示:“进程x退出 临界区.”,同时向管理进程提出退出申请。3、一个进程作为原语级管理进程,接受其他进程的临界区进入请求:如果 允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待, 直到允许为止;4、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准 则。5、进程间通信可以采用信号、消息传递、管道或网络通信方式。五、课程设计实现原理通过编写,创建两个进程模拟需要进入临界区,另外编写一个进程作为原 语的管理进程,其负责两个进程的进入!接着设置一个临界区,让其进程在其 中访问遵循空闲让进、忙则等待、有限等待、让权等待的准则。当进程和临界区建立好后,临界区的数据传输,受到了系统硬件的支持,不耗费多余的资源;而进程间通信传递,由软件进行控制和实现,需要消耗一 定的 CPU 资源。从这个意义上讲,临界区更适合频繁和大量的数据传输。进程信息的传递,自身就带有同步的控制。当等到信息的时候,进程进入 睡眠状态,不再消耗 CPU 资源。而共享队列如果不借助其他机制进行同步,接 收数据的一方必须进行不断的查询,白白浪费了大量的PU资源。六、课程设计思想、方法和技术(含数据结构、算法、流程图)6.1 、设计思想和设计函数功能:6.1.1 、总体构思:软件主要是由两部分组成:用户进程和管理进程;管理进程:控制设置相应的临界区,实现对临界区的访问应遵循空闲让进、 忙则等待、有限等待、让权等待的准则。 用户进程:循环的随机申请进入临界区,进入临界区执行一段时间,再申请结 束。6.1.2 、具体功能:用户进程随机的进入 cpu 执行,先向在信息队列中写入自己的信息(已经 约定好的信息类型)然后给管理进程发送信号(告知管理进程申请进入临界区 并已在消息队列中写入自己的信息)。然后循环的读取管理进程给用户进程发回的回馈信息(针对当前临界区的 状态)允许进入、临界区忙等待。如果允许进入则在临界区执行一段时间 以后,申请退出,给管理进程发退出的信号,管理进程再给用户进程发送回馈 信息。取会指导回馈信息以后则这次过程结束,进入新的过程。管理进程接收申请进入的信号,在消息队列中取下申请进入队列的用户进 程的信息,针对当前临界区状态,写一个回馈信息放入消息队列。6.2、包含的数据结构6.1.1 、临界区:Struct crformInt sem; /临界区的信号量值 semInt head; /临界区等待队列的头,指向的是最先到的进程Int tail; /临界区等待队列的尾,指向的是进入等待队列的进程Int duilie20; /存放的是等待的进程的信息,以便唤醒 cr;Cr.sem=1; /初始临界区信号量必须为一,因为只允许一个进程进入临界区Cr.head=0; /初始时指向等待队列的第一个单元Cr.tail=0;6.1.2 、消息队列:Struct msgformLong msgtype; /消息的类型,在取消息队列时用于区分哪些是该取的信息Int mtext; /信息的内容,在这里是申请退出进程的信息;6.3、主要用到的技术6.3.1 进程创建和控制:系统调用:fork ()包含头文件<unis td.h>关键的语句:int x,y;wh il e(x二fork()=-l);/创建子进程 1if(x=0)/子进程 1 执行程序段elsewhile(y=fork()=-1);if(y=0)/子进程 2 执行程序段else/父进程执行程序段6.3.2 软中断:系统调用kill ()和signal ()包含头文件:<sys/types.h>和<signal.h>Kill(pid,signalname)发送信号给pid号为pid的进程,中断类型为signalname6.3.3 消息队列:系统调用 msgget()、msgsnd()、msgrev()、msgctl()包含头文件: <sys/msg.h>6.4、设计流程图丿一勺 脅rl 违界息 里115肖 -:=逬 _ 件申二 毫息 三一- 'C省在图1 用户进程流程图图2 管理进程图3 申请进入临界区处理子进程子函数2 (申请退出临界区)无有忖Bl唤醒等待队列最早申请的进程发送唤醒消息)修改临界区状态信号量加一)发送允许退出消息发送允许退出消息返回开始图4 申请退出处理子程序七、运行环境Linux 操作系统C+编译器八、开发工具和编程语言开发工具:C+编译器编程语言: C 语言九、详细设计子函数一:void into()申请进入临界区msgqid=msgget(MSGKEY,0777|IPC_CREAT);sem-;一旦申请进入临界区,减一msgrcv(msgqid,&msg,4,1,0); /接收消息一申请进入进程发送的类型为1msg.msgtype=msg.mtext; /并把接收到的消息内容作为回馈消息的消息类型 if(sem>=0) /判断此时进程的状态,sem=0可以获得临界区if(msg.mtext=3)printf(" p1 IN areann");elseprintf(" p2 IN areann");msg.mtext=1; /现在允许进入,发送内容为1的消息给申请进程 msgsnd(msgqid,&msg,sizeof(int),0);elseif(msg.mtext=3)printf(" p1 IN waitingnn");elseprintf(" p2 IN waitingnn");cr.duilietail=msg.mtext;tail+;msg.mtext=-1;msgsnd(msgqid,&msg,sizeof(int),0);/若临界区忙,发送进入等待队列的消息给申请进入的进程子函数二:void out()msgqid=msgget(MSGKEY,0777|IPC_CREAT);msgrcv(msgqid,&msg,4,2,0); /从消息队列上取下申请退出的消息sem+;if(tail!=head) /查看等待队列中是否有等待进入临界区的队列/有则唤醒等待队列中等待的进程,并允许申请退出的进程退出 if(msg.mtext=3)printf(" p1 OUT areann");elseprintf(" p2 OUT areann");msg.msgtype=msg.mtext;msg.mtext=0;msgsnd(msgqid,&msg,sizeof(int),0);pid2=cr.duilietail;tail+;msg.mtext=1;msg.msgtype=pid2;if(pid2=3)printf(" p1 IN areann");elseprintf(" p2 IN areann");msgsnd(msgqid,&msg,sizeof(int),0);msg.mtext=1;else/如果等待队列上没有等待进入临界区的进程,直接向申请退出的进程发送消息,允许退出if(msg.mtext=3)printf(" p1 OUT areann");elseprintf(" p2 OUT areann");msg.msgtype=msg.mtext;msg.mtext=0; msgsnd(msgqid,&msg,sizeof(int),0);int main()int sem=1;int head=0;int tail=0;int msgqid1;msgqid1=msgget(MSGKEY,0777);msgctl(msgqid1,IPC_RMID,NULL);int m1,m2;int q,t;int pid;q=MAXTIMES;t=MAXTIMES;int count1,count2;struct msgform msg;int msgqid;pid=getpid();signal(10,into); /建立连接,收到软中断后转向 INTO 子处理程序signal(12,out); /建立连接,收到软中断后转向OUT子处理程序msgqid=msgget(MSGKEY,0777|IPC_CREAT); /获取消息队列的队列号 while(p1=fork()=-1);if(p1=0)count1=10;while(count1>0)q=MAXTIMES; /设置有限等待次数msg.mtext=3;msg.msgtype=1; /申请进入临界区的消息类型都为1printf(" p1 Qing IN areann");msgsnd(msgqid,&msg,sizeof(int),0);/发送申请进入的消息kill(pid,10); /发送申请进入的信号while(q>0)msgrcv(msgqid,&msg,sizeof(int),3,0); /接收管理进程发送的回馈信息 m1=msg.mtext;if(m1=1)/判断回馈信息,有三种情况:允许进入,忙进入等待队列、允许退出msg.msgtype=2;msg.mtext=3;printf(" p1 Qing OUT areann");msgsnd(msgqid,&msg,sizeof(int),0);kill(pid,12);continue;elseif(m1=-1)q-;elseif(m1=0)break;

注意事项

本文(操作系统编程模拟多进程共享临界资源linuc语言)为本站会员(新**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.