采用JavaSwing+多线程+操作系统进程调度算法GUI动画实现进程调用过程程序,系统采用多层C/S软件架构,采用javaSwing窗口开发技术实现进程调度动画界面,实现JAVA2D模拟实现先入先出(FIFO),时间片轮转,优先级调度等操作系统进程调度算法整体逻辑过程。系统主要实现技术包括,java2D动画,java多线程控制,javaswing,操作系统核心调度算法实现等。
一、程序设计
本次基于JavaSwing+多线程+操作系统进程调度算法GUI动画实现进程调用过程程序,主要内容涉及:
主要功能模块:进程管理、进程创建、进程调度动画模拟、进程调度算实现,系统多线程控制,分析统计等等
主要包含技术:java,swing,java多线程,操作系统原理,进程调度算法,java2D,GUI
主要包含算法:操作系统进程调度算法,先入先出(FIFO),时间片轮转,优先级调度等
二、效果实现
进程调度
其他效果省略
三、核心代码
1.时间片轮转算法
本系统程序时间片轮转模块主要实现对操作系统进程调用过程采用时间片轮转算法实现,控制GUI界面动画刷新与数据更新绑定,记录进程调度时间及效果等。
// 采用时间片轮转算法模拟进程调度
public static void RoundRobin(List<ProcessModel> list) {
// 循环模拟的轮转下标
// int round = 0;
// 最小轮转次数
int minRoundRobinCount = 0;
// 实际循环执行次数
int actualRoundRobinCount = 0;
for (int i = 0; i < list.size(); i++) {
minRoundRobinCount += list.get(i).getProcessServiceTime();
}
while (true) {
try {
actualRoundRobinCount++;
// 采用随机数模拟轮转
ProcessModel process = list.get(new Random().nextInt(list
.size()));
// 采用round执行循环模拟
// if (round >= list.size()) {
// round = 0;
// }
// ProcessModel process = list.get(round++);
int serviceTime = process.getProcessServiceTime();
int currentTime = process.getProcessCurrentTime();
if (currentTime < serviceTime) {
Thread.sleep(1000);
process.setProcessCurrentStatus("Running");
process.setProcessCurrentTime(process
.getProcessCurrentTime() + 1);
// 刷新要显示的数据
SystemController.getUserTable().showTableData(list);
SystemController.getPanelProcess().requestFocus();
SystemController.getPanelProcess().repaint();
if (process.getProcessCurrentTime() == process
.getProcessServiceTime()) {
process.setProcessCurrentStatus("Finished");
// 刷新要显示的数据
SystemController.getUserTable().showTableData(list);
SystemController.getPanelProcess().requestFocus();
SystemController.getPanelProcess().repaint();
} else {
process.setProcessCurrentStatus("waitting");
}
}
if (actualRoundRobinCount >= minRoundRobinCount && isOver(list)) {
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 判断进程队列中是否还有未完成的进程
private static boolean isOver(List<ProcessModel> list2) {
for (int i = 0; i < list2.size(); i++) {
ProcessModel processModel = list2.get(i);
if (processModel.getProcessCurrentTime() < processModel
.getProcessServiceTime()) {
return false;
}
}
return true;
}
2.先入先出(FIFO)算法
本系统程序FIFO模块主要实现对操作系统进程调用过程采用FIFO算法实现,控制GUI界面动画刷新与数据更新绑定,记录进程调度时间及效果等。
/**
* 采用先来先服务算法模拟进程调度
*
* @param list
*/
public static void FcFs(List<ProcessModel> list) {
for (int i = 0; i < list.size(); i++) {
try {
// 从进程队列中拿到一个进程(按照创建的顺序)
ProcessModel processModel = list.get(i);
for (int j = 0; j < processModel.getProcessServiceTime(); j++) {
if ("Finished".equals(processModel
.getProcessCurrentStatus())) {
continue;
}
// 程序暂停一秒
Thread.sleep(1000);
processModel.setProcessCurrentStatus("Running");
processModel.setProcessCurrentTime(processModel
.getProcessCurrentTime() + 1);
// 刷新要显示的数据
SystemController.getUserTable().showTableData(list);
SystemController.getPanelProcess().requestFocus();
SystemController.getPanelProcess().repaint();
if (processModel.getProcessCurrentTime() == processModel
.getProcessServiceTime()) {
processModel.setProcessCurrentStatus("Finished");
// 刷新要显示的数据
SystemController.getUserTable().showTableData(list);
SystemController.getPanelProcess().requestFocus();
SystemController.getPanelProcess().repaint();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}