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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编辑模拟多进程共享临界资源Word文档下载推荐.docx

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

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

3、绘图、实验数据、标准的运用等符合有关标准和规定6纪 律 性遵守课程设计纪律,听从指导教师安排,设计过程态度认真7答 辩准备充分,思路清晰、论点正确、对设计方案理解深入,问题回答有理有据,简明正确总 分综合意见 指导教师 2015 年 7 月 12 日1 需求分析1、要求产生至少3个进程:2、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x正在临界区”;“进程x退出临界区”,同时向管理进程提出退出申请。3、一个进程作为原语级管理进程,接受其他进程的临界区进入请求:4、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。5、进程间通信可以采用信号、消息传递、管

4、道或网络通信方式。2 概要设计2.1 其中包含两个重要的数据结构:2.11 临界区:Struct crform Int sem; /临界区的信号量值sem Int head; /临界区等待队列的头,指向的是最先到的进程 Int tail; /临界区等待队列的尾,指向的是进入等待队列的进程 Int duilie20; /存放的是等待的进程的信息,以便唤醒待cr;Cr.sem=1; /初始临界区信号量必须为一,因为只允许一个进程进入临界区Cr.head=0; /初始时指向等待队列的第一个单元Cr.tail=0;2.12 消息队列:Struct msgform Long msgtype; /消息的类

5、型,在取消息队列时用于区分哪些是该取的信息 Int mtext; /信息的内容,在这里是申请|退出进程的信息;2.2 进程创建和控制:fork()系统调用: 关键的语句:int x,y;while(x=fork()=-1);/创建子进程1if(x=0) /子进程1执行程序段else while(y=fork()=-1); if(y=0) /子进程2执行程序段 else /父进程执行程序段2.3设计流程图:图1 用户进程流程图图 管理进程图3 申请进入临界区处理子进程图4 申请退出处理子程序3 运行环境3.1 linux操作系统3.2 Gcc编译器4 开发工具和编程语言4.1 开发工具:Gcc编

6、译器4.2 编程语言:C语言5 详细设计子函数一:void into() /申请进入临界区 struct msgform msg; key_t hh=ftok(OSP.c,1); int msgqid=msgget(hh,0666|IPC_CREAT); cr.sem-; /一旦申请进入临界区就得减1 msgrcv(msgqid,&msg,4,1,0); /接收消息-申请进入进程发送的类型为1 msg.msgtype=(long)msg.mtext; /并把接收到的消息内容作为回馈消息的消息类型 if(cr.sem=0) /判断此时进程的状态,sem=0 可以获得临界区 if(msg.mtex

7、t=3) printf(进程1: 进入临界区n);进程2: msg.mtext=1; /现在允许进入,发送内容为1的消息给申请进程 msgsnd(msgqid,&msg,sizeof(int),0); Else /到等待队列 进入等待队列n cr.duiliecr.tail=msg.mtext; cr.tail+; if(cr.tail=20) cr.tail=0; msg.mtext=-1; msgsnd(msgqid,& /若临界区忙,发送进入等待队列的消息给申请进入的进程子函数二:void out() /申请退出临界区 key_t hh=ftok( msgrcv(msgqid,&msg,

8、4,2,0); /从消息队列上取下申请退出的消息 cr.sem+; if(cr.tail!=cr.head) /查看等待队列中是否有等待进入临界区的队列 /有则唤醒等待队列中等待的进程,并允许申请退出的进程退出 printf( 退出临界区n msg.msgtype=msg.mtext; msg.mtext=0; int pid2=cr.duiliecr.head; cr.head+; if(cr.head=20) cr.head=0; msg.mtext=1; msg.msgtype=pid2; if(pid2=3) else /如果等待队列上没有等待进入临界区的进程,直接向申请退出的进程发送

9、消息,允许退出 msg.msgtype=msg.mtext; 6 调试分析在作这个课题过程中遇到了主要的这样几个问题:消息队列不能正常使用错误原因1: 消息队列没有建立成功解决办法: 在用消息队列之初先删除这个队列,然后再建立使用错误原因2: 取到的结果总出现错误,没有统一的消息类型 定制统一的消息类型规则,依照规则使用消息类型错误原因3: 进程需要的消息已经被取走,使得进程停留在取消息这一步不向下执行 是程序逻辑上的问题,仔细查看程序流程并操控好使得可以处于正常逻辑申请到临界区退出临界区显示滞后(如有时会显示“进程一 获得临界区”然后“进程二 退出临界区”)错误原因: 在管理进程中已经将临界

10、区状态修改为空闲,却没有显示哪个进程退出临界区,这个退出的信息必须等到子进程上cpu时才会显示出来,而这中间有别的进程上cpu执行申请的操作,就会获得临界区,就会显示“进程获得临界区”,在此后退出临界区的进程才上cpu显示“退出临界区”。 将显示放到管理进程中,一旦有进程获得临界区或者退出临界区就做出显示。7 测试结果测试数据:1,0; 1,2测试截图:图5 开始界面图6 主程序运行界面图7 输入1,暂停运行图8 输入0,程序继续运行图9 输入2,程序退出运行1 任满杰等操作系统原理实用教程 电子工业出版社 20062 汤子瀛 计算机操作系统(修订版)西安电子科技大学出版社 20013 张尧学

11、 史美林计算机操作系统教程实验指导 清华大学出版社 2000 4 罗宇等 操作系统课程设计机械工业出版社 20055 赛奎春、张雨 编著,Visual C+ 工程应用与项目实践,海洋出版社,2005.1心得体会这次操作系统课设给了我很大的启发和提高。一直以来自己我的编程基础不太好,常出现逻辑混乱,不注重细节问题,在这门课中我有了更深的理解;科学是不允许错误的,需要认真严谨的态度。也正是因为如此我才有了进步。理论联系实际,总会有更深刻的收获,通过这样的实际思考,动手修改操作,对理论有了深层次的理解,更加证实了理论,打消了心中不切实际的一些想法。慢慢的会形成自己的一个实际经验,为日后的工作学习打下

12、心里和知识上的基础。小学期的课程真是紧张而又充实,确实是收获很多,心中也增加了几分自信,对未来的工作有更大的信息。程序源代码(工程)第一部分:OSP.c#include stdlib.hunistd.hsignal.hsys/types.hsys/msg.hsys/ipc.h#include ran.h#define MSGKEY 898989 struct crform int sem; int head; int tail; int duilie20; cr; struct msgform long msgtype; int mtext; ;void into();void out();i

13、nt main(void) puts(*提示信息*n在程序运行过程中:n-输入 0 继续运行程序n-输入 1 暂停运行程序n-输入 2 退出程序n*n int ppid=getpid(); cr.sem = 1; cr.head=0; cr.tail=0; struct ShMe int num; int flags; int p1; int p2; int shmid=shmget(IPC_PRIVATE,1024,0666|IPC_CREAT); if(shmid=-1)共享内存区创建错误-n exit(0); pid_t id = fork(); if (id0) 新进程创建错误! 2秒

14、后自动退出。 sleep(2); exit(0); else if (id=0) pid_t id2 = fork(); if(id2flags; (*addr).p1=getpid(); while(flags=1|flags=0) if(flags=0) int q=10; msg.mtext=3; msg.msgtype=1;进程1: 申请进入临界区n kill(ppid,10); while(q0)msg,sizeof(int),3,0); int m=msg.mtext; if(m=1) 进入共享内存区n int ny=addr-num; int dg=rannum(); int uh=0; for(uh=0;uhp1);p2); if(shmdt(addr)=-1)共享内存与控制进程断开错误.n if(shmctl(shmid,IPC_RMID,NULL)=-1)shmctl delete errorn msgctl(msgqid,IPC_RMID, 0);*程序退出n return EXIT_SUCCESS;void into()=0) void out() cr.sem+;=cr.head) msgsnd(msgqi

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

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