编辑模拟多进程共享临界资源.docx
- 文档编号:5075490
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:16
- 大小:336.87KB
编辑模拟多进程共享临界资源.docx
《编辑模拟多进程共享临界资源.docx》由会员分享,可在线阅读,更多相关《编辑模拟多进程共享临界资源.docx(16页珍藏版)》请在冰豆网上搜索。
编辑模拟多进程共享临界资源
课程设计
课程设计名称:
操作系统原理
专业班级:
软件1301
学生姓名:
理金龙
学号:
0126
指导教师:
刘於勋
课程设计时间:
2015年7月6-11日
软件工程专业课程设计任务书
学生姓名
理金龙
专业班级
软件1301
学号
0126
题目
编程模拟多进程共享临界资源
课题性质
其它
课题来源
自拟课题
指导教师
刘於勋
同组姓名
主要内容
要求产生3个进程:
1、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:
“进程x请求进入临界区…”,同时向管理进程提出申请;申请返回,表示进入了临界区。
在临界区中等待一段随机时间,并显示:
“进程x正在临界区…”;当时间结束,显示:
“进程x退出临界区…”,同时向管理进程提出退出申请;当申请返回,显示:
“进程x已退出临界区。
”
2、一个进程作为原语的管理进程,接受其他进程的临界区进入请求:
如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止;
3、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。
4、进程间通信可以采用信号、消息传递、管道或网络通信方式。
任务要求
理解多进程共享临界资源的原理,并编程实现
参考文献
任满杰等《操作系统原理实用教程》电子工业出版社2006
汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001
张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000
罗宇等《操作系统课程设计》机械工业出版社2005
审查意见
指导教师签字:
教研室主任签字:
2015年7月6日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
信息科学与工程学院课程设计成绩评价表
课程名称:
操作系统原理
设计题目:
编程模拟多进程共享临界资源
专业:
软件工程班级:
软件1301姓名:
理金龙学号:
0126
序号
评审项目
分数
满分标准说明
1
内容
思路清晰,语言表达准确,概念清楚,论点正确;设计方法科学,分析归纳合理;结论严谨,设计有应用价值。
任务饱满,工作量适中
2
创新
内容新颖,设计能反映新技术,对前人工作有改进或突破,或有独特见解
3
完整性、实用性
整体构思后合理,理论依据充分,设计完整,实用性强
4
数据准确、可靠
数据准确,算法设计合理
5
规范性
设计格式、绘图、实验数据、标准的运用等符合有关标准和规定
6
纪律性
遵守课程设计纪律,听从指导教师安排,设计过程态度认真
7
答辩
准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确
总分
综
合
意
见
指导教师2015年7月12日
1需求分析
1、要求产生至少3个进程:
2、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:
“进程x请求进入临界区…”,同时向管理进程提出申请;在临界区中等待一段随机时间,并显示:
“进程x正在临界区…”;当时间结束,显示:
“进程x退出临界区…”,同时向管理进程提出退出申请。
3、一个进程作为原语级管理进程,接受其他进程的临界区进入请求:
如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止;
4、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。
5、进程间通信可以采用信号、消息传递、管道或网络通信方式。
2概要设计
其中包含两个重要的数据结构:
临界区:
Structcrform
{
Intsem;
1=getpid();
while(flags==1||flags==0){
if(flags==0){
intq=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);
intm=;
if(m==1)
{
printf("进程1:
进入共享内存区\n");
intny=addr->num;
intdg=rannum();
intuh=0;
for(uh=0;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; } else { if(m==-1) { q--; } else { if(m==0) { intbb=rannum()%5; sleep(bb); flags=addr->flags; break; } } } } }else{ intbb=rannum()%5; sleep(bb); flags=addr->flags; } } }else{ structmsgformmsg; key_thh=ftok("",1); intmsgqid=msgget(hh,0666|IPC_CREAT); structShMe*addr; addr=(structShMe*)shmat(shmid,0,0); if(addr==(structShMe*)-1) printf("映射内存错误1------\n"); intflags=0; flags=addr->flags; (*addr).p2=getpid(); while(flags==1||flags==0){ if(flags==0){ intq=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); intm=; if(m==1) { printf("进程2: 进入临界区\n"); intny=addr->num; intdg=rannum(); intuh=0; for(uh=0;uh ny++; } ny=ny%(99999-10000+1)+10000; (*addr).num=ny; =2; =4; printf("进程2: 申请退出临界区\n"); msgsnd(msgqid,&msg,sizeof(int),0); kill(ppid,12); continue; } else { if(m==-1) { q--; } else { if(m==0) { intbb=rannum()%5; sleep(bb); flags=addr->flags; break; } } } } }else{ intbb=rannum()%5; sleep(bb); flags=addr->flags; } } } }else{ key_thh=ftok("",1); intmsgqid=msgget(hh,0666|IPC_CREAT); structShMe*addr; addr=(structShMe*)shmat(shmid,0,0); if(addr==(structShMe*)-1) printf("映射内存错误3------\n"); (*addr).num=999; (*addr).flags=0; intflags=0; signal(10,into); signal(12,out); scanf("%d",&flags); while(flags==0||flags==1){ (*addr).flags=flags; scanf("%d",&flags); } if(flags==2){ (*addr).flags=flags; } wait(addr->p1); wait(addr->p2); if(shmdt(addr)==-1) printf("共享内存与控制进程断开错误........\n"); if(shmctl(shmid,IPC_RMID,NULL)==-1) printf("shmctldeleteerror\n"); msgctl(msgqid,IPC_RMID,0); printf("************》》》程序退出\n"); } returnEXIT_SUCCESS; } voidinto() { structmsgformmsg; key_thh=ftok("",1); intmsgqid=msgget(hh,0666|IPC_CREAT); ; msgrcv(msgqid,&msg,4,1,0); =(long); if>=0) { if==3) printf("进程1: 进入临界区\n"); else printf("进程2: 进入临界区\n"); =1; msgsnd(msgqid,&msg,sizeof(int),0); } else { if==3) printf("进程1: 进入等待队列\n"); else printf("进程2: 进入等待队列\n"); []=; ++; if==20) =0; =-1; msgsnd(msgqid,&msg,sizeof(int),0); } } voidout() { structmsgformmsg; key_thh=ftok("",1); intmsgqid=msgget(hh,0666|IPC_CREAT); msgrcv(msgqid,&msg,4,2,0); ++; if! = { if==3) printf("进程1: 退出临界区\n"); else printf("进程2: 退出临界区\n"); =; =0; msgsnd(msgqid,&msg,sizeof(int),0); intpid2=[]; ++; if==20) =0; =1; =pid2; if(pid2==3) printf("进程1: 进入临界区\n"); else printf("进程2: 进入临界区\n"); msgsnd(msgqid,&msg,sizeof(int),0); } else { if==3) printf("进程1: 退出临界区\n"); else printf("进程2: 退出临界区\n"); =; =0; msgsnd(msgqid,&msg,sizeof(int),0); } } 第二部分: #include"" #include"" intrannum(){ srand((unsigned)time(NULL)); returnrand()%(9-+1)+; } 第三部分: #ifndefRAN_H_ #defineRAN_H_ intrannum(); #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编辑 模拟 进程 共享 临界 资源