资源预览内容
第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
第9页 / 共32页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统课程设计任务书题目: 苹果-桔子问题的实现 学生姓名: 邢海啸 班 级: 物联网工程1班 学 号: 14480136 指导教师: 张清/贾娟娟 一、 设计目的学生通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。二、 设计内容1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。2、编写程序实现苹果-桔子问题。桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。三、 设计要求及工作量1、 分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。2、 设计合适的测试用例,对得到的运行结果要有分析。3、 设计中遇到的问题,设计的心得体会。4、文档:课程设计打印文档每个学生一份,并装在统一的资料袋中。 5、光盘:每个学生的文档和程序资料建在一个以自己学号和姓名命名的文件夹下,刻录一张光盘,装入资料袋中。四、 要提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 设计思想;3)各模块的伪码算法;4)函数的调用关系图;5)测试结果;6)源程序(带注释);7)设计总结;8) 参考文献、致谢等。2. 刻制光盘一张。五、设计进度计划及时间安排 周次日期内容地点第1周星期一二教师讲解设计要求查找参考资料教室图书馆星期三五算法设计,编程实现教室第2周星期一三调试测试,撰写文档教室星期四五检查程序,答辩教室六、主要参考资料1.汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2.王清,李光明.计算机操作系统.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静,操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社10.张坤.操作系统实验教程,清华大学出版社目 录1.绪论11.1设计任务11.2设计思想11.3基础知识22.各模块伪码算法32.1父亲进程模块32.2母亲进程模块52.3儿子进程模块72.4女儿进程模块92.5Print函数113. 函数调用关系图123.1函数调用图124.测试结果135.源程序176.设计总结22参考文献23致 谢24摘 要 本设计实际是生产者消费者的变形,通过有界缓冲区把生产者和消费者联系起来。假定生产者和消费者的优先级是相同的,只要缓冲区未满,生产者就可以往缓冲区内放入产品。苹果与橘子的问题是典型的进程同步问题。本问题利用C语言实现相应的P、V原语。主要过程可用生产消费者来模拟,这里,生产者(父亲和母亲)放入缓冲区(盘子)的产品有两类(苹果和桔子),消费者(女儿和儿子)也有两类,每类消费者只消费其中固定的一类产品。生产者和消费者共享缓冲区,缓冲区中有空时,生产者可放入产品(不许放重),待缓冲区中有产品时,消费者可取出产品(不许取重),否则等待。关键字:进程同步;P、V操作;信号量1.绪论1.1设计任务桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。 这个问题实际上是两个生产者和两个消费者被连接到仅能放一个产品的缓冲器上。生产者各自生产不同的产品,但就其本质而言,他们是同一类生产者。而消费者则各自去需要的产品消费,但消费的方式不同。解决此类问题利用记录型信号量机制和P、V操作来实现进程同步。进程同步是指一个进程的执行依赖于另一个进程的信号或消息,当一个进程没有得到来自与另一个进程的信号或消息时则等待,直到信号或消息到达才被唤醒。1.2设计思想本实验进行操作系统课设的主要任务是模拟生产者与消费者问题的一个衍生,即实现苹果-橘子问题。这个题目有两个生产者,分别生产橘子和苹果。有两个消费者,分别消费苹果和橘子。同时,因为两个生产者和两个消费者同时对一个缓冲区进行操作。所以应互斥的访问的缓冲区以保证程序的正确性。本次进程的目的就是加深个进程之间的正确有效的访问一个存储单元缓冲区,即同步和互斥。也要涉及到信号量在互斥访问中的使用,生产者和消费者问题的实现和流程问题。当计算机中两个或者多个进程在执行时需要使用公用缓冲区,并且对该缓冲区采取了互斥措施,这时如果并发执行这些进程的时候就会造成CPU时间的极大浪费,这是操作系统设计要求不允许的。而这种现象在操作系统和用户进程中大量存在。因此为了解决这一问题,提出了同步的概念,即把异部环境下的一组并发进程,因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。该问题是典型的进程同步问题。某些进程为了完成同一任务分工合作,由于合作的每一个进程都是独立的不可预知的推进,这就需要相互合作的进程在某些合作点上协调各自的工作。当合作进程中的一个到达合作点后,在尚未得到其他合作进程发来的消息或信号前应阻塞自己,直到其合作进程发来协调信号或消息后才能被唤醒。这就是进程同步要解决的问题。1.3基础知识生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程即所谓的“生产者”和“消费者”在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。借助C语言实现进程同步经典问题苹果-桔子问题,用高级语言编写和调试一个进程同步程序,以加深对进程同步机制的理解。通过用C语言模拟进程同步实现,加深理解有关进程同步机制的概念及P、V操作的应用。通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。这是进程同步与互斥问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就是互斥的表现。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。为下面吃水果的问题创建进程并实现进程之间的同步模型。能够处理以下的情形:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。2.各模块伪码算法2.1父亲进程模块爸爸向盘子中放一个苹果操作:Father(),plat_size表示盘子,初始值为0,plat_size=apple+orange,执行father操作后,plat_size=1;则daughter处于等待状态。coutFather调用.endl; if(Plate_Size=1) Father_lag=1; /Father()等待 Print(); if(Mother_lag=false)MonFa_c=1; else Father(); if(Daughter_lag=true) Daughter01_lag=false;/Daughter等待取消 Daughter (); /处于等待的Daughter自动调用 break;爸爸放苹果进程的操作流程如图2.1: 开始Plat_size=1?father进程调用:apple+,plat_size=orang+apple,调用print()daughter等待调用daughter进程father处于等待状态结束否是是否 图2.1爸爸放苹果进程操作流程图2.2母亲进程模块妈妈向盘子中放一个橘子操作:Mother() ,plat_size表示盘子,初始值为0,plat_size=apple+orange,执行mother操作后,plat_size=1;则son处于等待状态。如图所示,若mother放入前plat_size=1,则必须等待。coutMother调用.endl; if(Plate_Size=1) Mother_lag=true; /Mother()等待 Print(); if(Father_lag=false)MonFa_c=1; else Mother(); if(Son_lag=true) /Son等待 Son_lag=false;/Son等待取消 Son(); /处于等待的Son()自动调用 break; 妈妈放桔子进程的操作流程如图2.2:开始Plat_size=1?mother进程调用:orange+,plat_size=orang+apple,调用print()son等待调用son进程mother处于等待状态结束否是是否图2.2妈妈放桔子进程操作流程图2.3儿子进程模块儿子从盘子取一个橘子操作:Son(),son操作要进行,则必须plat_size=1,且盘子中必须有orange。若orange=0,则son必须等待。coutSon调用.endl; if(orange=0)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号