资源简介
在这个例子中,我实现了进程调度的三种算法,分别是优先级算法,时间片算法,和段作业优先算法。进程从文件中读取
代码片段和文件信息
package com.box.process;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONobject;
import com.box.process.tools.PCB;
public class MainRun {
static int allTime=0;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String processMessage=loadProcess();
List pcbs=new ArrayList<>();
JSONArray jsonArray=JSONArray.parseArray(processMessage);
pcbs=JSONArray2objectList(jsonArray);
System.out.println(“请选择调度方法“);
System.out
.println(“1.优先数算法 2.时间片轮转算法 3.短作业优先算法 4.退出“);
int choose = Integer.parseInt(scanner.next());
allTime = getAllTime(pcbs);
switch (choose) {
case 1:
priority(pcbs);
break;
case 2:
changeByTime(pcbs);
break;
case 3:
shortTaskFrist(pcbs);
break;
default:
return;
}
}
private static int getAllTime(List pcbs) {
int allTime=0;
for(PCB pcb:pcbs){
allTime+=pcb.getRunTime();
}
return allTime;
}
private static void changeByTime(List pcbs) {
List queueList=new ArrayList<>();
List oldPcbs=new ArrayList<>();
oldPcbs=pcbs;
Scanner scanner=new Scanner(System.in);
System.out.println(“请输入时间片大小:“);
int time=scanner.nextInt();
System.out.println(“调度队列中每秒运行的进程如下:“);
for(int i=0;i PCB current=null;
int k=0;
for(int j=0;j PCB pcb=pcbs.get(j);
if(pcb.getIsOver()==false){
if(pcb.getStartTime()<=i){
if(current==null){
current=pcb;
k=j;
break;
}
}
}
}
pcbs.get(k).decrease();
queueList.add(current.getName());
System.out.print(current.getName());
i++;
int j=1;
for(j=1;j if(pcbs.get(k).getIsOver()==false){
pcbs.get(k).decrease();
queueList.add(current.getName());
System.out.print(current.getName());
i++;
}
}
if(j==time&&pcbs.get(k).getIsOver()==false){
List newPcbs=new ArrayList<>();
for(int n=0;n if(n!=k&&pcbs.get(n).getIsOver()==false){
newPcbs.add(pcbs.get(n));
}
}
newPcbs.add(pcbs.get(k));
pcbs=newPcbs;
}
}
int j=0;
System.out.println(“\n 优先算法甘特图如下:“);
System.out.print(“0 “+queueList.get(j)+“ “);
for(int i=0;i if(!queueList.get(i).equals(queueList.get(j))){
System.out.print(i+“ “+queueList.get(i)+“ “);
j=i;
}
}
System.out.print(“ “+(queueList.size()));
pcbs=oldPcbs;
System.out.println(“\n进程名:\t“+“等待时间:\t“+“周转时间:\t“);
for(int i=0;i System
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 294 2014-12-14 21:45 ProcessChoose\.classpath
文件 389 2014-12-01 08:45 ProcessChoose\.project
文件 823 2014-12-15 14:14 ProcessChoose\bin\com\box\process\JOB1.txt
文件 8781 2014-12-15 14:15 ProcessChoose\bin\com\box\process\MainRun.class
文件 2075 2014-12-15 14:03 ProcessChoose\bin\com\box\process\tools\PCB.class
文件 409203 2014-12-14 21:45 ProcessChoose\libs\fastjson-1.2.3.jar
文件 823 2014-12-15 14:14 ProcessChoose\src\com\box\process\JOB1.txt
文件 8118 2014-12-15 14:15 ProcessChoose\src\com\box\process\MainRun.java
文件 1396 2014-12-15 08:25 ProcessChoose\src\com\box\process\tools\PCB.java
目录 0 2014-12-15 14:03 ProcessChoose\bin\com\box\process\tools
目录 0 2014-12-15 14:03 ProcessChoose\src\com\box\process\tools
目录 0 2014-12-15 14:14 ProcessChoose\bin\com\box\process
目录 0 2014-12-15 14:03 ProcessChoose\src\com\box\process
目录 0 2014-12-15 14:03 ProcessChoose\bin\com\box
目录 0 2014-12-15 14:03 ProcessChoose\src\com\box
目录 0 2014-12-15 14:03 ProcessChoose\bin\com
目录 0 2014-12-15 14:03 ProcessChoose\src\com
目录 0 2014-12-15 14:03 ProcessChoose\bin
目录 0 2014-12-15 14:03 ProcessChoose\libs
目录 0 2014-12-15 14:03 ProcessChoose\src
目录 0 2014-12-15 14:03 ProcessChoose
----------- --------- ---------- ----- ----
431902 21
评论
共有 条评论