简单模拟高响应优先调度算法

高响应比优先调度算法

  在批处理系统中,用作作业调度的短作业优先算法是一个比较好的算法。其主要缺点是作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权机制,并使以速率a增加,则长作业在等待一定的时间后,必须有机会分配到处理机。该优先权的变化可描述为:

        优先权=(等待时间+要求服务时间)/要求服务时间
  由于等待时间加上要求服务时间,就是系统对该作业的响应时间,故该优先权又相当于响应比Rp=等待时间加要求服务时间/要求服务时间=响应时间/要求服务时间

由上式可以看出:

(1)如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业;

(2)当要求服务的时间相同时,作业的优先权决定于其等待时间,因而实现了先来先服务;

(3)对于长作业,当其等待时间足够长时,其优先权便可升到很高,从而也可获得处理机

public class Task {
    public int start;
    public int length;
    public Task(int start, int length) {
        super();
        this.start = start;
        this.length = length;
    }
    public String toString(){
        return start+" "+length;
    }   
}
public class HRRN {
    double P=0.0001;
    ArrayList<Task> array=new ArrayList<Task>();
    public Task find(int start,ArrayList<Task> array){  
        Task returntask =null;
        double  maxparameter =0;
        for(Task task:array){           
            if(task.start<=start){
                double temp=(start-task.start)+P/task.length+1;
                if(temp>maxparameter){
                    maxparameter=temp;
                    returntask=task;
                }
            }
        }
        array.remove(returntask);
        return returntask;
    }
    public void createTask(){
        Scanner sc = new Scanner (new BufferedInputStream(System.in));
        int m=sc.nextInt(); 
        for(int i=0;i<m;i++ ){
            Task task=new Task(sc.nextInt(),sc.nextInt());
            array.add(task);
        }
    }

    public void Print(){
        int start=1;
        while(array.size()!=0){
            Task task=find(start,array);
            System.out.println(task);
            start=start+task.length;
        }
    }
    public static void main(String [] args){
        HRRN hrrn=new HRRN();
        hrrn.createTask();
        hrrn.Print();
    }   
}

在这里为了使:在开始的时候:task1(1,4),task2(1,3),task3(1,5)使得在调度时,使task2先调度,所以,在计算动态优先权时,添加了一个参数p使得,在如果作业的等待时间都为0的时候,服务时间最短的先执行;所以这个P要很小才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值