河北科技大学操作系统课设,进程的调度算法。
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class JobScheduling {
public static void main(String[] args) {
Job jobA = new Job("A", 0, 6,3);
Job jobB = new Job("B", 7, 60,5);
Job jobC = new Job("C", 8, 20,3);
Job jobD = new Job("D", 9, 10,1);
Job jobE = new Job("E", 12, 40,9);
Job jobF = new Job("F", 15, 8,2);
Job job[] = {jobA, jobB, jobC, jobD, jobE, jobF};
Bubble_arrived(job);
FCFS(job);
SJF(job);
PICB1(job);
}
static void Bubble_arrived(Job[] job) {
Job temp = new Job("", 0, 0,0);
boolean flag = false;
for (int i = 0; i < job.length - 1; i++) {
for (int j = 0; j < job.length - 1 - i; j++) {
if (job[j].arriveTime > job[j + 1].arriveTime) {
if (!flag) flag = true;
temp = job[j];
job[j] = job[j + 1];
job[j + 1] = temp;
}
}
if (!flag) {
break;
} else {
flag = false;
}
}
}
static void Bubble_need(Job[] job) {
Job temp = new Job("", 0, 0,0);
boolean flag = false;
for (int i = 0; i < job.length - 1; i++) {
for (int j = 0; j < job.length - 1 - i; j++) {
if (job[j].needTime > job[j + 1].needTime) {
if (!flag) flag = true;
temp = job[j];
job[j] = job[j + 1];
job[j + 1] = temp;
}
}
if (!flag) {
break;
} else {
flag = false;
}
}
}
static void FCFS(Job[] job) {
double T = 0;
double W = 0;
int finish = 0;
double t = 0;
double w = 0;
System.out.println("先来先服务算法:");
System.out.print("作业调度顺序:");
for (Job value : job) {
finish = finish + value.needTime;
t = finish - value.arriveTime;
w = t / value.needTime;
T += t;
W += w;
System.out.print(value.jobName);
}
System.out.println();
System.out.println("平均周转时间为:" + T / 6);
System.out.println("平均带权周转时间为:" + W / 6);
System.out.println("=========================");
}
static void SJF(Job[] job) {
int finish = job[0].needTime;
double t = finish - job[0].arriveTime;
double w = t / job[0].needTime;
double T = t;
double W = w;
int d = 0;
int time = 100;
int[] arr = {1, 0, 0, 0, 0, 0};
boolean flag = false;
System.out.println("短作业优先算法:");
System.out.print("作业调度顺序:" + job[0].jobName);
for (int e = 1; e < job.length; e++) {
for (int c = 1; c < job.length; c++) {
if (job[c].arriveTime < finish && arr[c] == 0
&& job[c].needTime < time) {
d = c;
time = job[c].needTime;
flag = true;
}
}
if (!flag) {
int num = 1;
for (int i = 1; i < job.length-1; i++) {
if(arr[i] != 1) {
num = i;
break;
}
}
Map<Integer, Job> jobMap = new HashMap<>();
jobMap.put(num, job[num]);
for (int i = 1; i < job.length - 1; i++) {
if (arr[i] == 0 && job[num].arriveTime == job[i].arriveTime) {
jobMap.put(i, job[i]);
}
}
int min = 1000;
int i = 0;
int number = num;
for (Map.Entry<Integer, Job> entry : jobMap.entrySet()) {
if (job[entry.getKey()].needTime < min) {
min = job[entry.getKey()].needTime;
number = entry.getKey();
}
}
d = number;
}
arr[d] = 1;
time = 100;
flag = false;
finish = finish + job[d].needTime;
t = finish - job[d].arriveTime;
w = t / job[d].needTime;
T += t;
W += w;
System.out.print(job[d].jobName);
}
System.out.println();
System.out.println("平均周转时间为:" + T / 6);
System.out.println("平均带权周转时间为:" + W / 6);
System.out.println("=========================");
}
static void PICB1(Job[] job) {
int finish = job[0].needTime;
double t = finish - job[0].arriveTime;
double w = t / job[0].needTime;
double T = t;
double W = w;
boolean flag = false;
int d = 0;
int priotity_number = 0;
int[] arr = {1, 0, 0, 0, 0, 0};
System.out.println("优先数调度算法:");
System.out.print("进程调度顺序:" + job[0].jobName);
for (int e = 1; e < job.length; e++) {
for (int c = 1; c < job.length; c++) {
if (job[c].arriveTime < finish && arr[c] == 0
&& job[c].priority > priotity_number) {
d = c;
priotity_number = job[c].priority;
flag = true;
}
}
if (!flag) {
int num = 1;
for (int i = 1; i < job.length-1; i++) {
if(arr[i] != 1) {
num = i;
break;
}
}
Map<Integer, Job> jobMap = new HashMap<>();
jobMap.put(num, job[num]);
for (int i = 1; i < job.length - 1; i++) {
if (arr[i] == 0 && job[num].arriveTime == job[i].arriveTime) {
jobMap.put(i, job[i]);
}
}
int max = 0;
int i = 0;
int number = num;
for (Map.Entry<Integer, Job> entry : jobMap.entrySet()) {
if (job[entry.getKey()].priority < max) {
max = job[entry.getKey()].priority;
number = entry.getKey();
}
}
d = number;
}
arr[d] = 1;
priotity_number = 0;
finish = finish + job[d].needTime;
t = finish - job[d].arriveTime;
w = t / job[d].needTime;
T += t;
W += w;
System.out.print(job[d].jobName);
}
System.out.println();
System.out.println("平均周转时间为:" + T / 6);
System.out.println("平均带权周转时间为:" + W / 6);
System.out.println("=========================");
}
static class Job {
public String jobName;
public int arriveTime;
public int needTime;
public int priority;
public Job(String jobName, int arriveTime, int needTime, int priority) {
this.jobName = jobName;
this.arriveTime = arriveTime;
this.needTime = needTime;
this.priority = priority;
}
@Override
public String toString() {
return "Job [jobName=" + jobName + ", arriveTime=" + arriveTime
+ ", needTime=" + needTime + "]";
}
}
}