一、项目要求概述

1.1 项目目的

通过控制电梯调度,实现操作系统调度过程

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

学习调度算法

1.2 开发环境

语言:java

系统平台:全平台(具备java环境)

IDE:Intellij IDEA

产品呈现模式:jar包

执行环境要求:安装java

Win:安装java配置环境变量后双击

Linux/Mac:命令行:

java –jar 电梯.jar

1.3 基本需求

模拟20层楼中5架电梯的调度

电梯具有最基本的按键

可显示电梯的当前状态

二、调度算法概述

2.1 乘客行为概述

乘客可以在20层楼的任何一层楼按当前楼层的上或者下的按键对电梯提出需求

乘客可以按动电梯中的楼层选择按钮来对指定电梯前去哪里,由于ui的设计问题,这一功能被要求在按动请求按钮时一并完成

乘客可以在电梯中按动紧急按钮迫使当前电梯停止运作

2.2 电梯行为概述

电梯初始状态均为静止,且停泊在第一层

电梯通过反复自检自身的状态变量来变更自己的行为

行进中的电梯每到一个楼层都自检下客队列,判断当前楼层是否需要开门下客

行进中的电梯每到一个楼层都要检查当前楼层乘客等待队列是否有符合当前方向的乘客,判断当前楼层是否要载客,如果在该楼层电梯中没有了乘客且没有应答其他请求,则载上当前楼层人数较多方向的乘客继续行进

2.3 调度

乘客按下请求按钮响应流程

上下方向上有朝这一楼行进且该电梯的最高/低请求大于该楼层:

将会等待该电梯到达该楼层来载上该乘客

上下方向上没有朝这一楼行进的电梯或是有但是该电梯最高/低请求并没能到达该楼层:

将会进行检索静止的电梯队列:

静止电梯的选择将位置优先,选择离该楼层最近的静止电梯来响应请求,将该电梯启动,并将在该楼停下的指令塞入该电梯。