操作系统交通信号灯问题.docx
《操作系统交通信号灯问题.docx》由会员分享,可在线阅读,更多相关《操作系统交通信号灯问题.docx(26页珍藏版)》请在冰豆网上搜索。
操作系统交通信号灯问题
操作系统-交通信号灯问题
课程设计报告
课程名称操作系统
课题名称交通信号灯问题
专业信息管理与信息系统
班级1301班
学号201303110131
姓名李世伟
指导教师谢雅
2016年6月18日
一、设计内容与设计要求
1.课程设计目的:
《操作系统》课程设计是信管专业实践性环节之一,是学习完《操作系统》课程后进行的一次较全面的综合练习。
其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程的学习和实验,以及毕业设计的完成打下扎实的基础。
2.课题题目
交通信号灯问题
问题描述:
一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停,绿灯行”的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的“十字路口交通管理”情况。
车辆通行设定:
路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后),其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,可以自行计算。
进程的互斥:
交通灯进程实际上是互斥的,即不能同时为红或者同时为绿。
进程的消息通信或其通信方式:
对车辆进程而言,每一个车辆在通过路口前,必须确认前面的车辆已经通过了路口。
进程的调度:
停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。
3.设计要求:
1.根据自己对应的课题完成以下主要工作:
(1).分析设计要求,给出解决方案,建立必要的数据结构,然后设计总体流程(包括界面)、详细设计必要的算法,并最终显示结果。
基于WINDOWS或LINUX操作系统都可以,用何种编程语言都有可以。
(2).提交设计报告,包括设计要求、设计思想流程、设计所涉及的主要数据结构、程序清单、运行结果、设计心得、参考资料等。
(3).严禁抄袭,复制设计内容,查出后相关同学设计成绩以零分处理。
(4).所提交源程序应是能够运行通过的完整程序。
(5).提交不少于5000字的课程设计报告,含系统说明,系统功能图,流程图,程序设计说明,源程序清单
2.设计过程中既要虚心接受老师的指导,又要充分发挥主观能动性、独立思考、努力钻研、勤于实践、勇于创新。
3.在设计过程中,要严格要求自己,树立严密、严谨的科学态度,必须按时、保质、保量完成任务。
要求独立完成规定的设计内容,不得弄虚作假,不准抄袭或拷贝他人的程序或其他内容。
4.不得迟到、早退、旷课。
缺课节数达两次以上者,成绩按不及格处理。
二、进度安排
第15周星期一14:
30—18:
30
星期三14:
30—18:
30
星期四14:
30—18:
30
第16周星期二14:
30—18:
30
星期三14:
30—18:
30
星期四14:
30—18:
30
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环境下编译实现,整个系统的主要流程设计为如下步骤:
1.定义全局变量用来存放实验所需基本信息
2.change函数实现交换无车标志的功能
3.P函数模拟P原语的功能
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<