进程同步模拟设计-司机和售票员问题 课程设计任务书_第1页
进程同步模拟设计-司机和售票员问题 课程设计任务书_第2页
进程同步模拟设计-司机和售票员问题 课程设计任务书_第3页
进程同步模拟设计-司机和售票员问题 课程设计任务书_第4页
进程同步模拟设计-司机和售票员问题 课程设计任务书_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计任务书题目:进程同步模拟设计——司机和售票员问题初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2.实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟公共汽车司机和售票员开关门及行车操作的同步模型。2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:=1\*romani)你认为你完成的设计哪些地方做得比较好或比较出色;=2\*romanii)什么地方做得不太好,以后如何改正;=3\*romaniii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);=4\*romaniv)完成本题是否有其他的其他方法(如果有,简要说明该方法);=5\*romanv)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日题目:进程同步模拟设计——司机和售票员问题1.初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2.实践准备:掌握一种计算机高级语言的使用。2要求完成的主要任务:2.1.模拟公共汽车司机和售票员开关门及行车操作的同步模型。在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。司机P1售票员P2①启动②关门③到站停④开门正常运行-售票-关门-启动-行驶-停-开门为了安全起见:(1)关车门后才能启动车辆-启动在关门之后(2)到站停车后,才能开车门-开车门在到站停车之后在计算机系统中可以将司机和售票员分别看作P1、P2两个进程,当它们并发地向前推进时,计算机系统所接受到的实际上是司机活动与售票员活动的许多交叉中的任意一个交叉,这些交叉有些满足上述要求,有些则不满足,而操作系统必须保证不发生不满足上述要求的交叉,即:如P2尚未推进到②处时,而P1已推进到①处,则P1应等待直到P2推进到②处为止;如P1尚未推进到③时,P2已到④,则P2应等待直到P1推进到③处为止。P1在①处发生了等待,则P2执行到②处时应将P1唤醒;P2在④处发生了等待,P1到③处应将P2唤醒应设置两个信号量:S1、S2;S1表示是否允许司机启动汽车(其初值为0);S2表示是否允许售票员开门(其初值为0)。用P、v原语描述如下:ints1=O;ints2=O;main(){cobegindriver();conductor();coend}driver(){while(1){p(s1);启动车辆;正常行车;到站停车;v(s2);}}conductor(){while(1){关车门;v(s1);售票;p(s2);开车门;上下乘客;}}2.2.设计报告内容应说明:2.2.1课程设计目的与功能;实验目的:对进程的同步和互斥,以及信号量机制度有深入的理解。一组相互合作的并发进程,为了协调其推进速度,有时需要相互等待与相互唤醒,进程之间这种相互制约的关系称作进程同步,虽然进程同步仅发生在相互有逻辑关系的进程之间,这种相互制约的关系称作进程同步,进程同步现象仅发生在相互有逻辑关系的进程之间,这点与进程互斥不同,进程互斥现象发生在任意两个进程之间。与进程同步相关的另一概念是进程合作,一组进程如果它们单独执行不能正常进行,但并发执行可以正常进行,这种现象称为进程合作,参与进程合作的进程称为合作进程,如司机与售票员的例子,二者单独执行都不能正常进行,但二者并发反可以正常进行,成为合作进程,这种进程合作的现象在操作系统中经常发生。实验功能:编写完程序后,通过输入程序给定的操作符对程序进行操作来实现司机与售票员之间的进程同步关系。对输入的错误操作符有识别功能给予正确的提示,对于那些不符合实际情况的操作给予限制和提示。例如车上人满的时候要给予不能再上车的提示,车上没人的时候要给予不能在下车的提示等等。2.2.2.需求分析,数据结构或模块说明(功能与框图);问题描述:有两组并发进程:司机和售票员,共享一组数据区,进行司机开车和乘客上下车操作,要求任一时刻“只允许司机开车或乘客上下车操作。规则:允许乘客同时执行上下车操作;不允许司机开车、乘客上下车同时操作;司机和售票员的相互关系:司机开车——乘客上下车互斥关系乘客上车——乘客下车允许具体分析:司机进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满(),若未满,则可将数据送入缓冲区,并通知售票员进程;否则,等待; 售票员进程:当它去取数据时,要检查缓冲区中是否有数据可取,若不为空,则取走一个数据,并通知司机进程,否则,等待。 因为缓冲区是个临界资源,诸进程对缓冲区进行操作的临界区,需要进行互斥操作的处理。程序流程图如下:其中buffer表示进程同步信号量n表示车上的空余作为数p1表示司机进程p2表示售票员进程a为输入的操作符 开始开始buffer=1,n=36P2buffer=1输入操作数aa=1&&n>0a=2&&n<36n<=0n>=36a<=0//a>4a=3a=4n--n++buffer=0a=4P1buffer=1结束buffer=1YYNNY2.2.3.源程序的主要部分;#include<iostream>usingnamespacestd;intbuffer=1;//进程同步信号量#defineSIZE36intn=SIZE;chara;intp1();intp2();intp1()//司机开车进程{ if(buffer==0) { cout<<"汽车启动准备离站"<<endl; cout<<"汽车正在行驶"<<endl; cout<<"汽车到站了"<<endl; cout<<"汽车已停止"<<endl; buffer=1; p2(); } return0;}intp2()//乘客上下车进程{ if(buffer) { cout<<"售票员已打开车门"<<endl; cout<<"请乘客上下车"<<endl; while(1) { cin>>a; if((a=='1')&&(n>0)) { n--; cout<<"上了一名乘客"<<endl; continue; }; if((a=='2')&&(n<SIZE)) { n++; cout<<"下了一名乘客"<<endl; continue; }; if(a=='3') { break; }; if(a=='4') { if(n>=SIZE) { break; } else cout<<"乘客未全部下车,等待乘客下车"<<endl; }; if((a<='0')||(a>'4')) { cout<<"操作错误,请输入正确的操作符1-4"<<endl; }; if(n<=0) { cout<<"车上座位已满,无法再上乘客了"<<endl; continue; }; if(n>=SIZE) { cout<<"乘客已全部下车"<<endl; continue; }; } cout<<"现在关闭车门"<<endl; buffer=0; if(a=='4') { cout<<"汽车到达终点站,乘客已全部下车,一天行程结束"<<endl; buffer=1; }; p1(); } return0;}intmain(){ cout<<"使用说明:"<<endl; cout<<"键入1表示乘客上车"<<endl; cout<<"键入2表示乘客下车"<<endl; cout<<"键入3表示乘客上下车过程结束"<<endl; cout<<"键入4表示汽车到达终点站,一天行程结束"<<endl<<endl<<endl; cout<<"行程开始,汽车在起点站准备启动"<<endl; p2(); return0;}2.2.4测试用例,运行结果与运行情况分析;运行结果:程序运行后结果如下:对程序操作后结果如下:运行情况分析:程序运行结果正确。但由于对程序的操作次数有限,所以并不能看到程序的全部功能。当输入的操作符不合要求的时候,程序会给出输入错误提示,由于车的容量有限,当乘客上满后,再对程序进行上车操作,程序也会给出车上乘客已满无法上车的提示。当车上没有乘客时,再对程序进行下车操作,程序会给出车上乘客已全部下车的提示。2.2.5自我评价与总结:设计的比较好和比较出色的地方:这次课程设计基本上完成了实验要求,实现了司机与售票员之间的同步关系。程序写的很简洁明了,少而精,很容易看懂,但达到了设计要求,并且有健全的判断错误操作的能力和对不正常操作给予提示的能力,也很切合实际情况。设计的不好的地方及如何改进:但是程序写得有些简单,只能进行有限的几个简单操作,局限性很大并不能应用于实际情况。再对乘客进行上下车操作时也未对乘客的情况进行统计和记录,仅仅是体现出同步关系,完成实验要求,而未考虑的更深更远,使程序更加复杂,功能更加健全。在设计时我们应该考虑的更多一些,使得自己的设计更有用,像用在公交车上的无人售票系统中等等。=3\*romaniii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);这次设计实验使我懂得了如何用C++代码来表示进程间的同步关系,而不是用P,V信号量来表示。程序编写时发现信号量只用一个就足以表达司机和售票员之间的同步关系,而不需要使用2个。刚做完时程序功能很不健全只有中间过程而无头无尾,p1,p22个函数轮流调用程序始终终止不了,就像没有起点站和终点站的汽车一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论