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

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

模拟的情况下,进程数为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(
  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
(1)、假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式 (2)、每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“要求运行时间”。 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。 (3)、处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际启动运行 (4)、进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。 (5)、若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (6)、在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进称对列的变化。 (7)、为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值