进程同步模拟设计——司机和售票员问题 课程设计任务书.docx

上传人:lao****ou 文档编号:522632 上传时间:2024-01-06 格式:DOCX 页数:19 大小:37.53KB
下载 相关 举报
进程同步模拟设计——司机和售票员问题 课程设计任务书.docx_第1页
第1页 / 共19页
进程同步模拟设计——司机和售票员问题 课程设计任务书.docx_第2页
第2页 / 共19页
进程同步模拟设计——司机和售票员问题 课程设计任务书.docx_第3页
第3页 / 共19页
进程同步模拟设计——司机和售票员问题 课程设计任务书.docx_第4页
第4页 / 共19页
进程同步模拟设计——司机和售票员问题 课程设计任务书.docx_第5页
第5页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《进程同步模拟设计——司机和售票员问题 课程设计任务书.docx》由会员分享,可在线阅读,更多相关《进程同步模拟设计——司机和售票员问题 课程设计任务书.docx(19页珍藏版)》请在第一文库网上搜索。

1、课程设计任务书题目:进程同步模拟设计一一司机和售票员问题初始条件:1 .预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2 .实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟公共汽车司机和售票员开关门及行车操作的同步模型。3 .设计报告内容应说明:课程设计目的与功能;需求分析,数据结构或模块说明(功能与框图);源程序的主要部分;(4)测试用例,运行结果与运行情况分析;自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;

2、iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);V)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按O分记)指导教师签名:年月系主任(或责任教师)签名:年月日题目:进程同步模拟设计一一司机和售票员问题1 .初始条件:1 .预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2 .实践准备:掌握一种计算机高级语

3、言的使用。2要求完成的主要任务:2.1. 模拟公共汽车司机和售票员开关门及行车操作的同步模型。在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。司机P1售票员P2启动关门到站停开门正常运行-售票-关门一启动一行驶一停一开门为了安全起见:(1)关车门后才能启动车辆一启动在关门之后(2)到站停车后,才能开车门一开车门在到站停车之在计算机系统中可以将司机

4、和售票员分别看作PKP2两个进程,当它们并发地向前推进时,计算机系统所接受到的实际上是司机活动与售票员活动的许多交叉中的任意一个交叉,这些交叉有些满足上述要求,有些则不满足,而操作系统必须保证不发生不满足上述要求的交叉,即:如P2尚未推进到处时,而P1已推进到处,则P1应等待直到P2推进到处为止;如P1尚未推进到时,P2已到,则P2应等待直到P1推进到处为止。P1在处发生了等待,则P2执行到处时应将P1唤醒;P2在处发生了等待,P1到处应将P2唤醒应设置两个信号量:S1、S2;S1表示是否允许司机启动汽车(其初值为O);S2表示是否允许售票员开门(其初值为O)o用P、V原语描述如下:ints1

5、=O;ints2=0;main()(cobegindriver();conductor();coend)driver()(whi1e(1)(p(s1);启动车辆;正常行车;到站停车;v(s2);conductor()whi1e(1)(关车门;v(s1);售票;p(s2);开车门;上下乘客;)2.2. 设计报告内容应说明:221课程设计目的与功能;实验目的:对进程的同步和互斥,以及信号量机制度有深入的理解。一组相互合作的并发进程,为了协调其推进速度,有时需要相互等待与相互唤醒,进程之间这种相互制约的关系称作进程同步,虽然进程同步仅发生在相互有逻辑关系的进程之间,这种相互制约的关系称作进程同步,进

6、程同步现象仅发生在相互有逻辑关系的进程之间,这点与进程互斥不同,进程互斥现象发生在任意两个进程之间。与进程同步相关的另一概念是进程合作,一组进程如果它们单独执行不能正常进行,但并发执行可以正常进行,这种现象称为进程合作,参与进程合作的进程称为合作进程,如司机与售票员的例子,二者单独执行都不能正常进行,但二者并发反可以正常进行,成为合作进程,这种进程合作的现象在操作系统中经常发生。实验功能:编写完程序后,通过输入程序给定的操作符对程序进行操作来实现司机与售票员之间的进程同步关系。对输入的错误操作符有识别功能给予正确的提示,对于那些不符合实际情况的操作给予限制和提示。例如车上人满的时候要给予不能再

7、上车的提示,车上没人的时候要给予不能在下车的提示等等。2.2.2. 需求分析,数据结构或模块说明(功能与框图);问题描述:有两组并发进程:司机和售票员,共享一组数据区,进行司机开车和乘客上下车操作,要求任一时刻“只允许司机开车或乘客上下车操作。规则:允许乘客同时执行上下车操作;不允许司机开车、乘客上下车同时操作;司机和售票员的相互关系:司机开车一一乘客上下车互斥关系乘客上车乘客下车允许具体分析: 司机进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满(),若未满,则可将数据送入缓冲区,并通知售票员进程;否则,等待; 售票员进程:当它去取数据时,要检查缓冲区中是否有数据可取,若不为空,则

8、取走一个数据,并通知司机进程,否则,等待。 因为缓冲区是个临界资源,诸进程对缓冲区进行操作的临界区,需要进行互斥操作的处理。程序流程图如下:其中buffer表示进程同步信号量n表示车上的空余作为数P1表示司机进程p2表示售票员进程a为输入的操作符2.2.3.源程序的主要部分;inc1udeusingnamespacestd;intbuffer;进程同步信号量ttdefineSIZE36intn=SIZE;chara;intp1O;intp2();intPI()司机开车进程(if(buffer=O)(COUt。汽车启动准备离站Gend1;CoUtX汽车正在行驶“end1;CoUt汽车到站了“en

9、d1;CoUt。汽车已停止end1;buffer=1;p20;)returnO;if(buffer)COUt售票员已打开车门“end1;CoUt请乘客上下车a;if(a=,1,)&(n0)(n;CoUt上了一名乘客end1;continue;);if(a=,2,)&(nSIZE)(n+;COUt下了一名乘客=SIZE)(break;)e1seCoUt乘客未全部下车,等待乘客卜车end1;);if(a,4,)(COUt操作错误,请输入正确的操作符1-end1;);if(n=O)COUt。车上座位已满,无法再上乘客了=SIZE)COUt乘客已全部下车end1;continue;);)CoUt。现在

10、关闭车门end1;buffer=O;if(a=,4,)CoUt汽车到达终点站,乘客已全部下车,一天行程结束end1;buffer=1;);p1O;)returnO;intmain()CoUt使用说明:end1;COUt键入1表示乘客上车end1;CoUt键入2表示乘客下车end1;CoUt键入3表示乘客上下车过程结束zzend1;CoUt键入4表示汽车到达终点站,一天行程结束“end1end1end1;CoUt行程开始,汽车在起点站准备启动zzend1;p2();return0;2.2.4测试用例,运行结果与运行情况分析;运行结果:程序运行后结果如下:1HI行天枣结,酱 8车车下达上下上到客客

11、 小恭忝示 %0表表表表 12 3 4用人入入入在门车车汽开车 ,打下始己上开贝客 Si行售请对程序操作后结果如下:Ic,CzProgramFi1esMicrosoftVisua1StudioXMyProjectsXOSXoskesheXDebugXoskeshe.exe汽开车,打下始已上开贝客售示乘关启正到己=贝客在车车车IW乘-现O;售请青行了止打下闭动在站停己上1为开车F了一名乘客、了一名乘客国客未全部下车,等待乘客下车了一名乘客运行情况分析:程序运行结果正确。但由于对程序的操作次数有限,所以并不能看到程序的全部功能。当输入的操作符不合要求的时候,程序会给出输入错误提示,由于车的容量有限

12、,当乘客上满后,再对程序进行上车操作,程序也会给出车上乘客已满无法上车的提示。当车上没有乘客时,再对程序进行下车操作,程序会给出车上乘客已全部下车的提示。2.2.5自我评价与总结:设计的比较好和比较出色的地方:这次课程设计基本上完成了实验要求,实现了司机与售票员之间的同步关系。程序写的很简洁明了,少而精,很容易看懂,但达到了设计要求,并且有健全的判断错误操作的能力和对不正常操作给予提示的能力,也很切合实际情况。设计的不好的地方及如何改进:但是程序写得有些简单,只能进行有限的几个简单操作,局限性很大并不能应用于实际情况。再对乘客进行上下车操作时也未对乘客的情况进行统计和记录,仅仅是体现出同步关系

13、,完成实验要求,而未考虑的更深更远,使程序更加复杂,功能更加健全。在设计时我们应该考虑的更多一些,使得自己的设计更有用,像用在公交车上的无人售票系统中等等。iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);这次设计实验使我懂得了如何用C+代码来表示进程间的同步关系,而不是用P,V信号量来表示。程序编写时发现信号量只用一个就足以表达司机和售票员之间的同步关系,而不需要使用2个。刚做完时程序功能很不健全只有中间过程而无头无尾,p1,p22个函数轮流调用程序始终终止不了,就像没有起点站和终点站的汽车一样,后来通过加入一个操作符和巧妙的应用同步信号量来实现了结束2个进程的操作。写程序时往往考虑的都不是很周全,有很多细节很可能自己没考虑到,这就需要我们再写完程序后在对程序的调试过程中发现这些细节并修正程序,这样才能写出更好功能更健全的程序。进程同步最典型的表示方法就时利用PV信号量来表示,这种表示方法在上文已经给出了。这次实验只是进程同步模拟设计的一个简单的例子,现实生活中还有很多这样的例子,书上也列举了很多像读者与写者的问题,生产者和消费者的问题,哲学家就餐问题等等,这些都是很好的设计题目

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服