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 HRRN {
private static SimpleDateFormat tm= new SimpleDateFormat("HH:mm:ss");
public static List<double []> task_info=new ArrayList<>();//进程信息列表
public static int task_num=8;//进程数
private static List<double[]> execute_time = new ArrayList<>();//进程周转时间列表
public static void HRRN(){
for(int i=0;i<task_num;i++)
{
get_ratio();//每次循环时计算一次响应比
double [] tem=get_a_task();//从进程列表中得到一个最高响应比的任务
System.out.print(tm.format(new Date())+"第"+(int)tem[0]+"号进程开始运行====");
try {
Thread.sleep((long) tem[3]*1000);//模拟进程执行所需要的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(tm.format(new Date())+"进程结束运行=====用时为"+(int)tem[3]+"S");
double[] exe_t=new double[2];
exe_t[0]=tem[0];
exe_t[1]=System.currentTimeMillis() - tem[1];
execute_time.add(exe_t);
}
show_time();//显示每个进程的周转时间
}
public static void show_time()//显示每个进程的周转时间
{
double sum_time=0;
for(int i=0;i<execute_time.size();i++)
{
double[] t=execute_time.get(i);
System.out.println("task:"+t[0]+":周转时间="+(int)(t[1]/1000)+"S");
sum_time+=t[1];
}
System.out.println("使用最高响应比的策略,平均周转时间为:"+(int)(sum_time/execute_time.size()/1000)+"S");
}
public static double[] get_a_task()//根据响应比,返回一个最高相应比进程
{
double[]rt=new double[4];
double max_ratio=0;
int NO=-1;
for(int i=0;i<task_info.size();i++)
{
if(task_info.get(i)[2]>max_ratio)
{
rt=task_info.get(i);
max_ratio=task_info.get(i)[2];
NO=i;
}
}
task_info.remove(NO);//如果一个进程被选中,则在进程列表中删除掉
return rt;
}
public static void init_task(List<double[]> in,int tn)//初始化进程列表
{
task_num=tn;
for(int i=0;i<in.size();i++)
{
double[] t=in.get(i);
t[1]=System.currentTimeMillis();//获得进程到达时间
task_info.add(t);
}
}
public static void get_ratio()//计算每一个进程当前的响应比
{
for(int i=0;i<task_info.size();i++)
{
double[] t=task_info.get(i);
task_info.remove(i);
double ratio=(System.currentTimeMillis()-t[1])/t[3]+1;//计算响应比
t[2]=ratio;
task_info.add(t);
}
}
public static void main(String arg[])//用于本类测试
{
Process.init_task();
init_task(Process.task_info,Process.task_num);
HRRN();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java模拟最短作业优先、时间片轮转、最高响应比三种进程调度算法
共14个文件
xml:5个
java:4个
class:4个
4星 · 超过85%的资源 需积分: 37 147 下载量 166 浏览量
2016-12-14
20:12:25
上传
评论 12
收藏 21KB ZIP 举报
温馨提示
本次试验是使用程序来模拟操作系统中进程调度的三种不同的调度策略,分别为最短作业有限、时间片轮转、最高响应比。 模拟的情况下,进程数为8,进程所需执行时间为随机产生的整数,单位为1S,默认进程同时到达。 以下是实验的代码: Process.Java是测试类,用于生成进程列表和测试三种不同的调度策略。 SJF.java是模拟实现最短作业优先的调度策略。 RR.java是模拟实现时间片轮转的调度策略。 HRRN.java是模拟最高响应比的调度策略。
资源推荐
资源详情
资源评论
收起资源包目录
process scheduling.zip (14个子文件)
process scheduling
src
Process.java 1KB
HRRN.java 3KB
RR.java 3KB
SJF.java 3KB
process scheduling.iml 423B
out
production
process scheduling
Process.class 1KB
RR.class 3KB
HRRN.class 3KB
SJF.class 3KB
.idea
misc.xml 2KB
workspace.xml 51KB
copyright
profiles_settings.xml 76B
compiler.xml 686B
modules.xml 276B
共 14 条
- 1
资源评论
- 叔叔不是坏淫2017-01-18不错,可以参考
- m0_372139432017-11-01可以的,可以的
木子-勇士心
- 粉丝: 296
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功