資源簡介
在這個例子中,我實現了進程調度的三種算法,分別是優先級算法,時間片算法,和段作業優先算法。進程從文件中讀取

代碼片段和文件信息
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
評論
共有 條評論