




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*实践教学* 兰州理工大学计算机与通信学院2013年秋季学期 操作系统原理 课程设计题 目:苹果桔子问题的实现专业班级:姓 名:学 号:指导教师:成 绩:目 录摘 要2正 文31.问题描述32.设计目的33.设计要求44.详细设计44.1界面设计44.2算法设计54.2.1数据结构54.2.2模块声明64.2.3算法设计64.3流程图85.结果分析12设计总结16参考文献17致 谢18附录:源程序代码19摘 要 本设计实际是生产者消费者的变形,是典型的进程同步问题。本问题利用C语言实现相应的P、V原语。主要过程可用生产消费者来模拟,这里,生产者(父亲和母亲)放入缓冲区(盘子)的产品有两类(苹果和桔子),消费者(女儿和儿子)也有两类,每类消费者只消费其中固定的一类产品。生产者和消费者共享缓冲区,缓冲区中有空时,生产者可放入产品(不许放重),否则等待。缓冲区中有产品时,消费者可取出产品(不许取重),否则等待。关键字:进程同步,P、V操作,信号量正 文1.问题描述桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。 这个问题实际上是两个生产者和两个消费者被连接到仅能放一个产品的缓冲器上。生产者各自生产不同的产品,但就其本质而言,他们是同一类生产者。而消费者则各自去需要的产品消费,但消费的方式不同。解决此类问题利用记录型信号量机制和P、V操作来实现进程同步。进程同步是指一个进程的执行依赖于另一个进程的信号或消息,当一个进程没有得到来自与另一个进程的信号或消息时则等待,直到信号或消息到达才被唤醒。2.设计目的本实验是典型的进程同步问题。某些进程为了完成同一任务分工合作,由于合作的每一个进程都是独立的不可预知的推进,这就需要相互合作的进程在某些合作点上协调各自的工作。当合作进程中的一个到达合作点后,在尚未得到其他合作进程发来的消息或信号前应阻塞自己,直到其合作进程发来协调信号或消息后才能被唤醒。这就是进程同步要解决的问题。本实验借助C语言实现进程同步经典问题苹果-桔子问题,用高级语言编写和调试一个进程同步程序,以加深对进程同步机制的理解。通过用C语言模拟进程同步实现,加深理解有关进程同步机制的概念及P、V操作的应用。通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。3.设计要求(1)分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。(2)设计合适的测试用例,对得到的运行结果要有分析。(3)设计中遇到的问题,设计的心得体会。(4)文档:课程设计打印文档每个学生一份,并装在统一的资料袋中,资料袋前面要贴有学校统一的资料袋封面。 (5)光盘:每个学生文档和程序资料分别建在一个以自己学号和姓名命名的文件夹下,并要求每班负责人汇总每个学生的文件放在以班级姓名命名的文件夹下,刻录成5寸光盘,并复制四份(共五张内容相同的光盘),放在一个专门的资料袋中,不必再装软盘。4.详细设计4.1界面设计printf(现在盘子里有 %d个苹果,%d个桔子n,apple,orange); printf(father进程处于等待状态n); printf(mother进程处于等待状态n); printf(son进程处于等待状态n); printf(daughter进程处于等待状态n);printf(第%d次操作: n,k+1);printf(处于等待的daughter自动被调用n);printf(处于等待的son自动被调用。n);printf(处于等待的father自动被调用n);printf(处于等待的mother自动被调用n);printf(处于等待的father自动被调用n);printf(father调用.n);printf(mother调用.n);printf(son调用.n);printf(daughter调用n);4.2算法设计4.2.1数据结构(1)用一个整型变量plat_size表示盘子,初始值为0,plat_size=apple+orange,当放水果plat_size加1,取水果plat_size减1。当plat_size为1时,表示盘子已满,此时若进行放水果操作,放水果将处于等待状态;当为0时,表示盘子已空,此时若进行取水果操作,取水果操作将处于等待状态。(2)整型变量orang和apple分别表示盘中桔子和苹果的数目,初始值都为0,。(3)用4个整型变量father_lag、mother_lag、son_lag、daughter_lag表示4个进程是否处于等待状态,处于等待状态时,变量值为1。(4)两个水果同时处等待状态时,若有取水果的操作将自动执行等待放水果进程,执行按等待的先后顺序。(5)用一个随机函数产生03的4个整数,分别对应4个进程调用。int apple=0; /苹果个数int orange=0; /桔子个数int father_lag=1; /father进程标志int mother_lag=1; /mother进程标志int son_lag=1; / son进程标志int daughter_lag=1; /女儿进程标志int plat_size=0; / 盘子中水果数量int mf=0; /father与mother进程等待先后顺序4.2.2模块声明(1)主函数 用一个随机函数产生03的4个整数,分别对应4个进程的调用,调用的次数可以自己输入,本程序共产生10次随机调用过程。(2)4个进程函数 爸爸向盘中放一个苹果操作:father()妈妈想盘中放一个桔子造作:mother()儿子从盘中取一个桔子操作:son()女儿从盘中取一个苹果操作:daughter()(3)print()函数 用于输出盘中苹果和桔子的个数及有哪些进程处于等待状态。4.2.3算法设计本程序算法较为简单,仅仅使用了大量的ifelse结构和一个for循环结构,其算法用P、V原语描述如下:Semaphore plat_size=1, orange=0, apple=0;父亲进程do 削一个苹果; p(plat_size); 将苹果放入盘中; v(apple);while(1)母亲进程do 剥一个桔子; p(plat_size); 将桔子放入盘中; v(orange);while(1)儿子进程do p(oange); 从盘中去桔子; v(plat_size); 吃桔子;while(1)女儿进程do p(apple); 从盘中取苹果; v(plat_size);while(1) 4.3流程图 爸爸放苹果进程的操作流程(如图一)father操作:Plat_size=1father进程调用:orange+,plat_size=orang+apple,调用print()daughter处于等待状态调用daughter进程father处于等待状态返回否是是否图 一妈妈放桔子进程的操作流程(如图二):mother操作:Plat_size=1mother进程调用:apple+,plat_size=orang+apple,调用print()son处于等待状态调用son进程mother处于等待状态返回否是是否图 二儿子取桔子的操作流程图(如图三):son操作:orange=0Son进程处于等待状态是son进程调用:orange-;plat_size-;调用print()否mother或father进程处于等待状态按等待先后顺序调用mother()或father()操作返回是否图 三女儿取苹果的操作流程图(如图四):daughter操作:apple=0daughter进程处于等待状态是daughter进程调用:apple-;plat_size-;调用print()否mother或father进程处于等待状态按等待先后顺序调用mother()或father()操作返回是否图 四5.结果分析第一次运行结果为(图五、图六):图 五图 六第二次运行结果(图七、图八): 图 七图 八设计总结在此次面向对象课程设计中,我的题目是:苹果桔子问题的实现。刚拿到这个任务时就感觉到了一种困难和挑战!不知道从何下手开始设计程序,经过三天的思考,才有了一定的眉目。最后在老师和同学的帮助下,终于得出了一套可行的方案。依照策划的设计思想,又过了六天的编写和测试,终于实现了进程的同步功能,虽然整体还有待提高,但总算实现了基本功能,还算满意。通过此次设计实训我对操作系统原理有了更进一步的了解,学会应用进程同步及P、V原语,相信会对以后的课程设计有很大的帮助作用。也体会了到同学之间的相互合作帮助可以克服一切困难,尤其是在理论联系实际的过程中。我的同学在设计过程中为我发现许多错误,也帮助我解决了很多问题,在此我衷心的感谢他们。在以后的学习中我会更加注意各个方面的能力的协调发展,培养自己的动手能力和拓宽自己的知识面,逐渐提高自己的专业技能。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题一个一个的解决了,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。总的来说这次试验比较成功,加深我对进程的理解,同时也提高了自己编程能力。编程是个长久的过程,平时要多去动手实践,去提高自己的分析问题、发现问题、解决问题的能力。参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静,操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社致 谢首先感谢我的老师和同学们在设计过程中给我提出了许多宝贵的意见和建议,并细心的帮助我解决问题,还在最后的调试程序的过程中帮我找出了一些潜在的错误,没有他们,我也许发现不了这些错误,在此非常感谢他们。同时也感谢我的操作系统课的王旭阳老师,感谢她在基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。附录:源程序代码#include#include#includeint apple=0;int orange=0;int father_lag=1;int mother_lag=1;int son_lag=1;int daughter_lag=1;int plat_size=0;int mf=0;void print();void father() /父进程apple+;print();void mother() /母进程orange+;print();void son() /儿子进程orange-;print();void daughter() /女儿进程apple-;print();void print()printf(现在盘子里有 %d个苹果,%d个桔子n,apple,orange);if(father_lag=1) printf(father进程处于等待状态n);if(mother_lag=1) printf(mother进程处于等待状态n);if(son_lag=1)printf(son进程处于等待状态n);if(daughter_lag=1)printf(daughter进程处于等待状态n);if(father_lag=0)&(mother_lag=0)&(son_lag=0)&(daughter=0)printf(n);void main()int k;int i;srand(unsigned)time(NULL); /随机产生一个以当前时间开始的随机种子 for(k=0;k10;k+) printf(n); printf(第%d次操作: n,k+1); i=rand()%4; /随机生成1-5 plat_size=apple+orange; switch(i) case 0: printf(father调用.n); if(plat_size=1) father_lag=1; /father处于等待状态 print(); if(mother_lag=0) mf=1; / father与mother互斥信号量决定先后顺序 else father(); if(daughter_lag=1) daughter_lag=0; /等待取消 printf(处于等待的daughter自动被调用n); daughter(); printf(n); break; case 1: printf(mother调用.n); if(plat_size=1) mother_lag=1; /mother处于等待状态 print(); if(father_lag=0) mf=2; else mother();/ print(); if(son_lag=1) /等待取消 son_lag=0; printf(处于等待的son自动被调用。n); son(); printf(n); break; case 2: printf(son调用.n); if(orange=0) son_lag=1; /son处于等待状态 print(); else son(); if(mother_lag=1&father_lag=1) if(mf=1) father_lag=0; printf(处于等待的father自动被调用n); father(); mf=2;else mother_lag=0; printf(处于等待的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业购车按揭合同
- 2025【各类商业合作范本】-【专业合同协议模板库】国内专利技术转让合同
- 新人教版必修第四章《细胞的物质输入和输出》教学设计
- 公考西藏真题2025
- 2024年二年级品生下册《我喜欢美好的环境》说课稿 鄂教版
- 马鞍山事业单位笔试真题2025
- 化肥厂办公用品分类细则
- 居民健康医疗服务合同协议
- 高中语文 第四单元 第12课 飞向太空的航程说课稿1 新人教版必修1
- 5.1.降低化学反应活化能的酶教学设计-2023-2024学年高一上学期生物人教版必修一
- 2025四川能投合江电力有限公司员工招聘11人笔试备考题库及答案解析
- 生物安全实验室管理体系文件
- 2025年小学部分国防教育知识竞赛答案
- 【政史地 江苏卷】2025年江苏省高考招生统一考试高考真题政治+历史+地理试卷(真题+答案)
- 借车给他人免责协议书
- 电力客户的分级和分类及管理讲解课件
- 小学家长会校长发言课件
- 肾功能检查和电解质检测课件
- 基于AI的智能运维解决方案
- 智能IT运维监控平台解决方案
- 朋友圈里的地理--冬季南北温差大 夏季普遍高温
评论
0/150
提交评论