本次试验是使用程序来模拟操作系统中进程调度的三种不同的调度策略,分别为最短作业有限、时间片轮转、最高响应比。
模拟的情况下,进程数为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(