目录
阐述多道作业从提交到执行流程说明三级调度的概念、之间的区别与关系;
阐述FCFS、SJF/SPF、HRRN、RR和多级反馈队列调度算法思想、特点及优缺点;
一、要求
- 阐述多道作业从提交到执行流程说明三级调度的概念、之间的区别与关系;
- 阐述FCFS、SJF/SPF、HRRN、RR和多级反馈队列调度算法思想、特点及优缺点;
- 实现RR算法
二 、实验原理
阐述多道作业从提交到执行流程说明三级调度的概念、之间的区别与关系;
阐述FCFS、SJF/SPF、HRRN、RR和多级反馈队列调度算法思想、特点及优缺点;
三、实验思想
时间片轮转
算法讲解(以时间片为2)
定义一个进程,其属性包括,进程名字,进程开始时间,进程运行时间,进程是否完成(初始值为false)
之后定义测试类实现进程调度,测试类中主要实现图中的逻辑。
四、实验程序
package diaodu;
import java.util.ArrayList;
import java.util.Scanner;
public class Text {
public static void main(String[] args) {
int h[],c=0;
double p=0,t=0;
System.out.println("输入进程的个数:");
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
System.out.println("请输入进程的名字,到达时间,运行时间");
ArrayList<RR> z=new ArrayList<RR>();
RR[] b=new RR[a];
h=new int[a];
for(int i=0;i<a;i++) {
b[i]=new RR(scan.next(),scan.nextInt(),scan.nextInt(),scan.nextBoolean());
h[i]=b[i].run;
}
int i=0,j=0;
RR l = null;
//时间片为2
label:while(true) {
if(b[i].start<=j) {
z.add(b[i]);
if(l!=null)
z.add(l);
if(!z.isEmpty()) {
RR g=z.remove(0);
if(g.run>2) {
System.out.println("-------------------");
System.out.println(g.name+"运行2个时间片");
g.run-=2;
j+=2;
l=g;
i++;
}else if(g.run<=2&&g.run!=0){
System.out.println("-------------------");
System.out.printf(g.name+"运行%d个时间片\n",g.run);
j+=g.run;
g.run=0;
l=g;
i++;
}}
}else {
if(!z.isEmpty()) {
RR g=z.remove(0);
if(g.run>2) {
System.out.println("-------------------");
System.out.println(g.name+"运行两个时间片");
g.run-=2;
j+=2;
z.add(g);
}else {
System.out.println("-------------------");
System.out.printf(g.name+"运行%d个时间片\n",g.run);
j+=g.run;
g.run=0;
z.add(g);
}
}
}
if(i>=a)i=0;
for(int k=0;k<a;k++) {
if(b[k].run==0&&b[k].over!=true) {
b[k].over=true;
c++;
System.out.println("---------------------------------------");
System.out.println(b[k].name+"完成了完成时间:"+j+"周转时间:"+(j-b[k].start)+"带权周转时间:"+(j-b[k].start+0.0)/h[k]);
p=p+(j-b[k].start);
t=t+(j-b[k].start)/h[k];
}
}
if(c==a)break label;
}
System.out.println("平均周转时间:"+p/a);
System.out.println("平均带权周转时间:"+t/a);
}
}
package diaodu;
public class RR{
String name;
int start;
int run;
boolean over;
public RR(String name,int start,int run,boolean over) {
this.name=name;
this.start=start;
this.run=run;
this.over=over;
}
}
五、实验运行结果及分析
输出结果包括:完成时间,周转时间,带权周转时间,平均周转时间,平均带权周转时间