一、概述
因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示。
也因为我这次要实现多个类似算法,所以将一些共性单独提取出来作为一个类。
如果只想要和算法有关的核心代码,看FCFS类的calc()即可。
实现思路:按照顺序将进程添加到列表中,然后再按照添加顺序运行。模拟进程的运行,即为按顺序改变每个进程的到达时间、服务时间、开始时间、等待时间、周转时间和带权周转时间。在所有进程都结束后再计算平均周转时间和平均带权周转时间。
三、测试
1. 测试数据:
2. 运行结果:
三、流程图
四、实现代码
1. FCFS类(主类)
只有calc()中涉及了算法,init()和printResult()只有简单的输入输出操作。
1 packagexqy.algorithm;2
3 importjava.util.ArrayList;4 importjava.util.Scanner;5
6 importxqy.Util.Tools;7 importxqy.been.Process;8
9 /**
10 *@authorxqy11 * @date 2018年12月19日19:15:0112 * @description 对先到的任务先处理,后到的任务后处理。13 */
14
15 public classFCFS {16 private intprocessNumber;17 private ArrayListprocessList;18
19 publicFCFS() {20 init();21 calc();22 Tools.printResult(processList);23 }24
25 private voidinit() {26 Scanner sc = newScanner(System.in);27
28 System.out.print(" Please enter the process num:");29 processNumber =sc.nextInt();30
31 processList = new ArrayList();32 for (int i = 0; i < processNumber; i++) {33 processList.add(newProcess());34 }35
36 System.out.println(" Please enter each process arrival time:");37 for (int i = 0; i < processNumber; i++) {38 System.out.print(" Process" + (i + 1) + ":");39 processList.get(i).setArrivalTime(sc.nextInt());40 }41
42 System.out.println(" Please enter each process service time:");43 for (int i = 0; i < processNumber; i++) {44 System.out.print(" Process" + (i + 1) + ":");45 processList.get(i).setServicesTime(sc.nextInt());46 }47 }48
49 private voidcalc() {50 int timeNow = 0;51 Process opProcess;52
53 for (int i = 0; i < processNumber; i++) {54 opProcess =processList.get(i);55
56 int waitTime = timeNow -opProcess.getArrivalTime();57 int completionTime = timeNow +opProcess.getServicesTime();58 int turnAroundTime =completionTime59 -opProcess.getArrivalTime();60 double turnAroundTimeWithWeight = (double) turnAroundTime61 /opProcess.getServicesTime();62
63 opProcess.setStartTime(timeNow);64 opProcess.setWaitTime(waitTime);65 opProcess.setCompletionTime(completionTime);66 opProcess.setTurnAroundTime(turnAroundTime);67 opProcess.setTurnAroundTimeWithWeight(68 turnAroundTimeWithWeight);69
70 timeNow +=opProcess.getServicesTime();71 }72 }73
74 public static voidmain(String [] args) {75 newFCFS();76 }77 }
2. Process类
模拟了进程,对属性进行了封装。
1 packagexqy.been;2
3 public classProcess {4 private intarrivalTime;5 private intservicesTime;6 private intremainServiceTime;7 private intstartTime;8 private intwaitTime;9 private intcompletionTime;10
11 /**
12 * turnAroundTime = completionTime - arrivalTime13 */
14 private intturnAroundTime;15
16 /**
17 * turnAroundTimeWithWeight = turnAroundTime / servicesTime18 */
19 private doubleturnAroundTimeWithWeight;20
21 publicProcess() {22 ;23 }24
25 public intgetArrivalTime() {26 returnarrivalTime;27 }28
29 public void setArrivalTime(intarrivalTime) {30 this.arrivalTime =arrivalTime;31 }32
33 public intgetServicesTime() {34 returnservicesTime;35 }36
37 public void setServicesTime(intservicesTime) {38 this.servicesTime =servicesTime;39 }40
41 public intgetRemainServiceTime() {42 returnremainServiceTime;43 }44
45 public void setRemainServiceTime(intremainServiceTime) {46 this.remainServiceTime =remainServiceTime;47 }48
49 public intgetStartTime() {50 returnstartTime;51 }52
53 public void setStartTime(intstartTime) {54 this.startTime =startTime;55 }56
57 public intgetWaitTime() {58 returnwaitTime;59 }60
61 public void setWaitTime(intwaitTime) {62 this.waitTime =waitTime;63 }64
65 public intgetCompletionTime() {66 returncompletionTime;67 }68
69 public void setCompletionTime(intcompletionTime) {70 this.completionTime =completionTime;71 }72
73 public intgetTurnAroundTime() {74 returnturnAroundTime;75 }76
77 public void setTurnAroundTime(intturnAroundTime) {78 this.turnAroundTime =turnAroundTime;79 }80
81 public doublegetTurnAroundTimeWithWeight() {82 returnturnAroundTimeWithWeight;83 }84
85 public void setTurnAroundTimeWithWeight(doubleturnAroundTimeWithWeight) {86 this.turnAroundTimeWithWeight =turnAroundTimeWithWeight;87 }88
89 @Override90 publicString toString() {91 return "Process [arrivalTime=" + arrivalTime + ", servicesTime="
92 + servicesTime + ", remainServiceTime=" +remainServiceTime93 + ", startTime=" + startTime + ", waitTime=" +waitTime94 + ", completionTime=" + completionTime + ", turnAroundTime="
95 + turnAroundTime + ", turnAroundTimeWithWeight="
96 + turnAroundTimeWithWeight + "]";97 }98 }
3. Tools类
因为这次要实现几个类似的算法,所以我把每个算法中都要用到的方法都提取出来作为单独的工具类。
也可以将这些工具方法都放入FCFS类中。
1 packagexqy.Util;2
3 importjava.util.ArrayList;4
5 importxqy.been.Process;6
7 public classTools {8
9 public static doublecalcAverageTurnAroundTime(10 ArrayListprocessList) {11 double sum = 0;12 for (int i = 0; i < processList.size(); i++) {13 sum +=processList.get(i).getTurnAroundTime();14 }15 return Math.round(sum / processList.size() * 100) / 100.0;16 }17
18 public static doublecalcAverageTurnAroundTimeWithWeight(19 ArrayListprocessList) {20 double sum = 0;21 for (int i = 0; i < processList.size(); i++) {22 sum +=processList.get(i).getTurnAroundTimeWithWeight();23 }24 return Math.round(sum / processList.size() * 100) / 100.0;25 }26
27 public static void printResult(ArrayListprocessList) {28 System.out.println("\n #RESULT#");29
30 System.out.print("\tArrive:\t\t");31 for (int i = 0; i < processList.size(); i++) {32 System.out.print(processList.get(i).getArrivalTime() + "\t");33 }34 System.out.println();35
36 System.out.print("\tService:\t");37 for (int i = 0; i < processList.size(); i++) {38 System.out.print(processList.get(i).getServicesTime() + "\t");39 }40 System.out.println();41
42 System.out.print("\tStart:\t\t");43 for (int i = 0; i < processList.size(); i++) {44 System.out.print(processList.get(i).getStartTime() + "\t");45 }46 System.out.println();47
48 System.out.print("\tWait:\t\t");49 for (int i = 0; i < processList.size(); i++) {50 System.out.print(processList.get(i).getWaitTime() + "\t");51 }52 System.out.println();53
54 System.out.print("\tFinish:\t\t");55 for (int i = 0; i < processList.size(); i++) {56 System.out.print(processList.get(i).getCompletionTime() + "\t");57 }58 System.out.println();59
60 System.out.print("\tTurn around:\t");61 for (int i = 0; i < processList.size(); i++) {62 System.out.print(processList.get(i).getTurnAroundTime() + "\t");63 }64 System.out.println();65
66 System.out.print("\tTA wight:\t");67 for (int i = 0; i < processList.size(); i++) {68 System.out.print(Math.round(processList.get(i)69 .getTurnAroundTimeWithWeight() * 100) / 100.0 + "\t");70 }71 System.out.println();72
73 System.out.println("\tAverage turn around time:"
74 + Tools.calcAverageTurnAroundTime(processList) + "\t");75 System.out.println("\tAverage turn around time with wight:"
76 +Tools.calcAverageTurnAroundTimeWithWeight(processList));77
78 System.out.println();79 }80 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有