操作系统 进程调度之轮换调度(RR调度)

【具体代码】

RR_Math.java

package RR;

import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.Scanner;

public class RR_Math {
    private LinkedList<Progress> l; //调度队列
    private Progress p_a;       //经过抽象和封装的进程对象a
    private Progress p_b;       //经过抽象和封装的进程对象b
    private Progress p_c;       //经过抽象和封装的进程对象c
    private Progress p_d;       //经过抽象和封装的进程对象d
    private Progress p_e;       //经过抽象和封装的进程对象e
    private Scanner s;
    private DecimalFormat df;
    private int q;

    public void init(){
        l = new LinkedList<>(); //分配队列内存
        //s = new Scanner(System.in);       
        p_a = new Progress("A",0,4,4);
        p_b = new Progress("B",1,3,3);
        p_c = new Progress("C",2,4,4);
        p_d = new Progress("D",3,2,2);
        p_e = new Progress("E",4,4,4);
        l.offer(p_a);
        l.offer(p_b);
        l.offer(p_c);
        l.offer(p_d);
        l.offer(p_e);
    }

    public void RR_Math(){
        System.out.print("请输入时间片q:");
        s = new Scanner(System.in);
        q = s.nextInt();
        df = new DecimalFormat("0.00");
        Progress temp;
        int count = 0; 
        while ((temp=l.poll()) != null){
            if (temp.getService_time()-q > 0){
                String Name = temp.getName();
                int getTime = temp.getGet_time();
                int serviceTime = temp.getService_time()-q;
                int const_service = temp.getConst_service();
                temp = new Progress(Name,getTime,serviceTime,const_service);
                l.offer(temp);
                count+=q;

                }else{
                    if(temp.getService_time() < q)
                        count+=temp.getService_time();
                    else
                        count+=q;
                    temp.setFinish_time(count);
                    temp.setRevolve_time(temp.getFinish_time()-temp.getGet_time());
                    temp.setPriority_revolve(temp.getRevolve_time()/(double)(temp.getConst_service()));
                    System.out.print("线程名字:"+temp.getName()+"\t");
                    System.out.print("到达时间:"+temp.getGet_time()+"\t");
                    System.out.print("服务时间:"+temp.getConst_service()+"\t");
                    System.out.println("完成时间:"+temp.getFinish_time()+"\t");
                    System.out.println("周转时间:"+temp.getRevolve_time()+"\t");
                    System.out.println("带权周转时间:"+df.format(temp.getPriority_revolve())+"\t");
                }

        }

    }
}

Progress.java

package RR;

public class Progress {
    private String name;//线程名字
    private int get_time;//到达时间
    private int service_time;//服务时间
    private int finish_time;//完成时间
    private int revolve_time;//周转时间
    private double priority_revolve;//带权周转时间
    private int const_service;//固定不变的服务时间
    public Progress(String name, int get_time, int service_time, int finish_time, int revolve_time) {
        super();
        this.name = name;
        this.get_time = get_time;
        this.service_time = service_time;
        this.finish_time = finish_time;
        this.revolve_time = revolve_time;
    }


    public Progress(String name, int get_time, int service_time, int const_service) {
        super();
        this.name = name;
        this.get_time = get_time;
        this.service_time = service_time;
        this.const_service = const_service;
    }


    public Progress(String name, int get_time, int service_time) {
        super();
        this.name = name;
        this.get_time = get_time;
        this.service_time = service_time;
    }


    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getGet_time() {
        return get_time;
    }
    public void setGet_time(int get_time) {
        this.get_time = get_time;
    }
    public int getService_time() {
        return service_time;
    }
    public void setService_time(int service_time) {
        this.service_time = service_time;
    }
    public int getFinish_time() {
        return finish_time;
    }
    public void setFinish_time(int finish_time) {
        this.finish_time = finish_time;
    }
    public int getRevolve_time() {
        return revolve_time;
    }
    public void setRevolve_time(int revolve_time) {
        this.revolve_time = revolve_time;
    }

    public double getPriority_revolve() {
        return priority_revolve;
    }

    public void setPriority_revolve(double priority_revolve) {
        this.priority_revolve = priority_revolve;
    }

    public int getConst_service() {
        return const_service;
    }

    public void setConst_service(int const_service) {
        this.const_service = const_service;
    }


}

Main.java

package RR;

public class Main {

    public static void main(String[] args) {
        RR_Math main = new RR_Math();
        main.init();
        main.RR_Math();

    }

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值