编辑模拟多进程共享临界资源_第1页
编辑模拟多进程共享临界资源_第2页
编辑模拟多进程共享临界资源_第3页
编辑模拟多进程共享临界资源_第4页
编辑模拟多进程共享临界资源_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、过由H火将课程设计课程设计名称:操作系统原理专业班级:软件1301学生姓名 :理金龙学 号:0126指导教师:刘於勋课程设计时间:2015年7月6-11日软件工程专业课程设计任务书学生姓名理金龙专业班级软件1301学号0126题目编程模拟多进程共享临界资源课题性质其它课题来源自拟课题指导教师刘於勋同组姓名主要内容要求产生3个进程:1、两个进程模拟需要进入临界区的用户进程,当需要进入 临界区时,显示:“进程x请求进入临界区”,同时 向管理进程提出申请;申请返回,表示进入了临界区。在临界区中等待一段随机时间,并显示:“进程 x正 在临界区”;当时间结束,显示:“进程 x退出临 界区”,同时向管理进

2、程提出退出申请;当申请返 回,显示:“进程x已退出临界区。”2、一个进程作为原语的管理进程,接受其他进程的临界区 进入请求:如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止;3、对临界区的访问应遵循空闲让进、 忙则等待、有限等待、 让权等待的准则。4、进程间通信可以采用信号、消息传递、管道或网络通信 方式。任务要求理解多进程共享临界资源的原理,并编程实现任满杰等操作系统原理实用教程电子工业出版社2006汤子瀛 计算机操作系统(修订版)西安电子科技大学出 参考文版社2001献 张尧学史美林计算机操作系统教程实验指导清华大学出版社2000罗宇等操作系统课程设计机

3、械工业出版社 2005指导教师签字:审查意见教研室主任签字:2015年7月6 日说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页信息科学与工程学院课程设计成绩评价表课程名称:操作系统原理设计题目:编程模拟多进程共享临界资源专业:软件工程班级:软件1301 姓名:理金龙学号:0126序号评审项目分数满分标准说明1内 容思路清晰,语言表达准确,概念清楚,论点正 确;设计方法科学,分析归纳合理;结论严谨, 设计有应用价值。任务饱满,工作量适中2创 新内容新颖,设计能反映新技术,对前人工作有 改进或突破,或后独特见解3完整性、实用性整体构思后合理,理论依据充分,设计完

4、整, 实用性强4数据准确、可靠数据准确,算法设计合理5规范性设计格式、绘图、实验数据、标准的运用等符合有关标准和规定6纪律性遵守课程设计纪律,听从指导教师安排,设计 过程态度认真7答辩准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确总分综合意见指导教师2015年 7月12日1 需求分析1 、要求产生至少3 个进程:2、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区”,同时向管理进程提出申请; 在临界区中等待一段随机时间,并显示:“进程x正在临界区” ;当 时间结束,显示:“进程x退出临界区” ,同时向管理进程提出退出 申请。3

5、、一个进程作为原语级管理进程,接受其他进程的临界区进入请求: 如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止;4、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。5、进程间通信可以采用信号、消息传递、管道或网络通信方式。2 概要设计其中包含两个重要的数据结构:临界区:IntStruct crformsem;用户进些天如在消息队列中写入自己的进桎信息检出申请进入府星区r*i 号请衿 节中已 篇息信砰忏清和讨e且, $列 程一号片运行一段叶旧申请汜出速界N在尼恩队列中耳人自己的进程信息|发送遢出信运输出用尸进程退出输出日请送出版界区管理进程子

6、函数1 (申请进入临界区)子函数2(申请退出临界区)发送允许退出消息返回*提示信息*在程序运行过程中:输入0继续运行程序输入1暂停运行程序输入2退出程序区 区区 区区区 区区 区区 界 界列界 存界界 界列界 存界 临区区临队临区区内临区临区区临队临区区内临区 入界界入待出界界享出界入界界人待出界界享出界 进临临进等退临临共退临进临临进等退临临共退监 请入人请入请出入入请出请入入请入请出入入清国 申进进申进申退进进申退申进进申进申退进进申退 2221122111122211221111 程程程程程程程程程程程程程程程程程程程程程理 进迸进进进进迸进进进进进进进进进进进迸进迸进进程2:退巴临界区

7、 进程】:进入崎界区 进程力 进入共享内存区 进程力申请退出临界区 进程1;退出临界区 进程人 申请进入临界区 进程2:进入临界区 进程2:进入临界区 进程N:申谙退出临界区 进程2:退出临界区区 区 区区区区 区区 区 界 界 界界存列界 界界 界 临区区临区 临临区内队临区区区临区临区区临区 AI界界制界 人人界享特出界界界±|界AI界界出界 进够啮退啮 送迸临其等退端崎曲退G进临施退盾 谓人人谓比 清清入人人谓出入人请出请入入清a 申进迸申退 申申迸进进申退进进申退申进进申退 + - * ¥ * ¥ ffi .* H * * * s *- X -* * 中*

8、 B * *品 IKH . 2 2 2 2 2 121121122 2272222 S星星泾生呈屋屋呈屋岸屋1母E星 rr r,J卜 rir Fr fJ卜 匚r -1F .1 rtr rr Err n ;J:Jz s I m j IJ J HJn - J J - - J - lJ3Jn IF4r t - 进送进进进1臼进is迸进进进进进进进讲进进w迸迸出 退 区 区区区区 的 界 界界存界 r 临区区境区雁区内临区 > AI界界却界AI界享卸界 3 恰情退临进临共退情*> 人人请出谙入入谙出 “ 申进进申退申进进申退 门 * : :;:,: 片 2222 2 11- Itl * 程

9、程程程程科程程程程 r 进迸进进进迨进进迸进1工门工1=getpid();while(flags=1|flags=0)if(flags=0)intint q=10;=3;=1;printf("进程 1: 申请进入临界区n");msgsnd(msgqid,&msg,sizeof(int),0);kill(ppid,10);while(q>0)msgrcv(msgqid,&msg,sizeof(int),3,0);int m=;if(m=1)n");printf(进 程 1: 进 入 共 享 内 存 区ny=addr->num;intdg=

10、rannum();int uh=0;for(uh=0;uh<dg;uh+)ny+;ny=ny%(99999-10000+1)+10000;(*addr).num=ny;=2;=3;printf(进 程 1: 申 请 退 出 临 界 区n");msgsnd(msgqid,&msg,sizeof(int),0);kill(ppid,12);continue;elseif(m=-1)q-;elseif(m=0)int bb=rannum()%5;sleep(bb);flags=addr->flags;break;elseint bb=rannum()%5;sleep(b

11、b);flags=addr->flags;else struct msgform msg;key_t hh=ftok("",1);int msgqid=msgget(hh,0666|IPC_CREAT);struct ShMe * addr;addr=(struct ShMe*)shmat(shmid,0,0);if(addr=(struct ShMe*)-1)printf("映射内存错误1n");int flags=0;flags=addr->flags;(*addr).p2=getpid();while(flags=1|flags=0)i

12、f(flags=0)int q=10;=4;=1;printf("进程 2: 申请进入临界区n");msgsnd(msgqid,&msg,sizeof(int),0);kill(ppid,10);while(q>0)msgrcv(msgqid,&msg,sizeof(int),4,0);int m=;if(m=1)printf("进程 2: 进入临界区n");int ny=addr->num;int dg=rannum();int uh=0;for(uh=0;uh<dg;uh+)ny+;ny=ny%(99999-1000

13、0+1)+10000;(*addr).num=ny;=2;=4;请退出临界区printf("进 程 2:n");msgsnd(msgqid,&msg,sizeof(int),0);kill(ppid,12);continue;elseif(m=-1) q-;elseif(m=0)int bb=rannum()%5;sleep(bb);flags=addr->flags;break;elseint bb=rannum()%5;sleep(bb);flags=addr->flags;else key_t hh=ftok("",1);int

14、 msgqid=msgget(hh,0666|IPC_CREAT);struct ShMe * addr;addr=(struct ShMe*)shmat(shmid,0,0);if(addr=(struct ShMe*)-1)printf(" 映射内存错误3n");(*addr).num=999;(*addr).flags=0;int flags=0;signal(10,into);signal(12,out);scanf("%d",&flags);while(flags=0 | flags=1)(*addr).flags=flags;scan

15、f("%d",&flags);if(flags=2)(*addr).flags=flags;wait(addr->p1);wait(addr->p2);n");if(shmdt(addr)=-1)printf(" 共享内存与控制进程断开错误if(shmctl(shmid,IPC_RMID,NULL)=-1)printf("shmctl delete errorn");msgctl(msgqid,IPC_RMID, 0);”* 程序退出n");return EXIT_SUCCESS;void into()s

16、truct msgform msg;key_t hh=ftok("",1);int msgqid=msgget(hh,0666|IPC_CREAT);msgrcv(msgqid,&msg,4,1,0);=(long);if>=0)if=3)printf("进程1: 进入临界区n");elseprintf("进程2: 进入临界区n");=1;msgsnd(msgqid,&msg,sizeof(int),0);elseif=3)printf("进程1: 进入等待队列n");elseprintf(&

17、quot;进程2: 进入等待队列n");=;+;if=20)=0;=-1;msgsnd(msgqid,&msg,sizeof(int),0);void out()struct msgform msg;key_t hh=ftok("",1);int msgqid=msgget(hh,0666|IPC_CREAT);msgrcv(msgqid,&msg,4,2,0);+;if!=if=3)printf("进程1: 退出临界区n");elseprintf("进程2: 退出临界区n");=0;msgsnd(msgqid,&msg,sizeof(int),0);int pid2=;+;if=20)=0;=1;=pid2;if(pid2=3)printf("进程1: 进入临界区n");elseprintf("进程2: 进入临界区n");msgsnd(msgqid,&msg,sizeof(int),0);else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论