亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

進程調度的兩種算法JAVA實現----FCFS(先來先服務)和SJF(最短作業優先)

2019-11-14 15:21:46
字體:
來源:轉載
供稿:網友

(SJF分為PReemptive shortest job first(搶占式)和non-preemptive shortest job first(非搶占式),本位涉及的是后者,前者比后者復雜)

 

FCFS核心代碼如下:

 1 package me.ares.algorithms; 2  3 import java.util.List; 4 import me.ares.domain.Process; 5 import me.ares.utils.ProcessUtil; 6  7 public class FCFS { 8     private List<Process> processes; 9     10     public FCFS(String fileString){11         processes = ProcessUtil.readProcesses(fileString);12     }13     14     public void execute(){15         ProcessUtil.sortByArrivalTime(processes);16         int currentTime = 0;17         for (int i = 0; i < processes.size(); i++) {18             System.out.println("時刻"+currentTime+": 進程"+processes.get(i).getProcessID()+"啟動");19             if(processes.get(i).getArrivalTime()>=currentTime){20                 processes.get(i).setStartingTime(processes.get(i).getArrivalTime());21                 processes.get(i).setFinishingTime(processes.get(i).getStartingTime()+processes.get(i).getServiceTime());22                 processes.get(i).setTurnAroundTime(processes.get(i).getFinishingTime()-processes.get(i).getArrivalTime());23                 processes.get(i).setAverageTAT((double)processes.get(i).getTurnAroundTime() / processes.get(i).getServiceTime());24             }else {25                 processes.get(i).setStartingTime(currentTime);26                 processes.get(i).setFinishingTime(processes.get(i).getStartingTime()+processes.get(i).getServiceTime());27                 processes.get(i).setTurnAroundTime(processes.get(i).getFinishingTime()-processes.get(i).getArrivalTime());28                 processes.get(i).setAverageTAT((double)processes.get(i).getTurnAroundTime() / processes.get(i).getServiceTime());29             }30             currentTime = processes.get(i).getFinishingTime();31         }32         33         System.out.println("---------------------------------------------------------------------");34 35         ProcessUtil.sortByID(processes);36         for(Process p : processes){37             System.out.println(p);38         }39     }40 }

 

SJF核心代碼如下

 

 1 package me.ares.algorithms; 2  3 import java.util.List; 4 import me.ares.domain.Process; 5 import me.ares.utils.ProcessUtil; 6  7 public class SJF { 8     private List<Process> processes; 9 10     // 從文件讀入模擬進程11     public SJF(String fileString) {12         processes = ProcessUtil.readProcesses(fileString);13     }14 15     public void execute() {16         ProcessUtil.sortByServiceTime(processes);17         int currentTime = 0;  //起始時刻18         int next;19         while((next=nextVisit(currentTime))!=-1){20             System.out.println("時刻"+currentTime+": 進程"+processes.get(next).getProcessID()+"啟動");21             processes.get(next).setStartingTime(currentTime);22             processes.get(next).setFinishingTime(processes.get(next).getServiceTime()+processes.get(next).getStartingTime());23             processes.get(next).setTurnAroundTime(processes.get(next).getFinishingTime()-processes.get(next).getArrivalTime());24             processes.get(next).setAverageTAT((double)processes.get(next).getTurnAroundTime() / processes.get(next).getServiceTime());25             currentTime = processes.get(next).getFinishingTime();26         }27         System.out.println("---------------------------------------------------------------------");28         ProcessUtil.sortByID(processes);29         for(Process p : processes){30             System.out.println(p);31         }32     }33     34     private int nextVisit(int currentTime) {35         for (int i = 0; i < processes.size(); i++) {36             if (processes.get(i).isVisited() == false && processes.get(i).getArrivalTime() < currentTime) {37                 processes.get(i).setVisited(true);38                 return i;39             }40         }41         return ProcessUtil.findFirstArrival(processes);   //先到達先執行;42     }43 }

 

模擬Process的對象模型

 1 package me.ares.domain; 2  3 public class Process { 4     private char processID; 5     private int arrivalTime;   //到達時間 6     private int serviceTime;   //服務時間 7     private int startingTime; //開始時間 8     private int finishingTime; //完成時間 9     private int turnAroundTime; //周轉時間10     private double averageTAT;  //帶權周轉時間11     private boolean visited = false; 12     13     public Process(char processID, int arrivalTime, int serviceTime) {14         super();15         this.processID = processID;16         this.arrivalTime = arrivalTime;17         this.serviceTime = serviceTime;18     }19     20     public char getProcessID() {21         return processID;22     }23 24     public void setProcessID(char processID) {25         this.processID = processID;26     }27 28     public int getArrivalTime() {29         return arrivalTime;30     }31     public void setArrivalTime(int arrivalTime) {32         this.arrivalTime = arrivalTime;33     }34     public int getServiceTime() {35         return serviceTime;36     }37     public void setServiceTime(int serviceTime) {38         this.serviceTime = serviceTime;39     }40     public int getStartingTime() {41         return startingTime;42     }43     public void setStartingTime(int startingTime) {44         this.startingTime = startingTime;45     }46     public int getFinishingTime() {47         return finishingTime;48     }49     public void setFinishingTime(int finishingTime) {50         this.finishingTime = finishingTime;51     }52     public int getTurnAroundTime() {53         return turnAroundTime;54     }55     public void setTurnAroundTime(int turnAroundTime) {56         this.turnAroundTime = turnAroundTime;57     }58     public double getAverageTAT() {59         return averageTAT;60     }61     public void setAverageTAT(double averageTAT) {62         this.averageTAT = averageTAT;63     }64 65     public boolean isVisited() {66         return visited;67     }68 69     public void setVisited(boolean visited) {70         this.visited = visited;71     }72 73     @Override74     public String toString() {75         return "Process [processID=" + processID + ", arrivalTime="76                 + arrivalTime + ", serviceTime=" + serviceTime77                 + ", startingTime=" + startingTime + ", finishingTime="78                 + finishingTime + ", turnAroundTime=" + turnAroundTime79                 + ", averageTAT=" + averageTAT 80                 + "]";81     }82 83 }

 

操作Process的便捷工具類

 1 package me.ares.utils; 2  3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.util.ArrayList; 6 import java.util.Comparator; 7 import java.util.List; 8 import java.util.Scanner; 9 10 import me.ares.domain.Process;11 12 public class ProcessUtil {13     14     public static List<Process> readProcesses(String fileString){15         List<Process> processes = new ArrayList<Process>();16         Scanner scanner = null;17         try {18             scanner = new Scanner(new File(fileString));19             while (scanner.hasNext()) {20                 char processID = scanner.next().charAt(0);21                 int arrivalTime = scanner.nextInt();22                 int serviceTime = scanner.nextInt();23                 processes.add(new Process(processID, arrivalTime, serviceTime));24             }25         } catch (FileNotFoundException e) {26             e.printStackTrace();27         }28         scanner.close();29         return processes;30     }31     32     public static void sortByServiceTime(List<Process> processes) {33         processes.sort(new Comparator<Process>() {34             public int compare(Process o1, Process o2) {35                 if (o1.getServiceTime() > o2.getServiceTime()) {36                     return 1;37                 } else if (o1.getServiceTime() == o2.getServiceTime()) {38                     return 0;39                 } else {40                     return -1;41                 }42             }43         });44     }45     46     public static void sortByID(List<Process> processes) {47         processes.sort(new Comparator<Process>(){48 49             @Override50             public int compare(Process o1, Process o2) {51                 if (o1.getProcessID()>o2.getProcessID()) {52                     return 1;53                 }else if (o1.getProcessID() == o2.getProcessID()) {54                     return 0;55                 }else{56                     return -1;57                 }58             }59             60         });61     }62     63     public static void sortByArrivalTime(List<Process> processes){64         processes.sort(new Comparator<Process>() {65 66             @Override67             public int compare(Process o1, Process o2) {68                 if(o1.getArrivalTime()>o2.getArrivalTime()) return 1;69                 else if (o1.getArrivalTime()==o2.getArrivalTime()) return 0; 70                 else return -1;71             }72         });73     }74     75     public static int findFirstArrival(List<Process> processes) {76         int firstArrival = Integer.MAX_VALUE;77         int index = -1;78         for (int i = 0; i < processes.size(); i++) {79             if (processes.get(i).isVisited() == false80                     && processes.get(i).getArrivalTime() < firstArrival) {81                 firstArrival = processes.get(i).getArrivalTime();82                 index = i;83             }84         }85         if (index != -1)86             processes.get(index).setVisited(true); // index值改變代表進程被找到,設置進程visited值87         return index;88     }89     90 }

//---------------------------------------------------------測    試    如    下(Junit單元測試)----------------------------------------------------------------------------------------------------

 1 package me.ares.junittest; 2  3 import me.ares.algorithms.FCFS; 4 import org.junit.Test; 5  6 public class FCFS_Test { 7  8     FCFS fcfs = new FCFS("test.txt"); 9     10     @Test11     public void testExecute() {12         fcfs.execute();13     }14 15 }
package me.ares.junittest;import me.ares.algorithms.SJF;import org.junit.Test;public class SJF_Test {    SJF sjf = new SJF("test.txt");    @Test    public void testExecute() {                sjf.execute();    }}

----------------------------------如有疑惑請留言噢--------------------------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久人人爽人人爽爽久久| 国产精品久久77777| 国产噜噜噜噜噜久久久久久久久| www.久久色.com| 中文字幕视频在线免费欧美日韩综合在线看| 国产一区二区美女视频| 国产男女猛烈无遮挡91| 精品国产31久久久久久| 色yeye香蕉凹凸一区二区av| 欧美日韩亚洲视频一区| 人人爽久久涩噜噜噜网站| 国产美女精品免费电影| 国产一区二区三区18| 韩国精品美女www爽爽爽视频| 97在线视频免费| 国产午夜精品免费一区二区三区| 亚洲国产97在线精品一区| 成人激情在线观看| 亚洲欧美国产日韩天堂区| 欧美成人精品一区二区三区| 日韩精品一二三四区| 国产亚洲激情在线| 亚洲第一区在线观看| 欧美午夜片在线免费观看| 精品高清一区二区三区| 国产福利精品在线| 色噜噜狠狠狠综合曰曰曰88av| 57pao成人国产永久免费| 亚洲免费电影在线观看| 欧美日韩一区免费| 亚洲人a成www在线影院| 久久国产精品电影| 欧美性xxxxxxxxx| 欧美日韩在线影院| 久久香蕉国产线看观看网| 91精品国产综合久久香蕉922| 91精品久久久久久久久久久久久久| 精品无人区太爽高潮在线播放| 欧美天堂在线观看| 96pao国产成视频永久免费| 久久久亚洲天堂| 亚洲欧美国产另类| 欧美极品在线视频| 国产精品青草久久久久福利99| 日韩视频免费在线观看| 久久国产精品久久精品| 日本欧美一级片| 国产精品丝袜一区二区三区| 日韩欧美在线观看| 欧美黑人性生活视频| 亚洲精品一区二区三区不| 国产成人激情视频| 欧美性猛交xxxx乱大交| 亚洲社区在线观看| 中文字幕亚洲国产| 欧美性猛交xxxx乱大交蜜桃| 日韩高清电影免费观看完整版| 日本精品va在线观看| 久久久噜噜噜久久| 亚洲一区二区久久久久久久| 色综合视频网站| 尤物九九久久国产精品的特点| 精品中文字幕在线| 成人在线小视频| 亚洲国产欧美一区二区丝袜黑人| 欧美激情国内偷拍| 日韩视频在线观看免费| 日韩欧美在线中文字幕| 欧美在线激情网| 国产精品一二三视频| 国产精品视频色| 欧美黑人极品猛少妇色xxxxx| 91精品在线国产| 亚洲综合在线中文字幕| 久久久久久网站| 国产精品国产亚洲伊人久久| 成人午夜在线观看| 全亚洲最色的网站在线观看| 78色国产精品| 欧美日韩在线视频一区二区| 高清亚洲成在人网站天堂| 欧美精品日韩www.p站| 青青草99啪国产免费| 日韩成人xxxx| 中文字幕自拍vr一区二区三区| 亚洲高清一区二| 成人黄色网免费| 色偷偷亚洲男人天堂| 日韩亚洲第一页| 国产69精品久久久久99| 国产精品扒开腿做爽爽爽的视频| 这里只有精品在线播放| 久久久久久免费精品| 成人激情视频小说免费下载| 久久久久久久一区二区三区| 国产日韩换脸av一区在线观看| 欧美黄色免费网站| 欧美精品在线免费观看| 日韩免费av在线| 欧美大肥婆大肥bbbbb| 国产做受69高潮| 亚洲欧美一区二区三区情侣bbw| 日韩视频免费看| 日韩不卡中文字幕| 欧美一级片一区| www.午夜精品| 久久综合88中文色鬼| 国产精品99久久久久久白浆小说| 国产亚洲精品美女| 欧美裸体xxxxx| 久久精品精品电影网| 国产精品夜间视频香蕉| 欧美一级成年大片在线观看| 亚洲国产91精品在线观看| 国产成人免费av电影| 中文字幕国产日韩| 青草青草久热精品视频在线观看| 欧美成人网在线| 欧美老女人xx| 亚洲精品自在久久| 日韩一级黄色av| 欧美日韩亚洲精品内裤| 成人免费观看网址| 国产黑人绿帽在线第一区| 中文字幕日韩在线播放| 国语自产精品视频在线看一大j8| 久久亚洲精品中文字幕冲田杏梨| 欧美成人精品不卡视频在线观看| 欧美中文字幕精品| 色爱精品视频一区| 亚洲精品欧美日韩| 欧洲日韩成人av| 91高清免费在线观看| 欧美国产第一页| 日韩av影片在线观看| 欧美激情手机在线视频| 成人信息集中地欧美| 国产精品福利在线| 国产在线观看精品一区二区三区| 国产精品久久久久久av| 伊人一区二区三区久久精品| 国自在线精品视频| 久久久久国产一区二区三区| 成人乱人伦精品视频在线观看| 中文字幕亚洲天堂| 国产一区二区三区在线看| 日韩av免费网站| 自拍偷拍亚洲区| 久久综合久久88| 亚洲国产成人久久| 国产91精品久久久久久久| 亚洲tv在线观看| 欧美精品午夜视频| 91欧美精品成人综合在线观看| 亚洲国产精品久久91精品| 精品国产鲁一鲁一区二区张丽| 亚洲欧美日韩图片| 性视频1819p久久| 欧美激情a∨在线视频播放| 亚洲精品国产精品国自产在线| 91精品国产成人| 亚洲美女又黄又爽在线观看| 91九色国产在线| 精品国产成人在线|