操作系统-电梯调度项目

1. 项目目的

· 学习调度算法

· 通过实现电梯调度,体会操作系统调度过程

· 学习特定环境下多线程编程方法

2. 项目需求

· 某一层楼20层,有五部互联的电梯。基于线程思想,编写一个电梯调度程序。(可考虑:楼层和电梯数可设置)。

· 每个电梯里面设置必要功能键:如数字键、关门键、开门键、上行键、下行键、报警键、当前电梯的楼层数、上升及下降状态等。

· 每层楼的每部电梯门口,应该有上行和下行按钮和当前电梯状态的数码显示器。

· 五部电梯门口的按钮是互联结的,即当一个电梯按钮按下去时,其他电梯的相应按钮也就同时点亮,表示也按下去了。

· 所有电梯初始状态都在第一层。每个电梯如果在它的上层或者下层没有相应请求情况下,则应该在原地保持不动。

· 调度算法自行设计。

3. 项目设计及算法

3.1 项目开发概览

· 采用JAVA开发语言,使用JAVA的Swing类库来进行图形界面设计与开发。

· 在windows操作系统环境下,采用IDEA作为开发工具。

· 通过实现 Runnable 接口来进行多线程编程。

· 采用扫描算法(SCAN算法)来进行电梯调度。

3.2 扫描算法介绍

· 简介:扫描算法(SCAN) 是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。

· 优点:进行寻找楼层的优化,效率比较高。较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的。所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动。

· 缺点:扫描算法是一个非实时算法,他的平均响应时间较长。

3.4 项目架构

· 总体采用三层架构,分别是实体层,展示层,控制层。

· 实体层中有三个类,Const类负责存储项目的各种常量,Elevator类负责创建电梯实体,Task类则负责存储实际需求任务。

· 展示层则负责页面的展示,共有三个类,View负责展示整体画面。ElevatorView负责展示电梯内部的按钮,ElevatorOutView负责展示每层楼电梯外部按钮。

· 控制层负责控制事件触发以及调度算法执行。ElevatorOutViewControl负责电梯按钮触发事件以及动态刷新页面等等。ElevatorsControl则根据SCAN算法负责对所有触发的任务进行电梯调度。

· 最后,MainTest是函数的入口,负责以多线程的方式启动ElevatorsControl类,并且启动整个视图View。

4. 项目实现
电梯调度系统

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读