《司机与售票员问题》由会员分享,可在线阅读,更多相关《司机与售票员问题(12页珍藏版)》请在金锄头文库上搜索。
1、1目录1.需求分析 .21.1 实验目的 .21.2 设计要求 .22. 功能设计 .22.1 流程图 .22.2 数据结构 .33.开发平台及源程序代码 .43.1 开发环境与工具 .43.2 源代码 .44.测试及结果 .75.自我评价与总结 .106.参考书目 .1221.需求分析1.1 实验目的掌握信号的使用方法和 PV 操作的定义,掌握使用 PV 操作实现进程之间同步和互斥的方法,加深对进程同步互斥概念的理解。1.2 设计要求设计程序模拟在公共汽车上,司机和售票员操作的同步。司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV 操作对其控制。2.
2、功能设计本程序的设计原理比较简单,就是两大部分,一是司机的行车操作过程,另一个是售票员的开车门和关车门(以及售票,本程序不讨论售票过程)的过程。现在来说明如何具体实现司机开车和售票员售票的相关过程。首先,设置2 个私有信号量,分别是司机和售票员的。其中,司机的私有信号量设置为sj,其初始值为 0;售票员的私有信号量为 spy,其初始值为 1;以上的初值表示的是司机和售票员的行车和开关车门的一个具体初始状态,具体的说也就是当车子停着,车门开着的时候的状态,此时,司机不能开车,只有当售票员售完票之后,通知司机才可以。2.1 流程图用操作系统书上的方法写出的流程图如下:3启动汽车到站停车正常行驶关车
3、门开车门售票司 机 售票员(a)司机的工作流程 (b)售票员的工作流程2.2 数据结构这样一来的话,仿照书上的 P,V 操作,实现司机和售票员之间的同步的过程如下:beginsj,spy;semaphore /设置司机和售票员的私有信号量;sj=0;spy=1; /设置初始值;cobeginprocess 司机 /司机的操作过程;beginL1:P(sj);启动车辆;正常行驶;到站停车;V(spy);goto L1;end;process 售票员 /售票员的操作过程;begin4L2:P(spy);开车门;关车门;V(sj);售票;goto L2;end;coend;end;3.开发平台及源程
4、序代码3.1 开发环境与工具系统平台:WINDOW 环境实现语言:C+开发工具:VC+6.03.2 源代码目的:掌握信号的使用方法和 PV 操作的定义,掌握使用 PV 操作实现进程之间同步和互斥的方法,加深对进程同步互斥概念的理解。设计要求:设计程序模拟在公共汽车上,司机和售票员操作的同步。司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用 PV 操作对其控制。其中源程序的代码如下:#includeusing namespace std;5int spy=1, sj=0; /信号量的定义,spy 是售票员的私有信号量,sj 是司机的私有信号量。#define
5、SIZE 5 /定义车上最多能坐的人数。int n = SIZE;char ck; /乘客上下车的操作变量。int p1(); /司机的操作流程。int p2(); /售票员的操作流程。int main()cout ck;if (ck = a) cout = SIZE) cout 车上乘客已经都下完了! endl;continue;cout 现在关闭车门! endl;sj+; /相当于 v 操作p1();7return 0;由于要表现出司机和售票员的操作过程,所以,程序是通过乘客的上下车来实现的,而具体的实现过程对于用户来说是透明的。4.测试及结果本程序运行的结果如下:图 4-1 程序运行开始
6、界面8图 4-2 乘客上车直到满座9图 4-3 关车门开车图 4-4 乘客下车直至下车完10图 4-5 关车门开车图 4-6 注销进程5.自我评价与总结本次设计呢,总体来说完成的还可以,由于程序本身不是很难,再加上时间有限,我也就没有花大力气来完善它,下面我从以下几点来说明本次课程设计的自我评价:1,本次课程设计中做的比较好的地方:做的好的地方就是在于对题目意思的正确理解,以及在此基础之上的模型设计。最开始一看题目的时候有点不知道如何着手,只是模糊的知道是这么回事,能够在思想上想清楚具体的运转过程,参照教科书之后,学会了怎样用P,V 原语操作。然后最关键的就是怎样用程序表现这个过程,最后我想出
7、来的方法就是通过乘客上下车的过程来表现,我觉得这样是最好的体现方式。2,得不太好的地方,以及以后如何改正:11做的不太好的地方就是不能把自己所学的 c+知识和本次课程设计的相关知识很好的结合起来,以至于没有很好的表达出本次课程设计的细节。在以后的过程中,我会运用本次课程设计中所以学的知识,以及思考问题的方式和方法,争取能够发扬优点,尽量克服不细心,不严谨等缺点。3,从本次设计中得到的收获(在编写,调试,执行过程中的经验和教训):说起课程设计,就是一个综合运用所学知识的课题,对大学生的帮助是很大的,最基本的就是综合运用所学相关知识的能力。然后就是动手能力,以及独立思考问题的能力。通过本次课程设计
8、,我也当然学到了这些东西,不仅仅只是掌握了本次课程设计的相关知识,而且更重要的是自学能力,动手操作,以及如何更好地表达自己的思想等的能力都得到了提高。下面具体的说一个编写程序时遇到的困难,首先就是如何把想法变为做法的问题,最开始一拿到题目,我就觉得无从下手,因为以我的阅历,不知道如何把这样一个问题变成程序,变成能够让人一目了然的东西,于是,我就先写下了 p,v 操作的实现过程,因为这个对我来说简单一些,然后,在此基础之上,就好办了,结果最后用了 2 个函数就解决问题了,所以,我觉得有时候思考问题不要太死脑筋,换一个角度的话,也许会更好,说不定就能达到事半功倍的效果,还有就是,想问题要想明白,想
9、透彻,不能似懂非懂,模模糊糊的,想透彻之后再去思考下一步问题这样办事效率会更高。4,完成本题是否有其他方法(如果有,简要说明该方法) ;上面我也提到过,本次课题其实不难,所以,肯定还有其他的方法可以实现;从编程语言上来说的话,由于我最擅长的是 C+,所以用的是 c+实现的。如果用 java 等其他编程语言应该也可以。算法方面的话,我觉得自己的还不错,也就没有想过其他的。5,对实验题的评价和改进意见,请你推荐设计题目。实验题目出得精辟到位,点出了本次课程设计的重点进程之间的同步和互斥问题。本来这也是很精典的例子,我也觉得很好,没必要再加以修改。126.参考书目计算机操作系统 西安电子科技大学出版社操作系统实验教程 ,张丽芬、刘利雄、王全玉等,清华大学出版社。操作系统原理与实践教程 ,周湘贞、曾宪权编,清华大学出版社。Windows 操作系统核心编程实验教程 ,宋晓宇,中国铁道出版社。