苹果橘子问题

上传人:枫** 文档编号:557835761 上传时间:2023-10-14 格式:DOC 页数:24 大小:502.44KB
返回 下载 相关 举报
苹果橘子问题_第1页
第1页 / 共24页
苹果橘子问题_第2页
第2页 / 共24页
苹果橘子问题_第3页
第3页 / 共24页
苹果橘子问题_第4页
第4页 / 共24页
苹果橘子问题_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《苹果橘子问题》由会员分享,可在线阅读,更多相关《苹果橘子问题(24页珍藏版)》请在金锄头文库上搜索。

1、*实践教学* 兰州理工大学计算机与通信学院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原语。主要过程可用生产消费者来模拟,这里,生产者(父亲和母亲)放入缓冲区(盘子)的产品有两类(苹果

2、和桔子),消费者(女儿和儿子)也有两类,每类消费者只消费其中固定的一类产品。生产者和消费者共享缓冲区,缓冲区中有空时,生产者可放入产品(不许放重),否则等待。缓冲区中有产品时,消费者可取出产品(不许取重),否则等待。关键字:进程同步,P、V操作,信号量正 文1.问题描述桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。 这个问题实际上是两个生产者和两个消费者被连接到仅能放一个产品的缓冲器上。生产者各自生产不同的产品,但就其本质而言,他们是同一类生产者。而消费者则各自去需要的产品消费,但消费的

3、方式不同。解决此类问题利用记录型信号量机制和P、V操作来实现进程同步。进程同步是指一个进程的执行依赖于另一个进程的信号或消息,当一个进程没有得到来自与另一个进程的信号或消息时则等待,直到信号或消息到达才被唤醒。2.设计目的本实验是典型的进程同步问题。某些进程为了完成同一任务分工合作,由于合作的每一个进程都是独立的不可预知的推进,这就需要相互合作的进程在某些合作点上协调各自的工作。当合作进程中的一个到达合作点后,在尚未得到其他合作进程发来的消息或信号前应阻塞自己,直到其合作进程发来协调信号或消息后才能被唤醒。这就是进程同步要解决的问题。本实验借助C语言实现进程同步经典问题苹果-桔子问题,用高级语

4、言编写和调试一个进程同步程序,以加深对进程同步机制的理解。通过用C语言模拟进程同步实现,加深理解有关进程同步机制的概念及P、V操作的应用。通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。3.设计要求(1)分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。(2)设计合适的测试用例,对得到的运行结果要有分析。(3)设计中遇到的问题,设计的心得体会。(4)文档:课程设计打印文档每个学生一份,并装在统一的资料袋中,资料袋前面要贴有学校统一的资料袋封面。 (5)光盘:每个学生文档和程序资料分别建在一个以自己学号和姓名命名的文件夹下,并要求每班负责

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);pri

6、ntf(处于等待的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时,表示盘

7、子已空,此时若进行取水果操作,取水果操作将处于等待状态。(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 m

8、other_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()(

9、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)

10、女儿进程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处于等

11、待状态返回否是是否图 二儿子取桔子的操作流程图(如图三):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.结

12、果分析第一次运行结果为(图五、图六):图 五图 六第二次运行结果(图七、图八): 图 七图 八设计总结在此次面向对象课程设计中,我的题目是:苹果桔子问题的实现。刚拿到这个任务时就感觉到了一种困难和挑战!不知道从何下手开始设计程序,经过三天的思考,才有了一定的眉目。最后在老师和同学的帮助下,终于得出了一套可行的方案。依照策划的设计思想,又过了六天的编写和测试,终于实现了进程的同步功能,虽然整体还有待提高,但总算实现了基本功能,还算满意。通过此次设计实训我对操作系统原理有了更进一步的了解,学会应用进程同步及P、V原语,相信会对以后的课程设计有很大的帮助作用。也体会了到同学之间的相互合作帮助可以克服

13、一切困难,尤其是在理论联系实际的过程中。我的同学在设计过程中为我发现许多错误,也帮助我解决了很多问题,在此我衷心的感谢他们。在以后的学习中我会更加注意各个方面的能力的协调发展,培养自己的动手能力和拓宽自己的知识面,逐渐提高自己的专业技能。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题一个一个的解决了,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。总的来说这次试验比较成功,加深我对进程的理解,同时也提高了自己编程能力。编程是个长久的过程,平时要多去动手实践,去提高自己的分析问题、发现问题、解决问题的能力。参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静,操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号