package com.zuoye;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import com.zuoye.PCB.STATUS_Type;
import com.zuoye.ScheduleModel.MODEL_Type;
public class MainControl extends JFrame implements Runnable {
/**
* @author HHH 定时任务,定时根据调度策略,调度进程中的任务定时执行
*/
public class MyTimerTask extends TimerTask {
@Override
public void run() {
if (MODEL_Type.FCFS == workMode) {
FCFS();
} else if (MODEL_Type.RR == workMode) {
RR();
} else if (MODEL_Type.MF == workMode) {
MF();
} else if (MODEL_Type.SP == workMode) {
SP();
} else if (MODEL_Type.SJF == workMode) {
SF();
}
if (MainControl.need_sched) {
this.cancel();
MainControl.need_sched = false;
MainControl.instance.schedule();
}
return;
}
public void FCFS() {
if (ScheduleModel.processArrayList.get(0).isEmpty()) {
this.cancel();
MainControl.isRunning = false;
return;
}
PCB pTmp = ScheduleModel.processArrayList.get(0).get(0);
MainControl.isRunning = true;
schedOrderStr += Integer.toString(pTmp.pID) + "->";
pSchedOrder.setText(schedOrderStr);
pTmp.execute(timeSlice);
if (pTmp.status == STATUS_Type.DEAD) {
ScheduleModel.mode12RemoveProcess();
}
}
public void RR() {
if (ScheduleModel.processArrayList.get(0).isEmpty()) {
this.cancel();
MainControl.isRunning = false;
return;
}
PCB pTmp = ScheduleModel.processArrayList.get(0).get(0);
MainControl.isRunning = true;
schedOrderStr += Integer.toString(pTmp.pID) + "->";
pSchedOrder.setText(schedOrderStr);
pTmp.execute(timeSlice);
if (pTmp.status == STATUS_Type.DEAD) {
ScheduleModel.mode12RemoveProcess();
} else {
ScheduleModel.processArrayList.get(0).add(
ScheduleModel.processArrayList.get(0).remove(0));
}
return;
}
private synchronized void MF() {
if (ScheduleModel.isEmpty()) {
this.cancel();
ScheduleModel.currentQueue = 0;
MainControl.isRunning = false;
return;
}
PCB pTmp = ScheduleModel.processArrayList.get(
ScheduleModel.currentQueue).get(0);
MainControl.isRunning = true;
schedOrderStr += Integer.toString(pTmp.pID) + "->";
pSchedOrder.setText(schedOrderStr);
pTmp.execute(timeSlice);
if (pTmp.status == STATUS_Type.DEAD) {
ScheduleModel.mode3RemoveProcess();
} else {
PCB p2 = ScheduleModel.processArrayList.get(
ScheduleModel.currentQueue).remove(0);
int x = ScheduleModel.currentQueue + 1;
if (ScheduleModel.processQueueArrayLen == x)
x--;
p2.status = STATUS_Type.READY;
ScheduleModel.processArrayList.get(x).add(p2);
if (ScheduleModel.processArrayList.get(
ScheduleModel.currentQueue).isEmpty()) {
ScheduleModel.currentQueue = x;
}
}
}
private synchronized void SP() {
if (ScheduleModel.isEmpty()) {
this.cancel();
ScheduleModel.currentQueue = 0;
MainControl.isRunning = false;
return;
}
for (int i = 0; i < ScheduleModel.processQueueArrayLen; i++) {
if (!ScheduleModel.processArrayList.get(0).isEmpty()) {
ScheduleModel.currentQueue = i;
MainControl.isRunning = true;
PCB pTmp = ScheduleModel.processArrayList.get(
ScheduleModel.currentQueue).get(0);
schedOrderStr += Integer.toString(pTmp.pID) + "->";
pSchedOrder.setText(schedOrderStr);
pTmp.execute(timeSlice);
if (pTmp.status == STATUS_Type.DEAD) {
ScheduleModel.mode4RemoveProcess();
} else {
pTmp.status = STATUS_Type.READY;
}
return;
} else {
continue;
}
}
}
private synchronized void SF() {
if (ScheduleModel.isEmpty()) {
this.cancel();
MainControl.isRunning = false;
return;
}
PCB pTmp = ScheduleModel.processArrayList.get(
ScheduleModel.currentQueue).get(0);
MainControl.isRunning = true;
schedOrderStr += Integer.toString(pTmp.pID) + "->";
pSchedOrder.setText(schedOrderStr);
pTmp.execute(timeSlice);
if (pTmp.status == STATUS_Type.DEAD) {
ScheduleModel.mode5RemoveProcess();
}
}
}
public class choiceL implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
if ("先来先服务".equals(choiceComboBox.getSelectedItem().toString())) {
ScheduleModel.mode = workMode = MODEL_Type.FCFS;
return;
}
if ("时间片轮转".equals(choiceComboBox.getSelectedItem().toString())) {
ScheduleModel.mode = workMode = MODEL_Type.RR;
return;
}
if ("多级轮转反馈".equals(choiceComboBox.getSelectedItem().toString())) {
ScheduleModel.mode = workMode = MODEL_Type.MF;
return;
}
if ("基于静态优先级".equals(choiceComboBox.getSelectedItem().toString())) {
ScheduleModel.mode = workMode = MODEL_Type.SP;
return;
}
if ("短作业优先".equals(choiceComboBox.getSelectedItem().toString())) {
ScheduleModel.mode = workMode = MODEL_Type.SJF;
return;
}
}
}
public class addProcessL implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int priority = Integer.parseInt(pStaticPriority.getText()
.trim());
int time = Integer.parseInt(pTimeNeeded.getText().trim());
PCB p = new PCB(pName.getText(), priority, ClockControl.time,
time);
if (MODEL_Type.FCFS == workMode || MODEL_Type.RR == workMode) {
ScheduleModel.mode123AddProcess(p);
}
if (MODEL_Type.MF == workMode) {
ScheduleModel.mode123AddProcess(p);
}
if (MODEL_Type.SP == workMode) {
ScheduleModel.mode4AddProcess(p);
}
if (MODEL_Type.SJF == workMode) {
ScheduleModel.mode5AddProcess(p);
}
if (!MainControl.isRunning) {
schedule();
new Thread(MainControl.this).start();
}
} catch (java.lang.NumberFormatException e) {
System.out.println("请输入数字而非其它字符!!");
return;
}
}
}
public class resetL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
pName.setText(null);
pStaticPriority.setText(null);
pTimeNeeded.setText(null);
}
}
public class resetSimL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
clear();
ScheduleModel.reset();
dataCount = 0;
schedOrderStr = "";
pNowTime.setText(null);
pSchedOrder.setText(null);
pAvgRoundTime.setText(null);
}
}
public class calculateL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
double avg = 0;
if (MainControl.dataCount != ScheduleModel.countOfDeadProcess) {
return;
} else {
for (int i = 0; i < MainControl.dataCount; i++) {
avg += ScheduleModel.deadProcessArray[i].timeWeightR;
}
avg = avg / dataCount;
}
pAvgRoundTime.setText(Double.toString(avg));
return;
}
}
public class clearL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
clear();
}
}
public class blockL implements ActionListener {
@Override
public synchronized void actionPerformed(ActionEvent e) {
BlockControl.needBlock = true;
}
}
public class wakeupL implements ActionListener {
@Override
public synchronized voi
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
OS.rar (31个子文件)
OS
bin
com
zuoye
PCB$STATUS_Type.class 1KB
MainControl$calculateL.class 1KB
MainControl$UpdateTimerTask.class 4KB
ScheduleModel$MODEL_Type.class 1KB
MainControl$suspendL.class 746B
MainControl$addProcessL.class 2KB
SuspendControl.class 2KB
MainControl$resetSimL.class 1KB
ClockControl$ClockTimerTask.class 632B
MainControl$MyTimerTask.class 4KB
MainControl$clearL.class 666B
MainControl$blockL.class 699B
BlockControl.class 2KB
MainControl$choiceL.class 1KB
MainControl$wakeupL.class 1KB
MainControl$sliceL.class 977B
PCB.class 2KB
MainControl.class 9KB
MainControl$resetL.class 851B
ClockControl.class 743B
MainControl$activateL.class 1014B
ScheduleModel.class 4KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
zuoye
ClockControl.java 425B
MainControl.java 23KB
BlockControl.java 1KB
PCB.java 2KB
SuspendControl.java 862B
ScheduleModel.java 4KB
.project 378B
.classpath 301B
共 31 条
- 1
资源评论
- 蓬头幼子2013-12-07用了一下!还是可以用的!不错哦!
awanghong_i
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功