操作系统作业调度算法模拟

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);
    }
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值