没有合适的资源?快使用搜索试试~ 我知道了~
FCFS和SJF调度算法java实现,这里输出界面友好,主要用eclispe编写的,计算了各个进程的性能指标和平均轮转时间等参数。
资源推荐
资源详情
资源评论
package os_second;
import java.util.Scanner;
import java.util.ArrayList;
import java.math.*;
public class Dispatch {
//先到先服务调度算法
public static ArrayList<Double> FCFS(ArrayList<Double> pro){
int numOfProcesses = pro.size()/3; //进程数
//对进程按照提交时间从小到大排序
ArrayList<Double> sorted_process=new ArrayList<Double>(processSort(pro));
ArrayList<Double> infor=new ArrayList<Double>(); //储存进程运行结果各种信息的Arraylist,用于输出
//计算第一次被调度进程的参数
infor.add(sorted_process.get(0)); //第一个进程编号
infor.add(sorted_process.get(1)); //第一个进程提交时间:submit
infor.add(sorted_process.get(2)); //第一个进程运行时间:run
infor.add(sorted_process.get(1)); //第一个进程开始时间:starting
infor.add(sorted_process.get(1)+sorted_process.get(2)); //第一个进程结束时间:final
infor.add((double) 0) ; //第一个进程等待时间:wait=starting-submit
infor.add(sorted_process.get(2)); //第一个进程周转时间:turnaround=final-submit
//是否还有进程没有被调度
for(int i=1;i<numOfProcesses;i++) {
//若选中进程的提交时间小于上一个被调度时间的结束时间
double start_time=new Double(0);
if(sorted_process.get(3*i+1)<infor.get(7*(i-1)+4))
start_time= infor.get(7*(i-1)+4); //把开始时间starting设置为上一个被调度时间的结束时间final
else
start_time=sorted_process.get(3*i+1); //把开始时间starting设置为该进程的提交时间submit
//计算选中进程的其他参数
import java.util.Scanner;
import java.util.ArrayList;
import java.math.*;
public class Dispatch {
//先到先服务调度算法
public static ArrayList<Double> FCFS(ArrayList<Double> pro){
int numOfProcesses = pro.size()/3; //进程数
//对进程按照提交时间从小到大排序
ArrayList<Double> sorted_process=new ArrayList<Double>(processSort(pro));
ArrayList<Double> infor=new ArrayList<Double>(); //储存进程运行结果各种信息的Arraylist,用于输出
//计算第一次被调度进程的参数
infor.add(sorted_process.get(0)); //第一个进程编号
infor.add(sorted_process.get(1)); //第一个进程提交时间:submit
infor.add(sorted_process.get(2)); //第一个进程运行时间:run
infor.add(sorted_process.get(1)); //第一个进程开始时间:starting
infor.add(sorted_process.get(1)+sorted_process.get(2)); //第一个进程结束时间:final
infor.add((double) 0) ; //第一个进程等待时间:wait=starting-submit
infor.add(sorted_process.get(2)); //第一个进程周转时间:turnaround=final-submit
//是否还有进程没有被调度
for(int i=1;i<numOfProcesses;i++) {
//若选中进程的提交时间小于上一个被调度时间的结束时间
double start_time=new Double(0);
if(sorted_process.get(3*i+1)<infor.get(7*(i-1)+4))
start_time= infor.get(7*(i-1)+4); //把开始时间starting设置为上一个被调度时间的结束时间final
else
start_time=sorted_process.get(3*i+1); //把开始时间starting设置为该进程的提交时间submit
//计算选中进程的其他参数
infor.add(sorted_process.get(3*i));
infor.add(sorted_process.get(3*i+1));
infor.add(sorted_process.get(3*i+2));
infor.add(start_time);
infor.add(change(start_time+sorted_process.get(3*i+2)));
infor.add(change(start_time-sorted_process.get(3*i+1)));
infor.add(change(start_time+sorted_process.get(3*i+2)-sorted_process.get(3*i+1)));
}
//计算平均轮转时间
double sum = 0;
for(int i=0;i<numOfProcesses;i++)
sum+=infor.get(7*i+6);
double average_time = sum/numOfProcesses;
infor.add(average_time);
return infor;
}
//最短作业优先调度算法
public static ArrayList<Double> SJF(ArrayList<Double> pro){
int numOfProcesses = pro.size()/3; //进程数
//对进程按照提交时间从小到大排序
ArrayList<Double> sorted_process=new ArrayList<Double>(processSort(pro));
ArrayList<Double> infor=new ArrayList<Double>(); //储存进程运行结果各种信息的Arraylist,用于输出
//计算第一次被调度进程的参数
infor.add(sorted_process.get(0)); //第一个进程编号
infor.add(sorted_process.get(1)); //第一个进程提交时间:submit
infor.add(sorted_process.get(2)); //第一个进程运行时间:run
infor.add(sorted_process.get(1)); //第一个进程开始时间:starting
infor.add(sorted_process.get(1)+sorted_process.get(2)); //第一个进程结束时间:final
infor.add(sorted_process.get(3*i+1));
infor.add(sorted_process.get(3*i+2));
infor.add(start_time);
infor.add(change(start_time+sorted_process.get(3*i+2)));
infor.add(change(start_time-sorted_process.get(3*i+1)));
infor.add(change(start_time+sorted_process.get(3*i+2)-sorted_process.get(3*i+1)));
}
//计算平均轮转时间
double sum = 0;
for(int i=0;i<numOfProcesses;i++)
sum+=infor.get(7*i+6);
double average_time = sum/numOfProcesses;
infor.add(average_time);
return infor;
}
//最短作业优先调度算法
public static ArrayList<Double> SJF(ArrayList<Double> pro){
int numOfProcesses = pro.size()/3; //进程数
//对进程按照提交时间从小到大排序
ArrayList<Double> sorted_process=new ArrayList<Double>(processSort(pro));
ArrayList<Double> infor=new ArrayList<Double>(); //储存进程运行结果各种信息的Arraylist,用于输出
//计算第一次被调度进程的参数
infor.add(sorted_process.get(0)); //第一个进程编号
infor.add(sorted_process.get(1)); //第一个进程提交时间:submit
infor.add(sorted_process.get(2)); //第一个进程运行时间:run
infor.add(sorted_process.get(1)); //第一个进程开始时间:starting
infor.add(sorted_process.get(1)+sorted_process.get(2)); //第一个进程结束时间:final
剩余7页未读,继续阅读
资源评论
xigua_ai_haipi
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功