1.job JavaBean
package os.job;
public class Job {
private String job="";
private int submit=0;
private int size=0;
private int order=0;
private int start=0;
private int end=0;
private int zz=0;
private int finished=0;
public Job() {
}
public Job(String job, int submit, int size) {
super();
this.job = job;
this.submit = submit;
this.size = size;
}
//省略getter and setter自行补上
}
2.FCFS
package os.job;
import java.util.ArrayList;
import java.util.List;
public class Job_FCFS {
public double avg_zz=0;
private List<Job>list=new ArrayList<>();
public void Add(Job t) {
list.add(t);
}
private int Find_FCFS(int time_schedule) {
int index=-1;
int i;
int submit_min=10000000;
for(i=0;i<list.size();i++) {
Job t=list.get(i);
if(t.getFinished()==1)
continue;
if(t.getSubmit()>time_schedule)
continue;
if(t.getSubmit()<submit_min) {
submit_min=t.getSubmit();
index=i;
}
}
return index;
}
public void Schedule(int time_schedule) {
int size=list.size();
int count_finished=0;
int order=0;
while(count_finished<size) {
int index=Find_FCFS(time_schedule);
while(index==-1) {
//没有后备作业存在
time_schedule++;
index=Find_FCFS(time_schedule);
}
order++;
Job t=list.get(index);
t.setOrder(order);
t.setStart(time_schedule);
t.setEnd(time_schedule+t.getSize());
//模拟作业完成
t.setFinished(1);
t.setZz(t.getEnd()-t.getSubmit());
count_finished++;
//下一个作业调度时间
time_schedule=t.getEnd();
list.set(index, t);
}
}
public double Avg_zz() {
int i;
avg_zz=0;
if(list.size()==0)
return -1;
for(i=0;i<list.size();i++) {
Job t=list.get(i);
avg_zz+=t.getZz();
}
avg_zz/=list.size();
return avg_zz;
}
public void Print() {
int i;
for(i=0;i<list.size();i++) {
Job t=list.get(i);
System.out.println(t.toString());
}
}
public void GenJob(int len) {
int i;
list.clear();
for(i=1;i<=len;i++) {
String job="A"+i;
int submit=(int)(Math.random()*20);
int size=(int)(Math.random()*20);
list.add(new Job(job,submit,size));
}
}
public static void main(String arg[]) {
Job_FCFS test=new Job_FCFS();
/*
test.Add(new Job("A",0,3));
test.Add(new Job("B",2,6));
test.Add(new Job("C",4,4));
test.Add(new Job("D",6,5));
test.Add(new Job("A",8,2));
*/
test.GenJob(6);
test.Schedule(0);
test.Avg_zz();
test.Print();
System.out.println("avg_zz="+test.avg_zz);
}
}