版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、个人资料整理,仅供个人学习使用课程设计任务书学生姓名:丁光明专业班级:计算机 0506指导教师:何克右工作单位:计算机科学与技术学院题目 :进程同步模拟设计 司机和售票员问题初始条件:1预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟公共汽车司机和售票员开关门及行车操作的同步模型。2设计报告内容应说明: 课程设计目的与功能; 需求分析,数据结构或模块说明(功能与框图 ); 源程序的主要部分; 测试用例,运行结果与运行情况分
2、析; 自我评价与总结:i )你认为你完成的设计哪些地方做得比较好或比较出色;ii )什么地方做得不太好,以后如何改正;iii )从本设计得到的收获(在编写,调试,执行过程中的经验和教训);矚慫润厲钐瘗睞枥庑赖賃軔。iv )完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周 2:完成程序分析及设计。周 2、周 3:完成程序调试及测试。周 4、周 5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0 分记)指导教师签名:年月日系主任(或责任教师)签名:年月日题目 :进程同步模拟设计 司机
3、和售票员问题1.初始条件:1预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。2实践准备:掌握一种计算机高级语言的使用。2 要求完成的主要任务 :2.1模拟公共汽车司机和售票员开关门及行车操作的同步模型。在汽车行驶过程中, 司机活动与售票员活动之间的同步关系为:售票员关车门后, 向司机发开车信号, 司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车, 售票员在车停后开门让乘客上下车。因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。聞創沟燴鐺險爱氇谴净祸測。司机 P1 售票员
4、P2启动关门到站停开门正常运行 -售票 -关门启动行驶停开门为了安全起见:1 / 7个人资料整理,仅供个人学习使用(1) 关车门后才能启动车辆启动在关门之后(2) 到站停车后,才能开车门开车门在到站停车之后在计算机系统中可以将司机和售票员分别看作P1、P2 两个进程, 当它们并发地向前推进时,计算机系统所接受到的实际上是司机活动与售票员活动的许多交叉中的任意一个交叉,这些交叉有些满足上述要求,有些则不满足, 而操作系统必须保证不发生不满足上述要求的交叉,即:残骛楼諍锩瀨濟溆塹籟婭骒。如 P2 尚未推进到处时,而 P1 已推进到处,则 P1 应等待直到 P2 推进到处为止;如 P1 尚未推进到时
5、, P2 已到,则 P2 应等待直到 P1 推进到处为止。P1在处发生了等待,则P2 执行到处时应将P1 唤醒;P2在处发生了等待,P1 到处应将P2 唤醒应设置两个信号量: S1、 S2 ;S1表示是否允许司机启动汽车(其初值为0 ) ;S2表示是否允许售票员开门(其初值为0 )。用 P 、 v 原语描述如下:ints1=O;ints2=O;main()cobegindriver();conductor();coenddriver()while(1)p(s1);启动车辆 ;正常行车 ;到站停车 ;v(s2);conductor()while(1)关车门 ;v(s1);售票 ;p(s2);开车
6、门 ;上下乘客 ;2 / 7个人资料整理,仅供个人学习使用2.2设计报告内容应说明:2.2.1 课程设计目的与功能;实验目的:对进程的同步和互斥,以及信号量机制度有深入的理解。一组相互合作的并发进程, 为了协调其推进速度, 有时需要相互等待与相互唤醒,进程之间这种相互制约的关系称作进程同步,虽然进程同步仅发生在相互有逻辑关系的进程之间,这种相互制约的关系称作进程同步,进程同步现象仅发生在相互有逻辑关系的进程之间,这点与进程互斥不同,进程互斥现象发生在任意两个进程之间。酽锕极額閉镇桧猪訣锥顧荭。与进程同步相关的另一概念是进程合作,一组进程如果它们单独执行不能正常进行,但并发执行可以正常进行, 这
7、种现象称为进程合作,参与进程合作的进程称为合作进程,如司机与售票员的例子, 二者单独执行都不能正常进行,但二者并发反可以正常进行, 成为合作进程,这种进程合作的现象在操作系统中经常发生。彈贸摄尔霁毙攬砖卤庑诒尔。实验功能:编写完程序后, 通过输入程序给定的操作符对程序进行操作来实现司机与售票员之间的进程同步关系。对输入的错误操作符有识别功能给予正确的提示,对于那些不符合实际情况的操作给予限制和提示。例如车上人满的时候要给予不能再上车的提示,车上没人的时候要给予不能在下车的提示等等。謀荞抟箧飆鐸怼类蒋薔點鉍。2.2.2. 需求分析,数据结构或模块说明(功能与框图 );问题描述:有两组并发进程:司
8、机和售票员 ,共享一组数据区,进行司机开车和乘客上下车操作,要求任一时刻 “只允许司机开车或乘客上下车操作。厦礴恳蹒骈時盡继價骚卺癩。规则:允许乘客同时执行上下车操作;不允许司机开车、乘客上下车同时操作;司机和售票员的相互关系:司机开车 乘客上下车互斥关系乘客上车 乘客下车允许开始具体分析:buffer=1 ,n=36(),若未满,则可将司机进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满数据送入缓冲区,并通知售票员进程;否则,等待;茕桢广鳓鯡选块网羈泪镀齐。售票员进程:当它去取数据时,P2若不为空,则取走一个数要检查缓冲区中是否有数据可取,据,并通知司机进程,否则,等待。鹅娅尽損鹌
9、惨歷茏鴛賴縈诘。N因为缓冲区是个临界资源,诸进程对缓冲区进行操作的临界区,需要进行buffer=1互斥操作的处理。Y程序流程图如下:输入操作数 a其中 buffer 表示进程同步信号量n 表示车上的空余作为数Ya=1&a=2&n=a0n434p2 表示售票员进程buffa 为输入的操作符er=1籟丛妈羥为贍偾蛏n练-淨槠挞。n+buffer=02.2.3. 源程序的主要部分;a=4NP13 / 7buffer=1Y个人资料整理,仅供个人学习使用#includeusing namespace std;int buffer=1;/ 进程同步信号量#define SIZE 36int n=SIZE;
10、char a;int p1();int p2();int p1()/ 司机开车进程if(buffer=0)cout 汽车启动准备离站endl;cout 汽车正在行驶endl;cout 汽车到站了 endl;cout 汽车已停止 endl;buffer=1;p2();return 0;int p2()/ 乘客上下车进程if(buffer)cout 售票员已打开车门endl;cout 请乘客上下车a;if(a=1)&(n0)n-;cout 上了一名乘客endl;continue;if(a=2)&(nSIZE)n+;cout 下了一名乘客=SIZE)break;elsecout 乘客未全部下车,等待
11、乘客下车endl;if(a4)cout 操作错误,请输入正确的操作符1-4endl;if(n=0)cout 车上座位已满,无法再上乘客了=SIZE)cout 乘客已全部下车endl;continue;cout 现在关闭车门endl;buffer=0;if(a=4)cout 汽车到达终点站,乘客已全部下车,一天行程结束endl;buffer=1;p1();return 0;int main()cout 使用说明: endl;cout 键入 1 表示乘客上车 endl;cout 键入 2 表示乘客下车 endl;cout 键入 3 表示乘客上下车过程结束endl;cout 键入 4 表示汽车到达终
12、点站,一天行程结束endlendlendl;5 / 7个人资料整理,仅供个人学习使用cout 行程开始,汽车在起点站准备启动endl;p2();return 0;2.2.4 测试用例,运行结果与运行情况分析;运行结果:程序运行后结果如下:对程序操作后结果如下:运行情况分析:程序运行结果正确。 但由于对程序的操作次数有限, 所以并不能看到程序的全部功能。 当输入的操作符不合要求的时候, 程序会给出输入错误提示, 由于车的容量有限, 当乘客上满后,再对程序进行上车操作,程序也会给出车上乘客已满无法上车的提示。当车上没有乘客时,再对程序进行下车操作,程序会给出车上乘客已全部下车的提示。預頌圣鉉儐歲龈
13、讶骅籴買闥。2.2.5 自我评价与总结:设计的比较好和比较出色的地方:这次课程设计基本上完成了实验要求, 实现了司机与售票员之间的同步关系。 程序写的很简洁明了,少而精,很容易看懂, 但达到了设计要求,并且有健全的判断错误操作的能力和对不正常操作给予提示的能力,也很切合实际情况。渗釤呛俨匀谔鱉调硯錦鋇絨。6 / 7个人资料整理,仅供个人学习使用设计的不好的地方及如何改进:但是程序写得有些简单,只能进行有限的几个简单操作,局限性很大并不能应用于实际情况。 再对乘客进行上下车操作时也未对乘客的情况进行统计和记录,仅仅是体现出同步关系,完成实验要求,而未考虑的更深更远,使程序更加复杂,功能更加健全。
14、在设计时我们应该考虑的更多一些,使得自己的设计更有用,像用在公交车上的无人售票系统中等等。铙誅卧泻噦圣骋贶頂廡缝勵。iii )从本设计得到的收获(在编写,调试,执行过程中的经验和教训);擁締凤袜备訊顎轮烂蔷報赢。这次设计实验使我懂得了如何用C+ 代码来表示进程间的同步关系,而不是用 P,V 信号量来表示。程序编写时发现信号量只用一个就足以表达司机和售票员之间的同步关系,而不需要使用 2 个。刚做完时程序功能很不健全只有中间过程而无头无尾,p1,p2 2 个函数轮流调用程序始终终止不了, 就像没有起点站和终点站的汽车一样,后来通过加入一个操作符和巧妙的应用同步信号量来实现了结束2 个进程的操作。 写程序时往往考虑的都不是很周全,有很多细节很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论