操作系统交通信号灯问题Word格式.docx
《操作系统交通信号灯问题Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统交通信号灯问题Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
1.课程设计目的:
《操作系统》课程设计是信管专业实践性环节之一,是学习完《操作系统》课程后进行的一次较全面的综合练习。
其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程的学习和实验,以及毕业设计的完成打下扎实的基础。
2.课题题目
交通信号灯问题
问题描述:
一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停,绿灯行”的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的“十字路口交通管理”情况。
车辆通行设定:
路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后),其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,可以自行计算。
进程的互斥:
交通灯进程实际上是互斥的,即不能同时为红或者同时为绿。
进程的消息通信或其通信方式:
对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口。
进程的调度:
停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
3.设计要求:
1.根据自己对应的课题完成以下主要工作:
(1).分析设计要求,给出解决方案,建立必要的数据结构,然后设计总体流程(包括界面)、详细设计必要的算法,并最终显示结果。
基于WINDOWS或LINUX操作系统都可以,用何种编程语言都有可以。
(2).提交设计报告,包括设计要求、设计思想流程、设计所涉及的主要数据结构、程序清单、运行结果、设计心得、参考资料等。
(3).严禁抄袭,复制设计容,查出后相关同学设计成绩以零分处理。
(4).所提交源程序应是能够运行通过的完整程序。
(5).提交不少于5000字的课程设计报告,含系统说明,系统功能图,流程图,程序设计说明,源程序清单
2.设计过程中既要虚心接受老师的指导,又要充分发挥主观能动性、独立思考、努力钻研、勤于实践、勇于创新。
3.在设计过程中,要严格要求自己,树立严密、严谨的科学态度,必须按时、保质、保量完成任务。
要求独立完成规定的设计容,不得弄虚作假,不准抄袭或拷贝他人的程序或其他容。
4.不得迟到、早退、旷课。
缺课节数达两次以上者,成绩按不及格处理。
二、进度安排
第15周星期一14:
30—18:
30
星期三14:
星期四14:
第16周星期二14:
1系统需求分析
1.1设计要求
一个十字路口,共有四组红绿灯,每个路口的车辆都遵循"
红灯停,绿灯行"
的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的"
十字路口交通管理"
情况.
车辆通行设定:
路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后)后,其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,可以自行计算。
进程的互斥:
交通灯进程实际上是互斥的,即不能同时为红或者同时为绿.
进程的消息通信或其他通信方式:
对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口.
进程的调度:
停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
1.2课程设计目的
了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。
1.3解决方案
根据设计要求,在VC++6.0环境下编译,设计了一个能够实现自由模拟某一时段交通状况并能预测某辆车需要多久才能到达路口的系统程序,改程序达到了设计要求,成功地实现了要求功能。
1.4系统开发与运行环境
代码实现:
C++语言程序
开发工具:
MicrosoftVisualC++6.0
运行环境:
windowsXP或更高版本操作系统
执行方式:
文件打开后直接执行
窗口界面:
MS-DOS窗口界面
操作方式:
全键盘控制
操作需要相关专业技能:
无
2总体设计
2.1函数定义说明
本设计中,定义了两个函数实现P、V原语的操作,其中P(inti)函数实现了i方向上车辆等待数目减一,车辆编号增一以及输出的功能,V(inti)函数实现了时间的增加,交通转换灯的转换,无车标志的转换以及输出的功能。
同时定义了东西调度函数ETW()和南北调度函数STN(),最后当然定义了main()来调用上述函数实现动态演示及预测功能
2.2结构设计说明
为了实现题设的要求,在VC++6.0环境下编译实现,整个系统的主要流程设计为如下步骤:
1.定义全局变量用来存放实验所需基本信息
2.change函数实现交换无车标志的功能
3.P函数模拟P原语的功能
4.V函数模拟V原语的功能
5.ETW函数实现东西方向的车辆调度
6.STN函数实现南北方向的车辆调度
7.main函数实现程序的输入接口以及模拟演示
2.3算法流程图
2.4数据结构
为了实现题设的要求,在VC++6.0环境下编译实现,整个系统的主要流程设计为如下步骤:
3详细设计
3.1模块描述
图3-1交通信号灯模拟程序功能模块图
3.2核心函数的设计
设计P(inti)函数用来实现从i(东西南北)方向等待车辆中挑出当前的第一个并让其通行,同时记录此车的编号,输出此车的发车时间,代码如下:
voidP(inti)//P函数,i为方向判断标志
{
if(Max[i]>
0)
{
Max[i]=Max[i]-1;
//i方向上的车辆等待数目减一
R[i]++;
//当前车辆编号
if((PS-1)==i&
&
R[i]==PN)
PT=Time;
//保存预测时间
cout<
<
Time<
"
时刻向"
FX[i]<
方向行驶的第"
R[i]
辆车开始出发!
endl;
}
if(Max[++i]>
}
设计V(inti)函数实现时间的流逝,红绿灯的转换以及无车标志的转换,同时输出上一时刻调用P函数车辆的到达时间,代码如下:
voidV(inti)//V函数,i为方向判断标志
Time=Time+4;
//时间流逝
=0)
if(Max[i]==0)
Max[i]=-1;
cout<
辆车到达对面!
T=T-4;
//绿灯时间减少
if(T<
change();
inttemp;
//换灯
temp=L[0];
L[0]=L[1];
L[1]=temp;
T=30-Time%30;
//修正红绿灯时间
设计东西调度函数ETW()以及南北调度函数STN()在互斥方向无车且绿灯状态下循环调用P、V函数实现单方向队列上车辆的循环调度,代码如下:
voidETW()//东西调度函数
if(L[0]==0)//若为红灯则交换
while(T>
0&
L[0]==1&
EW==1)//绿灯有时间且南北无车
intb=0;
P(b);
V(b);
voidSTN()//南北调度函数
if(L[1]==0)
while(T>
L[1]==1&
SN==1)//绿灯有时间且东西无车
inta=2;
P(a);
V(a);
3.2主函数的设计
设计main()函数用来提供程序的输入接口,并实现南北东西方向函数的交叉调度,以及预测车辆出发时间的输出显示。
intmain()
欢迎进入交通信号灯模拟系统!
请选择当前东西方向红绿灯状态:
//初始化红绿灯
\t1.红灯\n"
;
\t2.绿灯\n"
inta;
cin>
>
a;
if(a==1)
L[0]=0;
L[1]=1;
if(a==2)
L[0]=1;
L[1]=0;
请依次输入向东,西,南,北方向的车辆数目(100以):
Max[0]>
Max[1]>
Max[2]>
Max[3];
请选择预测的方向:
\t1.东\n"
\t2.西\n"
\t3.南\n"
\t4.北\n"
PS;
请输入预测的车辆编号"
PN;
while(Max[0]!
=-1&
Max[1]!
Max[2]!
Max[3]!
=-1)//调度函数
ETW();
STN();
向"
FX[PS-1]<
行驶编号为"
PN
的车辆预测出发时间为:
PT<
return0;
4.系统调试
交通信号灯模拟程序的运行说明如下:
1、按照系统提示一步一步向下走即可顺利执行程序。
2、输入数据的过程中一定要尽量保证数据的正确性,防止因数据不正确而造成程序的崩溃等问题。
3、在所有数据都输入之后,程序会自动直接开始运行,运行过程中程序会自动执行到最后,而不会运行一步停下来等待用户的指示,因此为了保证用户检验数据,请在运行之前做好充分的数据记录,以便与理论值进行对照。
本系统是一款多功能,操作方便,界面友好的软件。
软件所提供的所有功能都可以通过键盘操作实现,简单易行,会给用户的相关操作带来很大方