Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法

本文通过Java程序模拟了三种进程调度算法:最短作业优先(SJF)、时间片轮转(RR)和最高响应比(HRRN)。实验设置包含8个进程,执行时间随机,所有进程同时到达。代码包括测试类Process.java及三种策略的实现类。详细代码和下载链接见文内。
摘要由CSDN通过智能技术生成

本次试验是使用程序来模拟操作系统中进程调度的三种不同的调度策略,分别为最短作业有限、时间片轮转、最高响应比。

模拟的情况下,进程数为8,进程所需执行时间为随机产生的整数,单位为1S,默认进程同时到达。

以下是实验的代码:

Process.java是测试类,用于生成进程列表和测试三种不同的调度策略。

SJF.java是模拟实现最短作业优先的调度策略。

RR.java是模拟实现时间片轮转的调度策略。

HRRN.java是模拟最高响应比的调度策略。

工程下载地址:

http://download.csdn.net/detail/qq_24369113/9711633

import java.util.ArrayList;
import java.util.List;

/**
 * Created by 32706 on 2016/12/8.
 * 用于生成随机的进程列表,并测试三种不同的调度算法
 */
public class Process {

    public static List<double []> task_info=new ArrayList<>();//进程列表
    public static  int task_num=8;//进程数


    public static  void init_task()//初始化进程列表
    {
        for(int i=0;i<task_num;i++)
        {
            double[] t=new double[4];
            t[0]=i;//进程号
            t[1]=0;//到达时间
            t[2]=0;//响应比
            t[3]=(int)(Math.random()*100)%20+1;//需要运行时间
            task_info.add(t);
        }
    }

    public static void main(String arg[])
    {
        Process.init_task();//初始化进程列表


        System.out.println("最短作业优先================================================");
        SJF.init_task(task_info,task_num);
        SJF.SJF();//最短作业优先


        System.out.println("\n\n最高相应比================================================");
        HRRN.init_task(task_info,task_num);
        HRRN.HRRN();//高相应比


        System.out.println("\n\n时间片轮转================================================");
        RR.init_task(task_info,task_num);
        RR.CircleTime();//时间片轮转







    }
}




import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by 32706 on 2016/12/8.
 * 最短时间优先算法
 */
public class SJF {

    private static int task_num = 8;
    public static List<double[]> task_time = new ArrayList<>();
    private static SimpleDateFormat df = new SimpleDateFormat("HHmmss");
    private static SimpleDateFormat tm = new SimpleDateFormat("HH:mm:ss");
    private static List<double[]> execute_time = new ArrayList<>();



    public static void SJF() {

        for (int i = 0; i < task_num; i++) {
            try {
                double[] t = get_task(task_time);
                int current_task_time = (int) t[3];
                int task_NO = (int) t[0];
                System.out.print(tm.format(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值